Claude Code Plan Mode上級編——アノテーションサイクル・仕様インタビュー・検証フェーズ活用で「計画の質」を一段引き上げる

はじめに

Plan Modeを使っているのに、手戻りがなかなか減らない。

「計画を立てて実装したはずなのに、エッジケースが漏れていた」「テストを後から書いたら、実装の形に合わせたテストになってしまった」「仕様が曖昧なまま進めたせいで、実装途中で方向を変えることになった」——Plan Modeの基本は身についているのに、こういった状況が続いているなら、問題は計画の「立て方」にある。

Plan Modeの基本操作(Shift+Tab×2での起動、Explore→Plan→Implementの3段階ワークフロー)についてはClaude Code Plan Modeを使いこなす——「探索→計画→実装」で手戻りをゼロにする技術で解説しています。本記事はその先の話だ。

計画の品質を左右するのは、初回の計画をどれだけ正確に修正できるか(計画の洗練度)、実装前に要件の曖昧さをどこまで除去できるか(仕様の明確度)、テスト計画を実装バイアスなしに立てられるか(検証の網羅度)——この3点だ。それぞれに対応するテクニックが本記事の主題になる。

アノテーションサイクル——計画を1〜6回反復して洗練させる

「計画を立てたら即実装」は間違い

多くのエンジニアはplan.mdが生成されたら即実装に移る。しかしClaude Codeを9ヶ月間使い続けたエンジニアのBoris Tane氏は、そのアプローチに限界があると語っている。

> 「Claudeは優れたコード理解と提案能力を持つが、プロダクト優先度を知らず、ユーザーの痛点を理解していない。アノテーションサイクルで開発者の判断を計画に注入することが不可欠だ」

Claudeが自動生成した計画は、コードベースの構造や一般的なベストプラクティスを踏まえた「汎用的な計画」だ。しかし「このシステムの命名規則に合わせたもの」「このチームの技術的制約を考慮したもの」にするには、開発者の判断を計画に注入する必要がある。

アノテーションサイクルのプロセス

1. Claudeが plan.md を作成
       ↓
  • Ctrl+G でエディタを開いてインラインノートを直接追加
  • Claudeにプロンプトを送る:
「I added a few notes to the document, address all the notes and update the document accordingly. don't implement yet」 (訳:文書にメモを追加しました。全てのメモに対応して文書を更新してください。まだ実装しないでください) ↓
  • 満足するまで2〜3を繰り返す(通常1〜6ラウンド)
  • Todoリストを追加させてから実装開始
「add a detailed todo list with all phases and tasks. don't implement yet.」 (訳:全フェーズとタスクを含む詳細なTodoリストを追加してください。まだ実装しないでください)

don't implement yet(まだ実装しないで)のガードフレーズは必須だ。これを入れないと、アノテーション中にClaudeが実装を開始してしまう。

インラインノートの実例と分類

ノートの種類は大きく3パターンで、長さは2語から段落まで何でもよい。

# ドメイン知識を注入(Claudeが持てない情報)
use drizzle:generate for migrations, not raw SQL
(訳:マイグレーションはdrizzle:generateを使ってください。生のSQLではなく)

# 誤った仮定を修正 no — this should be a PATCH, not a PUT (訳:いいえ——これはPUTではなくPATCHにすべきです)

# 不要なアプローチを除去 remove this section entirely, we don't need caching here (訳:このセクションを完全に削除してください。ここでキャッシュは不要です)

なぜMarkdownファイルがチャットより優れるか

チャット会話での計画修正は、過去の決定をスクロールして再構築しながらフィードバックを書く必要がある。plan.mdへのアノテーションは、完全な仕様を一度に確認でき、問題の正確な箇所に直接修正を記述できる。Markdownファイルが「開発者とClaude間の共有可変状態」として機能するため、コンテキストを失わずに反復できる。

1ラウンド目は汎用的な実装計画(「こういう機能を追加するには一般的にはこうする」)。3ラウンド目には、既存システムに完璧にフィットした計画(「このコードベースの命名規則・既存パターン・技術的制約を全て考慮した計画」)になる。この変化がアノテーションサイクルの本質的な価値だ。

仕様インタビュー+セッション分離——Claudeにインタビュアーになってもらう

Plan Modeの前段階:仕様の曖昧さを除去する

Plan Modeで計画を立てる前に、「そもそも何を実装するか」が曖昧なまま進んでいないだろうか。仕様インタビューパターンはこの問題を解決する。エンジニアのThariq(@trq212)氏が実践・公開しているアプローチで、AskUserQuestionツールを活用して仕様を明確化するものだ。

プロセス

Session 1: 仕様策定
┌──────────────────────────────────────────┐
│ 1. 最小限の方向性だけ用意                │
│           ↓                              │
│ 2. Claudeにインタビュアーになってもらう  │
│    「この機能について技術実装・UI/UX・    │
│     エッジケース・トレードオフの観点から  │
│     AskUserQuestionで質問して仕様を      │
│     明確化して」                         │
│           ↓                              │
│ 3. 回答→質問のサイクルで仕様が明確化    │
│           ↓                              │
│ 4. spec.md として文書化                  │
└──────────────────────────────────────────┘
               ↓
Session 2: 計画・実装
┌──────────────────────────────────────────┐
│ spec.md を入力に、クリーンなコンテキストで│
│ Plan Mode → 実装                         │
└──────────────────────────────────────────┘

セッションを分離する理由

仕様策定の試行錯誤がコンテキストに残ると、実装セッションに「仕様を決める時に浮かんだアイデア」「一度否定したアプローチ」が混入する。新しいセッションはクリーンなコンテキストでspec.mdという完成した入力から始められる。

Claudeが引き出す視点

自分一人で仕様を考えていると意外と出てこないが、Claudeのインタビューでよく出てくる観点がある。

「エラー状態はどう扱いますか?」——エラーハンドリングの仕様を事前に決める。「既存の[関連機能]との整合性はどう担保しますか?」——影響範囲を事前に特定する。「スケールした場合のパフォーマンス要件はありますか?」——アーキテクチャの選択に影響する前提を明確化する。

完璧な仕様書を最初から用意する必要はない。「ざっくりした方向性」があれば、Claudeのインタビューが残りを引き出してくれる。

検証フェーズでのPlan Mode活用——実装後の「独立したテスト計画」

見落とされがちなPlan Modeの使いどころ

多くのエンジニアは実装フェーズでのみPlan Modeを使う。しかし検証フェーズでも同様に有効だ。Anthropicが実践・推奨しているアプローチで(@bcherny、2026年2月)、実装後の品質担保に活用できる。

実装した直後のセッションでテスト計画を立てると、テストが「実装を知っているClaude」によって書かれる。その結果、実装の抜け道を許したテストができあがる——これはコンテキスト汚染の問題と同じメカニズムだ。

Plan Modeを使うことで、Claudeを「テスト計画を立てるだけ」に制限できる。

実装後のPlan Mode活用プロンプト

# 実装完了後、Plan Modeに入ってから:
「この実装の検証戦略を立案して。
 以下の観点を網羅すること:
 - 正常系・異常系・境界値テストケース
 - エッジケースと例外パス
 - 既存機能への影響(リグレッション)
 - 統合テストが必要な箇所
 テスト実行は始めないで。まず計画だけ」

Plan Modeで立てたテスト計画をアノテーション

実装を知っているからこそ、テスト計画への適切なアノテーションができる。

# 見落とされているエッジケースを追加
concurrent requestsのケースが抜けている。追加して
(訳:並行リクエストのケースが抜けています。追加してください)

# 既存テストとの重複を削除 このケースは existing_test.ts で既にカバー済み。削除して

# 優先度を明記 このテストは本番クリティカル。最初に実装して

3つのテクニックの組み合わせパターン

大規模機能開発のフルフロー

Session 1: 仕様インタビュー
「AskUserQuestionで仕様を明確化して → spec.md に保存」
           ↓
Session 2: 計画(Plan Mode)
「spec.md を元に plan.md を作成 → アノテーション1〜3回 → dont implement」
           ↓
Session 3: ダブルレビュー
「別セッションでスタッフエンジニアとして plan.md をレビュー」
           ↓
Session 4: 実装
「implement it all. mark tasks as completed. dont stop until done.」
(訳:全て実装してください。完了したタスクをマークしながら、完了するまで止まらないでください)
           ↓
Session 5: 検証計画(Plan Mode)
「実装の検証戦略を Plan Mode で立案 → アノテーション」
           ↓
Session 6: テスト実装
「テスト計画を実装して」

「6セッションは多すぎる」と感じるかもしれない。しかしセッションを細かく分けることで、各セッションのコンテキストが汚染されない。私の経験では、フルフローを通じた合計時間は「計画なしで実装→手戻りを修正」のサイクルより短かった。

小〜中規模タスクのシンプルフロー

まずここから始めてほしい。

Plan Mode: アノテーションサイクル1〜2ラウンド
           ↓
実装: 「implement it all」
           ↓
検証Plan Mode: テスト計画立案

アノテーションサイクル1ラウンドだけでも、計画の質は明確に変わる。5分の追加で手戻りを防げるなら十分に価値がある。

ビフォーアフター

Before(基本Plan Modeのみ)

Shift+Tab×2 → 計画生成 → 即実装。「計画通りに実装してもらったが、いざ動かしたらエッジケースが漏れていた」「テストを後付けで書いたが、実装の形に合わせたテストになってしまった」。手戻りとバグが続く。

After(3つのテクニック活用)

Session 1で仕様インタビューをこなして要件の曖昧さをゼロにする。Session 2でPlan Mode+アノテーション3ラウンドで「既存システムに完璧にフィットした計画」に洗練させる。Session 3で1回の「implement it all」で完成。Session 4で検証Plan Modeにより実装バイアスのないテスト計画を立てる。手戻りが消え、テストが本物の品質保証として機能する。

まとめ:今日からできること

  • 今すぐ(5分): 現在進行中のタスクのplan.mdを Ctrl+G で開き、1つだけインラインノートを追加してアノテーションサイクルを体験する
  • 今日中: 次の新機能開発を「仕様インタビューSession → 計画Session」の2セッション分離で試す
  • 今週: 直近の実装に対して「検証フェーズのPlan Mode」を試し、実装後に独立したテスト計画を立てる
  • CLAUDE.mdに追加: ## 計画ルール として「複雑なタスクはアノテーションを最低2回行ってから実装する」を記述する

Plan Modeは「計画を作るツール」から「計画を洗練させるサイクルの起点」に変わる。アノテーションサイクルを1回試すだけで、その感覚はすぐに分かる。

コメント

タイトルとURLをコピーしました