Claude Codeで/compactを使うタイミングと新しいセッションを始める基準
Claude Codeのコンテキスト管理を実務ベースで整理したガイドです。/compactの役割を端的に説明し、/clear、/rewind、別の新規セッションとの使い分け、Claude Webの自動圧縮との違い、圧縮後に使える確認プロンプト、安全な引き継ぎテンプレート、1分で判断できるフローを掲載します。
目次
Claude Codeの/compactは、古い会話を短い構造化要約にまとめ、現在のコンテキストウィンドウに空きを作るコマンドです。タスクの目的、重要な判断、プロジェクトの現在地をできるだけ残しながら、長いログ、ツール出力、diff、中間議論で膨らんだセッションを軽くします。
ただし、/compactは混乱したセッションを自動で正常化する機能ではありません。圧縮後のアクティブコンテキストには、過去の内容が一字一句そのまま残るわけではありません。正確なエラー文、却下済みの案、一時的な制約、会話内でしか伝えていない指示は目立たなくなる可能性があります。Claudeが複数タスクを混同し、失敗した案を繰り返し、誤った設計前提で進んでいるなら、短い引き継ぎを作って新しいセッションを始める方が安全です。
Claude CodeとClaude Webで/compactは何をするのか
Claude Codeの/compactは、過去の複数ターンを要約してコンテキスト領域を空けます。コマンド自体がプロジェクトファイルを変更することはありません。 Claude Codeは上限に近づくと自動圧縮することもでき、遅さやノイズが目立つ前に手動で実行することもできます。
通常のClaude Webチャットには、ユーザーが実行する/compactコマンドはありません。コード実行が有効な環境では、長い会話がコンテキスト上限に近づくと、Claudeが古いメッセージを自動要約して会話を継続できます。画面に「考えを整理しています」に相当する表示が出ることもあります。完全なチャット履歴は保持されますが、モデルのアクティブな作業コンテキストでは、全履歴の逐語的な再送ではなく要約が使われます。
| 比較項目 | Claude Code | Claude Web |
|---|---|---|
| 圧縮の開始方法 | /compactを手動実行、または自動実行 | 上限付近で自動管理 |
| 同じコマンドをユーザーが実行できるか | できる | 同名のチャットコマンドはない |
| 同じ会話を続けるか | 同じセッションを継続 | 同じチャットを継続 |
| 主な目的 | 同じ開発タスクを続けるためにコンテキストを空ける | 長い会話を長さ制限で中断されにくくする |
| 主なリスク | 正確なエラーや会話内だけの制約が要約で弱まる可能性 | 古い詳細がアクティブコンテキストで目立ちにくくなる可能性 |
/compact、/clear、/rewind、新規セッションの使い分け
| 選択肢 | 何が変わるか | 向いている状況 | 向いていない状況 |
|---|---|---|---|
| そのまま続行 | リセットも要約もしない | Claudeが症状、制約、直近の検証結果を正しく覚えている | ループ、タスク混同、却下案の再提案が起きている |
/compact | 古いターンを要約し、同じセッションの空きを増やす | 同じタスクで方向も正しいが、ログやツール出力が多すぎる | 根本理解が誤っている、または過去の精密な情報が不可欠 |
/clear | 現在のClaude Codeプロセス内で空の会話を開始。前のセッションは/resumeで再開可能 | 同じ作業ディレクトリとファイル状態のまま会話だけを新しくしたい | コード変更を戻したい。/clearはファイルを復元しない |
/rewind | checkpointからコード、会話、または特定範囲の要約を選べる | 直近の数ターンだけが悪く、戻す地点を特定できる | Bash、外部ツール、手動編集、多くのsubagentによる変更を戻したい |
| 別の新規セッション | 別ターミナル、別ウィンドウ、独立workspaceでクリーンに開始 | タスク切り替え、設計のやり直し、並行作業、深刻なコンテキスト劣化 | 理解は正しく、問題が単に長いログだけの場合 |
/clear自体も新しい空の会話を始めます。ここで「別の新規セッション」と呼ぶのは、より明確な境界を作る方法です。別ターミナルや別ウィンドウを使い、必要なら別branchやworktreeを用意し、検証済み事実だけを引き継ぎます。
まず、問題がコンテキストなのか診断不足なのかを見分ける
CSVインポートを修正する例を考えます。amountが空ならvalidation errorを返し、データを書き込んではいけません。Claudeはhandlerを2回変更し、同じファイルを開き直し、最初の実装を再び提案しています。
すぐに/compactや再起動をするのではなく、最も狭いテストを先に実行します。
npm test -- tests/import/empty-amount.test.ts
結果は次のように判断します。
- テストが存在しない、または別の挙動を検証している:最初の問題は仕様や再現手順です。セッションを変えても証拠は増えません。
- 正しい症状を安定して再現し、Claudeも結果を正しく使っている:現在のセッションを続けます。
- テストは安定して失敗するが、Claudeが除外済みの原因を忘れ、範囲を広げ、古い案を繰り返す:コンテキスト劣化を疑います。
圧縮すべき時点を決める公式のToken数やメッセージ数はありません。**コンテキスト使用率60%〜80%**は点検のきっかけにはなりますが、固定ルールではありません。より信頼できる指標は挙動です。Claudeが目的、制約、検証済み事実、次の検証コマンドを正確に説明できるかを確認してください。
/compactを使うべきタイミング
次の条件がすべて満たされるなら、/compactが適しています。
- 同じタスク、同じリポジトリで作業を続けている。
- Claudeが目的と変更可能なファイルを正しく理解している。
- 現在の方向がテストやログで裏付けられており、単なる推測ではない。
- コンテキストの大半を長いログ、build出力、重複diff、中間議論が占めている。
- 絶対に失ってはいけない事実を数文で書ける。
圧縮前に作業ツリーを確認します。
git status --short
git diff
次に/contextを実行し、メッセージ、ツール、MCP定義、CLAUDE.mdのどれがウィンドウを使っているか確認します。巨大な最初のprompt、添付ファイル、ツール定義、長すぎるmemoryファイルが主因なら、/compactで要約できる過去ターンが足りない場合があります。
プロジェクトルートのCLAUDE.mdは/compact後に再読み込みされます。一方、会話内だけで伝えた指示は同じ強さで残るとは限りません。恒久的なルールは短いCLAUDE.mdに置き、今回のタスク固有の事実は圧縮前後で明示的に確認します。
圧縮直後に必ずコンテキストを検証する
/compactの直後にコード編集を再開させないでください。まず次の確認プロンプトを送ります。
今、コンテキストを圧縮しました。ファイルを変更する前に、次の4点に答えてください。
1. 修正対象の正確な症状と、期待する結果は何ですか。
2. すでに試して却下した案は何で、なぜ却下しましたか。
3. 変更してよいファイルはどれで、変更してはいけないものは何ですか。
4. 仮説を検証するため、次に実行するコマンドを1つだけ挙げてください。
現在のコンテキストだけでは判断できない項目があれば、推測せず不足情報を明示してください。
この例では、少なくとも次を答えられる必要があります。
- 空の
amountはvalidation errorになり、データを書き込まない。 Number(value || 0)は空値を正当な0に変換するため却下済み。- 変更範囲はparserと対象テストに限定する。
- 次は狭いテストまたは追跡コマンドであり、インポート全体のリファクタリングではない。
回答が正しければ同じセッションを続けます。曖昧な回答、却下案の再提案、READMEや公開CSV形式まで範囲に含める回答が出たら、要約を信用しないでください。引き継ぎを用意して/clearまたは別の新規セッションに移ります。
/compactを使うべきではない状況
1. タスクが変わった
validation bugの途中で、README更新、deploy設定変更、別APIの問題を追加した場合です。Compactionはそれらをまとめて要約するだけで、タスク境界は作りません。2つ目のタスクは別セッションに分けます。
2. Claudeの中心仮説がすでに誤っている
空値を0として扱い続ける、またはデータ書き込み経路を誤解している場合、問題は会話の長さだけではありません。検証済み事実から始めるクリーンなセッションの方が速いことが多いです。
3. 正確な情報を逐語的に残す必要がある
エラー行、SQL、stack位置、protocol field、security constraintの一部は要約だけに任せられません。必要最小限の断片を引き継ぎメモやローカルファイルに保存します。
4. 1回の入力自体が大きすぎる
最初のpromptに巨大ログ、添付、膨大なツール定義がある場合、圧縮対象となる古い複数ターンがありません。入力を減らし、ファイルパスで参照し、不要なMCP serverを無効にします。
5. 要約を作る空きすら残っていない
ウィンドウが完全に埋まると、/compact自体が失敗することがあります。Escを2回押して数ターン戻り、再実行します。それでも失敗するなら/clearを使います。前のセッションは/resumeで再開できます。
/rewindが/compactより適している場面
問題が直近のターンに集中しているなら、/rewindの方が精密です。/rewindを実行するか、入力欄が空の状態でEscを2回押すとcheckpointメニューが開き、次を選べます。
- コードと会話を同時に復元する。
- 現在のファイルを残して会話だけを戻す。
- 会話を残してコードだけを戻す。
- 選択地点から後ろを要約する。
- 選択地点より前を要約する。
直近3ターンだけが誤っていて、それ以前のコンテキストは正しい場合に有効です。
Checkpointは主にClaudeのファイル編集ツールによる変更を追跡します。Bash、外部プログラム、手動編集、多くのsubagentによる変更は復元されない可能性があります。またGitの代わりではありません。重要な地点ではbranchやcommitを使うか、最低でもgit diffを確認してください。
新しいセッションへ安全に引き継ぐ方法
新しいセッションに全会話を渡す必要はありません。必要なのは検証済み事実、現在のファイル状態、次の1ステップです。
まず確認します。
git status --short
git diff
そのうえで、次のような短い引き継ぎを送ります。
目的:amountが空ならvalidation errorを返し、データを書き込まない。
作業ツリー:最初にgit statusとgit diffを確認し、cleanだと仮定しない。
対象ファイル:parser/amount.ts、tests/import/empty-amount.test.ts
再現コマンド:npm test -- tests/import/empty-amount.test.ts
現在の結果:テストは失敗する。
却下済み案:Number(value || 0)。空値を0に変換してしまうため。
制約:公開CSV形式を変更しない。無関係なmoduleをリファクタリングしない。
未解決点:空値と正当な0をどのlayerで区別するか。
次のステップ:CSV parserからvalidation branchまでvalueを追跡し、検証可能な仮説を1つだけ提示する。
編集前に、目的、制約、却下済み案、次の検証コマンドを復唱してください。
API Key、Cookie、.envの内容、個人情報、生のログ全文は引き継ぎに含めないでください。エラー行が必要なら、最小限の断片とローカルログのパスだけを残します。
1分で決める判断フロー
- まず再現する。 症状を証明する最小のテストまたはコマンドを実行する。
- セッションはまだ正確か。 Claudeが目的、制約、直近結果を覚えているなら続行する。
- 問題は主にノイズか。 同じタスク、正しい方向、ログ過多なら
/compactを使う。 - 直近ターンだけが悪いか。 部分的な復元や要約には
/rewindを使う。 - タスク変更または理解劣化があるか。 引き継ぎ付きで
/clearか別の新規セッションへ移る。 - 編集前に検証する。 Claudeに事実を復唱させてから変更を許可する。
よくある質問
Claude Codeの/compactは具体的に何をしますか?
古い複数ターンを短いコンテキスト表現に要約し、同じセッションを続けるための空きを作ります。コマンド自体はプロジェクトファイルを変更しません。
/compactは元のチャットやコードを削除しますか?
目的はアクティブコンテキストの圧縮であり、コードの削除ではありません。セッションの履歴は保持されますが、その後の応答は主に要約と現在の内容に依存するため、重要な詳細は明示的に確認してください。
/compactと新規セッションはどう使い分けますか?
タスクと方向が正しく、蓄積したログや中間出力だけが問題なら/compactを使います。タスクが混ざった、却下案が戻る、重要制約を失った、設計理解が誤っている場合は新しく始めます。
Claude WebのCompactとは何ですか?
長いチャットがコンテキスト上限に近づくと、Claude Webが古いメッセージを自動要約する仕組みです。Claude Codeの/compactコマンドとは異なり、通常は手動実行しません。自動コンテキスト管理にはコード実行が有効であることが必要です。
/clearと新しいターミナルを開く違いは何ですか?
/clearは現在のClaude Codeプロセス内で空の会話を始め、前のセッションは/resumeで再開できます。別ターミナルや別ウィンドウは、タスク分離、並行作業、別branchやworktreeとの組み合わせに向いています。