AIは悪い計画を実行するのがとても得意

Dev.to / 2026/5/2

💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsIdeas & Deep AnalysisTools & Practical UsageModels & Research

要点

  • この記事は、AIのコーディング失敗の多くが「コード生成の誤り」よりも、前提やエッジケース、ロールバック手順、依存関係の失敗シナリオなどを欠いた「欠陥のある実装計画」から生じると主張しています。
  • 著者は、まず実装計画を作り、その後にコードを書く前に同一の計画を複数のLLMへ独立に送って「計画をレッドチーム(破壊テスト)」することで事前にほころびを洗い出す手法を説明します(例:Claude、Codex、Gemini)。
  • レビュー結果を収集して統合・優先順位付けし、主要な問題が解消されるまで計画を修正してから実装に入ることで、後から直すコストを下げます。
  • 著者は、モデルごとに見つける失敗パターンの偏りがあり、特に「1つのモデルだけが見つけた」独自の指摘が価値の高いことが多いと述べています。
  • さらに実務上の落とし穴として、計画用のサブエージェントが停止して出力がないのに利用量だけが増えるケースがあり、エージェント型の計画ループでは監視や制御が必要だと示唆します。

AIコーディングに関する議論の多くは、「モデルがどれだけうまくコードを書けるか」に焦点が当たっています。
しかし実際には、多くの失敗は「悪いコード」から生じるのではありません。
原因は悪い計画です。

問題

私は実開発の作業でClaude Codeや同種のツールを使ってきました――データパイプライン、Cloud Runのジョブ、API連携などです。

いつも繰り返し見えてきたパターンがありました:

モデルは、欠陥のある計画でも非常に説得力をもって実装できてしまう。

コードはこう見えます:

  • きれい
  • 完成している
  • 構造化されている
  • 「もっともらしい」

しかし後になってシステムが失敗するのは、元の計画に次のような問題があったからです:

  • 隠れた前提
  • 抜けているエッジケース
  • 不明確なロールバックのロジック
  • 依存関係の失敗シナリオ
  • 未定義の影響範囲(ブラスト半径)

この時点で直すのは、はるかに高コストになります。

小さな実験

私は、シンプルなアイデアを試し始めました:

実装の前に計画自体をレッドチーム(攻撃側に回して検証)する

1つのモデルに「自己レビュー」をさせるのではなく、同じ計画を複数のモデルに送ります:

  • Claude
  • Codex
  • Gemini

それぞれのモデルが、独立して計画をレビューします。

そして、見つかった内容を1つのレポートに統合し、コードを書く前に計画を修正します。

ワークフロー

完全なループはこちらです:

  1. 実装の計画を生成する(Claude Codeまたは同様のもの)
  2. 計画を複数のモデルに送る
  3. 各モデルが独立してレビューする(共有コンテキストなし)
  4. 調査結果を集める
  5. 問題を統合し、優先順位を付ける
  6. 計画を修正する
  7. その後にのみ実装を開始する

注目すべき点

各モデルは本質的に、計画を壊しにいこうとしています:

  • 隠れた前提
  • 境界条件
  • 依存関係の失敗
  • 誤用シナリオ
  • ロールバック/リカバリの抜け
  • データ整合性の問題

学んだこと

1. 異なるモデルは、異なる失敗モードを見つける

これが最大の驚きでした。

各モデルには、何を「気づくか」に関する独自の「バイアス」があります。

2. 最も価値のある発見は、しばしばユニークなもの

全てのモデルが同意しているものではありません。

むしろ、1つのモデルだけが見つけたものです。

それらは、他のモデルが見落とした死角を表していることが多いです。

3. これは自己批判よりもうまく機能する

1つのモデルに、自分の計画をレビューさせるのも役に立ちますが、限界があります。

並列で独立にレビューするほうが、はるかに強力です。

私が踏んだ実際の落とし穴

ある時点で、Claudeにサブエージェントを使って計画を生成させました。

すると「計画エージェント」が立ち上がって、作業を始めました。

その後、何も起きませんでした。

私はただ利用量が増えるのを見ているだけでした……5時間分の利用上限に当たるまで。

出力はゼロ。

何が起きたのか尋ねると、答えはこうでした:

出力が長すぎて応答上限を超えたため、再試行を続けていました。

これは重要な教訓でした:

大きな出力はチャットメッセージとして返してはいけません。

ファイルに書き込み、応答では要約だけを返すべきです。

最小の修正(CLAUDE.md)

私は最終的に、CLAUDE.mdに次のように追加しました:

## ツールの使用
- サブエージェントや外部ツールからの大きな出力(>10KB)はリポジトリのファイルに書き込むこと。
- 完全な内容をそのままチャットで返さないこと。
- メッセージには次だけを含めること:
  - ファイルパス
  - 要約
  - 重要な発見
  - 次のステップ

これはフレームワークではない

このアプローチは意図的にシンプルです。

  • オーケストレーションシステムなし
  • マルチエージェントのフレームワークなし
  • プラットフォームなし

やっているのは、軽量なパターンだけです:

実行の前に構造化された疑いを追加する。

役に立つとき

これは特に次に有用です:

  • データパイプライン
  • デプロイのワークフロー
  • API連携
  • ロールバックや失敗コストがあるシステム

やりすぎのとき

おそらく次のような場合には、これを必要としません:

  • 手早いスクリプト
  • 使い捨ての実験
  • リスクの低いコード

書き起こした

私はこのワークフローを小さなリポジトリにまとめました:

https://github.com/permoon/multi-model-redteam

そこには以下が含まれています:

  • 最小限のセットアップ
  • レッドチームのレビュー用パターン
  • 例のケース
  • 単純なマルチモデルのレビュー用スクリプト

未解決の問い

AIコーディングツールを使っている人向けに:

コーディングする前に実装計画をレビューしていますか?

それとも、モデルにすぐ作り始めさせていますか?

他の人がどう対処しているのか気になります。