はじめに
Claude Codeを業務で使っていると、PRJの仕様書や設計資料を読み込ませた途端にContext Compaction(コンテキスト圧縮)が発生する、という経験をしたことはないでしょうか。
Compactionは会話が長くなったときに自動的に発生し、それまでの会話が要約されます。細かい仕様の数値や固有名詞が抜け落ちることがあり、「大事な情報が消えてしまった」という感覚に陥りがちです。
この記事では、実際の業務シーンを想定したContext Compaction対策と、サブエージェントを活用した効率的なワークフローを紹介します。
Context Compactionとは
Claude Codeは会話履歴をコンテキストウィンドウに保持しています。これが上限に近づくと、それまでの会話を自動的に要約(Compaction)して空き容量を確保します。
コンテキストウィンドウ
┌───────────────────────────────────┐
│ 会話履歴・読み込んだ資料・コード... │ ← 上限に近づくと
└───────────────────────────────────┘
↓ Compaction
┌───────────────────────────────────┐
│ (要約) │ ← 圧縮される
└───────────────────────────────────┘
Compaction後もタスクは継続されますが、要約の過程で細部の情報が失われる可能性があります。
対策1:CLAUDE.md に重要情報を書く
最も根本的な解決策です。
毎回資料を貼り付けるのではなく、プロジェクトの重要情報を CLAUDE.md に事前に記述しておきます。Claude Codeはセッション開始時に自動で読み込むため、コンテキストを消費せずに参照できます。
# CLAUDE.md
## アーキテクチャ概要
- フロントエンド: React + TypeScript
- バックエンド: Node.js + Express
- DB: PostgreSQL
## 参照資料
- 要件定義: docs/requirements.md
- API仕様: docs/api-spec.md
- DB設計: docs/db-schema.md
## 重要な制約
- 認証にはJWT(有効期限24時間)を使用
- 外部APIのレート制限: 100req/min
対策2:資料はファイルとして置いて都度参照させる
「資料をコンテキストに載せる」から「資料はファイルに置いて必要なとき読みに行く」へ発想を転換します。
❌ 今まで: 資料全文を貼り付ける → コンテキスト圧迫
✅ 推奨: 資料をファイルに保存 → Claude が必要なときに読む
Claude Codeはファイルシステムに直接アクセスできるため、「この仕様書の○○の部分を確認して」と言えば都度読みに行きます。Compactionが起きてもファイルは消えないので、情報の永続性が保たれます。
docs/
requirements.md # 要件定義
architecture.md # アーキテクチャ
api-spec.md # API仕様
db-schema.md # DB設計
CLAUDE.md にはインデックスだけ書いておくと、Claudeが何がどこにあるかを常に把握できます。
対策3:図・画像はテキスト化して保存する
ExcelやPDFの図・画像はテキストの数倍〜数十倍のトークンを消費します。
解決策:一度だけ読ませてMarkdown化する
1回目: 図をClaudeに読ませる → 説明をMarkdownで保存
2回目以降: そのMarkdownを参照(画像トークン不要)
Claudeへの指示例:
この図の内容を、後で自分が参照できるように
Markdownのテキストとして docs/figures/arch-diagram.md に保存して
PDFのテキスト抽出
どうしてもPDFから情報を取り出したい場合は、図を除いたテキストだけを抽出するツールが有効です。
# pdftotext を使う場合
pdftotext input.pdf output.txt
# pdfminer を使う場合(Pythonが必要)
pip install pdfminer.six
pdf2txt.py input.pdf > output.txt
運用フロー
【初回セットアップ(1回だけ)】
資料の図 → Claudeが読む → docs/summaries/ にMarkdown保存
【日常作業】
Claudeは docs/summaries/ のテキストを参照
→ 画像トークン消費ゼロ
対策4:調査タスクはサブエージェントに委譲する
Claude Codeはサブエージェントに調査タスクを委譲できます。サブエージェントは独立したコンテキストウィンドウで動作するため、メインの会話とは別枠でトークンを消費します。
メインセッション(あなたとの会話)
└── サブエージェント(別コンテキストで起動)
├── 独自のコンテキストウィンドウを持つ
├── 大量のファイルを読んでも
└── メインには結果だけが返ってくる
メインコンテキストへの影響は「返答テキスト」のみです。サブエージェントが内部で100ページの資料を読んでも、メインには要約だけが戻ります。
指示例:
Explore エージェントを使って docs/ 以下の仕様書を調べて、
○○機能の要件をまとめて
発展:サブエージェントで資料調査 → メインでテストシナリオ作成
サブエージェントを複数並列で走らせ、それぞれに異なる資料を読ませてから、メインで統合するというワークフローが組めます。
結合試験シナリオ作成の例:
以下を並列で調査して結果をまとめて:
Agent 1: docs/requirements.pdf を読み、機能一覧と業務フローを抽出
Agent 2: docs/api-spec.xlsx を読み、APIの入出力・エラーケースを抽出
Agent 3: docs/db-schema.pdf を読み、テーブル間の依存関係を抽出
その結果をもとに結合試験シナリオを作成して
フローイメージ
サブエージェント群(並列実行)
├── Agent A: 要件定義書 → 機能一覧・制約
├── Agent B: API仕様書 → エンドポイント・データ構造
└── Agent C: DB設計書 → テーブル・リレーション
メインセッション
└── 3つの結果を統合 → 結合試験シナリオ生成
品質を上げるコツ
サブエージェントへの指示は具体的にするほど精度が上がります。
❌ 「仕様書を読んで」
✅ 「試験シナリオ作成に必要な、機能間の依存関係と異常系の条件を抽出して」
また、統合前に一度確認を挟むと抜け漏れを防げます。
Step 1: 各エージェントの抽出結果をメインで確認
Step 2: 抜け漏れがあれば追加で調査指示
Step 3: 揃ってからシナリオ生成
まとめ
| 対策 | 効果 | 難易度 |
|---|---|---|
| CLAUDE.md に重要情報を書く | ★★★ | 低 |
| 資料をファイルとして置く | ★★★ | 低 |
| 図・画像をテキスト化 | ★★★ | 中 |
| サブエージェントに委譲 | ★★★ | 中 |
Context Compactionは完全には防げませんが、「コンテキストに乗せるもの」を最小化し、「ファイルに永続化するもの」を最大化する設計にすることで、大幅に影響を抑えられます。
特にサブエージェントの活用は、単なるCompaction対策にとどまらず、大規模資料の並列処理や複雑な成果物の生成など、業務効率を劇的に向上させるポテンシャルを持っています。
補足:サブエージェントの注意点
- サブエージェントはメインの会話履歴を知らない状態で起動する
- そのためプロンプトに必要な背景情報を明示する必要がある
- サブエージェント自身にもコンテキスト上限はあるので、極端に大きい資料は処理できない場合がある