マルチエージェント・コードレビュアー
GitHubのPRリンクを渡すと、3体の専門エージェントが協調して動く。Plannerがレビュー観点を組み立て、Analyzerがバグを見つけ、Fixerがユニットテスト付きの修正を書く。

担当領域
設計から実装まで一貫して担当。3体のエージェントによるレビューパイプラインの設計、静的解析ツールの統合、GitHub連携の自動化層を作った。
期間
2.5か月
年
2025
技術スタック
ステータス
稼働中GitHubのPRリンクを渡すと、3体の専門エージェントが協調して動く。Plannerがレビュー観点を組み立て、Analyzerがバグを見つけ、Fixerがユニットテスト付きの修正を書く。
コードレビューはソフトウェア開発で最大の詰まりになっている。シニアエンジニアは週に8〜12時間をPRのレビューに使い、レビューの待ち時間は平均2〜3日に及ぶ。レビュアーの疲労で重大なバグが通り抜け、若手は数日フィードバックを待つことになり、学習の速度も落ちる。
専門の異なる3体のAIレビュアーが協調する仕組みを構築した。PlannerがPRの規模に応じたレビュー方針を立て、AnalyzerがClaudeと静的解析ツールでセキュリティ上の欠陥、性能問題、ロジックのバグを検出し、Fixerがユニットテスト付きの修正コードを生成する。GitHubへのコメント投稿や修正PRの作成まで自動で行う。
3体のエージェントによるレビュー
PlannerAgentが観点を絞ったチェックリストを作り、AnalyzerAgentが深刻度と確信度付きで問題を挙げ、FixerAgentがユニットテスト込みの修正コードを書く。全体はLangGraphのsupervisorが統括する。
セキュリティと静的解析
Claudeの推論に加えてSemgrep(OWASPのパターン)とCodeQL(データフロー解析)を組み合わせ、パターン起因の脆弱性とロジック起因の脆弱性の両方を検出する。
修正PRの自動作成
確信度の高い指摘については、修正コード、ユニットテスト(カバレッジ92%以上)、経緯を説明したコミットメッセージを備えたPRを作り、そのままマージできる状態にする。
学習のための履歴
すべてのレビューをNeon Postgresに保存し、指摘が採用されたか、修正が正しかったかを追跡する。これによりレビューの質を継続的に高められる。
このプロジェクトを形づくった技術選定と、それぞれを選んだ理由。
LangGraph Supervisor
AI・MLPRによって必要なレビュー方針が違うため、直列のパイプラインではなくsupervisorグラフを選んだ。CSSだけの変更ならセキュリティ解析を飛ばし、DBマイグレーションなら厳しく見る。その振り分けを動的に行える。
Semgrep + CodeQL
バックエンド検出できる脆弱性の種類が異なるため、静的解析を2つ重ねた。SemgrepはSQLインジェクションやXSSといったパターンの検出に強く、CodeQLのデータフロー解析は関数をまたぐ複雑な経路を捉える。
Claude 3.5 Sonnet
AI・ML構文だけでなく意図を読めるため、コードレビューにはClaudeを選んだ。GPT-4oは誤検知が多く(32%に対しClaudeは11%)、警告に慣れて本当の問題を見過ごす原因になりかねなかった。
GitHub Checks API
インフラCI/CDと自然に噛み合わせるため、単純なPRコメントではなくGitHub Checksと連携した。レビュー結果は行単位の注釈付きのcheck runとして表示され、既存の開発フローにそのまま乗る。
静的解析の統合と修正の自動生成を組み込んだ、マルチエージェントのレビューパイプライン。
PRのWebhook
PRの作成・更新でGitHubのWebhookが発火 → 差分、ファイル構成、コミット履歴を取得
計画
PlannerAgentがPRの範囲を分析 → 重点領域とスキップ条件を含むチェックリストを生成
解析
AnalyzerAgentがClaudeの推論、Semgrep、CodeQLを並列に実行 → 深刻度と確信度で並べた問題一覧を出力
修正の生成
FixerAgentが確信度の高い問題の修正コードを作成 → ユニットテストを生成 → pytestで検証(カバレッジ92%以上)
GitHubへの反映
行単位の注釈付きコメント、修正PRの作成、GitHub Checksのステータス更新
開発中にぶつかった難所と、どう乗り越えたか。
誤検知による疲労
初期の版はPRごとに40件以上を指摘し、そのうち35%が誤検知だった。開発者はすべての指摘を無視するようになり、自動レビューの意味が失われていた。
過去のフィードバックから確信度を較正する仕組みを入れた。採用・却下の履歴で学習した確信度を各指摘に付け、75%を超えるものだけを表示し、それ以下は折りたたんだ「確信度の低い指摘」として残す。
誤検知率は35%から8%へ下がった。指摘に対する開発者の反応率は23%から71%へ上がった。
大きなPRと文脈長の限界
50ファイル以上を変更するPRはClaudeの文脈長を超え、切り詰めによってファイルをまたぐ問題を見落としていた。人が最も見つけにくい種類のバグが、まさに抜け落ちていた。
階層的な解析に切り替えた。1回目は各ファイルを個別に見て、2回目はファイル間の依存を特定し、つながっている部分グラフだけをまとめて解析する。どのファイルが実際に関係するかはASTベースの依存解決で判断する。
ファイルをまたぐバグの検出は45%向上した。100ファイル以上の大きなPRも、以前はタイムアウトしていたが90秒でレビューを終える。

