Claude Code のソースコードから、会話が長くなったときのコンテキスト圧縮方法が5種類あることが明らかになった。コンテキストウィンドウの管理は AI コーディングエージェントにおける中心課題であり、Anthropic のエンジニアがかなりの時間をかけて取り組んでいる領域だ。
5つの圧縮戦略
1. Microcompact — 古いツール結果の時間ベース消去
時間経過に応じて古いツール実行結果(ファイル読み取り、grep 結果、bash 出力など)を自動的に消去する戦略。API 呼び出しを発生させず、キャッシュされたコンテンツをローカルで直接編集する軽量な処理だ。
ツール結果は会話中で最も大きなトークンを占めるが、時間が経つにつれて重要度は下がる。この戦略により、最新のやり取りに集中しつつトークン消費を抑えられる。
2. Context Collapse — 会話の部分要約
会話の特定の範囲を要約で置き換える戦略。長い対話セクションを圧縮された要約に変換し、セマンティックな意味を保持しながらトークン消費を削減する。
全体を要約するのではなく「部分的に」要約するため、直近の文脈はそのまま保持される点がポイントだ。
3. Session Memory — 重要な文脈のファイル抽出
重要な情報を別ファイルに永続化する戦略。完了した作業、進行中の作業、関連ファイル、次のステップなどの重要な詳細を抽出し、会話の全履歴をアクティブメモリに保持せずに参照できるようにする。
Claude Code の /compact コマンドを手動で実行した際にも、この仕組みが活用される。要約には以下の情報が保持される:
- 何が完了したか
- 現在進行中の作業
- 関連するファイル
- 次のステップ
- ユーザーの重要なリクエストや制約
4. Full Compact — 履歴全体の要約
会話履歴全体を包括的に要約する戦略。コンテキストウィンドウが限界に近づき、大量の対話が蓄積された場合に有用だ。
自動圧縮(auto-compact)は、コンテキストウィンドウに対して約33,000トークンのバッファを残すタイミングで発動する。200Kトークンのウィンドウであれば、約167Kトークンを使用した時点がトリガーとなる。
連続する自動圧縮の失敗が3回を超えると、そのセッションでの圧縮は無効化される(MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3)。この定数は autoCompact.ts に定義されており、かつて1,279セッションで50回以上の連続失敗(最大3,272回)が発生し、日あたり約250,000回のAPI呼び出しが無駄になっていた問題を解決するために導入された。
5. PTL Truncation(Past Turn Limiting) — 古いメッセージ群の切り捨て
トークン圧力が臨界に達した際に、最も古いメッセージ群を切り落とす戦略。最近の文脈を優先し、過去のやり取りを犠牲にする最終手段だ。
コンテキスト圧力のカスケード
これらの5つの戦略に加え、ツール結果の割り当て制御(バジェッティング)がカスケードの最初の段階として存在する。各戦略は個別に動作するのではなく、軽量な処理から順に段階的なカスケードとして機能する:
ツール結果バジェッティング → Microcompact → Context Collapse → Full Compact(Auto Compact)→ PTL Truncation
軽量な処理から順に適用され、それぞれの段階で何を保持し何を破棄するかの基準が異なる。
実用的なポイント
プロアクティブな圧縮が重要
自動圧縮を待つのではなく、/compact コマンドをタスクの区切りで手動実行することが推奨される。自動圧縮はタスク実行中に発動すると、重要な文脈が失われる可能性がある。
コンテキストを守るための工夫
- CLAUDE.md に永続的なルールを記載する: 圧縮されても毎回読み込まれるため、重要な指示は CLAUDE.md に書く
/clearでリセットする: 異なるタスク間では/clearで会話をリセットし、不要な文脈を持ち越さない- サブエージェントを活用する: 大きな出力を返すタスクはサブエージェントに委任し、メインのコンテキストウィンドウを保護する
CLAUDE.md に書くべき内容の具体例
CLAUDE.md はコンテキストが圧縮されても毎回ディスクから再読み込みされる。つまり、圧縮で失われたくない情報の置き場所として最適だ。以下に具体的な記載パターンを示す。
コンパクト時の保持指示(Compact Instructions):
| |
Compact Instructions セクションを CLAUDE.md に設けると、/compact 実行時や auto-compact 発動時に要約へ含める情報を指定できる。
プロジェクト固有のルール:
| |
会話が長くなると「最初に伝えたルール」は圧縮で薄まりやすい。CLAUDE.md に書いておけば、圧縮後も一貫したコーディング規約が適用される。
やってはいけないこと(NG 事項):
| |
禁止事項は特に圧縮で失われると危険だ。CLAUDE.md に明示しておくことで、長時間セッションでも安全性を維持できる。
プロンプトキャッシュとの関係
コンテキスト管理はコスト最適化とも密接に関連している。Claude Code のソースコードには14種類のキャッシュブレイク要因を追跡する仕組み(promptCacheBreakDetection.ts)があり、キャッシュ無効化を防ぐための「sticky latch」も実装されている。トークン課金の環境では、キャッシュの無効化は有名な格言 “There are only two hard things in CS: cache invalidation and naming things” のジョークでは済まず、実際の会計上の問題になる。
まとめ
コンテキストあふれは AI コーディングエージェントにとって周辺的な問題ではなく、エンジニアがかなりの時間をかけて対処している中心課題だ。5つの圧縮戦略の存在は、単純な「要約して圧縮」では解決できない複雑さを物語っている。
ユーザーとしては、/compact の手動実行や CLAUDE.md の活用など、コンテキスト管理を意識した使い方をすることで、より安定した開発体験を得られるだろう。