【ITニュース解説】Claude Code Compaction: Why Your Session Forgets Mid-Task (and the Fix)
2026年09月25日に「Dev.to」が公開したITニュース「Claude Code Compaction: Why Your Session Forgets Mid-Task (and the Fix)」について初心者にもわかりやすく解説しています。
ITニュース概要
Claude Codeで長時間の作業をすると、会話履歴が要約され、以前の細かい決定が失われる「コンパクション」が起こる。これにより、Claudeが以前の指示を忘れる問題が発生。ContextForge 0.12.0は、コンパクション後に重要な決定を自動で再読み込みするフック機能で、この問題を解決する。
ITニュース解説
Claude CodeなどのAIプログラミングアシスタントは、ソフトウェア開発の現場で非常に便利なツールだ。しかし、これらAIツールには「コンテキストウィンドウ」という、一度に処理できる情報量に限りがあるという重要な特徴がある。システムエンジニアを目指す上で、このコンテキストウィンドウの概念と、それが作業にどう影響するかを理解することは不可欠だ。
コンテキストウィンドウとは、AIが会話の流れや与えられたコード、指示などを記憶し、それに基づいて次の応答を生成するために使う「作業記憶領域」のようなものだ。AIは、このウィンドウ内の情報だけを使って思考し、行動する。プログラミングの作業を続けていると、ファイルの読み込み、ツールの実行結果、開発者とのやり取りなど、様々な情報がこのコンテキストウィンドウにどんどん蓄積されていく。
セッションが長くなり、AIのコンテキストウィンドウがいっぱいになりそうになると、「コンパクション」という処理が自動的に、または開発者の指示によって行われる。コンパクションは、それまでの会話全体を要約し、元の詳細なメッセージを捨てて、その要約とまだ処理されていない最新のメッセージだけをコンテキストウィンドウに残すことで、新たな情報を受け入れるスペースを確保する仕組みだ。これは一見するとスムーズな継続のように見える。AIのステータス表示が「Compacted」となっても、会話は続き、AIはあたかも全ての情報を覚えているかのように振る舞うため、問題が起きているとは気づきにくい。
しかし、このコンパクション処理には落とし穴がある。要約は会話の「肝心な部分」や「一般的な方向性」はうまく残す傾向がある一方で、「なぜこの設計にしたのか」「この機能を削除したのは特定の理由があったからだ」といった具体的な決定事項やその背景にある詳細な理由が失われがちだ。たとえば、「リトライロジックをリファクタリングしている」というタスクの概要は残っても、「リトライロジックはクライアント側に入れるべきで、ハンドラー側ではない。また、Redisレイヤーはパフォーマンスに40ミリ秒のオーバーヘッドを与えたため削除した」といった具体的な判断とその理由は、要約される過程で消えてしまうことが多い。その結果、数時間前にわざわざ削除したはずのキャッシュレイヤーを、AIが再び提案してくるような現象が起こる。
コンパクションで何が失われたかをユーザーが直接知ることは難しい。コンパクションがいつ発生したかによって、要約された部分とそのまま残った最新のメッセージの境目が毎回変わるため、前回と同じコンテキストが得られるとは限らないのだ。セッションの内部から見ても、情報が切り捨てられた明確な兆候は見当たらない。要約された内容は、AIにとっては完全な情報として認識される。
具体的にコンパクションでどうなるかというと、タスクの大まかな内容は要約として維持されるが、その中で下された具体的な決定事項とその理由はほとんどの場合失われる。ツールからの出力や、議論したファイルの具体的な内容も、通常はコンテキストから消えてしまう。しかし、会話の外に保存された情報はコンパクションの影響を受けない。この「会話の外に保存する」という点が、この問題への対応策の鍵となる。
この問題の解決策として、「ContextForge」というツールが提供する「フックシステム」を利用する方法がある。Claude Codeには、特定のイベントが発生したときに自動でコマンドを実行できるフックシステムが備わっている。特に「SessionStart」イベントに「compact」という条件を組み合わせることで、コンパクション処理が完了した直後に任意のコマンドを自動実行できる。
ContextForge MCPの特定のバージョンでは、このフックを利用して、コンパクション後に自動的に「recall」というサブコマンドを実行する仕組みが導入された。このコマンドは、現在作業しているプロジェクトに関連付けられた最近の記憶(具体的な決定事項や次にやるべきタスクなど)を最大で10個、そして保留中のタスクを最大5個読み込み、それらをプレーンテキストとしてClaude Codeのコンテキストに再注入する。これにより、Claudeから見れば、コンパクションで失われたはずの重要な決定事項が再びコンテキストに追加され、まるで最初から存在し続けていたかのように認識される。
この仕組みを導入するには、まずContextForge MCPサーバーをインストールし、次にプロジェクトフォルダー内で「npx contextforge-mcp init」というコマンドを実行するだけだ。このコマンドは、プロジェクトのメモリ管理に関する設定をCLAUDE.mdファイルに書き込み、さらにClaude Codeのフック設定に上記の自動実行コマンドを追加する。設定後、実際にセッション内で「/compact」を実行し、「どのようなコンテキストを受け取ったか?」とClaudeに質問することで、ContextForgeが復元したコンテキストが正しくAIに渡されているかを確認できる。
ただし、この解決策にもいくつかの限界がある。まず、保存されていなかった決定事項は復元できない。開発者が意識的にAIに重要な決定を保存するよう指示する習慣がなければ、フックがあっても失われた情報は戻らない。また、このフックシステムはClaude Codeに特化したものであり、CursorやCopilotといった他のAIアシスタントでは自動再注入機能は利用できない。さらに、プロジェクトがContextForgeに正しくリンクされている必要がある。
コンパクションは、AIが長時間のセッションを効率的に維持するための自然なメカニズムであり、バグではない。この問題の本質は、会話の履歴すべてを保存しようとすることではなく、その中で下された「決定事項」こそが真に価値のある情報であるという点にある。重要な決定事項を会話の外部に保存し、コンパクションが発生した適切なタイミングでそれをAIに再提示することで、AIが重要な情報を忘れてしまう問題を回避し、よりスムーズで効果的な開発作業を継続できるようになるのだ。