GitHubとAIエージェントを連携させてコードレビューを自動化する実践手順
PRが作成されると自動でAIがコードレビューをコメントする仕組みを構築する方法を解説。GitHub ActionsとLLM APIの組み合わせで、レビュー待ち時間をゼロにします。
コードレビュー待ちという「静かなボトルネック」
正直に言うと、コードレビューの待ち時間ほど開発者のモチベーションを削ぐものはない。PRを出してから翌日・翌々日まで誰にも見てもらえない。その間に別のブランチが先にマージされてコンフリクトが積み上がっていく。この「待ち地獄」は、チームの規模が大きくなるほど深刻になる。
あなたのチームでも、似たような状況はないだろうか。シニアエンジニアがレビュー待ちのPRを5本以上抱えたまま、自分の実装作業も並行してこなしている。レビュアーにとっても大量のdiffをまとめて読むのは認知負荷が高く、見落としが増える。品質も速度も両方犠牲にしている状態だ。
AIエージェントによる自動レビューを導入すると、PRが作成された瞬間に初回レビューが完了する。コーディング規約の違反・潜在的なバグパターン・テストカバレッジの不足・ドキュメントの欠如といった定型チェックはAIに任せ、人間のレビュアーはビジネスロジックの妥当性や設計判断という「本当に考える必要のある部分」に集中できる。実際に導入したチームでは、レビュアー1人あたりの負荷が3ヶ月で40〜60%削減されたという事例が複数報告されている。
AIと人間の役割分担を明確にすることが成功の鍵だ。AIは「定型・反復・網羅的」な確認が得意で、人間は「文脈・意図・トレードオフ」の判断が得意だ。この組み合わせで初めて、速くて品質の高いレビューが実現する。
GitHub Actionsでトリガーを設定する——ここが出発点だ
PRの作成・更新をトリガーにAIレビューを実行するには、.github/workflows/ai-review.ymlというワークフローファイルを作成するところから始まる。on: pull_requestでトリガーを設定し、actions/checkoutでコードを取得、git diff origin/main...HEADでPRの差分を抽出してLLM APIに送信する。これだけで「PRが開いた瞬間にレビューが動く」仕組みの骨格ができる。
LLMへのリクエストには差分テキストとシステムプロンプトを組み合わせる。システムプロンプトには、プロジェクト固有のコーディング規約・禁止パターン・必須チェック項目を記載しておく。これがあることで、「このプロジェクトではconsole.logを本番コードに残さない」「nullチェックは必ずOptional Chainingで書く」といったチーム独自のルールをAIが覚えてくれる。汎用的なLLMが突然あなたのチームの文化を知っているかのように振る舞ってくれるのは、実際に使ってみると感動がある。
APIキーはGitHub Secretsで管理し、ワークフローファイルにはハードコードしない。これは鉄則だ。${{ secrets.ANTHROPIC_API_KEY }}という形で参照することで、リポジトリに機密情報が混入するリスクを排除できる。もし誤ってコードにAPIキーを埋め込んでしまった場合は、即座にキーを無効化して再発行することを忘れないでほしい。
ワークフローが起動するタイミングはtypes: [opened, synchronize]で制御できる。PRが新規作成されたとき(opened)と、新しいコミットが追加されたとき(synchronize)の両方をトリガーにするのが一般的だ。ドラフトPRはレビュー不要な場合も多いので、if: github.event.pull_request.draft == falseの条件を追加して除外すると無駄なAPI呼び出しが減る。
レビュー結果をPRコメントとして投稿する——ここが肝心だ
GitHub APIを使ってレビュー結果をPRにコメントする実装が、体験品質を決める核心部分だ。octokitライブラリを使えば数行でコメントを投稿できるが、「どこにコメントを付けるか」で使いやすさが大きく変わる。
最も効果的なのは、指摘事項をファイルパスと行番号と紐付けた「インラインコメント」として投稿する方法だ。PRのFiles changedタブを開くと、該当行の横にコメントが表示される。レビュアーはdiffを読みながらその場でAIの指摘を確認できる。PRの最後にまとめてコメントを投稿する方法よりも、ずっと実用的だ。
LLMの応答はJSONフォーマットで返させる設計にしておくと、後続処理が安定する。たとえば[{"file": "src/api.ts", "line": 42, "severity": "error", "message": "nullチェックが不足しています。Optional Chainingを使用してください"}]のような構造で返させると、Octokitへの渡し方がシンプルになる。severityに応じてコメントのラベルを変え、errorは赤・warningは黄・infoは青で表示すると視覚的な優先度が一目でわかる。
レビューサマリーはPR全体へのコメントとして別途投稿する。「全体的な品質評価・主要な指摘事項3点・承認/修正要請の推奨判定」を含めると、レビュアーがAIのコメントを確認する前に全体像をつかめる。このサマリーがあることで、時間のないレビュアーでも30秒でPRの状況を把握できる。
チューニングと継続改善——3ヶ月で精度は別物になる
AIレビューの精度は使い続けることで向上する。最初の2週間は誤検知も多い。「これはprettierが自動フォーマットするからスタイル指摘は不要」「このファイルはテストコードなのでconsole.logは許可」といったプロジェクト固有の例外がシステムプロンプトに反映されていないためだ。
毎週金曜日に15分、チームでAIのコメントを振り返る習慣を作ることをおすすめしたい。「役に立ったコメント」「無駄だったコメント」をメモして、翌週月曜日にシステムプロンプトを更新する。この小さなサイクルを1ヶ月続けると、AIがチームのコードスタイルをかなり正確に把握するようになる。実際、このサイクルを3ヶ月続けたあるチームでは、誤検知率が最初の週の35%から3ヶ月後には8%まで下がったという記録がある。
月に一度はレビューコメントの「採用率」をチームで評価することも重要だ。AIが指摘して実際に修正が入ったコメントの割合が採用率だ。採用率が高い指摘カテゴリはAIが得意な領域、採用率が低い指摘カテゴリはAIがまだ苦手な領域と判断できる。苦手な領域の指摘を減らすか、より具体的な判断基準をプロンプトに追加するかでバランスを取っていく。
最終的に目指すのは「AIのコメントを人間のレビュアーが信頼できる状態」だ。AIの指摘を無視するのが当たり前になってしまうと、自動化の意味がなくなる。AIが指摘したことは必ずレビュアーが確認し、却下する場合は理由をコメントする——そんなチルチャーが定着したとき、AIコードレビューは本当の力を発揮する。