コードレビューAIボットの自作:GitHub Actionsと連携させる方法

コードレビューは品質担保の要ですが、同時にボトルネックでもあります。スタイルの不統一や、初歩的なバグの指摘に時間を取られ、本質的な設計議論ができないことはありませんか?

市販のAIレビューツール(CodeRabbit等)も優秀ですが、コストやカスタマイズ性の面で、自作ボットにはまた違った魅力があります。今回は、PythonとGitHub Actionsを使って、自分だけの最強レビュアーを作る方法を紹介します。

仕組みの概要

  1. トリガー: Pull Request (PR) が作成・更新された時にGitHub Actionsが発火。
  2. 差分取得: GitHub APIを使って、変更されたファイルの差分(Diff)を取得。
  3. プロンプト作成: 差分をLLMに投げ、「熟練エンジニアとしてレビューして」と指示。
  4. コメント投稿: LLMからの指摘事項を、PR上の該当行にコメントとして投稿。

実装ステップ

1. OpenAI APIキーの取得とSecrets設定

GitHubリポジトリの Settings > Secrets and variables > Actions に OPENAI_API_KEY を登録します。また、PRにコメントするための GITHUB_TOKEN はデフォルトで利用可能です。

2. Pythonスクリプトの作成 (review.py)

import os
import requests
from github import Github

def analyze_diff(diff_text):
    # ここでOpenAI APIを叩く
    # プロンプト例: "以下のコード差分にバグやセキュリティリスクがあれば指摘してください..."
    pass

def main():
    g = Github(os.getenv("GITHUB_TOKEN"))
    repo = g.get_repo(os.getenv("GITHUB_REPOSITORY"))
    pr_number = int(os.getenv("PR_NUMBER"))
    pr = repo.get_pull(pr_number)

    # 変更ファイルの取得
    for file in pr.get_files():
        patch = file.patch
        review_comment = analyze_diff(patch)
        
        if review_comment:
            pr.create_issue_comment(f"## AI Review for {file.filename}\n\n{review_comment}")

if __name__ == "__main__":
    main()

3. Workflowファイルの作成 (.github/workflows/ai-review.yml)

name: AI Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - run: pip install PyGithub openai
      - name: Run Review Script
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          GITHUB_REPOSITORY: ${{ github.repository }}
          PR_NUMBER: ${{ github.event.pull_request.number }}
        run: python review.py

AIレビュアーを育てるコツ

ただ「レビューして」と頼むだけでは、一般的なことしか言いません。「自社のコーディング規約」や「過去のバグ事例」をプロンプトのコンテキスト(System Prompt)に含めることで、自社専用のレビュアーへと進化します。

  • 命名規則のチェック: camelCase / snake_case の指摘。
  • セキュリティ基準: SQLインジェクションの可能性がある箇所の発見。
  • パフォーマンス: N+1問題の可能性の指摘。

まとめ

自作ボットの最大のメリットは、「自分たちが重点的に見てほしいポイント」をAIに教え込める点です。最初は単純な指摘から始め、徐々にルールを追加していくことで、チームの技術的負債を返済する強力な資産となるでしょう。