はじめに / 対象と前提
対象読者:Claude Codeを長時間(1セッション30分〜数時間)使う人。大きめのリファクタや複数ファイルにまたがる調査タスクで「さっき読んだファイルの内容をClaudeが忘れる」「途中から的外れな回答が返ってくる」経験がある人向け。
前提環境:Claude Code CLI(2026年7月時点の安定版)。コンテキストウィンドウの仕組みに依存する現象のためOS非依存。
TL;DR
- Claude Codeはコンテキストウィンドウが埋まると、古いメッセージを要約して圧縮する「Auto-Compact」が走る
- 圧縮後はツールの実行結果(ファイル内容やgrep結果)が要約されて詳細が失われることがある
- 「圧縮されても壊れない」タスク設計(状態をファイルに逃がす・サブエージェントに切り出す)で事故が減る
手順 / 動かし方
1. 圧縮が起きているか確認する
セッションが長くなってきたら、コンテキスト使用量の表示を見る。8〜9割を超えたあたりからAuto-Compactが発動しやすい。
/context
2. 圧縮タイミングを自分でコントロールする
Auto-Compact任せにすると、ツール呼び出しの途中などキリの悪いタイミングで圧縮が挟まる。区切りの良いところで自分から打っておくと要約が安定しやすい。
/compact
3. 「状態」を会話に頼らずファイルに逃がす
進捗や調査結果をClaudeの記憶(会話履歴)だけに頼らず、Markdownファイルに書き出す。
<!-- progress.md -->
## 調査済みファイル
- src/api/user.ts: 認証ロジックあり、要リファクタ箇所はL45-80
- src/api/order.ts: 未調査
## 次にやること
- order.tsのN+1クエリを確認する
圧縮後に progress.md をReadし直せば、要約で失われた詳細を復元できる。
4. 大きな調査はサブエージェントに切り出す
独立した調査(ファイル探索・grepなど)はサブエージェントに投げ、戻ってきた要約だけを親セッションで持つ。親セッションのコンテキスト消費が減り、圧縮の頻度自体を下げられる。
ハマりどころ
1. 圧縮後、Claudeが「読んだはずのファイル」の中身を微妙に誤る
症状:圧縮前にReadした長いファイルについて、圧縮後は行番号やコードの細部を間違えて答える。
原因:Auto-Compactはツール結果も要約するため、具体的な変数名や行番号が丸められる。
回避策:重要なファイルは圧縮後に再度Readさせる。「さっき見た〇〇をもう一度読んで」と明示的に頼むのが確実。
2. /compact 直後にtool_useとtool_resultの対応が崩れてAPIエラーになる
症状:/compact 直後、まれにtool_use idに対応するtool_resultが見つからない、という趣旨のエラーで応答が止まる。
原因:圧縮のタイミングがツール呼び出しと結果の間に割り込むと、要約後の履歴でペアが崩れる。
回避策:ツール呼び出しの結果待ちの最中に打たない。エラーが出たら /clear して再開するか、直前の指示を出し直す。
3. サブエージェントの結果は親に「要約」でしか残らない
症状:サブエージェントに詳細な調査をさせたのに、戻ってきた情報が思ったより粗い。
原因:サブエージェントの実行過程(何をgrepしたか)は親のコンテキストに入らず、最終的な返答だけが残る仕様のため。
回避策:「該当箇所のファイルパスと行番号を必ず含めて返して」など返す内容を指示で明示する。粗ければ親セッション側で該当ファイルを直接Readし直す。
背景・補足
コンテキストウィンドウは有限で、会話が長くなるほど古い情報の保持コストが増える。Auto-Compactは「動かなくなるよりはマシ」という設計判断であり、要約による情報のロスはトレードオフとして受け入れる必要がある。圧縮に強いタスク設計をしておくこと自体が、長時間の作業を安定させる実践的なテクニックになる。
まとめ
- Claude CodeのAuto-Compactは長時間セッションで避けられない挙動
- 圧縮後はツール結果の細部が失われることがあるので、重要な情報は都度ファイルに書き出す
-
/compactはキリの良いタイミングで自分から打つ、ツール呼び出し中は避ける - 独立した調査はサブエージェントに切り出し、親セッションのコンテキスト消費自体を減らす
- これらを徹底すると、数時間かかるリファクタ作業でも「途中から様子がおかしい」を防ぎやすい