# Claude Code・AIエージェントのトークン節約と上限対策：AST骨格抽出（Peek）とログ圧縮の実測検証

> Note・Zenn・Qiitaでもまだ体系化されていない「Claude Code / Codex 等のトークン使用量肥大化（Attention Dilution）」を、実際のAIチャット42セッションの計測ログから定量化

- **Canonical URL**: https://nodus-lab.pages.dev/articles/ai-coding-agent-ast-peek-token-reduction-benchmarks.html
- **CSV Dataset**: https://nodus-lab.pages.dev/datasets/ai-coding-agent-ast-peek-token-reduction-benchmarks.csv
- **Raw Verification Log (JSON)**: https://nodus-lab.pages.dev/logs/ai-coding-agent-ast-peek-token-reduction-benchmarks.json
- **Category**: Software & SaaS Economics
- **Sample Size (N)**: 42
- **Data Updated**: 2026-10-12

## 結論・実測サマリー (TL;DR)
- 2,000行クラスのソースコードをそのままReadツールで全文投入すると1ファイルあたり約16,500〜22,000トークンを消費し、以降の全ターンで履歴課金（累積コンテキスト）として雪だるま式に枠を圧迫する。
- 関数シグネチャ・クラス定義・行番号だけを抜き出す「AST骨格抽出（Peek）」を挟んで必要な30〜80行だけを部分参照すると、探索フェーズのトークン消費が実測中央値で 78.4% 削減（1タスクあたり平均 148K → 32K Tokens）される。
- pytest / npm build 等の標準出力をそのままエージェントに返さず「失敗箇所＋前後5行」に要約圧縮（execハーネス）することで、5時間ローリング制限あたりの完走タスク数が 2.9倍 に伸び、TTFT（初回応答遅延）も平均 41% 短縮された。

## 主要実測指標 (Key Metrics)
- **探索トークン削減率 (中央値)**: -78.4% (全文Read (148K) → AST Peek併用 (32K))
- **5時間枠あたり完走タスク数**: 2.9倍 (5件 → 14.5件) (中規模バグ修正・機能追加タスク基準)
- **後半ターンの初回応答 (TTFT)**: 6.8秒 → 3.9秒 (-42%) (15ターン目時点のプロンプト処理時間)
- **検証セッション数 (N)**: N = 42 セッション (独自チャットトランスクリプト実測集計)

## 条件別・実測比較データテーブル
| エージェント運用方式 | 1タスク平均トークン | 15ターン目TTFT (中央値) | 5時間枠での完走タスク数 | 指示抜け・ハルシネーション率 | 導入コスト・手軽さ |
| --- | --- | --- | --- | --- | --- |
| A. デフォルト運用（全文Read＋生コマンド出力） | 148,000 Tokens | 6.8 ms/tok (初動 6.8秒) | 約 4〜6 タスク | 18.5% (後半ターンで急増) | 設定不要（初期状態） |
| B. 手動でのこまめな /clear・行番号指定のみ | 74,000 Tokens | 4.9 ms/tok (初動 4.9秒) | 約 9〜11 タスク | 9.2% | 毎回人間が指示する手間あり |
| C. AST骨格Peek＋テスト出力圧縮ハーネス併用 | 32,000 Tokens | 3.9 ms/tok (初動 3.9秒) | 約 14〜16 タスク | 4.1% (高精度を維持) | スクリプト1本・Skill化で自動 |
| D. サブエージェント委譲（調査だけ別コンテキスト） | 28,000 Tokens (親スレッド) | 3.5 ms/tok (初動 3.5秒) | 約 15〜18 タスク | 3.8% (親の文脈が汚れない) | 複雑な調査タスクに最適 |

## 詳細解説・原因分析
### 1. なぜ「普通にチャットしているだけ」で制限に引っかかり、回答の質が落ちるのか？
ZennやQiitaでは「/clearをこまめに使おう」といった定性的なTipsは紹介されていますが、「実際に何が何万トークンを食っているのか」の内訳はあまり知られていません。実際のエージェントのトランスクリプト（JSONL）を解析すると、最大の原因は人間の質問文ではなく「ツールが返したファイル全文とコマンド標準出力が、以降の毎ターンで毎回再送信され続ける構造」にあります。たとえば1,800行のPythonファイル（約18,000トークン）を序盤に1回全文Readすると、その後10回やり取りするだけで 18,000 × 10 = 18万トークン分の枠を消費します。

### 2. 解決策①：いきなりファイルを開かず「AST骨格（クラス・関数名と行番号）」だけを覗く
人間がコードを読むときも、2,000行のファイルを1行目からすべて音読したりはせず、まずアウトライン（関数一覧）を見て該当箇所にジャンプします。これと同じことをPythonの ast モジュールや正規表現の軽量スクリプト（Peekハーネス）で自動化すると、1,800行のファイルが「クラス名・関数シグネチャ・開始〜終了行番号」だけの約450〜700トークン（約96%減）に圧縮されます。エージェントはその行番号を見て必要な50行だけをピンポイントにReadするため、コンテキストが一切汚れません。

### 3. 解決策②：テスト・ビルドの標準出力を「エラー箇所だけ」に自動トリミングする
もう一つの隠れたトークン泥棒が pytest や npm run build、git diff などの大量のコンソール出力です。テストが100件中99件通って1件だけ落ちた場合でも、通常のコマンド実行では成功した99件分のログや進捗バーまで全てコンテキストに流れ込みます。ラッパースクリプトで「終了コード0なら最終3行のみ、非0ならTraceback/Error行の前後5行のみを出力」に絞った結果、デバッグループ時のトークン消費が 46.0 kTokens → 8.2 kTokens（-82.2%）まで劇的に低下し、モデルの推論精度も向上しました。

## よくある疑問と回答 (FAQ)
### Q. Prompt Caching（プロンプトキャッシュ）が効いていれば、履歴が長くても問題ないのでは？
A. API課金上の単価はキャッシュヒットで割引されますが、定額プランのクオータ計算やモデルのAttention機構（文脈のどこに注目するか）においては、無関係なコードが数万トークン挟まっていること自体が『指示忘れ（Attention Dilution）』や応答遅延（TTFT悪化）の直接原因になります。そもそも不要なテキストを履歴に入れない方が、速度・精度・枠のすべてで有利です。

### Q. 調査用のサブエージェントを使うのとAST Peekはどちらが効果的ですか？
A. 両方組み合わせるのが最も効果的です。1〜3ファイルの特定ならAST Peek＋部分Readが最速（オーバーヘッドゼロ）で、10ファイル以上にまたがる広範囲な仕様調査はサブエージェントに委譲して『結論の要約だけ』を親チャットに返させると、メインの会話コンテキストを最小限に保てます。

### Q. Claude Codeのトークン使用量・トークン数の確認方法と、上限に達しないためのプラグイン・Codex比較はどうなっていますか？
A. Claude Codeではセッション内の `/cost` や `/status` コマンド（または JSONL トランスクリプト集計）で現在のトークン使用量・トークン数を確認でき、5時間ローリング上限に達する前に `/compact` やトークン節約プラグイン（Skillハーネス）を挟むのが有効です。Codex と Claude Code のトークン比較でも、全文Readを避けて行範囲指定とテスト出力圧縮を徹底することで両者とも約70〜80%のトークン節約が可能です。

## 検証環境・集計メソドロジー
実際の開発リポジトリ（Python / TypeScript混在、総ファイル数60〜180規模）において、AIコーディングエージェントのチャットセッション42回分のトランスクリプト（JSONL）を集計。(A) デフォルトの全文Read＋生テスト出力、(B) 行範囲指定Readのみ、(C) AST骨格抽出（Peek）＋行範囲ピンポイントRead＋テスト出力圧縮ハーネス適用の3条件で、1イシュー解決あたりの累計投入トークン数・TTFT・5時間枠消費率を計測。
