■ 1. 発表の前提と方針
- 今日のゴール:
- 明日から使う方式を1つ持ち帰ってもらうこと
- 追加課金なしで回しているAIレビューの組み合わせを5分で示す
- 追加課金なし:
- Claude、ChatGPT、Cursorなど、すでに払っているサブスク(定額)の範囲で使えるものだけを対象とする
- 自分で測った数字:
- 評判や印象ではなく、同じ条件で並べて測ったスコアで選ぶ
- あくまで運用の一例:
- 前提が違えば最適な組み合わせも変わる
■ 2. AIレビューの3層
- 同じAIレビューでも、走るタイミングが違えば役割が違う
- ローカル:
- push前に手元のPCで、自分が実行する
- 修正してすぐ再実行できる
- PR時:
- PRを出した時にGitHub上でボットが自動で読む
- 自分が忘れても走る
- デイリー:
- 毎日スケジュール実行し、依存関係の脆弱性や古いバージョンを検知する
- 3層の比較軸:
- 誰が動かすか、見る範囲、費用、強みの4観点で並べる
- ローカルの位置づけ:
- 自分がコマンド1つで動かし、今回の差分を見る
- サブスク枠を消費し、修正ループが短いことが強み
- PR時の位置づけ:
- GitHub Appが自動で動かし、PRの差分を見る
- 費用は無料からプラン内の従量、独立した第二の視点が強み
- デイリーの位置づけ:
- スケジュール実行が自動で動かし、リポジトリ全体と依存関係を見る
- GitHub標準機能中心で無料、毎日実行して予防的に検知することが強み
- 費用の前提:
- 2026年9月時点、Claude Max 20x、ChatGPT Pro、Cursor Pro+、Devin Pro、Copilot Proの契約での話
■ 3. ローカル層のレビューコマンド
- ローカルのコマンドは3つ:
- どれもサブスク内で、名前が似ていても見る対象と得意分野が違う
- Claude Codeの /code-review:
- 今の変更(差分)を見る
- バグ、デグレ(動いていたものが壊れること)、偶然安全で脆い箇所を指摘する
- マージを止めるか決めるゲートの役割
- Claude Codeの /security-review:
- ブランチ全体の変更を見る
- 攻撃シナリオ付きの監査を行い、確信度で切るので誤検知が少ない
- Codexの /review:
- 作業中のコードとブランチ比較を見る
- 挙動の変化やテスト不足を指摘し、参照先のクラスまで自分で読みに行く
- コマンド構成の変遷:
- Claude Codeは元々 /code-review、/review、/security-review の3つ
- v2.1.223でPR用の /review が /code-review に統合され、今は実質2つ(/review は別名として残る)
■ 4. 自作コマンド /ai-review
- 3つを1コマンドに統合:
- 2つのレビューに同じ差分を渡して突合し、リスクがあれば3つ目のレビューを走らせる
- 並列起動:
- Claude Codeの /code-review と Codexの /review を、互いに見せずに同時実行する
- 突合:
- 一致した指摘は採用する
- 片方だけの指摘は根拠のコードで確認する
- 自動昇格:
- 認証、秘密情報、大きな差分なら /security-review を追加する
- 自作部分の範囲:
- レビュー本体は各ツールの純正コマンド
- 自作なのは並列起動、突合、昇格判定の部分
■ 5. 2つのAIにレビューさせる理由
- 補い合える:
- 別の会社の別のモデルなので、片方が見落としてももう片方が拾ってくれることがある
- 別々に見せる:
- 片方の結果を先に見せると、それに引きずられる
- 互いの結果を知らない状態で同時に実行する
- 割れたら確かめる:
- 片方だけが指摘したものは、コードを読んで本当かどうか確かめる
- 片方だけが見つけた本物の指摘は記録に残す
■ 6. /security-review への昇格条件
- 条件に該当すればスクリプトが自動で起動し、省略するには明示的な指示が要る
- 条件A 変更パス:
- 触ったファイルの場所で判定する
- auth、payment、migration、.sql、middleware、workflows、Dockerfile、lockfileが対象
- 判定はgrepで行い、モデルを使用しない
- 条件B 追加行の内容:
- 危険になりやすい書き方を判定する
- exec、eval、暗号、SQLの文字列結合、innerHTML、deserialize、検証の無効化が対象
- 判定はgrepで行い、モデルを使用しない
- 条件C 規模:
- 差分の大きさを判定する
- 20ファイル超、または追加1,000行超が対象
- git diffの数で判定する
- 条件D 指摘あり:
- どちらかがセキュリティ分類で指摘した場合が対象
- injection、XSS、SSRF、認可、秘密情報が該当し、突合の結果で判定する
- 条件E 判定が割れた:
- セキュリティ分類で2つの判定が不一致の場合が対象
- 片方はHigh、片方は指摘なしといった状態を突合の結果で判定する
- 起動ルール:
- 5条件のうち1つでも該当すれば自動起動する
- 秘密情報の例外:
- .envや鍵ファイルが差分にあればCodexへ送らない
■ 7. push前フックによる強制
- レビューを通したかを人力ではなくフックが検査する
- 記録:
- /ai-review が結論(pass / fix / block)とHEADのSHAを残す
- 照合:
- push対象のSHAと記録を比べ、無い、または違うなら拒否する
- 判定:
- block、昇格未実施、未コミット差分だけの記録なら拒否する
- 通過:
- すべて満たせばpushできる
- レビュー後にコミットし直すとSHAが変わりやり直しになる
- 用語:
- SHAはコミットごとに付く一意のID
- フックはgitの操作時に自動で走るチェック
■ 8. ベンチマークによる選定
- 雰囲気で選ばない:
- セキュリティ特化の方式が強そうという印象で選びたくなかった
- 対象:
- 脆弱性サンプル集(OWASP Benchmark)からJavaコード110件
- 11分野 × 危険5件・安全5件で構成する
- 採点:
- 各AIに危険か安全かを判定させる
- スコアは検出率から誤検知率を引いた値で、1.0が満点
- 0は危険と安全を区別できていない状態
- 公平性:
- 判定のヒントを与えない
- 正解ラベルを参照できない隔離環境で実行し、全件の判定を強制する
- 測定範囲の限界:
- 測っているのはセキュリティ脆弱性の検知力だけ
- コード品質や設計の指摘など他の得意分野は含まず、この一面で総合優劣は決まらない
■ 9. ベンチマークの結果
- 最新世代で5方式が同時に満点(1.000):
- Claude Opus 5 の code-review、Claude Opus 5 の review(PR)
- Claude Fable 5.1 の code-review、Claude Fable 5.1 の review(PR)
- claude-security(Opus 5)
- 満点に届かなかった方式:
- Codex GPT-5.6-Sol の review は0.982
- Claude Opus 5 の security-review は0.964
- Codex GPT-6-Astra の review は0.945
- Cursor の security-review は0.927
- 測定条件:
- 同一110件、中立プロンプト、隔離環境で実施
- review(PR)はGitHubのPRを読むモード、claude-securityは公式プラグインの全体走査
- Fable 5.1は8月末の追加測定
- Astraの内訳:
- 検出は55/55だが誤検知が3件
■ 10. 数字から決めた役割分担
- 一番スコアが高いもの1つに寄せず、性格の違いで役割を分ける
- Claude Codeの /code-review:
- 見逃しが少なく再現率が高い、最新世代で満点
- マージを止めるか決める入口に置く
- Claude Codeの /security-review:
- 誤検知ゼロが持ち味で、確信度で切るぶん見逃しはある
- 拾った疑いが実際の問題か誤検知かを確かめる役
- Codexの /review:
- 別ベンダーで0.982のスコア
- 差分の外の参照先まで自分で読みに行く
- Claude Codeと意見が割れた箇所を見つける役
■ 11. PR時の層
- GitHub Appとして入れておくだけで、自分が忘れても走る
- 構成:
- AIレビュアー5つと依存監査1つによる自動レビュー
- Amazon Q Developer:
- AWS提供、プレビューのため無料だが月間行数制限あり
- セキュリティ寄りで誤検知あり
- Devin Review:
- Cognition提供、Devinアカウントがあれば無料
- 提案diff付きで質が高い
- GitHub Copilot:
- GitHub提供、Copilot Proのプラン内
- 差分の一般的なレビューを担う
- Codex:
- OpenAI提供、ChatGPTプラン内のクレジットを使用
- ローカルと同じCodexがPRでも読む
- Cursor Bugbot:
- Cursor提供、Pro以上に包含、1回$1〜1.5相当を使用量枠から消費
- バグ検出特化
- Socket Security:
- Socket提供、publicリポジトリは無料
- 依存パッケージの供給網リスクを見る
- 測定の前提:
- 2026-09-15に実証リポジトリ(pj-pilot)の直近PRで実測したレビュアー
- 費用は各社公式の2026年8〜9月時点の情報
- Bugbotは2026年5月に独立課金($40/月)を廃止しプラン包含へ移行
■ 12. デイリーの層
- GitHubの標準機能を、自作の見回りで全リポジトリに強制する
- Dependabot:
- GitHub標準機能
- 依存パッケージの脆弱性と更新を毎週PRで通知する
- Secret scanning:
- GitHub標準機能
- 秘密情報の混入を検知し、push自体をブロックする
- sweeper(自作):
- 毎朝の見回りを行う自作のGitHub Actions
- 06:00に全リポジトリを巡回する
- DependabotやSecret scanning、CI、ブランチ保護が入っていなければ自動で入れる
■ 13. 組み合わせる理由: スイスチーズモデル
- スイスチーズモデル:
- 安全工学で使われる考え方
- 1枚の防御は必ず穴があるので、複数枚を重ねて事故を防ぐ
- どの層にも穴があり、穴の位置が違う層を重ねると貫通しにくくなる
- 層1 ローカルの穴:
- 実行のし忘れが起きる
- 人の記憶に頼ると抜けるので、フックで機械的に実行を促す
- 層2 PR時の穴:
- 1つのボットに頼らない
- 性格の違う5つを並べてレビューの品質を上げる
- 層3 デイリーの穴:
- 毎日監視する
- 変更がなくても、脆弱性や古い依存関係に対応する
■ 14. ローカルを厚くする理由
- 先にローカルで潰すほど、PR時の層は軽く安くなる
- 修正ループが短い:
- 指摘、修正、再レビューが手元で完結する
- PRに出してから直すと往復が増える
- 従量課金なし:
- BugbotやCodexのPRレビューは使用量枠を消費する
- ローカルで指摘を直してから出せば回数が減る
■ 15. PR時の層を外さない理由
- PR時の価値は効率ではなく、自分に依存しないこと
- 自分が忘れても走る:
- ローカルは人の操作が起点だが、PR時はGitHub Appが起点
- 急いでいる日も、エージェントが勝手に出したPRも、同じように読まれる
- 書いた本人と別の視点:
- ローカルで使ったClaude CodeとCodex以外の4つのAIも読む
- 自己採点は人間もAIも甘くなりがち
- レビューの実行忘れを仕組みで減らす:
- DORA 2026がレビュー無しマージの増加を品質リスクと警告している
- 指摘への対応は会話解決必須で強制し、実行忘れはフックと自動ボットで減らす
- DORAはGoogleのDevOps調査プログラムで、出典はDORA State of AI-assisted Software Development 2026
■ 16. サブスク範囲で使えるかの早見表
- 追加費用なしか、Team / Enterprise限定かは機能ごとに違う
- Claude Code の /code-review と /security-review:
- サブスク内で使え、全プラン対応
- Claude Code の claude-security プラグイン:
- Pro以上なら使えるが、使用量枠の消費が大きい
- Claude Code の /code-review ultra:
- 無料は3回まで、以後は1回$5〜25の別課金
- Claude Code の Code Review(GitHub App):
- サブスク内では使えず、Team / Enterpriseのみ
- 1回$15〜25の別課金
- Codex の /review(CLI):
- サブスク内で使え、FreeからEnterpriseまで全プランに含まれる
- Codex の @codex review(GitHub):
- サブスク内で使えるが、Codex cloud接続が必要
- 専用の使用量枠を消費する
- Codex の codex-security(CLI):
- Proのみ対象で、Plusは対象外
- research preview段階
- Cursor の Bugbot:
- サブスク内で使えるが、含まれる枠を超えるとon-demand課金
- 情報の前提:
- 2026年9月時点の各社公式ドキュメントに基づく
- 全機能の一覧と根拠はZenn記事に整理されている
■ 17. まとめ
- ローカル:
- push前にローカルで実行する
- Claude Codeの /code-review と /security-review、Codexの /review を使う
- PR時:
- PRを出したら自動で走らせる
- GitHub Appを入れておき、指摘は一次情報で裁定する
- デイリー:
- 毎日自動で実行する
- DependabotとSecret scanningを有効にするだけ
- 全部サブスクの範囲:
- 追加課金なしで回せる
- ただしローカルもサブスク枠は消費する
- 参考記事:
- コードレビューのスコアの測り方と結果(110件)は zenn.dev/yukkie1114/articles/3d927e8c28e085
- 最新世代のスコアとサブスクで使えるかの整理は zenn.dev/yukkie1114/articles/f13672584add05