AIコーディング 2026.05.13
Claude Codeトークン消費を22〜45%削減する5つの方法【2026年版】実測コード付き
コンテキスト肥大化の主な原因
問題のあるパターン:
1. バグ修正に1,000行のファイル全体を貼り付け → 5,000トークン消費
2. リポジトリ全体を自動読み込み → node_modules含む数十万トークン
3. 50往復のセッションを継続 → 履歴が毎回コンテキストに
4. システムプロンプトを毎回送信 → キャッシュなしで重複課金
実際の削減効果:
削減前: 1質問あたり平均8,000トークン → 月$18.00(Sonnetで日100質問)
削減後: 1質問あたり平均4,400トークン → 月$9.90(同条件)
削減率: 45%、月額節約: $8.10
技法1: 関連部分だけを渡す
# ❌ NG: ファイル全体を貼り付け
cat src/utils/payment.ts # 1,000行 → 5,000トークン
# ✅ OK: 関連関数だけを抽出
sed -n '150,180p' src/utils/payment.ts # 30行 → 200トークン
# ✅ Better: バグのある行前後だけを表示
grep -n "calculateTax" src/utils/payment.ts # 行番号確認
awk 'NR>=155 && NR<=175' src/utils/payment.ts # その前後20行だけ
技法2: .claudeignoreで自動除外
# .claudeignore
# ← プロジェクトルートに置く
node_modules/
.git/
dist/
build/
*.log
*.lock
coverage/
.env
*.min.js
__pycache__/
*.pyc
効果: node_modules/ だけで数万〜数十万トークン削減。
技法3: Prompt Cachingでシステムプロンプトを再利用
# cached_claude.py
# 同じコードベースの説明を毎回送る場合はキャッシュを使う(90%オフ)
import anthropic
client = anthropic.Anthropic()
CODEBASE_SUMMARY = """
## プロジェクト概要
- Next.js 15 + TypeScript + Prisma + PostgreSQL
- 認証: Auth.js v5
- デプロイ: Vercel + Neon DB
- テスト: Vitest + Playwright
## ディレクトリ構成
src/
app/ # App Router pages
components/ # React components
lib/ # Utilities and helpers
server/ # Server Actions
## 重要なルール
- サーバーコンポーネントをデフォルトに
- "use client" はイベントハンドラが必要な場合のみ
- 全入力はZodでバリデーション
"""
def ask_claude_cached(question: str) -> str:
"""コードベース説明をキャッシュして質問コストを削減"""
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=2048,
system=[
{
"type": "text",
"text": CODEBASE_SUMMARY,
"cache_control": {"type": "ephemeral"} # ← キャッシュ有効化
}
],
messages=[{"role": "user", "content": question}]
)
usage = response.usage
cache_read = getattr(usage, "cache_read_input_tokens", 0)
savings = cache_read * 0.9 # キャッシュ読み込みは90%オフ
print(f"キャッシュ節約: {cache_read}トークン({savings:.0f}トークン分相当のコスト削減)")
return response.content[0].text
# 2回目以降はCODEBASE_SUMMARYのキャッシュが効く
answer1 = ask_claude_cached("Prismaでユーザーを取得するServer Actionを書いて")
answer2 = ask_claude_cached("Zodでメールアドレスを検証するスキーマを書いて") # キャッシュ適用
技法4: CLAUDE.mdでコンテキスト管理のルール化
<!-- CLAUDE.md -->
## コンテキスト節約ルール
### ファイル読み込み
- ファイル全体ではなく該当関数のみを読む
- バグ修正: 問題のある行 ±15行を対象とする
- 新機能: 関連するファイルのimport部分と型定義だけ先に確認
### セッション管理
- 長いセッション(50往復超え)は新セッションで開始
- 新セッション冒頭: 「前提: [2〜3行の要約]」を最初に伝える
### 禁止事項
- node_modules/ を読み込まない
- *.lock ファイルを参照しない
技法5: セッション要約で履歴を圧縮
# session_compressor.py
# 長いセッションを要約して新セッションに引き継ぐ
def compress_session(session_messages: list[dict]) -> str:
"""会話履歴を3行に圧縮する"""
full_text = "\n".join(
f"{'User' if m['role'] == 'user' else 'Claude'}: {m['content'][:500]}"
for m in session_messages[-20:] # 直近20往復
)
response = client.messages.create(
model="claude-haiku-4-5-20251001", # 要約は安いモデルで
max_tokens=300,
messages=[{"role": "user", "content": f"""
以下の会話を3行以内で要約してください:
- 作業していた機能/バグ
- 決定した実装方針
- 未解決の課題
会話:
{full_text}"""}]
)
return response.content[0].text
# 使用方法
summary = compress_session(old_session_messages)
# 新セッションでは: 「前提: [summary]」を最初に送るだけ