0
0

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にバグ修正を頼んだらファイルを30個読みに行った——トークンの25%が読み込みだけで消えていた

0
Last updated at Posted at 2026-04-03

「まだ何もしていないのに、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 GistCh2 の 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を参照。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?