コンパクションって何?
Claude Codeを使っていると、長く作業を続けたときに「会話を要約しています」といった動きが入ることがあります。これがコンパクション(Compaction)です。
Claudeが一度に覚えていられる会話の量には上限があります。この「一度に持てる記憶の枠」をコンテキストウィンドウと呼びます。作業が長引いてこの枠が埋まりそうになると、Claude Codeは会話の内容を自動的に整理・要約して、枠に空きを作ってから作業を続けます。これがコンパクションのざっくりした正体です。
ホワイトボードに例えると
作業机の横に、そこそこ大きいホワイトボードが1枚あると想像してください。打ち合わせをしながら、決まったこと・調べたこと・エラーの内容を、どんどんそこに書いていきます。
最初は余裕があります。でも書き続ければいつか埋まる。そのとき人間はどうするかというと、いきなり全部消したりはしませんよね。まず「もう見なくていい調べ物のメモ」から消す。それでも足りなければ、残りを「結局こういう方針で、ここまで終わってる」という短い箇条書きに書き直して、スペースを空ける。
コンパクションもだいたい同じ手順で動きます。最初に古いツール出力(ファイルを読んだ結果やコマンドの実行結果など、かさばるけど役目を終えたもの)をクリアします。それでもまだ足りないときに、会話そのものを要約します。
何が残って、何が消えるのか
ここが一番大事なところです。コンパクションが起きても消えないものと、消える可能性があるものがあります。
| 種類 | コンパクション後 |
|---|---|
| プロジェクトルートのCLAUDE.md | 生き残る(ディスクから再読み込みされる) |
| auto memory | 生き残る(ディスクから再読み込みされる) |
| 会話の中だけで伝えた指示 | 失われる可能性がある |
CLAUDE.mdやauto memoryはファイルとしてディスクに保存されているので、要約で会話が圧縮されても、あらためて読み直されます。一方で、チャットの途中で口頭ベースに「このプロジェクトではセミコロンなしで書いて」と伝えただけの指示は、要約の過程で抜け落ちることがあります。
長い作業をしていて、途中から急にClaudeが約束を守らなくなった気がする——そういうときは、たいていコンパクションが挟まっています。「さっき言ったのに」とイラッとする前に、その指示がどこに書いてあるかを思い出してみてください。会話の中だけなら、消えていて当然なんです。
対策はシンプル
守ってほしいルールは、会話で言うのではなくCLAUDE.mdに書く。これに尽きます。コーディング規約、使ってほしいライブラリ、触ってはいけないディレクトリ。こういう「今後ずっと有効であってほしい情報」はファイルに置いておけば、コンパクションを何度またいでも効き続けます。
逆に、「この関数だけリファクタして」のような一回きりの指示は会話で伝えて構いません。消えても困らないからです。
手動でも実行できる
/compact コマンドを使えば、自分のタイミングでコンパクションを走らせられます。
/compact
自動でかかるのを待つのではなく、区切りのいいところで自分から圧縮しておくという使い方ができます。たとえば、大きな調査タスクが一段落して「ここから別の作業に移る」というタイミング。調査中に読み込んだ大量のファイル内容はもう不要なので、先に整理しておけば、次の作業に使える余裕が増えます。
覚えておきたいこと
コンパクションは、会話を強制終了させないための仕組みです。上限に達したら止まるのではなく、要約して続きをやってくれる。ありがたい機能ではあるのですが、要約である以上、細かいニュアンスは削られます。
だから「Claudeは全部覚えているはず」という前提で長時間作業するのは、少し危うい。重要なことはファイルに書く、区切りで /compact を挟む。この2つを意識しておくと、長丁場のセッションでも挙動がブレにくくなります。
このページは役に立ちましたか?