CI の AI コードレビューは「専門レビュアー+取りまとめ役」に分け、差分の大きさで人数を変える
Cloudflare は OpenCode を土台に、最大7つの専門レビュアー(セキュリティ・性能・品質・ドキュメント・リリース・社内規約・AGENTS.md)と、それをまとめる coordinator で MR をレビューしている。1か月・4.8万 MR で平均 $1.19/レビュー、中央値 3分39秒。仕組みの要点は自前のレビューにも流用できる。
どんな場面で使う?
- 差分をそのままプロンプトに入れて「バグを探して」と頼んだら、曖昧な指摘や存在しないエラーばかり返ってきた
- AI レビューを全 PR に入れたいが、typo 修正にまで高いモデルを回したくない
組み立て方
- 専門レビュアーごとにプロンプトを分ける。 何を見るかより「何を指摘しないか」を明記するのが効く。セキュリティ担当の例:
## What to Flag - Injection(SQL, XSS, command, path traversal) - 変更箇所での認証・認可のバイパス - ハードコードされた秘密情報 ## What NOT to Flag - ありそうにない前提が要る理論上のリスク - 主防御が十分なときの多層防御の提案 - この MR が触れていない既存コードの問題 - 「ライブラリ X を検討しては」式の提案 - 指摘は構造化して返させる。
critical(障害・悪用可能)/warning(具体的なリスク)/suggestionの3段階で XML 出力にし、後段の処理を文章解析に頼らない - coordinator が重複除去・振り分け直し・妥当性フィルタをかける。 自信がなければ自分でソースを読んで確かめる。判定は承認寄りのルール表で決める(suggestion だけなら承認、warning が複数でリスクのパターンなら承認取り消し、critical があればマージをブロック)
- 差分の大きさでリスク階層を決める。 10行以下は2エージェント(coordinator も Sonnet 級に落とす)、100行以下は4、それ以上か50ファイル超、またはセキュリティ関連のファイルを含めば全員(7人以上)。平均コストは trivial $0.20/lite $0.67/full $1.68
- ノイズを先に落とす。 lock ファイル・
.min.js・.map・// @generated付きファイルは除外。ただし DB マイグレーションは generated 扱いでも残す - 差分を全文プロンプトに入れない。 ファイル別の patch をディレクトリに書き出してパスだけ渡し、MR の共通情報も
shared-mr-context.txtにして各レビュアーに読ませる。7人分の重複を避け、キャッシュヒット率は 85.7%
運用で効いた小技
- MR 本文に
</mr_body>のような境界タグを書いてプロンプトを乗っ取る手口に備え、既知の境界タグは入力から正規表現で削除する - 長い MR 説明はコマンド引数ではなく stdin で渡す(
ARG_MAXでE2BIGになる) - 上位モデルが長考すると「止まった」と誤解されてキャンセルされるので、30秒ごとに「Model is thinking... (Ns)」と出す
- 再レビューでは前回の指摘と解決状況を渡し、直ったものはスレッドを自動 resolve、直っていないものは再掲、開発者が「won't fix」と返したものは解決扱いにする
- 人が
break glassとコメントしたら強制承認(全 MR の 0.6%)。hotfix と LLM 障害時の逃げ道 - 落ちたモデルは同系列の旧世代へ切り替える(opus-4-7 → opus-4-6)。429/503 だけを切り替え対象にし、認証エラーやコンテキスト超過では切り替えない
- AGENTS.md 専任のレビュアーが「パッケージマネージャー・テストフレームワーク・ビルドツールを変えたのに AGENTS.md を更新していない」を指摘する
注意点
- 設計の意図や下流サービスへの影響、タイミング依存の競合は AI レビューでは拾いにくい(Cloudflare 自身の見解)。人のレビューの置き換えではない
- 人がどこを見るかの分担は Claude Code チームのコードレビュー運用を自分のチームに入れる(REVIEW.md・リスク階層・ラウンド上限)、別モデルに見せる構成は Claude Code の Agent Teams で、各工程を Opus と Codex に二重レビューさせる
出典
- いいね: @Cloudflare · 2026-04-20
- Orchestrating AI Code Review at scale(Cloudflare Blog, 2026-04-20): blog.cloudflare.com (短縮URL cfl.re/42iCPXe )