顧客のAIコードレビュー(OpenAI API)をClaude Codeで検証したら、35%が誤検知だった
背景
担当プロジェクトの顧客側が、GitLabのMRに対してOpenAI APIベースの自動コードレビューを導入しました。
MRが作成されるたびに、AIがdiffをスキャンしてGitLab上に直接コメントを投稿する仕組みです。命名規則、DRY原則、エラーハンドリング、セキュリティ警告…一通りの観点でコメントが付きます。
一見、よくできたレビュー。
ただ、数件のMRコメントを読み込んでいくうちに、違和感が出てきました。
感じた違和感
AIのコメントは、教科書的には正しいものが多い。
ただ、プロジェクト固有のコンテキストを理解していないものが目立ちました。
具体的には:
- チームが初期に合意したパターンに従っている関数に対して「分割すべき」と指摘
- 共有定数ファイルで定義済みの値に対して「マジックナンバーを避けるべき」と指摘
- プロジェクト固有のエラーハンドリング方針に沿ったコードに対して「try-catchを追加すべき」と指摘
推測ですが、顧客側のセットアップはおそらく以下の構成です:
MRのdiff → OpenAI API + 汎用コーディング規約 → コメント投稿
プロジェクト固有のドキュメント、共有定数、設計判断の履歴などはフィードされていないと思われます。コメントの深度から判断して、固定のルールファイル数本程度ではないかと。
Claude Codeで検証した方法
MRコメントへの対応は別の担当者の作業でしたが、AIレビューの信頼性を把握しておく必要がありました。
Claude Codeを使って、AIが生成したMRコメントをバッチで検証し、内部用のレポートを作成しました。
手順1 — プロジェクトコンテキストの読み込み
リポジトリをクローンし、以下をClaude Codeに読み込ませました:
- プロジェクト構成(ディレクトリ構造、README)
- 共有定数・型定義ファイル
- チーム固有のコーディング規約
- 設計判断の記録(ADR、issueの議論履歴)
手順2 — MRコメントのスキャン指示
対象MR 5件のAI生成コメント全件を読み込み、
各コメントについて以下を評価:
(a) 汎用コーディング規約としての正否
(b) 本プロジェクトのコンテキストにおける正否
(c) 実際に対応すべき指摘かどうか
手順3 — レポート生成
以下の4カテゴリに分類して出力:
- 妥当:正しく、対応すべき指摘
- 誤検知:汎用規約では正しいが、プロジェクトコンテキストでは不適切
- ノイズ:汎用的すぎて実質的な価値がないコメント
- 検出漏れ:AIが見逃した実際の問題
結果
5件のMRから約40〜50件のAIコメントを分析しました。
| カテゴリ | 割合 | 内容 |
|---|---|---|
| 妥当 | ~30% | 命名、フォーマット、import順序など。対応する価値あり |
| 誤検知 | ~35% | 規約上は正しいが、プロジェクト固有の判断を無視。対応すると一貫性が崩れる |
| ノイズ | ~25% | 「より分かりやすい変数名を検討してください」等、コンテキスト上すでに十分なケース |
| 検出漏れ | ~10% | Claude Codeが追加検出したnull参照リスク、エッジケース等 |
35%の誤検知が最も問題です。
これらのコメントは見た目上「正しい指摘」に見えるため、コンテキストを十分に把握していない担当者がそのまま対応してしまうリスクがあります。対応した結果、チームが合意した設計方針から逸脱することになる。
なぜこうなるのか
根本原因は明確です。AIに渡すコンテキストが不足している。
現状多くのAIコードレビュー導入は、以下のパターンに留まっています:
| 要素 | 投入されている | 投入されていない |
|---|---|---|
| コード差分(diff) | ✅ | — |
| 汎用コーディング規約 | ✅ | — |
| プロジェクト構造 | — | ❌ |
| 共有定数・型定義 | — | ❌ |
| 設計判断の履歴(ADR) | — | ❌ |
| ビジネスロジックの背景 | — | ❌ |
結果として、AIは構文レベルでは正しい指摘ができても、意味レベルでは的外れになる。
「この関数はなぜこの構造なのか」「このマジックナンバーはどこで定義されているのか」「なぜこのアプローチが選ばれたのか」——これらはdiffだけでは分かりません。
改善するなら
AIコードレビューの品質を上げるために、コードを投入する前段階の準備が重要です。
1. プロジェクトナレッジの整備
設計判断の記録(ADR)、チーム固有のコーディング規約、共有定数・型定義をドキュメント化し、AIがアクセスできる形にする。最も重要なのは「なぜその判断をしたか」の履歴。
2. ドキュメントのクリーンアップ
古いドキュメント、フォーマット崩れ、不要な文字が残っている場合は、markitdown等で変換・整形してから投入する。ゴミを入れればゴミが出てくる。
3. diff + 関連ファイルの同時投入
diffだけでなく、変更に関連するファイル(型定義、設定、テスト)も合わせて渡す。PR-AgentやCodeRabbitなどのツールはこの仕組みを提供していますが、適切な設定が必要です。
4. もしくは、対象範囲を明示する
表面的なレビュー(フォーマット、命名、明らかなバグ)に限定して運用するのも一つの選択。ただしその場合、「AIレビュー=表層チェック、ロジック・設計は人間がレビュー」という共通認識をチーム内で持つ必要があります。
最も危険なのは、表面的なレビューが「深いレビュー」に見えてしまい、人間のレビューが省略されるケースです。
まとめ
AIコードレビューの導入自体は難しくありません。GitLab CI + OpenAI API で数時間あれば構築できます。
難しいのは、AIが正しくレビューできるだけのコンテキストを与えること。
そして、さらに難しいのは、AIの指摘が間違っていることに気づくことです。規約としては正しいが、プロジェクトとしては間違っている——この種のエラーは、見た目上正しく見えるため検出が困難です。
AIレビューを導入している方は、一度出力を体系的に検証してみることをお勧めします。AIの指摘のうち、実際に対応すべきものがどれだけあるか。誤検知がどの程度含まれているか。把握しておくだけで、運用の質が変わります。
同様の経験がある方、もしくはAIコードレビューのコンテキスト設計で工夫されている点があれば、コメントで共有いただけると嬉しいです。