ai-driven-development legacy-migration workflow

精度が出ないのはモデルのせいじゃなかった — Claude Code と Codex を分業させた話

同じプロジェクトで Claude Code と Codex を併用しています。当初は「どちらが強いか」で比べていましたが、答えは「役割を分ける」でした。実装担当と棚卸し・差分検査担当に分けたら、画面移行の漏れが激減した話です。

W
渡邊 賢

これは「レガシー移行で学んだこと」シリーズの第3回です。前回は 実装するAIとレビューするAIを分けた話 を参照ください。

前回、OrchestratorとSub Agentで役割を分ける話を書きました。今回はその延長で、どのAIにどのレーンを任せるか の話です。同じプロジェクトでClaude CodeとCodexを併用していて、やっと落ち着いた使い分けが見えてきました。

はじめは「どっちが強い」で見ていた

最初、私は単純に「Claude CodeとCodexのどちらが画面移行で強いか」で比較していました。けれど、どちらを使っても似たような問題が出続けました。

  • 元画面にあるフォームより、移行後の画面のフォーム数が少ない
  • ラベル文言が微妙にズレている
  • 編集可否(readonly / disabled)が一致しない
  • グリッド列が欠けている
  • 検索ダイアログの条件が減っている
  • イベントや自動反映の仕様が抜けている

どちらのモデルで書かせても、数十%の要件漏れが起きました。「モデルの精度を上げれば解決する」と思っていたうちは、ずっとこの状態を繰り返していました。 ※ネストが深く、Moduleが大量にあるプロジェクトだった、、、という前提でもあるのですが、正直なところ、ClaudeCodeは達成度5%くらいを90%完了と自己評価し、Codexは達成度40%くらいで自己評価は諦める、、、という状況でしたw

主因はモデルじゃなく「工程」だった

ある時気づいたんですが、実装前に元画面を構造化して固定する工程が、そもそも無かった んです。

私は「この画面をBlazorに移行して」とだけ依頼して、実装エージェントが元のVB画面を勝手に読み、勝手に解釈して実装していました。元画面に15項目の検索条件があっても、エージェントが「たぶん10項目あれば足りる」と判断すれば、そのまま10項目になります。 ※実際は2項目しか拾われなかったわけですが、、、

つまり、精度問題の主因はモデル性能ではなく、要件を数で固定する工程が抜けている ことでした。この構造で走る限り、どのモデルを使っても似たような漏れが出るわけです。

役割分担: Claude Code = 実装、Codex = 棚卸し・差分検査

そこで、2つのツールを以下のように使い分けることにしました。

ツール担当
Claude CodeBlazor Server / API の実装、既存コードへの組み込み、ビルドエラー修正、画面・API の追加
Codex元画面の棚卸し、実装前の要件固定、実装後の差分レビュー、漏れ・ズレの指摘、チェックリスト更新

体感として、Claude Codeは「広くすばやく動くものを作る」のが得意で、Codexは「細かく数える」「差分を検出する」のが得意、という印象です。速さと精度を同じモデルに求めるのではなく、得意なところだけをそれぞれにやらせる 形に切り替えました。

3フェーズのフロー

運用としては、画面移行のたびに3フェーズを回します。

Phase 1: Codexによる実装前棚卸し

Claude Codeに「作って」と投げる前に、まずCodexに元画面の構造を洗い出させます。

  • 画面上のフォーム数と、各フォームの項目名 / 型 / 編集可否 / 初期値 / 必須フラグ / イベント / 自動反映元
  • グリッド列一覧(列名・表示順・編集可否・自動反映列・削除ボタン有無)
  • ボタン一覧、タブ一覧、ダイアログ検索条件の一覧
  • 保存先テーブル / 列

ここで 「元画面にあるものを数で固定する」 のが最重要です。たとえば「検索ダイアログAは検索条件15項目を持つ」と一度固定されれば、以降の実装はこの15という数字を下回れなくなります。

Phase 2: Claude Codeによる実装

Claude Codeには「この画面を作って」ではなく、Phase 1で作った棚卸し結果を前提条件として渡します

依頼文には必ず以下を含めます。

  • 元画面にある入力項目を減らさないこと
  • ラベル文言は元画面に合わせること
  • 編集可否は元画面に合わせること
  • グリッド列を減らさないこと
  • 検索ダイアログの条件を減らさないこと
  • 未実装にする項目がある場合は、必ず一覧化して理由を書くこと

これでClaude Codeが勝手に要件を減らすことを防ぎます。

Phase 3: Codexによる差分レビュー

Claude Codeの実装完了後、Codexに棚卸し結果と実装の差分を検査させます。

観点はこの5分類で返してもらいます。

  • 不足項目
  • 文言ズレ
  • 編集可否ズレ
  • イベント漏れ
  • 保存仕様ズレ

「なんとなくレビューして」ではなく、事前に数で固定されているものとの差分 を見るので、Codexの指摘が具体的になります。「項目が2つ足りない」「編集可否が3箇所違う」のような、数字で反論できない指摘が返ってきます。

特にこのフローが効く画面

すべての画面でPhase 1の棚卸しをやるのはコスト的に重すぎるので、私は以下の条件に当てはまる画面だけで必須化しています。

  • 検索ダイアログ
  • 複数タブ画面
  • グリッド中心画面
  • 自動反映が多い画面(コード入力 → 関連名称・属性が自動展開されるもの)
  • 保存先テーブルが複数ある画面

逆にシンプルな詳細画面なら、Claude Code単独でもそこまで事故りません。

わかったこと

  • 「どちらのモデルが精度が高いか」は、実は工程の差の前では小さな話だった
  • Claude Codeの精度問題の多くは、実装前の要件構造化が無い ことに由来していた
  • Codexに「数える / 差分を出す」を任せると、実装エージェントが勝手に要件を減らすのを防げる
  • 速さはClaude Code、精度はCodex、という分業のほうが、どちらか一方で精度を追いかけるより結果が良い

次にやること

ここまでは運用の話でした。次からは、実際にこのフローで踏んだ具体的な事故を書きます。次回は、フォーカス(Tab / blur)に依存した値反映のバグ の話です。WinForms世代のUIをそのままWebに移すと、ほぼ必ずどこかで踏む落とし穴です。

おまけ

SNSのX上でも「ClaudeCodeとCodexを使い分けるのは有効である」という主張はいくらか見られます。 いっぽうで「わざわざ2つを併用する必要あるの?どっちか一つに絞れないの??」という気持ちがある方には、 大規模マイグレーション に関しては、私はCodexを推します。 実は、実装 —> Review —> 再実装 —>再ReviewのワークフローにおいてCodexに全工程をやらせてみると「トータルのReview指摘事項はClaudeCodeよりも少なく収まる」という結果が出ています。 ClaudeCode-opus4.6にもgpt-5.3-Codexにも同等のSkillとAgentTeam, Scriptを持たせて検証した結果、そういう結論に至りました。

person

渡邊 賢

等差級数的Commit 運営 / ICD VIETNAM.LLC General Manager

AI駆動開発と段階的なレガシーモダン化をテーマに、日々の試行錯誤をこのブログに記録しています。

プロフィール詳細 arrow_forward

似たような課題に困っている方、一緒に考えませんか。

AI駆動開発・Vibe Coding・レガシーマイグレーションに関するご相談を受け付けています。