Claude Code のコンテキスト管理:/compact・/clear の使い分けとトークン節約のコツ
Claude Code のコンテキストウィンドウが埋まる仕組みと、/compact、/clear、/context の使い分けを解説します。自動圧縮のタイミング、圧縮時に残す情報の指示、セッション再開との関係も紹介します。
目次
長いセッションを続けていると、Claude の応答が遅くなったり、最初に伝えたルールを忘れたように見えたりします。原因の多くはコンテキストウィンドウの逼迫です。会話履歴、読み込んだファイル、ツールの実行結果はすべてコンテキストに蓄積され、上限に近づくと精度が落ち、圧縮が走って情報が失われます。
この記事では、コンテキストを「見る」「圧縮する」「捨てる」ための 3 つのコマンドと、そもそも消費を抑えるための習慣をまとめます。
KEY POINT
この記事で分かること
/context、/compact、/clearの役割と使い分け- 自動圧縮の仕組みと、圧縮で失いたくない情報を守る方法
- コンテキスト消費を抑える日常的な習慣
コンテキストを構成するもの
コンテキストウィンドウには、次のものが順に積み上がります。
| 要素 | 内容 | 削減の余地 |
|---|---|---|
| システムプロンプト | Claude Code 本体の指示 | なし |
| CLAUDE.md | ユーザー・プロジェクト・ローカルの内容 | 大きい(短く保つ) |
| ツール定義 | 組み込みツールと MCP サーバーのツール一覧 | 中(不要な MCP を外す) |
| 会話履歴 | 指示、応答、読んだファイル、コマンド出力 | 大きい(/compact、/clear) |
/context を実行すると、これらの内訳と残り容量が表示されます。「思ったより MCP のツール定義が大きい」「CLAUDE.md が長すぎる」といった発見があるので、まず一度見てみてください。
/compact:要約して続ける
/compact は、これまでの会話を要約し、要約だけを残して履歴を置き換えます。タスクの途中でコンテキストが逼迫したときに使います。
/compact
引数で「何を残すか」を指示できます。
/compact 変更したファイルの一覧と、未解決のテスト失敗の内容は必ず残してください
要約は Claude が行うため、指示がないと細部(具体的なエラーメッセージ、決めた命名規則など)が落ちることがあります。残したい情報を明示するのが安全です。
用語解説
自動圧縮: 使用量が上限付近に達すると、手動で /compact しなくても自動的に圧縮されます。走る時点は使っているモデルと設定で決まります。予告なく起きるため、大事な情報は CLAUDE.md やメモファイルに書き出しておく方が確実です。
自動圧縮が走るまでの残りは、セッション中に表示されます(英語表示では "context left until auto-compact" のような形で出ます)。この表示の文言そのものは公式ドキュメントでは確認できませんでしたが、走る時点を早める方法は明記されています。公式ドキュメントによると、/autocompact にトークン数を渡すと「自動の圧縮が走る前にコンテキストウィンドウがどこまで埋まるか」を設定できます。
/autocompact 500k受け付ける値と上書きの方法は Claude Code の自動圧縮のタイミングを変える にまとめています。
/clear:履歴を捨てて新しく始める
/clear は会話履歴を完全に消します。CLAUDE.md や設定は再読み込みされるので、「新しいタスクに移る」ときはこちらです。
/clear
前のタスクの文脈が混ざると、Claude が無関係なファイルを参照したり、前の方針を引きずったりします。タスクの区切りで /clear する習慣は、精度と費用の両方に効きます。
使い分けの判断基準
| 状況 | コマンド |
|---|---|
| 同じタスクを続けたいが、動作が重くなってきた | /compact |
| 実装が終わり、別の機能に取りかかる | /clear |
| 調査だけ済ませて、実装は別セッションでやりたい | 調査結果をファイルに書かせてから /clear |
| 圧縮後に前提を忘れているように見える | /compact に残す内容を指示してやり直す、または CLAUDE.md に書く |
PreCompact フックで情報を退避する
圧縮の直前に PreCompact フックが発火します。ここでスクリプトを走らせ、現在の作業状態をファイルに書き出す仕組みを作れます。
{
"hooks": {
"PreCompact": [
{
"hooks": [
{
"type": "command",
"command": "git status --short > .claude/last-status.txt"
}
]
}
]
}
}
hooks の基本は hooks で lint と format を自動実行する で解説しています。
消費を抑える習慣
CLAUDE.md を短く保つ
CLAUDE.md は毎セッション読み込まれます。ディレクトリ一覧や長い仕様を書かず、必要な文書は @ インポートやサブディレクトリの CLAUDE.md に分けます(CLAUDE.md の書き方)。
使わない MCP サーバーを外す
MCP サーバーのツール定義は、使わなくてもコンテキストを消費します。プロジェクトで使わないものは claude mcp remove で外すか、project スコープではなく local スコープに置いて必要なときだけ有効にします。
大きなファイルや出力を読ませない
cat で巨大なログを読ませたり、node_modules を検索させたりすると、一気に消費します。「先頭 50 行だけ」「grep で該当箇所だけ」と範囲を指定してください。長いテスト出力は、| tail -n 30 のように絞る指示が有効です。
調査はサブエージェントに任せる
コードベースの広範な調査は、サブエージェントに任せると、その過程で読んだファイルがメインのコンテキストに残りません。結果の要約だけが返ってきます(サブエージェントの作り方)。
セッションの再開との関係
claude --continue や claude --resume で過去のセッションを再開すると、当時のコンテキスト(圧縮済みなら要約)がそのまま復元されます。翌日に続きをやる場合、再開直後に /context で状態を確認し、必要なら /compact してから作業を始めると安定します。
まとめ
/contextで内訳を見て、CLAUDE.md や MCP のツール定義が肥大化していないか確認する- 同じタスクの継続は
/compact(残す情報を引数で指示)、タスクの切り替えは/clear - 自動圧縮は任意のタイミングで起きるため、重要情報は CLAUDE.md やファイルに退避する
- 大きな出力を読ませない、調査はサブエージェントに任せる、で日常的に消費を抑える
よくある質問
- /compact と /clear はどちらを使うべきですか?
- 同じタスクを続けるなら /compact(要約して継続)、別のタスクに移るなら /clear(履歴を消して新規開始)です。
- 自動圧縮はいつ起きますか?
- コンテキストの使用量が上限に近づくと自動的に圧縮されます。直前に PreCompact フックで重要情報を退避することもできます。
- コンテキストの使用量はどこで見られますか?
- /context コマンドで、システムプロンプト・ツール・会話履歴などがどれだけ占めているかを確認できます。
- 「context left until auto-compact」という表示は何ですか?
- 自動圧縮が走るまでにコンテキストがどれだけ残っているかの表示です。走る時点を変えたい場合は /autocompact にトークン数を渡します(例: /autocompact 500k)。
読者からの質問と回答
Q. コンパクション後に再開すると、CLAUDE.md が指示している「最初に読むべきファイル」を読まずに作業を始めます。コンパクションのあと指示ファイルは読み直されないのでしょうか。
「読み直される部分」と「読み直されない部分」が分かれています。公式ドキュメントはリクエストを 3 層で説明していて、コンパクションの影響はこの層ごとに違います。
| 層 | 内容 | 変わるとき |
|---|---|---|
| システムプロンプト | 中核の指示、ツール定義 | 読み込まれるツール定義が変わったとき |
| プロジェクトコンテキスト | CLAUDE.md、オートメモリ、スコープなしのルール | セッション開始時、/clear または /compact の後 |
| 会話 | ユーザーのメッセージ、Claude の応答、ツールの結果 | 毎ターン |
CLAUDE.md 自体は読み直されます。 プロンプトキャッシュのドキュメントはコンパクションについて「It reloads project context from disk, which cache-hits only if CLAUDE.md and memory are unchanged since the session started」と書いています。ディスクから読み直す、と明記されています。
読み直されないのは、CLAUDE.md が「読め」と指示しているファイルのほうです。それらは Read ツールで読んだ結果なので会話層にあり、コンパクションは会話層を要約で置き換えます。公式の説明も「Compaction replaces your message history with a summary」です。つまり「指示は残るが、指示に従って読んだ中身は要約に畳まれる」という状態になります。
コンパクション後に残るもの: CLAUDE.md の「最初に memory index を読め」という指示
コンパクション後に消えるもの: 実際に読んだ memory index と protocol ファイルの中身
サブディレクトリの CLAUDE.md と paths: 付きのルールも会話層です。公式ドキュメントは「After it loads, the content is part of the conversation history」と書いています。
PostCompact フックでコンテキストを足すことはできない
「コンパクションのたびに自動で読み直させる」仕組みを探すなら、フックのイベント表を見てください。PostCompact は「After context compaction completes」に発火しますが、終了コード 2 の扱いは「Shows stderr to user only」で、決定を返す JSON のフィールドもありません。コンテキストを注入できるのは SessionStart の additionalContext などで、PostCompact にはその手段が用意されていません。
実務的には、コンパクションの直後に「memory index を読み直してから続けて」と 1 回指示するのが確実です。/compact は作業の切れ目で自分のタイミングで実行するほうが、作業中に自動で走るより扱いやすくなります。
なお Claude Code v2.1.293 で「コンパクション前の自分の操作を、コンパクション後に完了済みとして扱ってしまう」不具合が修正されています。古いバージョンを使っている場合は先に更新してください。
コンパクションで何が残り何が消えるかは コンテキスト管理と /compact・/clear の使い分け にまとめてあります。
参考にした一次情報
この記事は公式ドキュメントを基に AI が下書きを作成し、運営者が内容を確認して公開しています。誤りを見つけた場合は お問い合わせからお知らせください。