Claude Codeのコンテキスト管理術 — /compact・/clear・CLAUDE.mdで1Mトークンを使い倒す
Claude Codeのコンテキスト管理を徹底解説。/compact・/clear・/rewindの使い分け、CLAUDE.mdでの永続化、サブエージェント分割による長時間作業の維持方法。コンテキスト汚染で品質が落ちる前にやるべき対策まとめ。
エンジニアのゆとです。
Claude Codeで長時間作業をしていると、ある瞬間から明らかに出力の質が落ちる。
「さっきまで的確だったのに、急に的外れな提案をしてくる」「同じファイルを何度も間違えて読み直す」「さっき決めたはずのことを忘れている」——こういう症状、コンテキスト管理の問題がほぼすべての原因だ。
Claude Codeのコンテキストウィンドウは最大約200,000トークン(Claude 3.5/3.7系)。一見広大だが、コードの読み込み・会話履歴・ツール出力が積み重なるとあっという間に逼迫する。どう管理するかで、1時間後の出力品質がまるで変わる。
この記事では、自分が毎日使っている /compact /clear /rewind の使い分けと、CLAUDE.mdを使った「揮発しない記憶」の作り方、さらにサブエージェント分割という上級テクニックまでまとめる。
コンテキスト汚染とは何か
コンテキスト管理を語る前に、「コンテキスト汚染」という概念を抑えておく必要がある。
コンテキスト汚染とは、会話履歴の中に「古い・間違い・無関係な情報」が蓄積して、Claudeの判断精度を下げる現象のことだ。
具体的にはこういう状況で起きる:
- 試行錯誤中に生成したエラーメッセージが大量に残っている
- 最初に提示したが採用しなかったアーキテクチャ案が残っている
- 別のタスクで読み込んだファイルの内容がコンテキストに残っている
- ツール呼び出しの出力(長大なdiff、テスト結果など)が積み重なっている
Claudeはコンテキスト全体を参照して応答を生成する。そこに「既に捨てた選択肢」「解決済みのエラー」が混在していると、それを参照した誤った推論が起きやすくなる。
コンテキストウィンドウの使用量は /status コマンドで確認できる。70%を超えてきたら対策を講じるタイミングだと思っている。
3つのコンテキストリセットコマンド
/clear — 完全リセット
/clear
会話履歴をすべて消去する。最もシンプルかつ強力なリセット手段。
使いどころ:
- タスクが完全に切り替わるとき
- エラーが複雑に絡み合いすぎてやり直したいとき
- コンテキストが80%を超えてきたとき
注意点は「完全に消える」こと。「さっきのコードどうだったっけ」が参照できなくなる。作業中の重要な決定事項は、先にファイルに書き出してから /clear を打つのが習慣になっている。
/compact — 要約して圧縮
/compact
会話履歴を「圧縮された要約」に置き換えるコマンド。完全に消すのではなく、要約として保持しながらトークン数を削減する。
フォーカスを指定することもできる:
/compact コンポーネント設計の決定事項と現在の実装状況に絞って要約して
カスタム指示を渡せることで、「何を引き継ぎたいか」を制御できる。自分は /compact を使うとき、何を残したいかを明示するようにしている。漠然と /compact だけ打つと、Claudeが重要度判断して要約するが、自分が重要だと思っていることと一致しないことがある。
使いどころ:
- 会話が長くなってきたが、大枠の文脈は引き継ぎたいとき
- タスクは継続中だがコンテキストが70%超えてきたとき
/rewind — 特定ターンまで戻す
/rewind 5
指定したターン数だけ会話を巻き戻す。「さっきの指示が間違いだった」「あのターンからやり直したい」という場面で使う。
/clear や /compact との違いは「選択的に巻き戻せる」点。全消去ではないので、生かしたい文脈はそのまま残せる。
3つの違いを整理する
| コマンド | 消去範囲 | 文脈の引き継ぎ | 使うタイミング |
|---|---|---|---|
| /clear | 全消去 | なし | タスク完全切替 |
| /compact | 要約に圧縮 | あり(要約として) | 継続中・コンテキスト逼迫 |
| /rewind N | 直近Nターン削除 | 部分的 | 特定ターンのやり直し |
自分の使用頻度は /compact > /clear > /rewind の順。大半のケースは /compact で対処できる。
CLAUDE.mdを「揮発しない記憶」として使う
コンテキスト管理の本質的な問題は「揮発性」だ。どんなにうまく整理しても、セッションを跨げばゼロリセットされる。
この問題を解決するのがCLAUDE.mdだ。
CLAUDE.mdはセッション開始時にClaude Codeが自動的に読み込むMarkdownファイル。プロジェクトのルールやアーキテクチャの決定事項、作業上の注意点などを書いておくと、セッションをまたいでも記憶として引き継がれる。
コンテキスト管理との役割分担
実際の運用では、「何を CLAUDE.md に書くか、何はコンテキストに残すか」の判断が重要になる。
CLAUDE.mdに書くべき情報:
- プロジェクト固有のアーキテクチャ決定(なぜそうしたか含む)
- 技術スタックの制約(「このプロジェクトではNode 20を使う」等)
- コーディング規約・命名規則
- よく使うコマンド・スクリプト
- 過去のやらかしパターン(「○○をやると壊れる」)
コンテキストにだけ残せばいい情報:
- 現在の作業内容の詳細(タスク完了後は不要)
- デバッグ中の仮説(解決後は不要)
- 一時的な決定事項
判断基準は「次のセッションでも必要か」。YESならCLAUDE.mdに書く、NOならコンテキストに流す。
CLAUDE.mdにCompact Instructionsを書く
/compact 実行時の振る舞いをカスタマイズするには、CLAUDE.mdに以下のような指示を書く:
## Compact Instructions
コンテキストを圧縮する際は、以下の情報を必ず保持してください:
- 現在の実装ステータス(完了/進行中/未着手)
- 今セッションで決定したアーキテクチャの変更点
- 残っている未解決のエラーと試した対策
- 次のステップ
これを書いておくと、/compact したときにこの情報が優先的に保持されるようになる。「要約したら大事なことが消えた」という事故が減る。
サブエージェント分割:長時間作業の上級テクニック
コンテキスト管理の最終手段がサブエージェント分割だ。
Claude Codeでは --subagent フラグや、会話内で「別のClaude Codeインスタンスにサブタスクを委譲する」形でサブエージェントを活用できる。
claude --subagent "tests/ ディレクトリのテストを全部レビューして、問題があれば report.md に書き出して"
このアプローチの利点:
- メインの会話のコンテキストを汚染せずに大量のファイルを処理できる
- サブエージェントのコンテキストはタスク完了後にリリースされる
- 並列処理できるタスクは並列で走らせられる
実際の使い方として、自分は大きなリファクタリングをするときにこの方法を取ることがある。「全ファイルをサブエージェントに読ませてサマリーを作らせる → そのサマリーをメインセッションに渡す」という流れ。これでメインのコンテキストにコード全体を読み込まなくて済む。
コンテキストが逼迫する前にやること
予防的なコンテキスト管理として、実際にやっていること:
1. タスク完了ごとに /compact
1つのタスク(機能追加、バグ修正など)が終わったら /compact を打つ習慣をつける。蓄積してから打つより、定期的に打つほうが要約の精度が高い。
2. ファイル読み込みを最小限にする
「取り敢えず全部読んで」という指示を避ける。必要なファイルだけを指定すると、ツール出力によるコンテキスト消費を大幅に抑えられる。
Read src/ より Read src/components/Button.tsx の方がトークン効率が良い。
3. 長いエラーログは加工してから渡す
全文貼り付けではなく、要点だけを抽出してから渡す。500行のスタックトレースをそのまま渡すのはコンテキストの無駄遣いだ。tail -n 20 error.log で末尾だけ渡すか、エラーの種類だけを手動でコピーする。
4. 作業開始時に「今日のゴール」を明示する
セッション開始時に「今日はXを実装する。YとZは触らない」と明示すると、コンテキストが散らばりにくくなる。Claudeが「今日のスコープ外の話題」を持ち出してくることも減る。
コスト視点でのコンテキスト管理
コンテキスト管理はコスト管理でもある。
Claude Codeは入力トークン数に応じてコストが発生する(APIプランの場合)。コンテキストが大きければ大きいほど、各リクエストのコストが上がる。
Claude 3.5 Sonnetの場合、input token は $3/Mトークン。コンテキストが100,000トークンの状態で100回リクエストすると、入力だけで $30。これが50,000トークンなら $15。
Maxプランを使っている場合でも、コンテキストが大きいと「月の使用量制限」の消費が速くなる。/compact を習慣化するだけで体感できるほど使用量が変わる。
Prompt Cachingを使っている場合は少し話が変わる。CLAUDE.mdの内容はキャッシュされるため、繰り返し参照されるコンテキストはコストが安くなる(キャッシュヒット時は $0.30/Mトークン)。だからこそCLAUDE.mdに重要情報を集約する価値がある。
まとめ
コンテキスト管理は地味だが、Claude Codeの出力品質に直結するスキルだ。
/clearは完全リセット、/compactは要約圧縮、/rewindは部分巻き戻し- 揮発する情報はコンテキストに、永続させたい情報はCLAUDE.mdに
- Compact Instructionsで要約内容をコントロールできる
- サブエージェント分割はコンテキスト汚染を防ぐ最終手段
- 予防的管理(タスク区切りで/compact、ファイル読み込み最小化)が一番コスパがいい
「Claude Codeの品質が最近落ちた気がする」と感じたら、まずコンテキストの状態を疑ってみる価値がある。
記事が見つかりません:
記事が見つかりません: