AIコーディング 2026.05.08

Claude Codeのトークン削減【94%コスト削減の5ステップ】実装ガイド付き

タグ:Claude / コスト削減 / 生成AI / トークン最適化

なぜClaude Codeはトークンを大量消費するのか

Claude Codeはコードベースを理解するために、プロジェクト内のファイルを読み込みます。この「コードナビゲーション」が最大の消費源です:

典型的なClaude Codeセッションのトークン消費内訳:

1. システムプロンプト(初回):          約2,000トークン
2. コードベース探索(find, cat等):    約15,000トークン
3. 会話履歴の蓄積(往復ごとに増加):  約10,000トークン
4. 実際の作業(コード生成・修正):     約5,000トークン

合計: 約32,000トークン
↑ このうち コードナビゲーション + 会話履歴 = 78% が「間接コスト」

94%削減の事例では、このコードナビゲーションを効率化したことが主な要因です。

5つのトークン削減手法

手法1:.claudeignoreで不要ファイルを除外

# プロジェクトルートに.claudeignoreを作成
cat > .claudeignore << 'EOF'
# ビルド成果物
node_modules/
dist/
build/
.next/
__pycache__/
*.pyc

# ログ・一時ファイル
*.log
*.tmp
.DS_Store

# テストカバレッジレポート
coverage/
htmlcov/
.coverage

# 大きなデータファイル
*.csv
*.json.gz
*.sql

# ドキュメント(Claudeが読む必要がない場合)
docs/
*.md
EOF

効果:プロジェクトによっては探索対象ファイルが50〜80%減少します。

手法2:作業ディレクトリを絞ってClaude Codeを起動

# ❌ プロジェクトルートで起動(不必要に全ファイルを読む)
cd /my-project && claude

# ✅ 作業対象のディレクトリに移動してから起動
cd /my-project/src/auth && claude -p "login.pyのバグを修正して"

# ✅ allowedToolsでReadの対象を制限
claude -p "src/api/users.py のバリデーションを追加して" \
  --allowedTools "Read(src/api/**),Edit(src/api/**),Bash(python -m pytest src/)"

手法3:/compactコマンドで会話履歴を圧縮

# Claude Codeを起動
claude

# 作業を進めた後、コンテキストが膨らんできたら圧縮
> /status          # 現在のトークン使用量を確認
> /compact         # 会話履歴を要約して圧縮

# /compactの効果
圧縮前: 45,000トークン
圧縮後: 8,000トークン(要約 + 最近のやりとりのみ保持)
削減率: 約82%

手法4:プロンプトを簡潔にする(Caveman圧縮)

# ❌ 冗長なプロンプト(トークン多い)
claude -p "src/utils/helpers.pyというファイルを開いてください。
そのファイルの中にあるget_user_data関数を確認して、
その関数が受け取る引数とその型について理解してください。
その後、その関数にエラーハンドリングを追加してもらいたいのですが、
具体的にはValueErrorとTypeErrorの2種類の例外を適切に処理するコードを
追記していただけますか?"

# ✅ 簡潔なプロンプト(50%少ないトークン)
claude -p "src/utils/helpers.py のget_user_data関数に
ValueError・TypeErrorのエラーハンドリングを追加して"

Pythonで自動圧縮する場合:

# token_optimizer.py
import re

def compress_prompt(text: str) -> str:
    """プロンプトを圧縮してトークンを削減する"""
    
    # 連続する空白・改行を1つに
    text = re.sub(r'\s+', ' ', text).strip()
    
    # よく使う冗長表現を短縮
    replacements = [
        ("してください", "して"),
        ("していただけますか", "して"),
        ("〜というファイルを開いて", ""),
        ("具体的には", ""),
        ("適切に", ""),
        ("その後、", ""),
        ("まず最初に", ""),
    ]
    for before, after in replacements:
        text = text.replace(before, after)
    
    return text

original = "src/auth/login.pyというファイルを開いてください。その後、適切にエラーハンドリングを追加してください。"
compressed = compress_prompt(original)
print(f"圧縮前: {len(original)}文字")
print(f"圧縮後: {len(compressed)}文字")
print(f"削減: {(1 - len(compressed)/len(original))*100:.1f}%")

手法5:スペックファーストでナビゲーションを減らす

Claude Codeがファイル構造を自分で探索すると大量のトークンを消費します。事前にファイル名と変更箇所を指定することで大幅に削減できます:

# ❌ Claude Codeが探索する(高コスト)
claude -p "ユーザー認証に関するバグを見つけて修正して"
# → Claude Codeが src/ 全体をfind/cat で探索する

# ✅ 対象を明示(低コスト)
claude -p "src/auth/middleware.ts の42行目 checkAuth関数で
req.userがundefinedの場合の処理が抜けている。
nullチェックを追加して" \
--allowedTools "Read(src/auth/middleware.ts),Edit(src/auth/middleware.ts)"

削減効果の計測

# measure_token_usage.py
from anthropic import Anthropic
import os

client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

def measure_tokens(prompt: str, model: str = "claude-haiku-4-5-20251001") -> dict:
    """プロンプトのトークン数とコストを計測"""
    response = client.messages.create(
        model=model,
        max_tokens=100,
        messages=[{"role": "user", "content": prompt}]
    )
    
    input_tokens = response.usage.input_tokens
    output_tokens = response.usage.output_tokens
    
    # Haiku料金で計算
    input_cost = input_tokens * 0.80 / 1_000_000
    output_cost = output_tokens * 4.00 / 1_000_000
    
    return {
        "input_tokens": input_tokens,
        "output_tokens": output_tokens,
        "total_cost_usd": input_cost + output_cost,
    }

# 最適化前後の比較
before = "src/utils/helpers.pyというファイルを開いてください。そのファイルのget_user_data関数に、ValueErrorとTypeErrorのエラーハンドリングを適切に追加してください。"
after = "src/utils/helpers.py get_user_data にValueError・TypeError処理追加して"

result_before = measure_tokens(before)
result_after = measure_tokens(after)

reduction = (1 - result_after["input_tokens"] / result_before["input_tokens"]) * 100
print(f"圧縮前: {result_before['input_tokens']} tokens / ${result_before['total_cost_usd']:.6f}")
print(f"圧縮後: {result_after['input_tokens']} tokens / ${result_after['total_cost_usd']:.6f}")
print(f"削減率: {reduction:.1f}%")

94%削減の現実的な解釈

報告されている94%削減の多くは、以下の組み合わせで達成されています:

手法典型的な削減率
.claudeignore設定30〜60%
/compact定期実行50〜80%
スペックファースト指示40〜70%
軽量モデル切り替え70〜90%(コスト削減)
組み合わせ(相乗効果)80〜94%

ただし削減率はプロジェクトの複雑さ・ファイル数・タスクの性質によって大きく変わります。まずは.claudeignoreの設定と/compactの活用から始めることをおすすめします。


あわせて読みたい

参考ソース