Claude Code コンテキスト管理
コンテキスト管理は、Claude Code を効率的に使用するための核心的なスキルです。
公式ドキュメントは明確に述べています:コンテキストウィンドウは Claude Code にとって最も重要なリソースですコンテキストが満たされるにつれて、モデルの性能は徐々に低下します(コンテキスト衰退、context rot と呼ばれます)——これは Claude Code を使用する際に積極的に対抗すべき核心的な問題です。
この章では、CLAUDE.md 指示ファイル、自動メモリシステム、コンテキストウィンドウ最適化コマンドなどの手段を通じて、Claude を長いセッションやセッションをまたぐ作業で高い効率に保つ方法を詳しく説明します。
コンテキストウィンドウの基本
1、コンテキストウィンドウに含まれるもの
Claude Code のコンテキストウィンドウのサイズは1,000,000 tokens(100万トークン)。これには、Claude が現在のセッションで「見る」すべての内容が含まれます:
| コンテンツの出所 | 読み込みタイミング | トークン使用量 |
|---|---|---|
| システムプロンプト(Claude Code の行動規範) | 各セッションの開始時 | 固定で消費 |
| CLAUDE.md ファイル | 起動時に完全ロード | ファイルサイズによる |
| 自動メモリ(Auto memory) | 起動時に読み込み(先頭200行または25KB) | 上限あり |
| 会話履歴 | 累積的に増加 | セッションが続くにつれて増加 |
| ツール結果(ファイル読み取り、コマンド出力など) | ツール呼び出しのたびに追加 | ログ/大ファイルは消費が非常に速い |
| MCP ツール名、Skills の説明など | 起動時に読み込み | 中程度 |
2、コンテキスト衰退(Context rot)
公式は明確に述べています:コンテキストが満たされるにつれて、LLM の性能は低下します注意力がより多くのトークンに分散され、古くて関連のない内容が現在のタスクに干渉し始めるからです。具体的な症状は次のとおりです:
- Claude が一貫性を失い、以前に合意した決定を忘れる
- 応答が曖昧で大ざっぱになり、詳細が減る
- 同じ質問に対して、すでに回答した内容を繰り返し尋ねる
- 同じセッション内で同じ問題を2回以上訂正する
上記の症状が現れた場合、コンテキストが「汚染」されていることを示しています。この場合は、積極的に使用して/compact 或 /clear処理し、同じセッションで訂正し続けるのではなく。
使用/contextコマンドを使用すると、いつでも現在のコンテキストの詳細な使用量分析を表示できます:
/context
これはカテゴリごと(システムプロンプト、CLAUDE.md、メモリファイル、会話履歴など)にトークン使用量を一覧表示し、最適化の提案を行います。重要なタスクを開始する前に一度確認することをお勧めします。
CLAUDE.md 指示ファイル
CLAUDE.md は、Claude Code において静的指示とプロジェクト規範を記録する中核的なファイルです。各セッションの開始時に、Claude は自動的にそれをコンテキストウィンドウに読み込みます。
1、保存場所と適用範囲
CLAUDE.md は複数の場所をサポートしており、より具体的な場所ほど優先度が高くなります:
| 範囲 | ファイルパス | 適用シナリオ | git にコミットするか |
|---|---|---|---|
| 組織レベル | macOS: /Library/Application Support/ClaudeCode/CLAUDE.mdLinux/WSL: /etc/claude-code/CLAUDE.md |
会社のコーディング標準、コンプライアンス要件 | IT が一元的に管理 |
| プロジェクトレベル | ./CLAUDE.md 或 ./.claude/CLAUDE.md |
プロジェクトのアーキテクチャ、コーディング規範、ワークフロー | はい、チームと共有 |
| ユーザーレベル | ~/.claude/CLAUDE.md |
個人のコーディング好みで、すべてのプロジェクトに適用 | いいえ、個人専用 |
| ローカル限定 | ./CLAUDE.local.md(.gitignore に追加) |
個人のプロジェクト固有設定で、git にコミットしない | いいえ、.gitignore に追加 |
CLAUDE.local.md個人専用設定の公式推奨方法です。サンドボックス URL、ローカルテストアカウント、個人のデバッグ習慣など共有すべきでない内容は、ここではなくCLAUDE.md中。実行/init時に「個人」オプションを選択すると、そのファイルが自動的に追加されます。.gitignore。
2、CLAUDE.md の作成
次のコマンドを実行すると、Claude がプロジェクトを自動的に分析して初期 CLAUDE.md を生成します:
/init
すでに CLAUDE.md が存在する場合は、/init改善を提案し、直接上書きしません。生成後、Claude が自動的に発見できない内容(変更禁止ファイル、特別な制約など)を手動で補足してください。
セッション中に使用することもできます#ショートカットキーで CLAUDE.md にメモをすばやく追加できます:
# 所有 API 错误响应必须使用 { code, message } 格式
押した#後、内容を入力して Enter キーを押すと、Claude はそれを対応するレベルの CLAUDE.md に書き込み、永続的な指示として保存します。
3、CLAUDE.md の内容要件
公式は各 CLAUDE.md ファイルを200行以内に収めることを要求しています。。ファイルが大きいほど、起動時のトークン消費が多くなり、Claude の遵守率は逆に低くなります。以下は内容の提案です:
書くべき内容:
- ビルド、テスト、デプロイの一般的なコマンド
- コード規範:命名規則、インデント、使用禁止パターン
- 重要な制約:「常に pnpm を使用」「migrations/ ディレクトリの変更禁止」
- プロジェクトアーキテクチャの説明:主要ディレクトリの用途
書くべきでない内容:
- 複数ステップの操作手順(Skills ファイルに配置すべき)
- コードベースの一部にのみ関連するルール(使用すべきは
.claude/rules/パスによる限定) - Claude がコードを読むだけで自分で発見できる情報
例
## よく使うコマンド
- パッケージ管理:常に pnpm を使用し、npm や yarn は使用しない
- テスト実行:pnpm test:watch
- ビルド:pnpm build
## コード規範
- TypeScript strict モードで、any は許可しない
- コンポーネントファイルは PascalCase で命名(例:UserProfile.tsx)
- データベースのタイムスタンプは UTC 形式に統一
## 制約事項
- prisma/migrations/ ディレクトリ内の既存ファイルを直接変更しない
- .env.local には実際のキーが含まれるため、ファイル内容の読み取りや出力を禁止
- API インターフェースは src/api/ ディレクトリで一元管理し、他の場所で直接リクエストを送信しない
4、パスによる限定ルール(.claude/rules/)
大規模なプロジェクトでは、.claude/rules/ディレクトリを使用して指示をファイルパスごとに有効な細かいルールに分割し、すべてのルールをルートの CLAUDE.md に詰め込んで起動トークンを消費するのを避けられます:
.claude/
└── rules/
├── api.md # 只对 src/api/**/*.ts 文件生效
├── frontend.md # 只对 src/components/**/*.tsx 文件生效
└── testing.md # 只对 *.test.ts 文件生效
パス限定ルールは、Claude が対応するディレクトリ内のファイルを読み取るときにのみ読み込まれ、起動時にコンテキストをすべて占有することはありません。
自動メモリ(Auto memory)
自動メモリは、Claude Code v2.1.59 以降に組み込まれたセッションをまたぐ記憶システムです、デフォルトで有効、設定は一切不要です。Claude は作業中に発見したビルドコマンド、デバッグ経験、コードスタイルの好みなどの情報を自律的に記録します。
1、動作の仕組み
- Claude は毎回のセッションでメモリを書き込むわけではなく、情報を保持する価値があるか(将来の会話で役立つか)を判断します。
- メモリは git リポジトリのパスごとに分離され、保存先は
~/.claude/projects/<项目路径>/memory/ - 同じリポジトリのすべてのワークツリーで自動メモリを共有します。
- メモリを書き込むと、ターミナルに "Writing memory" と表示され、次回の取得時には "Recalled memory" と表示されます。
2、メモリの表示と編集(/memory)
コマンドを使用して、/memory各レベルの CLAUDE.md や自動メモリを含む、すべてのメモリ内容を表示・編集できます:
/memory
エディタで不正確なエントリを削除したり、Auto memory スイッチを使用して自動メモリ機能を無効化したりできます。環境変数で一時的に無効化することもできます:
CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 claude
3、Claude に明示的に記憶させる
会話中に直接 Claude にメモリへの書き込みを依頼できます:
记住:我们的 API 测试需要本地运行一个 Redis 实例
以后请记住:处理错误时,统一返回 { code, message } 结构
単なる好みのメモリではなく強制ルールに格上げしたい場合は、「このルールを CLAUDE.md に書いて」と指示すると、Claude はそれを対応する CLAUDE.md ファイルに書き込みます。
コンテキストウィンドウ最適化コマンド
1、自動圧縮(Auto-compaction)
Claude Code はコンテキストが制限値に近づくと自動的に圧縮をトリガーし(約 75% 使用時)、会話履歴を要約して作業を続行します。ただし公式は自動圧縮を待たずに、60〜70% の時点で能動的に手動トリガーすることを推奨しています。重要なタスクの途中で中断されるのを避けられ、さらに能動的な圧縮では指示によって保持する内容を制御できます。
2、コンテキストの圧縮(/compact)
会話履歴を手動で圧縮し、長いセッションを簡潔な要約にまとめて作業を続行します:
/compact
/compactカスタム指示を渡して、圧縮時に重点的に保持する内容を制御できます:
/compact Focus on the API changes
/compact 保留认证流程的架构决策,丢弃调试过程中的无效尝试
圧縮は不可逆な操作です。圧縮時、Claude はコンテキストが最も満杯で性能が最も弱い状態にあります。指示を与えないと、あなたが重要だと思う内容を失う可能性があります。重要な決定の直後に能動的に圧縮し、指示で保持すべき重点を明示する方が、自動圧縮を待つよりもはるかに効果的です。
3、コンテキストのクリア(/clear)
新しいタスクに切り替えるときにすべての会話履歴をクリアします:
/clear
クリア後も CLAUDE.md と自動メモリは影響を受けず、新しいセッションで引き続き読み込まれます。公式の推奨:同じセッション内で同じ問題を2回以上修正したなら、いっそ /clear して、学んだ制約を活かしてより的確なプロンプトで最初からやり直すほうがよい——クリーンなセッションとより良いプロンプトは、汚染されたコンテキストの中で修正を続けるより、ほとんどの場合優れています。
4、チェックポイントへのロールバック(/rewind)
Claude Code はファイルを変更するたびに自動的にチェックポイントを作成します。ダブルクリックするか、Escまたは/rewindを実行すると、ロールバックメニューが開き、復元するチェックポイントを選択できます:
/rewind
(或双击 Esc 键)
ロールバックメニューでは、以下の操作を選択できます:
| 操作 | 効果 | 適用シーン |
|---|---|---|
| 会話 + コードを復元 | 会話履歴とファイル変更をロールバックし、完全に元に戻す | Claude が脱線し、変更に問題があるため、すべて取り消す |
| 会話のみ復元 | 会話履歴をロールバックし、ファイル変更は保持 | 別のアプローチでやり直したいが、コード変更は保持したい |
| コードのみ復元 | ファイルをチェックポイントの状態に戻し、会話は保持 | コードを壊してしまったが、会話中の分析には参考価値がある |
| ここから要約(Summarize from here) | そのチェックポイント以降の会話を要約に圧縮し、それ以前の完全な履歴は保持 | 後半の冗長な会話だけ整理し、前半の完全なコンテキストは保持したい |
チェックポイントはセッションをまたいで永続保存されます——ターミナルを閉じた後でも以前のチェックポイントにロールバックできます。これは git の代替ではありませんが、探索的な実験では手動の git stash より便利です。
5、コンテキストを汚染せずに素早く質問(/btw)
小さな詳細をすぐ確認したいが、この質疑応答を会話履歴に入れたくない(コンテキストを消費する)場合は、/btw:
/btw 这个项目的 TypeScript 版本是多少?
を使用します。回答はオーバーレイ表示され、質問も回答も会話履歴に入りません。設定値やバージョン番号など、保持する必要のない一度きりの情報の確認に適しています。
セッション管理コマンド
| コマンド | 機能 | 使用シーン |
|---|---|---|
/context |
コンテキスト各部分の詳細なトークン使用量分析を表示 | どの部分がトークンを過剰に消費しているかを調査 |
/compact [指令] |
会話履歴を要約に圧縮し、保持する重点を指定可能 | コンテキスト 60〜70% の時点で能動的に圧縮 |
/clear |
すべての会話履歴をクリアし、CLAUDE.md とメモリは保持 | 新しいタスクに切り替え、またはコンテキストが深刻に汚染されている |
/rewind(または Esc をダブルクリック) |
チェックポイントメニューを開き、会話/コード/両方の復元、または任意の時点からの要約を選択できます | Claude が脱線したため、ロールバックして再試行が必要 |
/memory |
CLAUDE.md と自動メモリの内容を表示・編集 | メモリが正確か確認し、古いエントリを削除 |
/btw |
クイック質問。回答は会話履歴に入らない | 小さな詳細を確認する、コンテキストを汚染したくない |
/init |
プロジェクトを分析し、CLAUDE.md を生成または改善する | 新しいプロジェクトでの初回使用、またはプロジェクトに大きな変更があった場合 |
#(ショートカットキー) |
永続的な指示を CLAUDE.md にすばやく追加 | ルールや規約をいつでも記録 |
claude --continue |
直近のセッションを続行 | ターミナルを開き直した後に作業を再開 |
claude --resume |
履歴リストからセッションを選択して続行 | 数日前の特定のタスクを再開 |
よくある問題と解決策
問題一:Claude が CLAUDE.md のルールを守らない
- CLAUDE.md が大きすぎないか確認する(200 行を超えると遵守率が低下する)
- 曖昧な表現を具体的な指示に変更する:「きれいなコードを書く」ではなく「2 スペースのインデントを使用する」
- 用
/memory競合する自動メモリのエントリがないか確認する - の使用を検討し、
.claude/rules/ルールをファイルパスごとに分割して、毎回の読み込み量を削減します
問題二:Claude が矛盾し始め、以前の決定を「忘れる」
- これはコンテキスト劣化の典型的な症状です。同じセッションで修正し続けずに、
- を実行するか、
/compact 保留关键决策、または直接/clearの後に要約を持って再開します - 重要な結論は
#ショートカットキーで CLAUDE.md に書き込み、次回のセッションでも有効にしましょう
問題三:/compact 後に重要な情報が失われる
- 圧縮時に具体的な指示を渡す:
/compact 保留认证流程的架构决策和已确认的 API 格式 - 圧縮前に最も重要な結論を CLAUDE.md に書き込む
- デバッグに失敗した試行は保持する価値がないため、より積極的に圧縮するか /clear する
問題四:ターミナルを閉じた後、前回の作業をどう続行するか
- を使用して
claude --continue直近のセッションを続行 - を使用して
claude --resume履歴リストから特定のセッションを選択 - 用
/rename重要なセッションには説明的な名前(例:「oauth-migration」)を付け、後で見つけやすくする
問題五:大規模なタスクで大量のツール出力が発生する場合、コンテキストが満杯になるのを防ぐには
- サブエージェント(subagent)に委任して実行する:メインの会話には要約のみが届き、中間出力はサブエージェントの独立したコンテキストに残る
- 例:
サブエージェントを使用してすべてのログファイルを分析し、パフォーマンスのボトルネックを見つけ、結論だけを私に伝えてください。