この記事で分かること
- Claude Codeのコンテキストウィンドウが「なぜ」問題になるのか
-
/clear/compact/rewindの正しい使い分け - CLAUDE.mdを軽量に保つための設計パターン
-
settings.jsonで設定できるコスト削減オプション - サブエージェントを使ってメインセッションを守る方法
- compactしても消えない「記憶の作り方」
はじめに — 「途中で会話が壊れる」問題
Claude Codeを使い始めてしばらく経つと、多くの人が同じ壁にぶつかります。
「セッションが長くなると応答が遅くなる」
「/compactしたら指示した内容が消えた」
「昨日の作業の続きをお願いしたら、Claudeが何も覚えていなかった」
これらはすべて「コンテキストウィンドウの管理」が根本原因です。この記事では、これらの問題を Before → After の形式で体系的に解説します。
前提知識 — コンテキストウィンドウとは
Claude Codeは会話をやり取りするたびに、過去のメッセージ・読み込んだファイル・コマンド実行結果などを「コンテキスト」として積み上げていきます。このコンテキストには上限(トークン数)があり、それがコンテキストウィンドウです。
コンテキストウィンドウ = 「Claudeが一度に覚えていられる会話の総量」
本の例えで言うと、「本の索引ページに書けることが決まっている」ようなイメージです。索引が満杯になると、古い内容を消して(圧縮して)新しい内容を書くしかありません。
| 要素 | トークン消費の目安 |
|---|---|
| ユーザーのメッセージ | 小〜中 |
| Claudeの応答 | 中〜大 |
| 読み込んだファイル | ファイルサイズ次第 |
| CLAUDE.md の内容 | 毎セッション必ず発生 |
| MCP ツール呼び出し結果 | 呼び出しごとに蓄積 |
Before — よくある失敗パターン
Before 1: CLAUDE.mdに全部書いてしまう
# Before(悪い例): CLAUDE.mdが500行超え
## プロジェクト背景
このプロジェクトは2024年に立ち上がった〇〇システムの改修プロジェクトで...
(延々と背景説明が続く)
## コーディング規約
- インデントは2スペース
- セミコロンは省略しない
... (100行以上の規約)
## 過去のトラブル事例
- 2024年12月のデプロイ事故の詳細...
何が起きるか: CLAUDE.mdはセッション開始時に毎回コンテキストに読み込まれます。500行の CLAUDE.md は約2,500トークンを毎セッション消費します。1日3セッションで7,500トークン/日、月20営業日で15万トークン/月の固定コストになります。
Before 2: 長いセッションを1会話でやり続ける
長い会話を1セッションで続けると、コンテキストが上限に達した時点でClaude Codeが自動的に会話を「要約圧縮」します。この圧縮(コンパクション)で具体的な指示・決定事項・コードの詳細が消えることがあります。
Before 3: セッションをまたぐと何も覚えていない
# 翌日のやり取り
ユーザー: 「昨日の続きで認証モジュールを実装してください」
Claude: 「すみません、前回の会話の内容は参照できません。
具体的に何を実装すればよいか教えてください」
Claude Codeのデフォルトでは、新しいセッションを開始すると前のセッションの会話内容はすべて消えます。
After — 解決策を体系的に整理
解決策マップ
After 1: コマンドの正しい使い分け
| コマンド | 動作 | 使いどき |
|---|---|---|
/clear |
会話を完全リセット | 全く別のタスクに切り替えるとき |
/compact |
AIが要約して圧縮 | セッション継続しつつ容量を確保したいとき |
/rewind |
指定した時点まで巻き戻す | 直前のClaude応答が悪かったとき |
/context |
現在のコンテキスト使用量を確認 | どのくらい残り容量があるか調べるとき |
実践的な使い方の例:
# 長い作業の途中でコンテキストが50%を超えたら
> /compact
# 別のタスク(例: バグ修正 → ドキュメント作成)に切り替えるとき
> /clear
# Claudeが間違ったコードを書いてしまったとき
> /rewind # 直前のプロンプトの前まで戻る
After 2: CLAUDE.mdを軽量に設計する
# After(良い例): CLAUDE.md を50行以下に
## プロジェクト
- 技術スタック: Node.js + PostgreSQL
- ビルド: `npm run build`
- テスト: `npm test`
## ルール参照
- コーディング規約: @rules/coding.md
- セキュリティ: @rules/security.md
## 重要な制約
- DBへの直接書き込みは必ずレビュー必須
トークン効率の比較:
| 構成 | セッション開始時トークン | 月間コスト(3セッション/日×20日) |
|---|---|---|
| CLAUDE.md 500行 | 約2,500トークン | 約150,000トークン |
| CLAUDE.md 50行 + rules/ | 約700トークン | 約42,000トークン |
| 節約効果 | ▲1,800トークン/セッション | ▲108,000トークン/月 |
詳細情報は @rules/ ディレクトリに分割し、必要な場面でだけ読み込まれる設計にすることがポイントです。
After 3: settings.json でコンテキスト制御を設定する
Claude Code の ~/.claude/settings.json に以下を設定することで、自動的なコスト制御が効きます。
{
"env": {
"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "200000",
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "50",
"CLAUDE_CODE_SUBAGENT_MODEL": "claude-haiku-4-5-20251001",
"CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING": "1"
}
}
| 設定キー | 意味 | 効果 |
|---|---|---|
CLAUDE_CODE_AUTO_COMPACT_WINDOW |
自動compactを発動するトークン数の上限 | 高コストな長セッションを防ぐ |
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE |
何%でcompactを発動するか(デフォルト95%) | 早めに圧縮してコスト抑制 |
CLAUDE_CODE_SUBAGENT_MODEL |
サブエージェントに使うモデル | Haikuに切り替えでコスト約1/5 |
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING |
拡張思考トークンを無効化 | 思考トークンの無駄遣いを防ぐ |
初心者向け補足:
CLAUDE_CODE_AUTO_COMPACT_WINDOWは「コンテキストがこのトークン数に達したら自動で圧縮する」という設定です。デフォルトは1Mトークンですが、200,000に設定することで早めに圧縮が走り、長期的なコストを抑えられます。
After 4: サブエージェントでメインセッションを守る
「調査・探索・ファイル読み込み」のような大量の中間情報が発生する作業は、サブエージェントに委譲することでメインセッションのコンテキストを守れます。
# Before: メインセッションで全部やる
> 「src/以下の全ファイルを読んで、認証に関連するコードを調べてください」
→ Claudeが直接大量のファイルを読み込み、メインコンテキストが汚染される
# After: サブエージェントに委譲
> 「src/以下で認証に関連するコードをサブエージェントで調査し、
> 結果のサマリーだけ返してください」
→ 調査作業はサブエージェントが独立したコンテキストで処理
→ メインセッションにはサマリーのみが返る
CLAUDE.md への設定例:
## トークン節約ルール
- ファイル調査・コードベース探索・定型実装はサブエージェント(Agentツール)に委譲する
- メインセッションには「判断・設計・統合」のみを残す
- 調査結果はサマリーのみメインに返却させる(全文蓄積禁止)
After 5: compactしても消えない「記憶」を設計する
Claude Codeには3種類のメモリ機構があります。それぞれの特性を理解して使い分けることが重要です。
| メモリ機構 | 誰が書くか | 保持する内容 | compact後 | セッション間 |
|---|---|---|---|---|
| CLAUDE.md | ユーザー | プロジェクトルール・指示 | 完全に残る | 永続 |
| 自動メモリ | Claude | 学んだパターン・洞察 | 影響なし | 永続(200行制限) |
| 会話コンテキスト | 会話中に蓄積 | 実際のやり取り全体 | AI要約に圧縮 | 消失 |
実践的な設計パターン:
セッションをまたいで引き継ぎたい決定事項は「CLAUDE.mdに書いてもらう」よう指示します。
# 作業の終わりに毎回
> 「今日決定した設計方針と未解決の課題をCLAUDE.mdに追記してください」
これにより、次のセッションでも「前回の決定事項」がClaude Codeに伝わります。
よくある落とし穴・注意点
❌ 落とし穴1: /compactすれば「何も変わらない」と思っている
/compactはAIが要約するため、細かい指示・具体的な数値・コードのスニペットは失われることがあります。重要な決定事項は必ずCLAUDE.mdや外部ファイルに書き出してから圧縮しましょう。
❌ 落とし穴2: CLAUDE.mdに「一時的な情報」を書いてしまう
CLAUDE.mdは毎回読み込まれるため、「今回だけ必要な情報」を書くとコンテキストの無駄遣いになります。一時的な指示はチャットで直接伝えましょう。
❌ 落とし穴3: MCPサーバーを大量に有効化したまま
/mcp コマンドで各MCPサーバーのトークンコストを確認できます。未使用のMCPサーバーは切断することで、無駄なトークン消費を防げます。
> /mcp
# 各サーバーのトークンコストが表示される
# 不要なサーバーは切断する
❌ 落とし穴4: disable-model-invocationを設定していない
副作用のあるSkillを定義している場合、意図せずモデルが呼び出されてトークンを消費することがあります。
# skills/my-skill.md のfrontmatter
---
disable-model-invocation: true
---
まとめ — Before/After 一覧
| 問題(Before) | 解決策(After) |
|---|---|
| CLAUDE.mdが肥大化 | 50行以下+rules/に分割 |
| 長いセッションで情報消失 |
/compactを早めに実行、AUTOCOMPACT_PCT_OVERRIDE: 50設定 |
| 会話後にまたリセット | 決定事項をCLAUDE.mdに記録する習慣 |
| 調査でコンテキストが汚れる | サブエージェントに委譲+サマリーのみ受取 |
| Claudeが翌日に何も知らない | 自動メモリ+CLAUDE.mdで永続化 |
| サブエージェントが高コスト |
SUBAGENT_MODEL: haikuでコスト1/5に |
コンテキスト管理の本質は「総量を意識すること」です。会話が長くなれば再処理コストが増え、不要な情報がコンテキストに乗れば精度も落ちます。この記事で紹介した設定と習慣を組み合わせることで、Claude Codeをより長く・より安く・より賢く使い続けられるようになります。