Claude Codeで長時間の開発セッションを続けていると、回答の精度が落ちたり、直前の指示を無視されたりした経験はないでしょうか。原因の多くはコンテキストウィンドウの枯渇です。Claude Codeが参照できる情報量には200kトークンという上限があり、この枠をどう配分するかが開発効率を左右します。
コンテキストウィンドウの全体像 ─ 200kトークンの内訳
Claude Codeのコンテキストウィンドウは、ユーザーの入力・過去の会話履歴・ツール定義・システム指示などを含む、AIが一度に扱える情報の総枠です(出典: Anthropic公式ドキュメント)。
200kトークンは日本語で約15万〜20万文字、書籍に換算すると文庫本1冊分に相当します。ただし、この200kのすべてがユーザーの会話に使えるわけではありません。
コンテキスト領域の構成
/context コマンドを実行すると、コンテキストウィンドウの内訳が表示されます。
⛁ System prompt: 2.9k tokens (1.4%)
⛁ System tools: 19.4k tokens (9.7%)
⛁ MCP tools: 18.1k tokens (9.1%)
⛁ Custom agents: 332 tokens (0.2%)
⛁ Memory files: 1.4k tokens (0.7%)
⛁ Autocompact buffer: 45.0k tokens (22.5%)
⛁ Messages: 8 tokens (0.0%)
⛶ Free space: 164.2k (82.1%)
セッション開始時点で、システムプロンプトとシステムツールだけで約11%を消費しています。さらにAutocompactバッファが約22.5%を確保しているため、実質的にユーザーが自由に使える領域は全体の約65%前後です。
| 項目 | 平均消費量 | 制御可否 |
|---|---|---|
| システムプロンプト | 約3kトークン(1.4%) | 不可(Anthropic側が管理) |
| システムツール | 約19kトークン(9.7%) | 一部可(deny設定で削減可能) |
| MCPツール | 0〜数十kトークン | 可(サーバー数で変動) |
| CLAUDE.md | 1〜5kトークン | 可(記述量で変動) |
| カスタムエージェント | 数百トークン | 可(定義数で変動) |
| Autocompactバッファ | 約45kトークン(22.5%) | 不可(自動圧縮用に確保) |
| メッセージ(会話履歴) | セッション進行で増加 | 可(/compact、/clearで管理) |
拡張思考モードとコンテキストの関係
Claude Codeでは拡張思考モード(Extended Thinking)を利用でき、settings.json で alwaysThinkingEnabled: true と設定するとデフォルトで有効になります。拡張思考の出力トークンはそのターンのOutputに含まれますが、次のターンのInputには引き継がれません(出典: Claude Code公式ドキュメント)。
つまり、拡張思考で深い推論を行ってもコンテキストウィンドウを累積的に圧迫しない設計です。複雑な問題で ultrathink を使ってもコンテキスト管理上のリスクは低いと言えます。なお、拡張思考のトークン予算は環境変数 MAX_THINKING_TOKENS で調整可能です(デフォルト: 31,999トークン、0で無効化)。
/context・/compact・/clear ─ 3つのコマンドの使い分け
Claude Codeにはコンテキストを管理するための3つの主要コマンドがあります。
/context ─ 現在の消費状況を可視化
/context はコンテキストウィンドウの使用状況を項目ごとに可視化するコマンドです。
/context
10×10のアイコンベースのゲージと数値で、何がどれだけコンテキストを占有しているかが一目でわかります。MCP toolsやMemory filesの消費量も個別に表示されるため、どこを削減すべきかの判断材料として有用です。
/compact ─ 会話履歴を要約して圧縮
/compact は過去の会話をいったん削除し、重要なポイントだけを要約としてコンテキストに保持するコマンドです。
# 基本的な圧縮
/compact
# フォーカスを指定した圧縮
/compact APIの変更内容に集中して要約
フォーカスを指定すると、要約時にその観点が優先されます。たとえば、認証機能の改修中であれば /compact 認証関連の変更を重点的に保持 と指定することで、関連コンテキストの損失を最小限にできます。
CLAUDE.mdに「Compact Instructions」セクションを追加すると、自動圧縮時にも保持すべき情報をコントロールできます。
/clear ─ 会話履歴を完全リセット
/clear は会話履歴を完全に消去します。要約も残りません。
/clear
タスクの切り替え時や、コンテキストが複雑になりすぎた場合のリセットに適しています。ただし、進行中の作業の文脈がすべて失われるため、使用前にCLAUDE.mdへ重要な決定事項をメモしておくのが安全です。
3コマンドの判断フロー
状況に応じた使い分けの目安は次の通りです。
コンテキスト使用率が高い?
├─ 90%以上 → /compact(フォーカス指定推奨)
├─ タスク完了後に別タスクへ移行 → /clear
└─ まだ余裕がある → /context で現状確認のみ
Auto-compact ─ 自動圧縮の仕組みと閾値調整
Claude Codeはコンテキスト使用量が**95%**に達すると、自動的に会話を要約・圧縮します。この機能がAuto-compact(自動圧縮)です。
Auto-compactの動作
Auto-compactが発動すると、以下の処理が行われます。
- 古いツール出力を削除
- 会話のやり取りを要約形式に変換
- ユーザーの依頼内容や重要なコード断片は優先的に残す
- セッション初期に伝えた細かい指示は要約から漏れる場合がある
このため、セッション全体を通じて有効であるべきルール(コーディング規約、アーキテクチャ方針など)は会話中で伝えるのではなく、CLAUDE.mdに記載するのがベストプラクティスです。
閾値を変更する方法
環境変数 CLAUDE_AUTOCOMPACT_PCT_OVERRIDE を設定すると、Auto-compactの発動タイミングを変更できます。
# 50%で早めに圧縮を発動させる
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=50
# 80%で発動
export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=80
デフォルトの95%より低い値を指定すると早期に圧縮が走り、コンテキスト溢れによる品質劣化を予防できます。ただし、95%より高い値を設定しても効果はありません。
また、/config コマンドからAuto-compactの有効・無効を切り替えることも可能です。
CLAUDE.md ─ セッション間で持続する記憶
Claude Codeはセッション間で永続的なメモリを持ちません。前回のセッションで何を作業したか、どんなルールを伝えたかは、次のセッション開始時に失われます。この問題を解決するのがCLAUDE.mdファイルです。
CLAUDE.mdの種類と読み込み順序
| ファイル | パス | スコープ | Git管理 |
|---|---|---|---|
| エンタープライズポリシー | OS依存のシステムディレクトリ | 組織全体 | IT管理 |
| プロジェクトCLAUDE.md | ./CLAUDE.md or ./.claude/CLAUDE.md | チーム共有 | 対象 |
| プロジェクトルール | ./.claude/rules/*.md | チーム共有(パス限定可能) | 対象 |
| ユーザーCLAUDE.md | ~/.claude/CLAUDE.md | 全プロジェクト共通 | 対象外 |
| ローカルCLAUDE.md | ./CLAUDE.local.md | 個人×プロジェクト | 自動gitignore |
Claude Codeは起動時にこれらのファイルをすべて読み込み、コンテキストウィンドウに常駐させます。つまり、CLAUDE.mdの内容が大きいほどセッション開始時点で使える空き容量が減ることになります。
CLAUDE.mdのコンテキスト効率を高める書き方
CLAUDE.mdに記載する内容は必要最小限に絞ります。
# プロジェクト概要
Rust製SEO分析ツール。DataForSEO APIを使用。
# コーディング規約
- 早期return推奨
- any型禁止
- エラーハンドリング必須
# テスト
変更後は `cargo test` を実行
詳細なルールやワークフロー手順は、後述するskillsやslash commandsに分離するとコンテキスト消費を抑えられます。
@インポートによるファイル参照
CLAUDE.md内で @path/to/file と記述すると、指定ファイルの内容をインポートできます。相対パスと絶対パスの両方に対応しており、最大5段階の再帰インポートも可能です。
# プロジェクト概要
@README.md を参照
# Git運用ルール
@docs/git-instructions.md
便利な反面、インポート先の容量もコンテキストに加算されるため、大きなファイルの参照には注意が必要です。/memory コマンドで現在読み込まれているメモリファイルの一覧を確認できます。
/memory コマンドによる編集
セッション中に /memory コマンドを実行すると、システムのデフォルトエディタでCLAUDE.mdファイルが開きます。プロジェクトの進行に合わせてルールや規約を追記・整理する際に使います。初回セットアップには /init コマンドが便利です。
skills・subagents・slash commands ─ コンテキスト消費パターンの違い
Claude Codeにはプロンプトを拡張する仕組みが複数あります。それぞれコンテキストの消費パターンが異なるため、目的に応じた使い分けが重要です。
| 仕組み | 起動時の消費 | 実行時の消費 | コンテキスト共有 | 呼び出し方 |
|---|---|---|---|---|
| CLAUDE.md | 全文読み込み | ─ | 共有 | 自動 |
| rules | 全文読み込み(パス限定ルールは条件一致まで遅延) | ─ | 共有 | 自動 |
| slash commands | 消費なし | 実行時に全文読み込み | 共有 | ユーザーが明示的に /command |
| skills | descriptionのみ | 必要時に全文読み込み | 共有 | Claudeが自動判断 or ユーザー指定 |
| subagents | descriptionのみ | 独立コンテキスト | 非共有(結果の要約のみ返す) | Claudeが自動判断 or ユーザー指定 |
slash commands ─ 呼び出すまでゼロコスト
~/.claude/commands/ にマークダウンファイルを配置すると、/command-name で呼び出せる定型プロンプトになります。削除しても /context の消費量は変わらないことが確認されており、呼び出すまでコンテキストを一切消費しません。
git commitのルールやデプロイ手順など、毎回は不要だが特定のタイミングで正確に実行したい指示に最適です。
<!-- ~/.claude/commands/commit.md -->
変更をすべてコミットせずに、意味のある範囲でできるだけ小さくコミットしてください。
commit logにはwhyを残してください。
skills ─ 自動判断と共有コンテキスト
~/.claude/skills/ 配下に SKILL.md とサポートファイルを配置します。Claudeは起動時にskillのdescription(概要)のみを読み込み、会話内容から必要と判断した場合に全文を読み込みます。
テスト駆動開発やコードレビューのように、親セッションのコンテキストと密接に連携する必要がある作業に向いています。
---
description: "テスト駆動開発のワークフローを実行する"
---
subagents ─ 独立コンテキストで大量処理
~/.claude/agents/ にYAML frontmatter付きのマークダウンファイルを配置します。subagentは独自のコンテキストウィンドウを持ち、親セッションとは完全に分離されます。作業が完了すると要約のみを返すため、親のコンテキストを膨張させません。
エラー調査や大規模なコードベース分析など、試行錯誤を伴う長い作業に最適です。
---
description: "エラーの根本原因を調査する専門エージェント"
allowed-tools:
- Bash
- Read
- Grep
- Glob
---
使い分けの判断基準
その指示は毎セッション必要?
├─ はい → CLAUDE.md / rules
└─ いいえ
├─ ユーザーが判断して呼び出す? → slash commands
└─ Claudeが自動判断する?
├─ 親のコンテキストが必要? → skills
└─ 独立して動ける? → subagents
statusLine ─ コンテキスト使用率をリアルタイム表示
デフォルトではClaude Codeの画面右下にコンテキスト使用率が数値で表示されますが、settings.json の statusLine 設定をカスタマイズすると、より詳細な情報を常時表示できます。
statusLineの設定手順
- ステータスライン用スクリプトを作成
#!/bin/bash
# ~/.claude/statusline.sh
INPUT=$(cat)
USED=$(echo "$INPUT" | jq -r '.context_window.used_percentage // 0')
TOTAL=$(echo "$INPUT" | jq -r '.context_window.total_tokens // 0')
MODEL=$(echo "$INPUT" | jq -r '.model // "unknown"')
echo "${MODEL} | ctx: ${USED}% (${TOTAL} tokens)"
- スクリプトに実行権限を付与
chmod +x ~/.claude/statusline.sh
settings.jsonに設定を追加
{
"statusLine": {
"type": "command",
"command": "~/.claude/statusline.sh"
}
}
これでClaude Codeの操作中、常にモデル名・コンテキスト使用率・トータルトークン数が画面下部に表示されます。
.claudeignore ─ 不要ファイルの除外
.claudeignore ファイルをプロジェクトルートに配置すると、Claudeが読み込む対象からファイルを除外できます。.gitignore と同じ構文です。
# .claudeignore
node_modules/
dist/
*.log
package-lock.json
*.png
*.jpg
*.svg
巨大な依存関係ディレクトリやビルド成果物、バイナリファイルを除外することで、Claudeがファイル検索時に無駄なトークンを消費するのを防げます。
また、settings.json の permissions.deny でも特定ファイルの読み取りを拒否できます。
{
"permissions": {
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./build)"
]
}
}
MCPサーバーのコンテキスト消費を最適化
MCPサーバーは接続するだけで、そのツール定義がすべてのリクエストに付加されます。サーバーを多数接続するとセッション開始時点で大量のコンテキストを消費してしまいます。
MCPツールの消費量を確認
/mcp
このコマンドでサーバーごとのトークン消費量を確認できます。
MCPツール検索(Tool Search)で消費を削減
環境変数 ENABLE_TOOL_SEARCH を設定すると、MCPツールをオンデマンドで検索・ロードする方式に切り替えられます。
# 自動(コンテキストの10%以上をMCPが占める場合に有効化)
export ENABLE_TOOL_SEARCH=auto
# カスタム閾値(5%以上で有効化)
export ENABLE_TOOL_SEARCH=auto:5
# 常にオン
export ENABLE_TOOL_SEARCH=true
ツール検索が有効な場合、すべてのMCPツール定義を常時ロードする代わりに、必要なときだけ検索してロードするため、初期コンテキスト消費を大幅に削減できます。
システムツールの削減テクニック
settings.json の permissions.deny に使わないツールを指定すると、そのツール定義がシステムプロンプトから除外され、システムツールの占有領域を減らせます。
{
"permissions": {
"deny": [
"WebFetch",
"WebSearch"
]
}
}
Web検索やURL取得が不要なプロジェクトでは、この設定でシステムツールの消費を数千トークン単位で削減できる場合があります。
セッション運用のベストプラクティス
1タスク1セッションの原則
異なるタスクを1つのセッションで続けると、前のタスクの残留情報がノイズとなり、回答品質が低下します。タスクが完了したら /clear で会話をリセットするか、新しいターミナルでセッションを開始します。
具体的なプロンプトで無駄な往復を減らす
曖昧な指示は確認質問や的外れな回答を招き、トークンの浪費につながります。
# 効率が悪い例
ログインのバグを直して
# 効率が良い例
src/auth/session.ts のトークン更新処理にバグがあります。
有効期限切れのカードを持つユーザーでチェックアウトが失敗します。
まず失敗するテストを書いてから修正してください。
セッションの再開とフォーク
claude --continue で前回のセッションを再開、claude --continue --fork-session でセッションを分岐できます。並列で複数のアプローチを試す場合は git worktree と組み合わせると効果的です。
コンテキスト関連のトラブルシューティング
| 症状 | 原因 | 対処法 |
|---|---|---|
| Claudeが直前の指示を無視する | コンテキスト圧縮で指示が失われた | CLAUDE.mdに永続ルールとして記載 |
| セッション開始直後なのに空き容量が少ない | MCPサーバーが大量のトークンを消費 | /mcp で確認し、不要なサーバーを切断 |
| 長いセッションで品質が徐々に低下 | コンテキスト過多による性能劣化(pit of death) | /compact でフォーカス指定の圧縮を実行 |
| Auto-compactが頻繁に発動する | 大きなファイルの読み込みやツール出力が多い | .claudeignore で除外対象を増やす |
| /contextの表示でFree spaceがほぼ0 | 会話履歴の蓄積 | /clear で完全リセット |
まとめ ─ コンテキスト管理チェックリスト
Claude Codeのコンテキスト管理は、200kトークンという限られた資源をいかに効率的に配分するかの技術です。
/contextでコンテキスト使用状況を定期的に確認する- CLAUDE.mdは必要最小限に保ち、詳細な指示はskills・slash commandsに分離する
- MCPサーバーの接続数を最適化し、Tool Searchの活用を検討する
- 1タスク1セッションを原則とし、タスク切り替え時は
/clearを実行する - 永続的なルールはCLAUDE.mdに記載し、Auto-compact後の損失を防ぐ
- subagentsを活用し、長い調査作業は独立コンテキストで実行する
- statusLineを設定し、コンテキスト使用率を常時モニタリングする
これらの施策を組み合わせることで、長時間の開発セッションでも回答品質を維持し、トークンコストの無駄を最小化できます。
公式ドキュメント: Claude Code の仕組み | Claude Code の設定