はじめに
Claude Code を使い始めると、最初のうちは驚くほど的確な応答が返ってきます。しかし、同じセッションで長時間作業を続けていると、こんな経験はないでしょうか。
- さっき決めた方針と矛盾する実装を始める
- 以前修正したバグと同じミスを繰り返す
- 途中の指示を忘れて、話の辻褄が合わなくなる
これは 「コンテキスト腐敗(Context Rot)」 と呼ばれる現象です。Claude Code の能力不足ではなく、コンテキストウィンドウの特性を理解していないことが原因で起こります。本記事では、この問題の仕組みと実践的な対策を解説します。
コンテキストウィンドウとは
コンテキストウィンドウとは、LLM が一度に処理できるトークン数の上限のことです。人間で言えば「短期記憶」にあたります。Claude Code では約 200,000 トークンが使えます。
「200,000 トークンもあれば十分では?」と思うかもしれません。しかし、このウィンドウの中には以下のすべてが詰め込まれています。
- システムプロンプト・ツール定義
- CLAUDE.md の内容
- 会話履歴(ユーザーの指示と Claude の応答)
- 読み込んだファイルの内容
- ツール実行の結果(コマンド出力など)
- 拡張思考(Extended Thinking)のトークン
ファイルを 10 本読み込んだだけで 15,000 トークン以上消費することもあります。大規模なコードベースで調査・修正・テストを繰り返すと、あっという間にウィンドウが埋まっていきます。
コンテキスト腐敗はなぜ起きるのか
コンテキストウィンドウの使用率が上限(デフォルトでは 95%)に近づくと、Claude Code は古い情報を自動的に圧縮して空き領域を確保します。この圧縮によって、重要な情報の一部が失われることがあります。
つまり、「さっき合意した設計方針」が圧縮で消えると、Claude Code はその方針を認識できなくなります。これがコンテキスト腐敗の正体です。
対策 1: /context で使用状況を監視する
対策の第一歩は、現状を把握することです。Claude Code のセッション中に /context コマンドを実行すると、コンテキストウィンドウの使用率を確認できます。
目安として、50% を超えたら以降の対策の適用を検討してください。
対策 2: CLAUDE.md に方針を集約する
CLAUDE.md の内容は圧縮されません。つまり、プロジェクトの方針や重要な意思決定を CLAUDE.md に書いておけば、セッションが長引いても Claude Code はそれを忘れません。
ただし、CLAUDE.md 自体もコンテキストウィンドウを消費します。300 行以内に収めるのが目安です。詳細なドキュメントは別ファイルに分離し、必要な時にだけ参照させる構成が効果的です。
プロジェクトルート/
├── CLAUDE.md ← 概要・ルール(300行以内)
└── tasks/
├── todo.md ← 現在のタスク一覧
└── lessons.md ← 過去の失敗と学び
CLAUDE.md にはファイルパスだけを記載しておき、Claude Code が必要な時に読み込む方式にすると、コンテキストを節約できます。
# CLAUDE.md の記載例
## プロジェクト概要
TypeScript + Next.js のWebアプリケーション
## 技術スタック
- Runtime: Node.js 22
- Framework: Next.js 15 (App Router)
- Package Manager: bun(npm/yarn 禁止)
## 作業管理
- 現在のタスク → tasks/todo.md を参照
- 過去の教訓 → tasks/lessons.md を参照
対策 3: サブエージェントに調査を委任する
最も効果的な対策の一つが、サブエージェントへの調査タスクの委任です。
サブエージェントは独立したコンテキストウィンドウを持ちます。大量のファイルを読み込んで調査しても、メインセッションには要約結果だけが返されるため、コンテキストの消費を大幅に抑えられます。
CLAUDE.md に以下のルールを追加すると、Claude Code が自動的にサブエージェントを活用してくれます。
## コンテキスト管理ルール
- 3ファイル以上の調査が必要な場合はサブエージェントに委任する
- 調査結果は要約してメインセッションに報告する
対策 4: コンパクション閾値を引き下げる
デフォルトの 95% では、圧縮が始まる前にすでにパフォーマンスが低下していることがあります。環境変数でこの閾値を引き下げると、早めに圧縮を実行できます。
# 50% の時点で圧縮を実行する設定
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50
常に新鮮なコンテキストで作業を続けられるようになりますが、圧縮が頻繁に走ることで古い情報が失われやすくなります。重要な決定事項は CLAUDE.md に記録しておくのがポイントです。
対策 5: タスクの区切りで /clear する
大きなタスクが完了したタイミングで /clear コマンドを使い、会話履歴をクリアするのも有効です。
ただし /clear はすべての会話履歴を消去するため、直前の文脈も失われます。次のタスクに必要な情報は、CLAUDE.md やタスクファイルに書き出してから実行してください。
実践ワークフロー
これらの対策を組み合わせた、大規模タスクでの推奨ワークフローをまとめます。
まとめ
Claude Code で長時間作業しても品質を維持するための対策を整理します。
| 対策 | 効果 | タイミング |
|---|---|---|
/context で監視 |
問題の早期発見 | 定期的に |
| CLAUDE.md に方針を集約 | 重要情報の永続化 | タスク開始時 |
| サブエージェント委任 | コンテキスト節約 | 大規模な調査時 |
| コンパクション閾値の調整 | 早期の自動最適化 | 環境変数で常時設定 |
/clear でリセット |
クリーンな再出発 | タスクの区切り |
コンテキスト管理は地味な作業ですが、Claude Code を安定して活用し続けるための基盤です。まずは /context で現在の使用率を確認するところから始めてみてください。