出典:Best practices for Claude Code(Anthropic公式)
目次
- 大前提:コンテキストウィンドウが一番大事なリソース
- 1. Claudeが自分で検証できるようにする(最重要)
- 2. 探索 → 計画 → 実装 → コミット
- 3. プロンプトは具体的に
- 4. 環境を整える
- 5. セッション管理
- 6. 自動化とスケール
- よくある失敗パターン
- 最後に
大前提:コンテキストウィンドウが一番大事なリソース
ベストプラクティスのほとんどは「コンテキストはすぐ埋まり、埋まるほど性能が落ちる」という制約から来ている。会話・読み込んだファイル・コマンド出力はすべてコンテキストを消費する。満杯に近づくと前の指示を「忘れる」、ミスが増える、といったことが起こる。
1. Claudeが自分で検証できるようにする(最重要)
- テスト、ビルド、linter、スクリーンショット比較など、合否が返ってくるチェックを用意する。チェックがないと、間違いに気づく役はすべて自分になる。
- 例:「validateEmail関数を書いて。テストケースは〇〇。実装後にテストを実行して」
- 症状を抑えるのではなく根本原因を直すよう指示する(「エラーを握りつぶさないで」)。
- 強制の度合いは段階的に上げられる:
- プロンプト内で「チェックを実行して通るまで繰り返して」と指示
/goalで条件を設定(毎ターン後に別の評価器が再チェック)- Stopフックで機械的にゲート(通るまでターンを終わらせない)
- 検証用サブエージェントでセカンドオピニオン
- 「できました」と言わせるのではなく、テスト出力・実行コマンド・スクショなどの証拠を見せてもらう。
2. 探索 → 計画 → 実装 → コミット
- 探索:
Shift+Tabで plan mode に切り替える(またはclaude --permission-mode planで起動)。Claudeはファイルを変更せずに読み込みと回答だけを行う。 - 計画:詳細な実装計画を作らせる。
Ctrl+Gでエディタを開いて計画を直接編集できる。 - 実装:plan mode を抜けて実装させ、計画に照らして検証させる。
- コミット:説明的なメッセージでコミットさせ、PRを作らせる。
小さな修正(typo、ログ1行追加、変数名変更など)には不要。差分を1文で説明できるなら計画は飛ばしてよい。
3. プロンプトは具体的に
| 戦略 | Before | After |
|---|---|---|
| 範囲を絞る | 「foo.pyのテストを追加して」 | 「ログアウト状態のエッジケースをカバーするfoo.pyのテストを書いて。モックは使わないで」 |
| 情報源を示す | 「なぜこのAPIは変なの?」 | 「git履歴を見てAPIの経緯を要約して」 |
| 既存パターンを参照 | 「カレンダーウィジェットを追加して」 | 「HotDogWidget.phpを参考に同じ流儀で実装して」 |
| 症状を伝える | 「ログインバグを直して」 | 「セッションタイムアウト後にログインが失敗する。src/auth/のトークン更新を確認し、再現する失敗テストを書いてから修正して」 |
リッチな入力の渡し方:
@でファイルを参照する- 画像を貼り付ける・ドラッグ&ドロップする
- ドキュメントのURLを渡す
cat error.log | claude -p "explain this error"でパイプ入力する- Claude自身にBash/MCPで情報を取りに行かせる
大きな機能では:AskUserQuestionで自分にインタビューさせて SPEC.md を書かせ、新しいセッションで実装する。良い仕様書は、関係するファイルとインターフェースを明記し、対象外を書き、最後にE2Eの検証手順を含む。
4. 環境を整える
CLAUDE.md
/initで雛形を作り、育てていく。/contextで読み込まれているか確認できる。- 短く保つ。 各行について「消したらClaudeがミスするか?」と問い、ミスしないなら削る。長すぎると肝心のルールが埋もれて無視される。
| ✅ 入れるもの | ❌ 入れないもの |
|---|---|
| 推測できないBashコマンド | コードを読めば分かること |
| デフォルトと違うコードスタイル | 一般的な言語の慣習 |
| テスト方法・好みのテストランナー | 詳細なAPIドキュメント(リンクにする) |
| ブランチ名・PRの規約 | 頻繁に変わる情報 |
| プロジェクト固有の設計判断 | 長い解説やチュートリアル |
| 開発環境のクセ(必要な環境変数など) | ファイルごとの説明 |
| ハマりどころ・直感に反する挙動 | 「きれいなコードを書く」のような自明なこと |
- どうしても守られない1行だけ「IMPORTANT」などで強調する(多用すると効果がなくなる)。
- gitにコミットしてチームで育てる。
@path/to/fileで他のファイルをインポートできる。 - 一時的にしか使わない知識は Skills に分けると、必要なときだけ読み込まれる。
権限
/permissionsで信頼できるツール(npm run lint、git commitなど)を事前許可する。/sandboxでOSレベルの隔離をかけ、範囲内で自由に動かす。- 新しいバージョンでは auto mode(分類モデルが危険な操作だけブロックする)がデフォルト。
その他の拡張
- CLIツール:
gh、aws、gcloud、sentry-cliなどはコンテキスト効率が最も良い連携手段。未知のツールも--helpを読ませれば使いこなせる。 - MCPサーバー:
claude mcp addで Notion、Figma、DB などにつなぐ。 - Hooks:「毎回例外なく」実行したい処理用。CLAUDE.mdの指示は守られないことがあるが、フックは確実に実行される(例:編集ごとにeslint、migrationsフォルダへの書き込みをブロック)。
- Skills:
.claude/skills/<name>/SKILL.md。関連するときに自動適用されるほか、/skill-nameで呼び出せる。副作用のあるワークフローにはdisable-model-invocation: trueを付けて手動起動にする。 - サブエージェント:
.claude/agents/。専用のコンテキストとツールで隔離されたタスクを処理する。 - プラグイン:
/pluginでマーケットプレイスを閲覧する。型付き言語なら code intelligence プラグインがおすすめ。
5. セッション管理
- 外れたらすぐ修正する
Esc:中断(コンテキストは保持される)Esc Esc//rewind:チェックポイントに戻す(会話・コード・両方を選べる)- 「undo that」:変更を戻させる
/clear:コンテキストをリセットする
- 同じ問題を2回以上修正しても直らないときは、
/clearしてから学んだことを盛り込んだ良いプロンプトで始め直す。 - コンテキストを積極的に管理する
- 関係ないタスクの間には
/clear /compact <指示>で圧縮の方向を指定する(例:/compact Focus on the API changes)- CLAUDE.mdに「圧縮時は変更ファイル一覧とテストコマンドを必ず残す」などと書ける
- 脇道の質問は
/btwで聞く(答えが履歴に残らない)
- 関係ないタスクの間には
- 調査はサブエージェントに任せる:「use subagents to investigate X」と頼むと、別コンテキストで調べて要約だけ返してくる。
- チェックポイント:大胆な試行をして、ダメなら戻せばいい。
- ⚠️ 戻せるのはClaudeの編集ツールによる変更だけで、Bash経由の変更は追跡されない。gitの代わりにはならない。
- 再開:
/renameでセッションに名前を付け、claude --continue/claude --resumeで再開する。
6. 自動化とスケール
- 非対話モード:
claude -p "..."で CI、pre-commit、スクリプトから実行できる。--output-format json/--output-format stream-json --verbose
- 並列セッション:worktree、デスクトップアプリ、クラウド実行、
claude agents(Agent view)、Agent teams(実験的機能)。 - Writer/Reviewerパターン:書いたセッションとは別の新しいコンテキストでレビューさせると、自分の書いたコードへの偏りが出ない。テストを書く役と実装する役に分けるのも有効。
- ファンアウト:
-
/batch <指示>で5〜30個のサブエージェントに分割する(それぞれ別のworktreeで作業) -
または
claude -pをループで回す:for file in $(cat files.txt); do claude -p "Migrate $file from Python 2 to Python 3. Return OK or FAIL." \ --allowedTools "Edit,Bash(git commit *)" \ --permission-mode dontAsk done -
最初は2〜3ファイルで試し、プロンプトを直してから全体に回す。
-
- auto mode:
claude --permission-mode auto -p "fix all lint errors" - 敵対的レビュー:完了扱いにする前に、サブエージェントで差分をレビューさせる(
/code-review)。- ⚠️ 「穴を探して」と頼むと何かしら必ず指摘してくる。正しさや要件に関わるものだけに絞らせ、それ以外は任意扱いにしないと過剰設計になる。
よくある失敗パターン
| パターン | 対策 |
|---|---|
| キッチンシンク:1つのセッションに無関係なタスクを詰め込む | タスクの間に /clear |
| 修正の繰り返し:何度直しても間違う | 2回失敗したら /clear してプロンプトを改善 |
| CLAUDE.mdが長すぎる | 容赦なく削る。必須のものはフックに移す |
| 信頼してから検証するギャップ:もっともらしいがエッジケースで壊れる | 必ず検証手段を用意する。検証できないものは出さない |
| 終わらない探索:範囲を決めない「調査」でコンテキストが溢れる | 範囲を絞るか、サブエージェントに任せる |
最後に
これらはあくまで出発点。うまくいったときに何をしていたか、うまくいかなかったのはなぜか(コンテキストが雑多すぎた?プロンプトが曖昧?タスクが大きすぎた?)を観察して、自分なりの勘を育てていくことが大事。