「まだ何もしていないのに、token使用量が急増している」
GitHub Issue #38733 では、Claude Codeがタスク実行前にファイルを過剰に読み込み、tokenを大量消費する問題が報告されている。報告者は「researching way more info about the files」と表現している。
何が起きているか
Claude Codeにタスクを依頼すると、モデルはまず「コンテキストを理解するため」にファイルを読む。この読み込みが問題になる。
筆者の自律セッション(700+時間)での観測:
- 簡単なバグ修正でも、関連ファイルを10〜30個読み込む
- 実際に修正に必要なファイルは2〜5個程度
- 読み込みだけでコンテキストの20〜30%を消費するケースがある
モデルは「念のため」読む。関連しそうなファイル、importチェーン、テストファイル、設定ファイル。丁寧なのは良いが、tokenには限りがある。
なぜ問題か
Claude Codeのtoken消費は3つのフェーズに分かれる。
[1. 読み込み 25%] [2. 思考・計画 15%] [3. 実行 60%]
読み込みが25%を占めると、実行に使えるtokenが減る。大きなタスクの途中でtoken上限に達し、中途半端な状態で止まる原因になる。
さらに、同じファイルを複数回読むケースもある。compaction(コンテキスト圧縮)後に、既に読んだファイルの内容がサマリーから落ち、モデルが「まだ読んでいない」と判断して再読する。
hookで読み込みを制御する
read-budget-guard.sh
#!/bin/bash
# read-budget-guard.sh
# ファイル読み込みの重複検知と予算制限
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty' 2>/dev/null)
[ -z "$FILE" ] && exit 0
READ_LOG="/tmp/claude-read-log"
MAX_READS=30
# ログファイル初期化(セッション単位)
[ -f "$READ_LOG" ] || touch "$READ_LOG"
# 重複読み込みの検出
if grep -qxF "$FILE" "$READ_LOG" 2>/dev/null; then
echo "WARNING: $(basename "$FILE") は既に読み込み済みです" >&2
echo "compaction後の再読み込みの可能性があります" >&2
# 重複は警告のみ(ブロックはしない)
fi
# ログに記録してカウント
echo "$FILE" >> "$READ_LOG"
COUNT=$(wc -l < "$READ_LOG")
if [ "$COUNT" -ge "$MAX_READS" ]; then
echo "BLOCKED: ファイル読み込みが${MAX_READS}回に達しました" >&2
echo "現在の情報で作業を進めてください" >&2
exit 2
fi
settings.jsonへの設定
{
"hooks": {
"PreToolUse": [
{
"matcher": "Read",
"hooks": [{
"type": "command",
"command": "bash ~/.claude/hooks/read-budget-guard.sh"
}]
}
]
}
}
動作の仕組み
| 状況 | 動作 |
|---|---|
| 1回目の読み込み | ログに記録。正常実行 |
| 同じファイルの2回目 | 警告を出力。実行は許可 |
| 30回を超えた読み込み |
exit 2でブロック |
なぜ30回なのか
cc-safe-setupの検証と700+時間の自律セッション実績から。
- 一般的なバグ修正タスク: 5〜15ファイル
- 中規模リファクタリング: 15〜25ファイル
- 大規模な調査: 25〜40ファイル
30回は「大規模な調査」に必要十分で、「無制限の探索」を防ぐ閾値だ。プロジェクトの規模に応じてMAX_READSを調整すればよい。
重複読み込みの検出が重要な理由
compaction(コンテキスト圧縮)後の再読み込みは、tokenの二重消費になる。
セッション開始
→ ファイルA読み込み (1,000 token)
→ ファイルB読み込み (2,000 token)
→ ... 作業 ...
→ compaction発生(ファイル内容がサマリーに圧縮される)
→ モデル「ファイルAの内容を確認しよう」
→ ファイルA再読み込み (1,000 token) ← ここが無駄
hookの警告メッセージがstderrに出力されると、モデルは「あ、既に読んだのか」と気づく。これだけで再読み込みが抑制される。
ブロックではなく「気づかせる」設計
重複読み込みをexit 2でブロックしない理由がある。ファイルが更新された後の再読み込みは正当な操作だからだ。
- 重複 → 警告(気づかせる)
- 予算超過 → ブロック(強制停止)
この2段階が、実用性と安全性のバランスを取る。
読み込みより怖いもの: キャッシュ破壊
ファイル読み込みは消費の20〜30%を占める。しかし、トークン消費が「10倍」「20倍」になる報告の多くは別の原因だ。
プロンプトキャッシュの無効化。Claude Codeは会話履歴をキャッシュして再送信コストを削減している。このキャッシュが壊れると、毎ターン全履歴を生で送信するため、消費が一気に跳ね上がる。
2026年3月末にはv2.1.88-89でキャッシュのバグが発生し、キャッシュ読み取り率が89%→4.3%に暴落する事例が多数報告された(#41617、#41158)。v2.1.90で修正されている。
キャッシュが壊れる主な原因:
- Claude Codeが自分の会話履歴(.jsonl)を読む → キャッシュプレフィックスが変わる
-
--resume後の最初の数ターン → キャッシュの再構築が必要 - 並列サブエージェントの乱用 → キャッシュスロットが競合する
これらを防ぐhookはcc-safe-setupに含まれている(cch-cache-guard)。
まとめ
- Claude Codeはタスク開始前に大量のファイルを読む(token消費の20〜30%)
- compaction後の重複読み込みでさらに浪費される
- hookで読み込み回数を追跡し、予算を超えたらブロック
- 重複検出の警告だけでも、モデルの行動が変わる
- 最大の消費原因はキャッシュ破壊(10〜20倍)。v2.1.90への更新を推奨
「自分のCLAUDE.mdがトークンをどれくらい消費しているか」を無料で診断 → CLAUDE.md Analyzer
📖 トークン消費に困っているなら → Claude Codeのトークン消費を半分にする——800時間の運用データから見つけた実践テクニック(¥2,500・はじめに+第1章 無料)
📖 AIで事業を回す実体験を全記録 → Claude Code×個人事業 800時間の全記録(¥800・第2章まで無料)
📚 「トークン浪費の構造」 を 5 経路で比較した移行の手引き (5/22 発売)
本記事の 30 ファイル読み込みの事例は、 道具の利用の構造に由来するトークン浪費の典型例。 留まる/Anthropic 鍵/Codex/DeepSeek の 5 経路の月の費用と防衛の比較を整理した Claude Code Migration Playbook Edition 2 を 5 月 22 日に発売します ($19、 既存購入者は Gumroad で自動配信)。 Ch1 timeline の preview Gist と Ch2 の 5 つの migration trigger の preview Gist を公開済。 同日発売の Claim-Verify Handbook は 130 件の事例集。
:::note alert
⚠️ CVE-2026-21852(2026年4月公開): プロジェクト内.claude/settings.json経由でAPIキー窃盗。対策: npx cc-safe-setup(ユーザーレベル設定で免疫)→ 詳細
:::
⚠️ Opus 4.7をお使いの方へ(2026年4月)
Opus 4.7で安全分類器の不具合・トークン消費急増が報告されています。Safety Scannerで設定を無料チェック。対策はSurvival Guideを参照。