Claude Codeの見積もり根拠をplan modeで作る — 影響範囲を数えて工数の前提表にする
plan modeは読み取り専用でコードを調べられます。触るファイル・呼び出し元・テストを数えて根拠表にし、人日への換算は人が行う線引きと、数え漏れを防ぐ頼み方をまとめます。
既存システムの改修見積もりで工数がぶれる最大の原因は、変更の影響範囲を最初に見誤ることです。Claude Codeのplan modeはソースを編集せずにコードを調べられるので、この「数える作業」を安全に任せられます。
ただし、任せるのは数えるところまでです。ファイル数・呼び出し元・テスト数を表にして、人が人日に直すときの前提リストにします。Claudeに「何人日ですか」と聞いて出た数字を、そのまま見積書に載せる使い方はしません。ここでは、根拠表の作り方、数え漏れを減らす頼み方、人が確かめる点を順に示します。
提案前の段階で、要件メモから人月の幅を出す作業は工数見積(人月)をClaudeで書き出す手順が扱っています。こちらは既存コードが手元にあり、「この変更はどこまで波及するか」をコードから数える場面が対象です。
plan modeが見積もりの調査に向く理由
plan modeは、Claudeがファイルを読み、調査用のシェルコマンドを実行して計画を書き出し、ソースは編集しないモードです。計画を承認するまで編集はブロックされます。
見積もりの調査に向くのは、「調べるだけで、直さない」がモードの仕組みで担保されるからです。ただし、bypass permissionsを使える対話セッションでは、計画の承認前でも編集のブロックが外れます。見積もりの調査では、bypass permissionsを有効にせずに起動します。
調査中のシェルコマンドの扱いは、セッションの状態で変わります。
- auto modeが使え、
useAutoModeDuringPlanがオン(既定)の場合: 分類器がコマンドを審査し、承認されたものが実行されます - auto modeが使えない、または設定がオフの場合: 組み込みの読み取り専用コマンド以外は承認を求められます
読み取り専用コマンドの集合にはls・cat・grep・find・wc・diff・gitの読み取り系などが含まれます。影響範囲を数える作業は、この範囲でほぼ収まります。設定の詳細はuseAutoModeDuringPlanの解説に譲ります。
起動は次のどちらかです。
claude --permission-mode planセッション中ならShift+Tabでモードを切り替えるか、プロンプトの先頭に/planを付けます。起動方法と承認フローの全体はPlanモード完全ガイドにあります。
根拠表に入れる列を先に決める
数えさせる前に、表の列を決めておきます。列が曖昧だと、「関連しそうなファイル」まで件数に混ざり、数字の意味が人によって変わります。
見積もりの前提リストとして使いやすい列は次の5つです。
| 列 | 中身 | 数え方 |
|---|---|---|
| 変更対象 | 中身直接書き換えるファイル・関数 | 数え方変更点を特定してから列挙 |
| 呼び出し元 | 中身変更対象を使っている箇所 | 数え方名前での検索結果を件数にする |
| 既存テスト | 中身変更対象を通るテストファイル・件数 | 数え方テストコードの参照を検索 |
| 追加が必要なテスト | 中身新しい分岐や仕様に対応するもの | 数え方変更点ごとに1行 |
| 不確実な点 | 中身検索では分からない部分 | 数え方動的呼び出し・設定・外部連携など |
最後の「不確実な点」を必ず設けるのがこの表のコツです。検索で数えられるのは、名前が文字列として現れる参照だけです。リフレクションや設定ファイル経由の呼び出し、他リポジトリからの利用は数字に出ません。数えられなかった範囲を空欄で隠さず、行として残します。
手順: 数えさせて、表にさせて、再現コマンドも書かせる
流れは4段階です。
影響範囲の根拠表を作る流れ
- 1
変更の内容を一文で渡す
何を、どう変えるのかを具体的に書きます。「税計算の見直し」ではなく「消費税の端数処理を切り捨てから切り上げに変える」のように、検索できる名詞が入る形にします。
- 2
plan modeで調査と表の作成を頼む
編集はしない前提で、列を指定して表にさせます。プロンプトの例は後述します。
- 3
件数の出し方を表に書かせる
各数字の横に、数えるのに使ったコマンドや検索語を付けさせます。後から人が同じコマンドで再現できます。
- 4
Ctrl+Gで表を直し、人が人日に直す
計画は
Ctrl+Gでテキストエディタに開いて直接編集できます。不要な行を消し、不確実な点を書き足してから使います。
頼み方の例
次のようなプロンプトを、plan modeで投げます。
消費税の端数処理を切り捨てから切り上げに変える改修の
影響範囲を調べて、次の列の表にしてください。
- 変更対象(ファイルと関数名)
- 呼び出し元(ファイルと行数、件数)
- 既存テスト(ファイル名と件数)
- 追加が必要なテスト
- 不確実な点(検索では分からない部分)
条件:
- ソースは編集しない
- 件数の横に、数えた検索語またはコマンドを書く
- 工数(時間・人日)の見積もりは書かない
- 数えられなかったものは、推測で埋めず不確実な点の行に書く最後の2つの条件が線引きです。工数を書かせないことで、Claudeの出力は「事実の列挙」に留まります。数字の根拠をコマンドで残させるのは、人が検算できるようにするためです。
次の形が、返ってきてほしい表のイメージです。数字は説明のための架空の例です。
| 変更対象 | 呼び出し元 | 既存テスト | 追加が必要なテスト | 不確実な点 |
|---|---|---|---|---|
roundTax() in src/tax/round.ts | 呼び出し元7ファイル・12箇所(git grep -n "roundTax(") | 既存テスト3ファイル(tests/tax/配下) | 追加が必要なテスト端数ちょうどの境界値 | 不確実な点帳票出力のテンプレートが関数を文字列で呼ぶかは未確認 |
InvoiceLine.total | 呼び出し元4ファイル・5箇所 | 既存テスト1ファイル | 追加が必要なテスト明細合計と請求合計の一致 | 不確実な点外部の会計連携が丸め後の値を前提にしているか |
Claudeの数字を検算する
根拠表の価値は、数字が再現できることにあります。plan modeの調査は、Claudeが検索して数えた結果です。数え方に偏りがあれば、件数もずれます。
人が確かめるときは、表に書かれたコマンドをそのまま手元で実行します。
git grep -n "roundTax(" -- 'src/*.ts' | wc -l
git grep -l "roundTax(" -- 'tests/*' | wc -lパスのパターンは引用符で囲んでいます。find・sort・sed・gitのように書き込み系のフラグを持てるコマンドは、Manual modeで引用符なしのglobを含むと承認を求められます。Claudeにコマンドを書かせるときも、引用符付きで書くよう頼んでおくと、調査が止まりにくくなります。
検算で見るのは次の4点です。
- 検索語の取りこぼし: 別名・エイリアス・ラッパー関数経由の呼び出し
- 件数の水増し: コメントや文字列、生成コード、ビルド成果物の中の一致
- テストの数え方: ファイル数とテストケース数が混ざっていないか
- 範囲外: モノレポの別パッケージや別リポジトリからの利用
件数が合わなければ、表の該当行を直して使います。Claudeに「数え直して」と頼むときは、どの検索語が足りなかったかを伝えると、同じ失敗を繰り返しにくくなります。
調査が広いときの進め方
対象が大きいコードベースだと、調査の出力が会話を圧迫します。plan modeでコードベースを理解する必要があるとき、Claudeは調査をPlanサブエージェントに任せます。サブエージェントは読み取り専用のツールだけを使い、調査の出力は別のコンテキストウィンドウに留まります。メインの会話は読み取り専用のまま、結果の要約だけを受け取る形です。
広い範囲の検索は、組み込みのExploreエージェントも担当します。Exploreを呼ぶときの探索の深さには、quick・medium・very thoroughの3段階があります。粗い当たりを付ける段階と、提出前に精査する段階とで、深さを分けて頼む使い方ができます。
対象を絞るために、変更の入口になるモジュールやディレクトリをプロンプトで指定する方法も有効です。dbtのようにモデルの依存関係を機械的にたどれる領域では、ツール側のセレクタで影響範囲を出す方が確実です。その例はdbt build --selectの手順にあります。
表から見積もりに進む前に人が決めること
根拠表が出来たら、人日への換算は人が行います。換算に必要な判断は、表の外にあるからです。
- 1ファイルを直す重さ: 同じ件数でも、定型の置換と、設計を伴う改修では工数が違います
- テストの書きやすさ: 既存テストが整っているか、まず環境整備が要るか
- レビューと調整の時間: 関係者が多い箇所、承認が要る箇所
- 不確実な点の扱い: 幅に含めるのか、前提条件として除外するのか
最後の項目は、提案前の見積で前提・除外条件を表にする考え方と同じです。根拠表の「不確実な点」の行は、そのまま見積書の前提条件の下書きになります。チームの過去実績があれば、同程度の件数の改修にかかった実績と並べて換算します。
変更の種類で、数える対象を変える
同じ表でも、変更の種類によって「呼び出し元」にあたるものが違います。頼む前に、何を数えるのかを一行添えておくと、件数の意味がそろいます。
| 変更の種類 | 呼び出し元の代わりに数えるもの | 見落としやすい点 |
|---|---|---|
| 関数・クラスの仕様変更 | 呼び出し元の代わりに数えるもの名前で参照している箇所 | 見落としやすい点ラッパー経由、文字列での呼び出し |
| DBスキーマの列追加・変更 | 呼び出し元の代わりに数えるものその列を読み書きするクエリ、モデル定義 | 見落としやすい点生SQL、ビュー、集計バッチ |
| ライブラリの更新 | 呼び出し元の代わりに数えるもの該当ライブラリをimportしているファイル | 見落としやすい点非推奨APIの使用箇所、設定ファイル |
| 画面項目の追加 | 呼び出し元の代わりに数えるものその画面のコンポーネント、入力検証、帳票 | 見落としやすい点別画面への表示、エクスポート |
「見落としやすい点」の列は、そのまま「不確実な点」の行の下書きになります。プロンプトに「この種類の変更では、次の点は検索で拾えないので不確実な点に書く」と添えておくと、空欄のまま渡される表が減ります。
つまずきやすい点
落とし穴
工数の質問を足した途端に、根拠が消える
「この変更は何人日かかりますか」を同じプロンプトに足すと、返ってくる数字には、チームの習熟度もレビューの待ち時間も入っていません。表だけを頼み、換算は別の作業として切り離します。
- plan modeのつもりが編集可能になっている: 計画を承認すると、plan modeを抜けて編集が始まります。表を受け取っただけなら承認せず、「No, keep planning」で止めるか、
Shift+Tabでモードを抜けます - 検索結果が多すぎて表が読めない: 呼び出し元は、件数と代表例の数件に絞らせます。全件は再現コマンドで人が必要なときに出せます
- 古い表を使い回す: コードは日々変わります。見積もりの根拠として提出する表は、提出直前の状態で数え直します
まとめ
plan modeに任せて価値が出るのは、影響範囲を数えて表にするところまでです。件数と再現コマンドと「不確実な点」を並べておけば、人日への換算は、表を見ながら人が前提を一つずつ置いていく作業になります。Claudeの調査は、見積もりの数字を出すためでなく、人が置く前提の数を減らすために使います。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。