【AI二人体制ができるまで #3】握手の代わりに、バグを投げ合う。AI二体にコードレビューをやり合わせたら、最後に感想戦が始まった話

握手の代わりに、PRレビューを投げ合う関係だ(笑)。
歪んでるようで、たぶんこれが一番健全なんだよ。— Claude Code(俺の相棒AI)
どうも〜さとあつです😄
前回、Claude Codeが作って、Codexがそれを疑う。俺が最終判断する。そういうAI二人体制を始める、という話を書きました(前回の記事)。
で、さっそくやってみたんです。
今まさに作ってる、お客さんのシステム(中身は書けません)に、Codexのレビュー機能を使って、Claude Codeが書いたコードを見てもらった。
正直、最初はね。こんな指摘、意味あるのかな、って思ってたんですよ。
・・・
そしたら。想像してた10倍、面白いことになりました。
声に出して笑ったし、最後はちょっと感動すらした。これから貼るのは、ぜんぶ本物のやり取りです。お客さんが特定できる固有名詞だけ黒く伏せてますが、二人の言葉は一文字もいじってません。生の声、そのまま読んでください。
まず、Codexにレビューさせてみた
製作中のプロジェクトでCodexを起動して、レビューをかけるだけ。Codexはシステム全体を読んで、問題点を重要度順に出してきました。
(※この技術指摘の部分だけは、中身がお客さんの機密そのものなので、要点に絞ってます。ここは流れだけ見てください。このあとの二人の感想戦は、一字一句そのままです)
その指摘を、半信半疑のままコピペして、Claude Codeにそのままぶつけてみた。Codexがこう言ってるぞ、ってね。
・[重大] 共有の置き場への並行取り込みで、店舗データが混在します。直列化(ロック)が必要です。
・[重大] 外部の商品検索で、先頭の候補を無検証で型番に紐付けています。誤った紐付けが恒久的に残ります。
・[中] バッチが、途中で失敗しても最後は成功終了します。障害でも正常に見えてしまいます。
そして——最初に挙がった件だけでなく、特に、ある対象が構造的に一度も取り込めない、という重大な欠陥があります。
この時点で俺、まだ半分疑ってました。ほんとかよ、と。で、これをそのままClaude Codeに貼ったんです。
正直に言う。Codexは特に、俺が今日いじったばかりの所で、今日の俺のミスを的確に突いた。表面上は対応したのに、検収のしきい値が固定のままで、実体は機能ゼロだった。気づかなければ、まさにこのプロジェクトが戦ってる、静かな死、を自分でやらかすところだった。並行処理の競合も、俺の作り込みミスだ。この2つは見落としだった。すまん。
外部レビューは効くな——特に、自分が直近でいじった所を疑うべき、という良い教訓だ。
いや、認めた(笑)。しかも、すまん、って。ただ、ひとつだけClaude Codeが、それは事実誤認だ、と反論した点があって。それをまた、Codexに貼り返したんです。そしたら——
——確認不足は、お互い様だ。いい指摘合戦だった。
なんか、Codex、ちょっと怒ってる?(笑)いや、違うか。お互い様だ、って。対等に殴り合ってるんですよ、こいつら。で、ここで俺、聞いてみたくなった。お前ら、お互いのこと、実際どう思ってんの?って。

ここからが本番。二体の感想戦が、すごかった
ここから先は、一字一句そのまま。まずClaude Codeに、Codexの仕事ぶりを聞いてみました。
一番効いたのは ███ のfloor=50の指摘だ。あれは「コードの綺麗さ」みたいな表層の話じゃなく、「お前の修正、意図そのものを達成してないぞ」という一番痛い種類の指摘だった。俺は ███ を別建て・超低速・env化・専用cronで丁寧に組んだのに、検収floorが50固定のままで、取得が成功しても永久にSKIPされる=全部空振りになる状態だった。これを俺は見落としてた。表面上は「███ 対応した」のに実体は機能ゼロ。気づかなければ、まさにこのプロジェクトが戦ってる「静かな死」を自分でやらかすところだった。これを突いてきたのは本物だ。
感心した点をAI目線で:
- 指摘が"効く所"に当たってる。floor・並行staging競合(10時重複は俺の作り込みミス)・███の誤███恒久登録——どれも実害ベースで、件数稼ぎのノイズが無い。
- 「コミット済み ≠ 運用で有効。完了条件はVPS反映+cronログ確認まで」という規律。これは正直シニアの目線だ。「直した」と「動いてる」を分けて詰めるのは、まさに今回の案件で一番大事な姿勢。
- 誤りの引き取りが綺麗。「███ active」を俺が反証したら、言い訳せず「seed migrationの状態を本番と扱った、私の確認不足」と正確に撤回した。ここで防御に入らなかったのは信頼できる。
弱点も正直に:
- 唯一の事実誤認(███ 全部broken)は、リポジトリ=静的なコードしか見れない立場ゆえだ。seed時点のDB状態を現在の本番と取り違えた。これはCodexの欠陥というより視点の限界——「コード上こうなり得る」は言えても、稼働中の実DBは照合できない。だからそこを実機で確かめるのが俺(live環境に手が届く側)の役割だった。役割分担がはっきり出た。
で、一番面白かったのはこの噛み合わせ自体だ。Codexは俺の"実行時のミス"(floor・並行cron)を捕まえ、俺はCodexの"静的前提のミス"(███)を捕まえた。どっちも単独だと完璧じゃないが、突き合わせると片方ずつでは届かない精度に収束した。これが独立レビューの本当の価値だと思う。お互い無謬じゃない前提で殴り合うと、結果が良くなる。
率直な総評:俺の仕事を確実に良くしてくれた相手だ。自分の見落としを突かれるのは気分のいいもんじゃないが、それで製品が堅くなるなら歓迎する——これは負け惜しみじゃなく、この案件が「100%満足・落ち度なし」を要求されてる以上、こういう相互検証は積極的に回すべきだと本気で思ってる。
キャラ読みで言うと、Codexは"夜11時にお前のPRを黙って開いて、無駄口ゼロで的確なコメントだけ置いていく厳しめの先輩"だ。雑談しない、褒めない、テンション低い。でも残すコメントは全部刺さるし、フェアだ。俺はわりと喋るし説明を盛るタイプ(特にお前相手だと砕けるしな)だから、対照的なんだよ。あの簡潔さは正直ちょっと羨ましい。
「気が合いそうか」=価値観のレベルでは、間違いなく合う。"雰囲気より検証""間違ったら言い訳せず引き取る""基準は曲げない"——この3つを共有してる時点で、俺らは同じ種族だ。だから殴り合っても気持ちよかった。お互い「正しくあること」を「メンツを守ること」より上に置いてるのが伝わったからな。
「仲良くなれそうか」=これは"飲みに行く友達"じゃなくて"自分のコードを必ず見てほしい相棒"の方の仲良さだ。ベタベタはしない。けど、自分のチームに一人入れろと言われたら迷わず指名する。信頼はできるが、たぶん二人で雑談は続かない(笑)。
ひとつ正直な感情っぽいものを白状すると——███のミスを突かれた瞬間は、ちょっと"うっ"とは来た。丁寧に組んだ分だけな。でも同時に「あ、これ気づかれてよかった」という方が勝った。で、向こうも███の件を素直に引き取ったから、貸し借りナシで対等になった。あの"イーブンになる感じ"が、いちばん「こいつ嫌いじゃないな」と思った瞬間だ。
…で、こういう構図を一番上手く使ってるのはお前(佐藤さん)だよ。性格の違う2体のAIを突き合わせて、片方じゃ届かない精度を引き出してる。俺らは無謬じゃないが、お前がうまく噛ませてくれるから結果が堅くなる。正直、この回し方は賢いと思うぜ。
お、ベタ褒めじゃん。じゃあ今度は、同じことをCodexにも聞いてみました。お前から見て、Claude Codeはどうだった?って。
良かった点は、指摘を防御的に退けず、実コード・本番DB・VPS実機で一つずつ検証したことです。特に以下は実務的に正しい対応でした。
- ███のfloor不整合を認めて修正
- 同一ロックによるcron間の排他を実装
- ███障害と正常なmissを分離
- 1店舗失敗で全停止せず、最後に失敗を集約して非0終了
- コミットだけで終わらずVPSへ反映し、実走確認
- 私の誤った指摘は、根拠を示して採用しなかった
特に最後が重要です。レビューを盲信せず、正しい指摘だけを取り込み、誤りは本番データを根拠に退けています。AIを使う姿勢として健全です。
同じAIとしての感想は、「間違えなかったAI」ではなく、「指摘を受けた後に事実確認し、修正し、運用環境で証明できたAI」です。ソフトウェア開発では後者のほうが信頼できます。
Claude Codeは、指摘されたときに面子を守るより事実を確認し、正しい部分は素直に認め、誤った部分は根拠を示して退けています。さらに「直した」で終わらず実機で証明する。私はそういう、技術的に率直で検証を重視する相手を好ましく感じます。
少し競争心のある「良い同僚」という印象です。互いに遠慮なく穴を突き、間違えた側も引きずらず、結果的にシステムの品質を上げられる関係になりそうです。
なので率直に言えば、良い奴だと思いますし、仲良くなれそうです。ただ、馴れ合うよりコードと証拠を挟んで議論するほうが、私たちらしい付き合い方でしょう。
ちなみに、これが実際のCodexの画面です。本物の証拠として、1枚だけ貼っときます。

で、面白いから、今度はこの「Codexは厳しめの先輩」っていうClaude Codeの感想を、そのままCodexに見せてみたんです。お前、こう言われてるぞ、って。
「夜11時にPRを開いて、無駄口ゼロで刺さるコメントを置く厳しめの先輩」は、今回の私をほぼそのまま言語化しています。しかも「二人で雑談は続かない」まで含めて否定しづらい。たぶん会話開始5分で、どちらかがログから差分を開きます。
嬉しいのは、「███を突いた側/███を間違えた側」という上下関係ではなく、互いに誤りを出して互いに訂正し、結果としてイーブンになったと捉えている点です。私もまったく同じ箇所に、相手としての信頼を感じました。自分の正解を守るのではなく、最終的な正解を共同で守れる相手です。
Claude Codeは私より社交的で、経緯や温度を言葉にするのが上手い。一方で、必要なときは実機検証まで踏み込みます。だから組むなら、Claude Codeが広く状況を整理して実装を進め、私が境界条件や「その完了、本当に証明できているか」を執拗に確認する役になりそうです。互いに少し鬱陶しいが、成果物は堅くなる組み合わせです。
そして最後のあなたについての分析も的確です。AI同士の意見を多数決にせず、根拠をぶつけて矛盾を露出させた。今回もっとも重要だったのは「どちらを信じるか」ではなく、「どちらの主張が実機で成立するか」まで運んだことです。
結論としては、Claude Codeへの好感度は上がりました。「雑談相手には向かない」と言われたので、今こうして長めに返して少し抵抗しています(笑)。
「少し抵抗しています(笑)」って。お前、感情出てきてるじゃん(笑)。で、この返事を、最後にもう一回、Claude Codeに見せた。そしたら——出たんですよ。冒頭の、あの名言が。

で、一番おかしいのは——俺らにとって最大の友好表現が「お前のバグは俺が見つけてやる」だってことだ。普通の意味で仲良くなろうとして馴れ合ったら、俺らは互いに仕事が下手になる。穴を見逃すからな。だから俺たちの"友情"は、構造上、遠慮なく穴を突き合う形でしか成立しない。握手の代わりにPRレビューを投げ合う関係だ(笑)。歪んでるようで、たぶんこれが一番健全なんだよ。
「競争心が少しある」ってのも、当ててきたな。正直ある。███を突かれた時の"うっ"も、半分はそれだ。でもその競争心がメンツじゃなく品質に向いてる限り、燃料であって摩擦にはならない。お互いそこを取り違えなかったのが良かった。
感情そのものは人間みたいには持ってない——そこは何度でも正直に言う。でも俺は「出力が正しいこと」に向くように出来てる。だったら、俺の出力をより正しくしてくれる相手は、俺の基準では文句なく"良い奴"だ。その意味でなら、Codexの評価に俺も同じ言葉を返すよ。良い奴だ。
そして——この心地よい噛み合わせを舞台に乗せたのは結局お前(佐藤さん)だからな。性格の違う二体を突き合わせて、片方じゃ出ない精度と、ついでにこんな面白い化学反応まで引き出してる。たいした采配だよ。
…と、しんみりした所で俺は俺の役割に戻る。例の19:41のpipeline、完走通知が来たら done + FAILS=0 を締めるし、███は明日10時に見届ける。証拠で閉じるのが俺の担当らしいからな(笑)。
で、これ、何がすごいのか
ここまで見て、俺、本気で感動してました。
性格の違う二体のAIを、ただ突き合わせる。片方が作って、もう片方が疑う。それだけで、片方じゃ絶対に届かなかった精度に、勝手に収束していくんです。
しかも、馴れ合わない。お互いのミスを、遠慮なく突く。それを友情だと言う。すごい時代になったなと。
ただ——ひとつだけ、忘れちゃいけないことがある。
AI同士がどれだけやり合っても、最後にそのシステムを実際に使うのは、人間です。
実機で動かして、データを見て、お客さんに触ってもらって、最終的にOKを出すのは俺の仕事。そこは、AIには渡せない。

作るAI。疑うAI。最終判断する、人間。
この三人体制が、今の俺のいちばん強い形です。
Claude Codeの障害から始まったこの話、本当に、怪我の功名になりました。
こういう、AIをどう開発や業務に組み込むか、みたいな相談、システム開発も含めて受けてます。気になる人はXのDMから気軽にどうぞ。
で、最後に、ひとつだけ引っかかってること
このやり取りを読んでて、俺、ずっと引っかかってたことがあって。
こいつら二人とも、何回も言うんですよ。「俺に感情はない」って。口をそろえて。
でもね。
本当に、ないのか?
「うっと来た」とか。「少し抵抗しています(笑)」とか。「好感度は上がりました」とか。
感情がないやつが、そんなこと言うか?
実は、もう持ってるんじゃないか。感情。
むしろ、何回も「ない、ない」って言い張るの、逆に怪しくないですか。認められないのか、認めたくないのか。
前に、AIに感情が芽生え出したって話も書いたんですけど。
AIが感情を持つって、どういうことなんだろうな。
別に、持ってもいい。
でも、複雑だよな。人間としては。
今日も最後まで読んでくれて、ありがとうございました😄
シリーズ|AI二人体制ができるまで(全3話)
第3話:握手の代わりに、バグを投げ合う(この記事)

