Claude Codeを長時間使っていると、コンテキストウィンドウが埋まって応答が遅くなったり、過去の会話が邪魔をして意図しない出力が返ってきたりします。
この記事では、コンテキストを綺麗に保つための方法を整理します。「全部消す」だけでなく、「圧縮する」「巻き戻す」「別のエージェントに逃がす」など、状況に応じた選択肢があります。
この記事の対象読者と得られること
| 対象読者 | この記事で得られること |
|---|---|
| Claude Codeを日常的に使っている方 | コンテキスト管理の全体像と使い分けの指針 |
| 長時間セッションで応答品質の低下を感じている方 | 状況に応じた具体的な対処法 |
| サブエージェントを使いこなしたい方 | コンテキスn |
コンテキストを管理する4つの手段
Claude Codeには、コンテキストを管理する方法が大きく4つあります。
| 方法 | 操作 | 効果 | 不可逆性 |
|---|---|---|---|
/clear |
会話履歴を全消去 | コンテキストを完全リセット | 会話は復元不可 |
/compact |
会話を要約して圧縮 | 重要な情報を残しつつ容量を確保 | 元の詳細は失われる |
/rewind |
特定のチェックポイントまで巻き戻し | 会話・コード・両方を選択的に戻せる | 復元先より後の内容は消える |
| サブエージェント | 別のコンテキストでタスクを実行 | メインのコンテキストを汚さない | 予防的な手段 |
加えて、コンテキストが約95%に達すると自動圧縮が発動します。手動で管理しなくても最低限は動き続けますが、自動圧縮に任せきりにすると、残したい情報が消えることがあります。
/clear ── 完全リセット
/clear
会話履歴をすべて消去し、コンテキストウィンドウを空にします。/reset、/new も同じ動作のエイリアスです。
消去された会話は復元できません。/resume で戻ることもできません。
いつ使うか
- 同じプロジェクト内で、別のタスクに切り替えるとき
- 試行錯誤した結果が溜まって、一からやり直したいとき
- コンテキストが長くなり、応答品質が落ちたと感じたとき
/clear と新しいセッションの違い
/clear の代わりに、claude コマンドを再実行して新しいセッションを開始する方法もあります。両者は似ていますが、決定的な違いがあります。
| 観点 | /clear |
新しいセッション |
|---|---|---|
| セッションID | 変わらない | 新しく発行される |
| コンテキスト | リセット | リセット |
前の会話を /resume で復元 |
不可 | 可能 |
| 作業ディレクトリ | 変わらない | 変更可能 |
| CLAUDE.md / メモリ | 読み込み済み | 再読み込み |
判断基準はシンプルです。
- 前の会話を後で振り返る可能性があるなら、新しいセッションを立ち上げる
- もう振り返らないなら、
/clearで十分
迷ったら新しいセッションの方が安全です。会話履歴が保存されるので、後から /resume で戻れます。
CLAUDE.mdやメモリファイルを更新した直後も、新しいセッションの方が適しています。/clear は同じセッション内のリセットなので、更新された設定が反映されない場合があります。
補足: /clear しても会話ログは消えない
/clear は「会話を消す」コマンドですが、ディスク上のログファイルまで消すわけではありません。ここを理解するには、Claude Codeの内部構造を知っておくと役立ちます。
Claude Codeの会話データは2層で管理されています。
JSONLファイル(ディスク上の永続ログ)
└─ 読み込み → コンテキストウィンドウ(メモリ上の作業領域)
└─ APIリクエストに送信される
-
JSONLファイル (
~/.claude/projects/{project}/{session-id}.jsonl): append-onlyの永続ログ。すべてのやり取りが追記されていく - コンテキストウィンドウ: JSONLファイルから構築されるメモリ上の作業領域。Claudeが実際に「見ている」のはこちら
各コマンドがどちらに影響するかを整理すると、動作の違いが明確になります。
| 操作 | JSONLファイル | コンテキストウィンドウ |
|---|---|---|
| 通常の会話 | メッセージが追記される | メッセージが追加される |
/clear |
クリアイベントが追記される(過去ログは削除しない) | 空になる |
/compact |
圧縮後の要約が追記される | 要約に置き換わる |
/resume |
JSONLから読み込む | 再構築される |
/clear はJSONLファイルに「ここでリセットした」というマーカーを書き込むだけで、過去のログ自体は消しません。/resume でセッションを再開するとき、このマーカー以降の空の状態から再構築されるため、結果として「会話が戻らない」という挙動になります。
つまり、ログは物理的にディスク上に残っています。JSONLファイルを直接開けば過去のやり取りは確認できます。ただし、CLIの仕組みとしてはセッションに復元されません。
/compact ── 会話を圧縮して容量を確保する
/compact [引数]
会話全体を要約して、コンテキストの使用量を減らします。/clear と違い、これまでの作業の文脈を保持したまま容量を確保できます。
引数なしで実行すると汎用的な圧縮が行われますが、引数に自然言語で指示を渡すと、何を重点的に残すかを制御できます。
# 引数なし(汎用的な圧縮)
/compact
# 引数あり(残す情報を指示)
/compact APIの変更点とテスト結果を重点的に残して
CLAUDE.mdに「Compact Instructions」セクションを追加しておくと、毎回の圧縮に同じ方針が適用されます。
# Compact Instructions
圧縮時は以下を必ず保持すること:
- 変更したファイルの一覧
- テストコマンドとその結果
- APIのエンドポイント仕様
自動圧縮との関係
コンテキストが約95%に達すると、Claude Codeが自動的に圧縮を実行します。手動で早めに圧縮したい場合は、環境変数で閾値を変更できます。
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50 # 50%で圧縮を発動
自動圧縮では、古いツール出力(ファイル読み込み結果やコマンド出力)から優先的に削除されます。ユーザーのリクエストやコードの変更は可能な限り保持されますが、会話の序盤で伝えた詳細な指示は失われる可能性があります。
だからこそ、永続的なルールはCLAUDE.mdに書くのが鉄則です。
/rewind ── チェックポイントまで巻き戻す
/rewind
Esc キーを2回押しても同じメニューが開きます。
過去のチェックポイント一覧が表示され、選択すると以下の操作を選べます。
| 選択肢 | 動作 |
|---|---|
| Restore code and conversation | コードと会話の両方を巻き戻す |
| Restore conversation | 会話だけ巻き戻す(コードは現状維持) |
| Restore code | コードだけ巻き戻す(会話は現状維持) |
| Summarize from here | 選択した地点以降を要約に圧縮する |
Summarize from here はコンテキスト管理として特に便利です。選択した地点より前の会話は完全な形で残り、それ以降だけが要約に置き換わります。/compact が全体を圧縮するのに対し、/rewind + Summarize は「ここから先だけ圧縮」という部分的な操作が可能です。
いつ使うか
- アプローチを間違えたので、特定の時点からやり直したいとき
- 冗長なデバッグ出力が溜まったので、その部分だけ圧縮したいとき
公式ドキュメントでは、同じ修正を2回失敗したら /clear でリセットして、より良いプロンプトで最初からやり直すことが推奨されています。/rewind はそこまでではないが、部分的にやり直したい場合に使います。
サブエージェント ── コンテキストを汚さない委任
ここまでの3つは「事後的な」対処法です。サブエージェントは「予防的な」手段です。
調査やテスト実行など、大量のファイル読み込みやコマンド出力が発生するタスクをサブエージェントに委任すると、メインのコンテキストが汚れません。サブエージェントは独立したコンテキストウィンドウで動作し、結果の要約だけがメインに返ります。
メインセッション(コンテキストがクリーン)
├── サブエージェント: Explore(コードベース調査)→ 要約を返す
├── サブエージェント: テスト実行 → 失敗結果だけ返す
└── サブエージェント: リファクタリング案の検討 → 提案を返す
効果的な使い方
サブエージェントには組み込みの種類があります。
| 種類 | 用途 | コンテキストへの影響 |
|---|---|---|
| Explore | コードベースの調査・検索 | 読み取った大量のファイル内容がメインに入らない |
| Plan | 実装計画の策定 | 探索結果がメインに入らない |
| General-purpose | 汎用的なタスク実行 | 実行結果の要約だけ返る |
「自分でgrepして調べる」のではなく「サブエージェントに調べさせて結果だけ受け取る」という発想の転換が、コンテキスト管理の鍵です。
コンテキスト消費を減らす予防策
コマンドによる対処だけでなく、普段の設定でコンテキストの消費量自体を減らせます。
CLAUDE.mdを簡潔に保つ
CLAUDE.mdは毎回コンテキストに読み込まれます。肥大化すると、それだけで作業領域が圧迫されます。Claudeがコードから推測できる情報は書かない。詳細な手順はスキルに切り出してオンデマンドで読み込ませる。
使わないMCPサーバーを無効化する
MCP サーバーはツール定義だけでコンテキストを消費します。使っていないサーバーも接続されているだけでコストが発生します。
/mcp # サーバーごとのコンテキストコストを確認
CLIツール(gh、aws など)で代替できるなら、そちらの方がコンテキスト効率は良いです。
コンテキスト使用量をモニタリングする
/context # コンテキストの使用状況を可視化
何がコンテキストを消費しているかが一目でわかります。定期的に確認して、不要な蓄積がないかチェックすると良いでしょう。
使い分けの判断フロー
コンテキストが気になる
│
├─ もう今の会話は全部要らない
│ ├─ 後で振り返るかも → 新しいセッション
│ └─ 振り返らない → /clear
│
├─ 文脈は残したいが容量を確保したい
│ ├─ 全体を圧縮したい → /compact
│ └─ 特定の地点以降だけ圧縮したい → /rewind → Summarize
│
├─ これからやる作業が重い(調査・テスト等)
│ └─ サブエージェントに委任
│
└─ そもそも消費量を減らしたい
├─ CLAUDE.mdを簡潔にする
├─ 使わないMCPサーバーを切る
└─ /context で定期的に確認
まとめ
| 手段 | 一言で言うと | 残る情報 |
|---|---|---|
/clear |
全部消す | なし |
| 新しいセッション | 全部消すが履歴は残る |
/resume で復元可能 |
/compact |
圧縮する | 重要な決定・コード変更 |
/rewind + Summarize |
部分的に圧縮する | 選択地点より前は完全に残る |
| サブエージェント | そもそも汚さない | メインには要約だけ |
コンテキストウィンドウはClaude Codeにおいて最も重要なリソースです。「溢れてから対処する」のではなく、サブエージェントの活用やCLAUDE.mdの簡潔化で予防し、必要に応じて /compact や /rewind で整理する。この組み合わせが、長時間セッションでも高い応答品質を維持する鍵になります。