1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code のコンテキスト劣化を防ぐ:Context Engineering スキル集の使い方

1
Last updated at Posted at 2026-05-31

Claude Code のコンテキスト劣化を防ぐ:Context Engineering スキル集の使い方

Claude Code を使っていると「なんか最近の回答がおかしい」「さっき言ったことを無視された」という経験はないでしょうか。これは コンテキスト劣化 と呼ばれる現象で、会話が長くなるにつれてモデルのパフォーマンスが下がる問題です。

この記事では、OSS として公開されている Agent Skills for Context Engineering をClaude Code に導入し、劣化を診断・防止する方法を紹介します。


インストール方法

以下のコマンド1つで ~/.claude/skills/ に15個のスキルが追加されます。次のセッションから自動的に認識されます。

cd /tmp && \
  git clone --depth=1 https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering.git context-engineering && \
  cp -r context-engineering/skills/* ~/.claude/skills/ && \
  rm -rf /tmp/context-engineering

スキルの呼び出し方は2通りあります。

  • 自動: 会話の文脈からClaude が判断して自動アクティベート
  • 手動: チャットに /context-degradation のように入力

コンテキスト劣化とは

コンテキストウィンドウには U字型のアテンションカーブ があります。先頭と末尾の情報は確実に参照されますが、中間部の情報は10〜40%の精度低下 が起きます。

さらに、コンテキストが増えるほどパフォーマンスは下がりますが、その低下は線形ではありません。

パフォーマンス
    ↑
100%|████████████████
    |                ████
    |                    ████
    |                        ████
 60%|                            ████▼▼▼ ← 急落(崖)
    +--------------------------------→ コンテキスト量
                        ↑
                    70%付近で崖

劣化は緩やかに進むのではなく、ある閾値を超えると 急落 します。70%に達してから対処するのでは遅いことが多いです。


5つの劣化パターン

/context-degradation スキルが扱う劣化は5種類に分類されます。

パターン 症状 原因
Lost-in-Middle 中間部の情報が無視される U字型アテンションカーブ
Poisoning ハルシネーションが連鎖・繰り返される 誤情報がコンテキストに残存
Distraction 無関係な情報で精度が下がる 関連性の低いコンテキストの混入
Confusion 別タスクの制約が混入する タスクの切り替えによるコンテキスト汚染
Clash 矛盾する正しい情報が競合する 複数ソースの版違い・視点の違い

どうやって劣化を検出するか

Step 1: /clear して同じ質問を再送
  ↓
  答えが改善する → コンテキストが原因
  変わらない    → プロンプト or モデルの問題

Step 2: 問題が継続的か確認
  ↓
  1回だけ    → 通常のバラつき(様子見)
  3回以上連続 → 劣化を疑う

Step 3: 会話の長さと相関があるか
  ↓
  長くなるほど悪化 → 劣化の可能性が高い
  最初から悪い    → 別の問題

/context-degradation スキルと /compact コマンドは別物です。

  • スキル → なぜ劣化しているかを診断する知識
  • /compact実際にコンテキストを圧縮する操作

4つの最適化戦略

/context-optimization スキルが扱う戦略を優先順位順に紹介します。

1. KV-キャッシュ最適化(コスト最小・リスク最小)

プロンプトの構造を安定させることで推論エンジンのキャッシュを再利用します。

# 安定した順序(キャッシュが効く)
1. システムプロンプト(最も安定)
2. ツール定義
3. 再利用テンプレート・Few-shot例
4. 会話履歴
5. 現在のクエリ(最も動的)

システムプロンプト内に日付や動的情報を入れると、毎回キャッシュミスが発生してコストが増大します。

# NG: キャッシュが効かない
system = f"今日は {today} です。..."

# OK: 動的情報はユーザーメッセージに分離
system = "固定テキストのみ"
user = f"今日は {today}。質問は..."

目標: キャッシュヒット率70%以上 → コスト50%削減・レイテンシ40%削減

2. 観察マスキング(最大の効果)

処理済みのツール出力をコンパクトな参照に置き換えます。

# NG: 生のツール出力をそのまま保持(8,000トークン残存)
response = mcp.notion_get_page(page_id)
# → JSONが丸ごとコンテキストに残り続ける

# OK: 要点だけ残して圧縮(50トークン程度)
raw = mcp.notion_get_page(page_id)
ref_id = store(raw)                          # フル内容は外部保存
summary = extract_key_points(raw)            # 要点を抽出
context += f"[MCP:{ref_id}] {summary}"      # コンテキストにはこれだけ

マスキング判断ルール

状況 対応
直近1ターン以内の出力 マスクしない
3ターン以上前の処理済み出力 マスク対象
デバッグ中のエラー出力 解決するまでマスクしない
重複・同一ツールの再実行結果 即マスク

目標: 60〜80%削減・品質影響2%未満

3. コンパクション(70%到達時に実行)

if context_tokens / context_limit > 0.7:
    context = compact(context)
    # 目標: 50〜70%削減・品質低下5%未満

優先順位: ツール出力 → 古い会話ターン → 取得ドキュメント

コンパクションは 85%以上になってから実行すると失敗しやすい。コンパクション処理自体がコンテキストを消費するため、モデルが圧縮中に重要な情報を落とします。

4. コンテキストパーティショニング(独立タスクの分離)

単一のコンテキストに収まらない場合、サブエージェントに分割します。

オーケストレーター(調整役)
    ├── サブエージェントA: タスクA専用コンテキスト
    ├── サブエージェントB: タスクB専用コンテキスト
    └── サブエージェントC: タスクC専用コンテキスト

分割にはコーディネーションコスト(システムプロンプト・ツール定義の重複)がかかります。独立したサブタスクが3つ以上ある場合 に効果がでます。


スキル一覧

コマンド カテゴリ こんなときに使う
/context-fundamentals 基礎 コンテキストウィンドウ・アテンション機構の概念を理解したいとき
/context-degradation 診断 エージェントの精度低下の原因を診断したいとき
/context-compression 最適化 長いセッションをハンドオフ要約に圧縮したいとき
/context-optimization 最適化 トークン消費・KVキャッシュを改善したいとき
/multi-agent-patterns アーキテクチャ 複数エージェントの設計パターンを検討したいとき
/memory-systems アーキテクチャ エージェントの永続メモリ・検索層を構築したいとき
/tool-design アーキテクチャ ツール定義の説明文・パラメータ設計を最適化したいとき
/filesystem-context アーキテクチャ 大きなツール出力をプロンプト外に逃がしたいとき
/hosted-agents アーキテクチャ サンドボックス・リモート実行環境を設計するとき
/evaluation 評価 エージェントの評価システム・品質ゲートを構築したいとき
/advanced-evaluation 評価 LLM-as-judge・ルーブリック設計を使いたいとき
/harness-engineering 運用 自律エージェントのリサーチループを設計するとき
/project-development 運用 LLMプロジェクトの全体設計を考えるとき
/bdi-mental-states 高度 BDI認知モデルでエージェントをモデリングするとき
/latent-briefing 高度 マルチエージェント間のKVキャッシュ共有でトークン爆発を抑えたいとき

実践Tips

セッション管理

操作 コマンド 効果
セッションを切る exit → claude コンテキスト完全リセット
前のセッションを再開 claude -r 直前の会話を引き継ぎ
その場で圧縮 /compact 現在の会話を要約して軽量化
劣化チェック /clear して同じ質問を再送 答が改善すればコンテキストが原因

タスクの区切りでセッションを分けるのが最も効果的 です。トークン数より「このセッションで何を達成したか」で区切ると使いやすいです。

MCP ツールのトークン削減(Notionの例)

Notion MCP のレスポンスは特に冗長で、1ページで5,000〜15,000トークンになることがあります。

# NG: 取得結果をそのままコンテキストに残す
page = mcp.notion_get_page(page_id)  # 5,000トークン

# OK: タイトルとIDだけ保持
page = mcp.notion_get_page(page_id)
context += f"[notion:{page['id'][:8]}] {page['title']}"  # 30トークン
操作 最適化前 最適化後 削減率
ページ取得 ~5,000 tok ~50 tok 99%
DB検索20件 ~40,000 tok ~500 tok 98%
更新操作 ~2,000 tok ~10 tok 99%

スキル自体のトークンコスト

スキルは呼び出したときに読み込まれ、その分トークンを消費します。グローバル CLAUDE.md に常時ルールを書くより、必要なときだけ /スキル名 で呼び出す 方がトークン効率がよいです。


まとめ

やること 効果
コンテキスト70%でコンパクション 崖への到達を防ぐ
ツール出力を即マスキング 最大80%削減
システムプロンプトを安定化 KVキャッシュヒット率70%+
タスク単位でセッションを分ける コンテキスト汚染を根本防止
劣化したら /clear して再送 原因の切り分け

コンテキストエンジニアリングは一度設定すれば終わりではなく、会話の進行とともに継続的に管理するものです。このスキル集を活用して、Claude Code のパフォーマンスを長い会話でも維持してみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?