Claude Codeで長く作業していると、画面に「コンテキストが埋まりつつある」という趣旨の警告が出たり、少し前に決めたはずのルールを忘れたような返答が返ってきたりすることがあります。結論から言うと、これは会話の履歴がコンテキストウィンドウを圧迫しているサインで、/compactで会話を要約して空きを作れば、同じセッションのまま作業を続けられます。ただし、圧縮後に何が残り何が消えるのかを知らないまま使うと、「早い段階で渡した細かい指示だけが抜け落ちる」という事態になりがちです。
この記事では、Anthropic公式ドキュメントの記載にもとづいて、/compactの使い方、自動圧縮の挙動、圧縮後に残るもの、消えては困るルールの置き場所、圧縮の開始時点を変える設定、圧縮が止まったときの対処までを順番に整理します。Claude Code自体の基本操作がまだの方は、先にClaude Codeの入門ガイドで全体像をつかんでから読むと、セッションやコンテキストという言葉の意味が追いやすくなります。
仮の例として、決済まわりのリファクタリングを長いセッションで進めていて、テスト実行の出力や大きなファイルの読み込みで会話が重くなったとします。この記事では、この仮の例を軸に「どのタイミングで何を実行し、何を設定に残すか」を具体的に見ていきます。
/compactとは|会話を要約してコンテキストを空ける仕組み
【完全無料】AI×SNSで成果を出す100大特典を受け取る
AIの使い方を、SNS運用の実務につなげたい方へ。LINEで特典の案内を受け取れます。
/compactは、ここまでの会話を要約に置き換えてコンテキストウィンドウの空きを増やす組み込みコマンドで、要約の焦点を指示文として渡すこともできます。
公式のコマンド一覧では、/compact [instructions]は「会話をここまで要約して空きを作る」コマンドとして説明されており、要約の焦点を指示として任意で渡せるとされています(Commands)。同じ一覧には/clearも載っていて、こちらは空のコンテキストで新しい会話を始めるコマンドです。同じ会話を続けたまま空きを作りたいときは/clearではなく/compactを使う、という整理が公式の記述にもそのまま書かれています。
要約に置き換えられた会話は、完全に消えるわけではありません。公式のチェックポイントのページには、要約しても元のメッセージはセッションの記録に残り、Claudeは細部を参照できると書かれています(Checkpointing)。ただし、要約された部分の細かいコードや出力は、通常の会話のようにはそのままコンテキストへ載りません。
仮の例として、決済まわりの作業が長引いて、テスト実行のログが何十回も会話に積み上がったとします。ここで/compactを実行すると、積み上がったログは構造化された要約に置き換わり、ウィンドウの空きが戻ります。作業そのものは同じセッションで継続でき、「最初からやり直し」にはなりません。
コンテキストウィンドウに入るものと埋まる理由
コンテキストウィンドウとは、Claudeがセッション中に参照できる情報の全体で、会話履歴・読み込んだファイル・コマンド出力・CLAUDE.md・自動メモリ・読み込み済みのスキル・システム指示がすべて入ります。
公式の「How Claude Code works」には、コンテキストウィンドウに入るものとして、会話履歴、ファイルの内容、コマンドの出力、CLAUDE.md、自動メモリ、読み込まれたスキル、システム指示が挙げられています(How Claude Code works)。作業が進むほど埋まっていくこと、自動で圧縮されること、ただし会話の初期に出した指示は失われることがある点も、同じ箇所に書かれています。
埋まる原因は、自分の発言よりも、Claudeが読んだものであることが多くなります。大きなファイルを読めばその内容がそのまま入りますし、テストやビルドの長い出力も積み上がります。公式の説明では、セッション開始時にも、システム指示、自動メモリ、環境情報、MCPツールの名前一覧、スキルの説明、CLAUDE.mdなどが先に読み込まれるため、最初のプロンプトを送る前の時点でも一定量が使われています(Explore the context window)。
仮の例として、あなたが短い質問を数回送っただけでも、Claudeが裏で複数のファイルを読んでいれば、ウィンドウの大半はあなたの言葉ではなく読み込まれたコードで占められます。何が場所を取っているかは/contextで確認でき、コンテキスト使用量を色付きのグリッドで見せ、重いツールやメモリの肥大化に対する改善提案も表示するとされています。
/compact・/clear・/contextの違いを表で整理する
/compactは同じ会話を続けたまま要約で空きを作り、/clearは空の会話で新規に始め、/contextは今の使用状況を見るだけで内容を変えないという点が、3つのコマンドの違いです。
名前が似ていて混同されやすいので、公式のコマンド一覧の記述に沿って役割を並べます(Commands)。
| コマンド | 会話への影響 | 向く場面 |
|---|---|---|
/compact [instructions] |
会話を要約に置き換え、同じ会話を続ける。焦点を指示で渡せる | 同じ作業を続けたいが、ウィンドウが重くなってきた |
/clear [name] |
空のコンテキストで新しい会話を始める。名前を渡すと前の会話に目印を付けられる。別名は/resetと/new |
無関係な別作業に切り替える |
/context [all] |
使用状況を色付きグリッドで表示するだけで、会話は変えない | 何が場所を取っているかを確認したい |
/resume [session] |
以前の会話を呼び戻す。/clearで閉じた会話も戻せる |
切り替えたあとで元の作業に戻りたい |
表のとおり、判断の軸は「同じ作業の続きか、別の作業か」です。同じ作業の続きなら/compact、別の作業なら/clearが基本になります。公式のコスト管理のページも、無関係な作業に移るときは/clearで仕切り直すこと、/clearの前に/renameで名前を付けておけば/resumeで探しやすいことを案内しています(Manage costs effectively)。
仮の例として、決済まわりの作業を続けながら途中でログイン画面の文言を直したくなった場合、文言修正は別件なので/clearで仕切り直し、決済に戻るときは/resumeで呼び戻す、という運用が公式の整理に沿います。セッションの再開や分岐の仕方は、セッションを再開する操作の解説で詳しく扱っています。
/compactの基本の使い方と焦点指示の書き方
/compactは引数なしでも実行でき、要約に残したい内容を指示文で添えると、自動判断に任せるよりも目的に沿った要約になります。
基本形は/compactだけを入力する使い方です。公式のコスト管理のページには、焦点を指示する例として/compact Focus on code samples and API usageが載っています(Manage costs effectively)。コンテキストウィンドウのページにも、長い新しい作業に入る前に、たとえば「認証のバグ修正に集中して」という趣旨の指示を付けて圧縮すれば、自動の判断が重要だと推測するものではなく、自分で選んだ内容が要約に残る、と説明されています(Explore the context window)。
指示文は、残したい対象を具体的な名詞で書くのがコツです。「重要なところを残して」のような曖昧な書き方では、自動判断との差が出にくくなります。仮の例として、決済のリファクタリング中に使える指示文を、場面別に並べます。
/compact テストの失敗内容と、変更したファイルの一覧を優先して残す
/compact 決済モジュールの設計判断と未解決の課題だけを残す
/compact これまでの調査ログは捨てて、現在の差分と次にやることだけ残す
これらの指示文は公式に載っている固定の書式ではなく、「/compactに続けて自由な文章で焦点を指示できる」という仕様を使った書き方の仮の例です。なお、会話のターン数が少ないとNot enough messages to compact.と返ることがあり、公式のトラブルシューティングには、大きな貼り付けひとつでウィンドウが埋まっているときにも起こり得ると書かれています(Troubleshooting)。
自動圧縮(auto-compact)はいつ・どう動くのか
自動圧縮とは、コンテキストが上限に近づいたときにClaude Codeが自動で古い内容を整理する仕組みで、まず古いツール出力を消し、それでも足りなければ会話を要約します。
公式の説明では、上限が近づくと、Claude Codeはまず古いツール出力を消し、必要なら会話を要約します。依頼内容や重要なコード断片は保たれる一方で、会話の早い段階にあった細かい指示は失われることがある、とされています(How Claude Code works)。つまり自動圧縮は便利ですが、「初期の細かい指示が抜ける」リスクを前提に使う必要があります。
自動圧縮が走るタイミングはモデルと設定で変わります。モデル設定のページによると、1Mトークンのウィンドウを標準で持つモデルは、ウィンドウが埋まる前に、既定でおよそ967Kトークン付近で圧縮するとされています(Model configuration)。この数値はモデルや提供経路で変わり得るため、開始時点をそろえたいときは、次の見出しの設定で明示的に決めるほうが予測しやすくなります。
自動圧縮をオフにする設定もあります。設定リファレンスでは、autoCompactEnabledは自動圧縮のオンオフを切り替える真偽値で、未設定なら自動圧縮は有効とされています(Settings reference)。ただし、オフにすると上限に達したときに自分で/compactか/clearを判断する必要が出るため、特別な理由がなければ既定のままにしておくほうが扱いやすくなります。
圧縮のあとに残るもの・消えるもの
圧縮後は、システム指示・プロジェクトルートのCLAUDE.md・自動メモリは読み直されて残りますが、会話の中で一度だけ伝えた指示や、フックが過去に追加した文脈は要約に混ざって薄まります。
公式のコンテキストウィンドウのページは、圧縮後の扱いを仕組みごとに一覧にしています(What survives compaction)。内容を、実務での意味づけとあわせて表にまとめます。
| 仕組み | 圧縮後の扱い(公式の記載) | 実務での意味 |
|---|---|---|
| システム指示・出力スタイル | どちらも引き続き適用される | 特に対処は不要 |
| プロジェクトルートのCLAUDE.mdとパス指定のないルール | ディスクから再注入される | 消えては困るルールの置き場所として最適 |
| 自動メモリ | ディスクから再注入される | 学習済みの好みや手順は保たれる |
paths:を持つルール、サブディレクトリのCLAUDE.md |
対象ファイルを読んだときに再び読み込まれる | 圧縮直後は、該当ファイルを読むまで効かない |
| 読んだ・編集したファイル | 最近更新されたものから最大5つ再読込される。5,000トークンを超えるファイルは本文なしのパス参照になる | 大きなファイルは、必要なら読み直す前提にする |
| 呼び出したスキルの本文 | 1スキルあたり5,000トークン、合計25,000トークンの上限で再注入。古いものから落ちる | 重要な指示はSKILL.mdの冒頭に書く |
| フックが過去に追加した文脈 | ほかの会話と一緒に要約される | 毎回効かせたいなら再注入の仕組みを使う |
| SessionStartフック(compactに一致するもの) | 実行され、出力が圧縮後の文脈に加わる | 圧縮のたびに特定の注意書きを戻せる |
この表で特に注意したいのは、パス指定つきのルールとサブディレクトリのCLAUDE.mdです。公式の説明では、これらは対象ファイルを読んだ時点でメッセージ履歴に読み込まれるため、圧縮でほかの会話と一緒に要約されて消えます。圧縮をまたいで効かせたいルールは、paths:のフロントマターを外すか、プロジェクトルートのCLAUDE.mdへ移す、と案内されています。
仮の例として、決済モジュールだけに適用したいルールをpaths:つきのルールファイルに書いていた場合、圧縮の直後に決済ファイルを開くまではそのルールが効いていない状態になり得ます。全体で守らせたい内容なら、ルートのCLAUDE.mdへ書き直したほうが取りこぼしを避けられます。
消えては困るルールの置き場所|CLAUDE.mdとCompact Instructions
圧縮をまたいで守らせたい規則は、会話の中で一度伝えるのではなく、プロジェクトルートのCLAUDE.mdに書いておくのが基本で、圧縮時の要約方針は「Compact Instructions」の節で指定できます。
公式は、永続的なルールは会話履歴に頼らずCLAUDE.mdに置くよう明確に勧めています(How Claude Code works)。さらに、圧縮のときに何を重視して残すかを指定する書き方として、CLAUDE.mdに「Compact Instructions」の節を設ける方法を挙げています。コスト管理のページには、そのCLAUDE.mdの記述例が載っています(Manage costs effectively)。
# Compact instructions
When you are using compact, please focus on test output and code changes
日本語の運用なら、同じ趣旨を日本語で書いても構いません。仮の例として、決済のリファクタリングを扱うプロジェクトでは、次のように圧縮時に優先して残す内容を書いておくと、自動圧縮でも方針が揃いやすくなります。
# Compact instructions
圧縮するときは、テストの失敗内容、変更したファイルの一覧、未解決の課題を優先して残すこと
CLAUDE.md自体の書き方、配置場所、読み込み順は、CLAUDE.mdを整える手順で詳しくまとめています。長くなりすぎたCLAUDE.mdはそれ自体がコンテキストを圧迫するため、公式はコスト管理のページで、CLAUDE.mdは必要最小限にとどめ、特定の手順はスキルへ移すことを案内しています。スキルは呼び出したときだけ読み込まれる仕組みなので、常時の負荷を下げられます。スキルの置き方はスキルを設定して呼び出す方法が参考になります。
SessionStartフックで圧縮のたびに文脈を戻す
SessionStartフックのmatcherにcompactを指定すると、圧縮が起きるたびに任意のコマンドの出力をClaudeの文脈へ再注入できます。
フックの公式ガイドには、圧縮後に重要な文脈を戻すための設定例が「Re-inject context after compaction」として載っています(Automate actions with hooks)。コマンドが標準出力に書いたプレーンテキストは、Claudeの文脈に加えられるとされています。公式の例は、プロジェクト直下の.claude/settings.jsonに次のように書く形です。
{
"hooks": {
"SessionStart": [
{
"matcher": "compact",
"hooks": [
{
"type": "command",
"command": "echo 'Reminder: use Bun, not npm. Run bun test before committing. Current sprint: auth refactor.'"
}
]
}
]
}
}
公式は、echoの部分を任意のコマンドに差し替えられるとも説明していて、直近のコミットを見せるgit log --oneline -5のような動的な出力も使えます。一方で、セッション開始のたびに毎回入れたい内容ならCLAUDE.mdを検討するよう勧めています。つまり、CLAUDE.mdが「いつでも効かせたい恒常ルール」、このフックが「圧縮の直後にだけ戻したい注意書き」という棲み分けです。
仮の例として、決済のリファクタリングで「今は旧APIの呼び出しを新APIへ置き換えている最中」という進行状況を、圧縮のたびに戻したいとします。進行状況は日々変わるため、CLAUDE.mdに固定で書くよりも、フックで現在の状況を出力させるほうが保守しやすくなります。フックの全体像とイベントの種類は、フックの設定とイベントの一覧で解説しています。
/autocompactで圧縮の開始時点を決める
/autocompactは、コンテキストがどこまで埋まったら自動圧縮を始めるかというウィンドウの大きさを設定するコマンドで、Claude Codeのバージョン2.1.221以降で使えます。
公式のコマンド一覧によると、/autocompact [auto|<tokens>]は自動圧縮のウィンドウを設定するコマンドです。500kのようなサイズを渡すか、autoでモデルに合わせた既定へ戻します。引数なしで実行すると、現在のウィンドウを示すダイアログが開きます(Commands)。
設定方法と優先順位は、モデル設定のページに整理されています(Model configuration)。受け付ける値は、200000のような素のトークン数、500kや1Mのようなサフィックスつきの値、そして100から1000の数字(千単位とみなされるので200は200,000)で、有効範囲は100Kから1Mトークンです。
| 設定場所 | 書き方 | 優先順位(高い順) |
|---|---|---|
| 環境変数 | CLAUDE_CODE_AUTO_COMPACT_WINDOWに素のトークン数(例: 200000)を設定 |
最優先(コマンド、フラグ、設定より上) |
| 起動フラグ | claude --autocompact 500k |
その起動に限って保存済みの設定を上書き |
| モデルごとの保存値 | /autocompact 500kでmodelSettingsへ保存 |
同じファイルのautoCompactWindowより優先 |
| 全モデル共通の設定 | 設定ファイルのautoCompactWindowに数値を指定 |
モデルごとの保存値より低い |
| 既定値 | モデルに応じた既定のしきい値 | 最も低い |
環境変数に関する注意点として、環境変数のリファレンスは、500000のような素の整数だけを受け付けるとし、500kと書くと500と読まれて下限の100Kに丸められると説明しています(Environment variables)。スクリプトやクラウド環境で設定するときは、サフィックスを使わないようにします。
設定ファイルの例は次のとおりです。設定リファレンスによると、autoCompactWindowはトークン数の数値で、未設定が既定です(Settings reference)。
{
"autoCompactWindow": 200000
}
早めに圧縮したい場合のための環境変数として、CLAUDE_AUTOCOMPACT_PCT_OVERRIDEもあります。環境変数のリファレンスでは、自動圧縮ウィンドウのうち何パーセントで圧縮を起こすかを1から100で指定し、値を下げれば早く圧縮するが、しきい値を引き上げることはできないと説明されています。仮の例として、コンテキストが大きくなってから応答の質が落ちると感じる場合は、ウィンドウを小さめに決めておくと、重くなる前に整理されます。
一部だけ要約する|/rewindのSummarize
/rewindのSummarizeは、会話の選んだ地点より後ろ、または前だけを要約して、必要な部分を原文のまま残せる、部分的な圧縮の操作です。
全体を要約する/compactに対して、チェックポイントのページには、メニューから選べる二つの要約操作が載っています(Checkpointing)。「Summarize from here」は選んだ地点から後ろを要約し、「Summarize up to here」は選んだ地点より前を要約して、それ以降のメッセージを残します。要約はファイルを変更せず、元のメッセージはセッションの記録に残るとされています。
要約の焦点も指定できます。矢印キーで要約の選択肢を強調表示し、「add context (optional)」と書かれた行に指示を入力してEnterを押すと反映されます。数字キーで選ぶと、指示なしですぐに要約されます。公式のチェックポイントのページは、この動作を「的を絞った/compact」のようなものと表現し、別の方針を試すために元のセッションを残したいときは/branchを使うよう案内しています。
仮の例として、デバッグの試行錯誤が長く続いたものの、最初に渡した設計方針の指示は残したい場合は、デバッグの試行錯誤が始まった地点を選んで「Summarize from here」を使うと、冒頭の指示を保ったまま途中の経過だけを圧縮できます。/rewindのコード巻き戻しなどの全体像は、チェックポイントで巻き戻す手順にまとめています。
圧縮が止まる・使用量が増えるときの対処
自動圧縮がthrashingエラーで止まるのは、圧縮に成功しても巨大なファイルやツール出力が直後にコンテキストを再び満たしてしまうためで、読み方を小さく分ける・サブエージェントへ任せるなどで解消します。
公式のトラブルシューティングには、「Autocompact is thrashing: the context refilled to the limit…」というエラーが紹介されています(Troubleshooting)。自動圧縮は成功したのに、ファイルやツール出力が直後にウィンドウを何度も満たしてしまうため、進展のないループでAPI呼び出しを無駄にしないよう、Claude Codeが再試行を止める、という説明です。復旧の手順は次の順に案内されています。
- 巨大なファイルは全体ではなく、特定の行範囲や関数に絞って読ませる
- 大きな出力を捨てる焦点で
/compactを実行する(公式の例は/compact keep only the plan and the diff) - 大きなファイルを扱う作業はサブエージェントに移して別のコンテキストで動かす
- 以前の会話がもう不要なら
/clearを使う
それでも/clearのあとに再発するなら、/contextでMessagesの行と、そのほかの行の合計を見比べるよう勧められています。Messagesが最大なら新しい会話内の出力が埋めているので上の手順を繰り返し、それ以外の合計が大きいなら、セッション開始時に読み込まれるものが多すぎるため、起動時に載る内容を減らす必要がある、という切り分けです。サブエージェントの設定は、サブエージェントを使い分ける方法が参考になります。
使用量との関係も押さえておきます。公式のコスト管理のページによると、長いセッションで使用量が増える理由のひとつは、リクエストのたびに会話全体が送られることで、一行の質問でも一日中開いたセッションでは全履歴ぶんが使用量に加わります。また、/compact自体も圧縮する会話を読み込むため、大きなコンテキストを圧縮することは大きなリクエストになる、と書かれています(Manage costs effectively)。つまり、巨大になってから慌てて圧縮するより、区切りのよいところで早めに整理するほうが負担は小さくなります。使用量の見方は使用量とコストを確認する方法で詳しく扱っています。
場面別の使い分け手順|段階1から段階4
圧縮の操作は、現状の確認、焦点を決めた圧縮、恒久ルールの退避、仕切り直しの四つの段階に分けて考えると、場面ごとの選択に迷いません。
ここまでの内容を、実際の作業の流れに並べ替えます。仮の例として、決済のリファクタリングを長く続けているセッションを想定します。
| 段階 | やること | 使うもの |
|---|---|---|
| 段階1:現状の確認 | 何がウィンドウを占めているかを見る。重いMCPツールやメモリの肥大化が見つかれば先に整理する | /context |
| 段階2:焦点を決めて圧縮 | 同じ作業を続けるなら、残したい内容を具体的な名詞で指示して要約する。途中の経過だけ消したいときは部分要約を選ぶ | /compactまたは/rewindのSummarize |
| 段階3:恒久ルールの退避 | 圧縮のたびに抜けて困った規則は、会話ではなくCLAUDE.mdへ。圧縮直後にだけ戻したい注意書きはフックへ | CLAUDE.md、SessionStartフック |
| 段階4:仕切り直し | 別件に移るなら/renameで名前を付けてから会話を切り替え、戻るときは呼び戻す |
/clear、/resume |
段階2で迷ったときの目安として、公式のコンテキストウィンドウのページは、長い新規作業に入る前に焦点つきで圧縮することを案内しています。つまり、作業の節目で先回りして/compactを使い、自動圧縮の「推測」に任せきりにしない、という考え方です。作業計画の段階から整理したい場合は、計画を立ててから進める方法とあわせると、会話が散らかりにくくなります。
よくある質問(FAQ)
- Q1. /compactを実行すると、元の会話は完全に消えますか。
- 完全には消えません。公式のチェックポイントのページによると、要約しても元のメッセージはセッションの記録に残り、Claudeは細部を参照できます。ただし、通常の会話のようにそのままコンテキストへ載るわけではないため、細かい出力が必要なら読み直しを依頼します(Checkpointing)。
- Q2. /compactと/clearはどう使い分ければよいですか。
- 同じ作業を続けるなら
/compact、無関係な作業へ移るなら/clearが基本です。公式のコマンド一覧も、同じ会話を続けながら空きを作りたいときは/clearではなく/compactを使うよう案内しています(Commands)。 - Q3. 圧縮のあと、CLAUDE.mdの内容は忘れられますか。
- プロジェクトルートのCLAUDE.mdは、圧縮後にディスクから再注入されると公式に書かれています。一方で、サブディレクトリのCLAUDE.mdや
paths:つきのルールは、対象ファイルを読んだときに再び読み込まれる扱いです(Explore the context window)。 - Q4. 自動圧縮のタイミングは変えられますか。
- 変えられます。
/autocompact、起動フラグ--autocompact、設定のautoCompactWindow、環境変数CLAUDE_CODE_AUTO_COMPACT_WINDOWで指定でき、有効範囲は100Kから1Mトークンです。優先順位は環境変数が最も高くなります(Model configuration)。 - Q5. 「Autocompact is thrashing」と出て先に進めません。どうすればよいですか。
- 巨大なファイルやツール出力が圧縮の直後にウィンドウを再び満たしている状態です。ファイルを行範囲で小分けに読ませる、大きな出力を捨てる焦点で
/compactを実行する、サブエージェントへ移す、不要なら/clearする、の順に試します(Troubleshooting)。 - Q6. 圧縮するたびに同じ注意書きを自動で戻せますか。
- 戻せます。SessionStartフックのmatcherに
compactを指定し、標準出力に注意書きを出力するコマンドを設定すると、圧縮のたびにその内容が文脈へ加えられます(Automate actions with hooks)。
まとめ
Claude Codeの長い作業では、コンテキストが埋まることを前提に、/compactと周辺の仕組みを使い分けるのが現実的です。同じ作業の続きなら焦点を指示した/compact、途中の経過だけ整理したいなら/rewindのSummarize、別件なら/clearが基本の選択になります。
圧縮をまたいで守らせたい規則は、会話ではなくプロジェクトルートのCLAUDE.mdへ置き、圧縮時の要約方針は「Compact Instructions」の節で、圧縮直後にだけ戻したい注意書きはSessionStartフックで補います。開始時点を調整したいときは/autocompactなどの設定を使い、止まったときは公式の復旧手順をたどってください。操作の入口に迷うときは、Claude Codeの全体の使い方ガイドと、ほかの入口である非対話で実行する方法もあわせて確認すると理解が深まります。外部サービスをつなぐ場合は外部サービスを追加する手順も参考になります。
あわせて読みたい・姉妹メディア
