はじめに
筆者は個人開発で Claude Code によるバイブコーディング(自然言語で指示して AI にコードを書かせるスタイル)をしている。この開発スタイルには2つの問題がある。
- 個人開発なのでレビュアーがいない
- コードを書いたのが AI なので、開発者自身もコードの詳細を完全には把握していない
つまり、中身を十分に理解していないコードを、誰にもレビューされずにマージすることになる。
実は、コードを書いた Claude 自身にレビューを頼むだけでも一定の効果はある。「書く」タスクと「レビューする」タスクではモデルの注意の向け方が変わるようで、自分で書いたバグを自分で見つけてくれることも多い。単体レビューでも十分有用だ。
ただし、同じモデルには同じ盲点がある。そこで、さらに別の AI にもレビューさせる。しかも3つ同時に。 異なるモデルが異なる観点で指摘するため、単体では見逃すバグを拾えるようになった。
本記事では実際に運用している「三体合議レビュー」の仕組みと、再現手順を紹介する。
使うツール
| ツール | モデル | 役割 |
|---|---|---|
| Claude Code | Claude (Anthropic) | 司令塔 + レビュアー1 |
| Codex CLI | OpenAI モデル | レビュアー2 |
| Gemini CLI | Gemini (Google) | レビュアー3 |
セットアップ
1. 各ツールのインストール
Claude Code(必須・司令塔):
npm install -g @anthropic-ai/claude-code
Codex CLI:
npm install -g @openai/codex
OPENAI_API_KEY の設定が必要。
Gemini CLI:
npm install -g @anthropic-ai/gemini-cli # または公式手順に従う
Google の認証設定が必要。
2. CLAUDE.md にレビュー手順を定義する(必須)
ここが再現のキモ。Claude Code は CLAUDE.md(プロジェクトルートに置く設定ファイル)に書かれた指示に従って動く。以下を追記する。
## コードレビュー
「三体レビュー」「三体合議」「三体レビューに回して」等と言われたら、
以下の3つを**並列実行**する:
1. Claude 自身が PR の差分をレビューし、`gh pr comment` で PR にコメント投稿する
2. `codex review --base main` を Bash で実行する
3. 以下のコマンドを Bash で実行する:
```
gemini -p "PR #<番号> のレビューをしてください。
git diff main...HEAD で差分を確認し、問題点があれば指摘してください。
問題なければLGTMと言ってください。
レビュー結果を gh pr comment <番号> --body-file <一時ファイル> で投稿してください。
署名は '-- Gemini CLI' で。" --approval-mode yolo
```
3つの結果が揃ったら、表形式でまとめて報告する。
この定義がないと Claude Code は「三体レビュー」の意味がわからない。 CLAUDE.md はプロジェクト固有の指示書であり、ここに書いた手順を Claude Code が忠実に実行する仕組みになっている。
仕組み
全体のフローは以下の通り。
開発者
│
│ 「三体レビューに回して」
▼
Claude Code(CLAUDE.md の手順に従う)
├─→ [並列] Claude 自身がレビュー(Task エージェント → gh pr comment)
├─→ [並列] codex review --base main(Bash 経由)
└─→ [並列] gemini -p "レビューして" --approval-mode yolo(Bash 経由)
│
▼
3つのレビュー結果を集約 → 表形式で報告
ポイントは Claude Code がオーケストレーターになること。Claude Code には Bash コマンドの実行機能とバックグラウンドタスク機能があるため、他の AI CLI を子プロセスとして並列起動できる。
使い方
Step 1: PR を作成する
通常通りブランチを作成してコードを変更し、PR を作る。
Step 2: Claude Code にレビューを依頼する
三体レビューに回して
これだけ。Claude Code が CLAUDE.md の指示に従って、3つのレビューを並列実行する。
Step 3: 結果を待つ
3つとも非同期で実行されるため、完了通知が来るまで待つ(または別の作業をする)。全て完了すると、Claude Code が結果をまとめてくれる。
## 三体レビュー結果まとめ
| レビュアー | 結果 | 指摘 |
|---|---|---|
| Claude | LGTM | 改善提案: エラーメッセージにガイド追加(任意) |
| Codex | P1指摘 | {{ }} が二重ラムダ → 誤検知 |
| Gemini | LGTM | 問題なし |
実例: 誤検知を合議で弾く
実際のプロジェクトで起きた事例を紹介する。
Kotlin の構文で Codex が誤検知
以下のコードに対して Codex が「二重ラムダで OK ボタンが効かない」と P1 指摘を出した。
onDismiss = if (uiState.isConnected) {{ viewModel.clearError() }} else null,
Codex の主張は「{{ }} は lambda を返す lambda なので clearError() が呼ばれない」というもの。
しかし、Kotlin では if (cond) { ... } の最初の { は if ブロックの開始であり、内側の { viewModel.clearError() } がラムダとして返される。つまり正しいコードである。
Gemini は同じコードを見て「Kotlin として有効な lambda を返す if ブロックであり、動作に問題はありません」と正しく判断した。
Codex: ❌ 二重ラムダで動かない(誤検知)
Gemini: ✅ 正しい Kotlin 構文
Claude: ✅ 正しい Kotlin 構文
1体だけだと誤検知に振り回されるが、三体の多数決で正しい判断ができた。
再帰バグを二体が独立して発見
同じ PR で、Gemini が stopSharing() の再帰問題を指摘した。
// fetchLocations() 内で呼ばれている
onFailure = { e ->
if (e.code == 404) {
stopSharing() // ← stopSharing() 内で fetchLocations() を呼ぶ → 再帰
}
}
この指摘は Claude も独立して発見しており、二体が一致したことで確信を持って修正できた。
各 AI の傾向
数回の運用を通じて感じた各ツールの特徴。
| 特徴 | Claude | Codex | Gemini |
|---|---|---|---|
| 深さ | レースコンディション分析まで踏み込む | コード表面の構文チェックが得意 | サーバー〜クライアント横断で整合性を見る |
| 誤検知率 | 低い | やや高い(構文の誤読あり) | 低い |
| 出力形式 | 構造化されたレビュー | P1/P2 の優先度付き | 自然な文章 |
| 実行速度 | 中(エージェント起動あり) | 速い | 中 |
ただしこれは筆者のプロジェクト(Python + Kotlin + JS の Web/Android アプリ)での経験であり、言語や規模によって傾向は変わるかもしれない。
注意点
- CLAUDE.md の定義が全て。ここが曖昧だと Claude Code の動きもブレる。具体的なコマンドまで書くのが安定運用のコツ
-
Codex CLI の
reviewサブコマンドは PR 番号を指定せず、ローカルの diff を見る。PR コメントへの自動投稿はしないので、結果は Claude Code が読み取って報告する -
Gemini CLI の
--approval-mode yoloは全てのツール呼び出しを自動承認するモード。レビュー+コメント投稿を無人で完了させるために必要 - 各ツールはサブスクリプションの範囲内で利用できる(Claude Code は Claude Pro/Max、Codex CLI は ChatGPT Pro/Plus、Gemini CLI は Gemini の無料枠または有料プラン)。API キーでの従量課金も可能だが、サブスク利用なら追加コストは発生しない
まとめ
- 3つの異なる AI にレビューさせることで、単体では見逃すバグを拾える
- 誤検知を多数決で弾けるのが最大のメリット
- Claude Code + CLAUDE.md の組み合わせで、自然言語の一言からツール横断の自動化が実現できる
- 個人開発でも「レビュアー3人体制」を低コストで再現できる
再現に必要なのは3つのツールのインストールと、CLAUDE.md への手順定義だけ。ぜひ試してみてほしい。
なお、筆者は未検証だが、GitHub Copilot CLI を加えた「四体合議」も面白いかもしれない。レビュアーが増えるほど誤検知の検出精度は上がるはずなので、環境がある方はぜひ試してみてほしい。