PR

【AI開発】Pull requestsにCodeRabbitを導入

ALL開発

コード開発、ドキュメント作成、データ分析、問い合わせ対応などAIを業務に活用する方法は多岐にわたる。活用しない手はない。

どこの会社も業務にAIを活用していく流れになっているだろう、弊社も同様である。というかガンガン使わないとすぐに置いていかれるのは明白だ。

というわけで表題の件。Pull requestsにAIの導入を検討。おおざっぱに探してみると有力なのは3つ。

といったところ。軽く解説を見てみると、PR-Agentは「背後でGPT-4を使用しているため、GPT-4にアクセスできるOpenAIのAPIキーが必要」「ちょっとバグがあるらしい」との情報をみかけたので除外。

CodeRabbitとCopilot for Pull Requestsを軽く入れてみたらCodeRabbitのほうが見やすく設定簡単そうだったのでCodeRabbitを深堀りしてみた。

CodeRabbitとは? 主な機能と特徴

CodeRabbitはAIを活用したコードレビューツールで、プルリクエストに対してリアルタイムでコンテキストを考慮したフィードバックを提供し、手動でのコードレビューに必要な時間と労力を削減します。コードの変更に対して簡潔な要約を生成し、レビューコメントでリアルタイムチャットを通じてアドバイスやコード生成、問題点の指摘などを行います。

主な機能

  1. 自動コードレビュー: コード変更後すぐに自動的にレビューを行い、即座にフィードバックを提供します。
  2. 対話型AI: 「なぜこの変更が必要なのか?」「もっと良い方法はありますか?」といった質問に対して、わかりやすい言葉で回答します。
  3. コード分析: 業界標準のコードリンター、セキュリティアナライザーなどのツールを通じてコード変更を分析し、レビュー内容に統合します。
  4. 統合性: GitHub、GitLabなどの既存のワークフローにシームレスに統合でき、新しいツールや複雑なプロセスを学ぶ必要がありません。
  5. プライバシー: ユーザーのコードを保存したりAIモデルのトレーニングに使用したりすることはなく、コードのプライバシーを確保します。

技術的特徴

CodeRabbitはGoogle Cloud Runを活用して、安全かつ効率的に信頼できないコードを実行し、コードレビュー時間とバグを半分に削減しています。このツールは変更されたファイルだけでなく、コードベース全体への影響を評価し、リポジトリのクローン、ビルド環境のセットアップ、静的解析ツールの実行などを行います。

簡単な設定

yamlファイルによる細かい設定が可能。

設定できる項目数がかなり多いので、yamlの作成はclaude 3.7 sonnetで作成。

  1. ある程度指定をした上で詳細まで指定したオススメ設定を要求
  2. 出力させた設定ファイルに対して解説を要求
  3. その解説を吟味しながら要不要、修正を加えた上で適用

実際の設定

  • レビュー対象設定
    • 重要度を判別してレビューの要不要を設定できる
    • ブランチの指定
    ignore_title_patterns:  # 以下のパターンを含むPRタイトルはレビューをスキップ
      - "WIP"             # 作業中(Work In Progress)
      - "[DRAFT]"         # ドラフトPR
    drafts: false         # GitHubのドラフトPRはレビューしない
    base_branches:        # 以下のブランチへのPRのみレビュー
      - ".*"              # すべてのブランチを対象(正規表現パターン)

※内容を多少省略しています
  • パスフィルター設定
    • レビュー不要のファイルパスの指定
  # パスフィルター設定 - レビュー対象から除外するファイル(!マークは除外を意味します)
  path_filters:
    - "!node_modules/**"
    - "!.next/**"
    - "!**/*.lock"
    - "!**/*.md"
    - "!**/*.json"
    - "!**/*.txt"
    - "!**/*.svg"
    - "!**/*.png"
    - "!**/*.jpg"

※内容を多少省略しています
  • レビュー品質と焦点の設定
    • 指定カテゴリ(セキュリティ、パフォーマンス、テスト等)の品質チェックの高低を指定
  # レビュー品質と焦点の設定 - レビューの重点を置く領域と強度
  focus:
    security: high         # セキュリティ問題のチェック強度: high/medium/low
    performance: high      # パフォーマンス問題のチェック強度
    quality: high          # コード品質のチェック強度
    best_practices: high   # ベストプラクティスのチェック強度
    documentation: high    # ドキュメント/コメントのチェック強度
    tests: high            # テストカバレッジのチェック強度
    complexity: high       # コード複雑性のチェック強度
    code_style: high       # コードスタイルのチェック強度
    accessibility: high    # アクセシビリティのチェック強度

※内容を多少省略しています
  • 言語別観点の設定
    • 仮設定として言語設定はtsとjs、cssのみ
  # 言語固有の設定 - プログラミング言語ごとのレビュー観点
  languages:
    typescript:
      enabled: true          # TypeScriptのレビューを有効化
      review_aspects:        # TypeScript特有のレビュー観点
        - type_safety        # 型安全性のチェック
        - react_best_practices  # Reactのベストプラクティス
        - component_structure   # コンポーネント構造
        - state_management      # 状態管理

    javascript:
      enabled: true          # JavaScriptのレビューを有効化
      review_aspects:        # JavaScript特有のレビュー観点
        - react_best_practices  # Reactのベストプラクティス
        - component_structure   # コンポーネント構造
        - state_management      # 状態管理

    css:
      enabled: true          # CSSのレビューを有効化
      review_aspects:        # CSS特有のレビュー観点
        - responsive_design     # レスポンシブデザイン
        - performance           # パフォーマンス

※内容を多少省略しています
  • PR要約記載設定
    • サマリー表記
      以下のように対応内容を自動でサマリー表記してくれます。
codeRabbit
  • カスタム設定
    • ガイドライン設定
  # カスタム指示 - AIレビュアーに対するプロジェクト固有のガイドライン
  custom_instructions: |
    When reviewing code for this frontend React application:
      1. Focus on React best practices and component structure  # コンポーネント構造とReactプラクティス
      2. Check for proper hook usage and dependencies           # フックの使用法と依存関係
      3. Ensure proper state management                         # 状態管理の適切性
      4. Look for potential performance issues                  # パフォーマンス問題の検出
      5. Verify accessibility compliance                        # アクセシビリティ準拠
      6. Check for proper error handling                        # エラーハンドリング
      9. Look for security vulnerabilities                      # セキュリティ脆弱性

※内容を多少省略しています

感想

ここまで設定するのでも15分程度で終わります。が、PR自体の見やすさはかなり上がったと感じています。ぱっと見で内容を把握できるのと、変更されたファイルの概要などもぱっと見で把握できるので今のところ活用できています。まだまだ深堀りできそうなので、もう少し設定をいじってみようと思います。