← ブログに戻る
LLMでトークンを節約する方法:Claude Code実践ガイド

LLMでトークンを節約する方法:Claude Code実践ガイド

LLMでトークンを節約する方法:Claude Code実践ガイド

月額$200のサブスクを10個使い切るのは難しくない。問題は、それを意味のある使い方ができているかどうかだ。以下に、私がClaude Codeでの日常的な作業で実践しているトークン節約のアプローチをまとめた。

1. 課金の仕組み

Claude Codeは入力トークンと出力トークンそれぞれに課金される。入力とはコンテキストに含まれるすべて:システムプロンプト、チャット履歴、ファイル、スクリーンショット。出力とはモデルが生成する内容。

チャットでの各メッセージは、蓄積されたコンテキスト全体を入力に追加する。1MコンテキストのOpusを使っている場合、各メッセージは毎回その100万トークン全体を送信しているのと同じ料金がかかる。出力もコンテキストを圧迫する — 回答のたびに蓄積されていく。

結論: 会話が短いほど安い。コンテキストが小さいほど安い。モデルの「思考」が少ないほど安い。

2. サブエージェントは必須

メインプロセス(リーダー)自体は何も作業すべきではない。その役割は調整と委任。すべての作業は小さなコンテキストを持つサブエージェントが実行する。

なぜ:

  • リーダープロセスのコンテキストは100〜200Kの範囲に収まり、増加しない
  • サブエージェントが作業を終えると、コンテキストはクリアされる
  • 数十のエージェントを並列実行できる

設定方法:

メインプロセス (Opus, 200K コンテキスト)
├── エージェント1 (Haiku, 短いコンテキスト) — スクリプト処理
├── エージェント2 (Sonnet, 短いコンテキスト) — テスト作成
└── エージェント3 (Haiku, 短いコンテキスト) — リファクタリング

大量タスク(例:8000のスクリプトを処理)の場合 — スクリプト1つにつきサブエージェント1つ、Haikuモデル。1つのチャットですべてを処理するより圧倒的に安い。

3. コンテキストとハルシネーション — 非線形の関係

100KコンテキストのOpusは、1MコンテキストのOpusより正確に動作する。1Mコンテキストではハルシネーションが非線形に増加する。つまり、大きなコンテキストは高コストで品質も低下する。

教訓:コンテキストはコンパクトに保つべし。500Kのチャット1つより、100Kのチャット5つの方が良い。

4. スキルが解決策

スキル(skills)は、必要に応じて読み込まれる事前設定済みプロンプトで、常にコンテキストに常駐しない。多くのフレームワークは、作業の最初のステップとしてスキルを準備・ダウンロードする。

MCPサーバー(常にコンテキストに説明をロードする)とは異なり、スキルは必要な時だけアクティブになる。Opus 4.5以前はMCPで多くのトークンが消費されていた — 現在は問題が解決されたが、「MCPをスキルとコマンドに置き換える」アプローチは、節約の観点から依然として有効。

Caveman

Caveman は Claude Code(および他エージェント)向けのオープンソーススキル/プラグインで、技術的正確性は保ちつつ「caveman speak」で超短い返答を促す — §1の「会話が短いほど安い」を実装した例だ。リポジトリのベンチマークでは平均で 出力 トークンが約 65% 削減という結果。別途 caveman-compress でメモリファイルの散文を圧縮し 入力 も削れる。

5. 中国製モデルと安価なサブスク

Alibaba Cloudや中国のサブスクリプションは、価格/トークン比で圧倒的に有利。約$30のサブスクで、Anthropicの$200プランと同等のトークン量が得られる。

実践:

  • モデルプロバイダーを切り替えられるClaudeラッパーを使用
  • グローバル環境変数は変更せず、ラッパー起動時に必要なものだけ渡す
  • Geminiも同様に安価なサブスクがあり、同じように活用できる

「異なるプロバイダーのモデルをClaudeに直接統合する」完成品はないが、ラッパーでニーズの80%はカバーできる。その一つがClother — グローバル設定を変更せずに、異なるモデルプロバイダーでClaude Codeを実行できる。

6. ナレッジグラフとRAG:トークンを10分の1に

LightRAG

LightRAGは、ナレッジグラフとLLMを組み合わせるアプローチ。コンテキスト全体を読み込む代わりに、構造化された関連情報の抽出により、トークン消費を最大10分の1に削減できる。

a8e

ivansglazunovの開発 — 作者は隠者モードで作業しており、ほとんど公開していないため、プロジェクトを実際に見るのは難しい。司書RAGとして機能:入力されるデータをすべてデータベースに投げ込む。ナレッジグラフとLLMを組み合わせ、より正確で安価なコンテキスト抽出を目指す。この動画で説明されている技術に似たアプローチ。

cmdop-claude

cmdop-claudemarkolofsenのアプローチ。グラフとしてマークルツリーを使用。基本アイデア:ほぼ無料の中国製LLMをバックグラウンドで動かし、.claudeフォルダを整理 — メインモデル用のコンテキストを準備する。

ナレッジグラフのグローバル設定 — graphify(OpenRouterをバックエンドにして意味論処理でClaudeのトークンを消費しない)— は§11でrtkと合わせて解説する。

7. エージェント管理フレームワーク

Superpowers

Claude Code用の人気フレームワークで、完成されたスキル、パターン、パイプラインを提供。

AI Factory

ai-factory — AIエージェント管理の興味深いフレームワーク。aif-handoffと組み合わせると、カンバンボードとフィルター付きのフロントエンドが得られる。

重要なアイデア:人間が最初のタスクを設定し、AIがそれを分解するが、完成したプランの人間による承認なしには作業は開始されない。これがトークンを節約し(やり直しが不要)、コントロールも提供する。

8. 実践的なティップス

High effortとreasoningは無効化してコストを削減できる。すべてのタスクがモデルの「深い思考」を必要とするわけではない。

スキルをMCPの代わりに。 Opus 4.5以前は、MCPをスキルに置き換えることで大きな節約になった。現在は差が縮まったが、大量タスクでは依然として有効。

サブエージェントのモデル管理。 サブエージェントが使用するモデルを指定できる。ルーティンタスクにはHaiku、複雑なタスクにはSonnetまたはOpus。

--bareモード — クリーンな起動。 フラグ--bareは、フック、LSP、プラグイン同期、自動メモリ、バックグラウンドプリロードなしでClaude Codeを起動する。そして重要なのは、CLAUDE.mdの自動検出なし。これらはすべて通常、システムプロンプトにロードされ、最初のメッセージの前にトークンを消費する。bareモードではコンテキストが最小限でスタートし、必要なデータは--system-prompt--append-system-prompt--add-dir、または--mcp-configで的確に渡せる。余分な事前プロンプトが純粋な無駄になる大量サブエージェント実行に最適。

9. フック — 自動的な節約

フック(hooks)は、Claude Code内のイベントで発火するスクリプト。.claude/settings.jsonで設定し、トークン節約のルーチンを自動化できる。

フックの種類

  • PreToolUse — ツール呼び出しの前に発火。入力データのフィルタリングや変更に使用。
  • PostToolUse — 呼び出し後に発火。自動フォーマットや後処理に便利。
  • PreCompact — コンテキスト圧縮の前に発火。重要な情報の保存に使用。
  • Stop — エージェントが作業を終了した時に発火。完了の確認に使用。
  • SessionStart — セッション開始時に発火。コンテキストのプリロードに便利。

役立つフックの例

テスト出力のフィルタリング。 Anthropicの公式例 — Bashに対するPreToolUseフックで、長いテスト出力を切り詰め、失敗したテストとサマリーだけを残す。500行のログの代わりに10行がコンテキストに入る — トークンの直接的な節約。

{
  "hooks": {
    "PreToolUse": [{
      "matcher": "Bash",
      "command": "あなたのフィルタリングスクリプト.sh"
    }]
  }
}

保存後の自動フォーマット。 Write/Editに対するPostToolUseフック — ファイル保存のたびにprettierblackを実行。モデルがコードのフォーマットにトークンを使う必要がない — ロジックを書き、フォーマットはフックが処理。

破壊的コマンドの防止。 Bashに対するPreToolUseフックで、rm -rfDROP TABLEなどのコマンドをブロック。直接的なトークン節約にはならないが、高コストなエラーとやり直しを防ぐ。

コンパクト前のコンテキスト保存。 PreCompactフック — コンテキスト圧縮前に重要な決定と状態をファイルに保存し、コンパクト後も失われないようにする。

フックにできないこと

Nメッセージごとの自動コンパクトはフックで設定できない — これはClaude Codeの組み込み機能。ただしPreCompactフックを使って、圧縮時に何を保存するかを制御できる。

10. スクリーンショット — 隠れたトークン消費者

ドキュメントによるとClaudeは画像を解像度で圧縮する。実際には、圧縮はほとんど見られない。4Kモニターでは1枚のスクリーンショットが高額。

解決策:送信前にスクリーンショットを幅約400pxに縮小する。テキストは読みやすく、トークン消費は大幅に減少。

macOS向けに私が作った Open Screenshot がある — 解像度が圧縮された形式でスクリーンショットを直接撮影でき、手動でリサイズする必要がない。ぜひ使ってみてください!

11. すぐ使える設定:rtk + graphify

グローバルで常時有効にしている2つのツール — それぞれ§1の別々の項目に効く。rtk はコマンド出力の入力トークンを削り、graphify は「リポジトリ全体を読め」というコンテキストを排除する。どちらも独自のAPIキー不要(graphifyはセマンティクス処理を高コストなClaudeトークンではなく安価なOpenRouter経由で実行する)。caveman(§4)と組み合わせると完結したスタックになる:コマンド入力 + リポジトリコンテキスト + モデル出力の3層を網羅。

すぐ使える設定は専用リポジトリにまとめてある — suenot/claude-code-token-savers(スクリプト、パッチ、フック、setup.sh)。

rtk — コマンド出力の圧縮

rtk(Rust Token Killer)はCLIプロキシ:git、docker、pytest、cargoなど100以上のコマンドの出力をコンテキストに入る前にフィルタリング・重複除去・切り詰めし、60〜90% 削減する。単一バイナリ、依存なし、オーバーヘッド10ms未満、LLM不使用。

brew install rtk
rtk init -g --auto-patch   # Claude Code向けグローバルPreToolUse-フックをインストール
# Claude Codeを再起動して確認:git status

フックが透過的に git statusrtk git status へ書き換える。§9(フックによるテスト出力フィルタリング)と同じ手法を、一度に100以上のコマンドに適用したものだ。

graphify — リポジトリ全読み込みの代わりにナレッジグラフ

graphify はコードとドキュメントをナレッジグラフ(ノード、コミュニティ、god-nodes)に変換し、ファイルをコンテキストに流し込む代わりに クエリ (/graphify query "…") で必要な情報だけを取り出せる — §6のアイデアを実践した形だ。重要なポイント:セマンティック抽出はOpenRouter(deepseek/deepseek-v4-flash)経由で実行され、Claudeのトークンを消費しない — 中規模プロジェクトのグラフ構築コストはOpenRouterで~$0.10、セッショントークンはゼロ。

上記リポジトリ(graphify/フォルダ、./setup.sh)に含まれる設定内容:

  • OpenRouterバックエンド(~/.graphify/providers.json、モデルはGRAPHIFY_OPENROUTER_MODELで変更可)
  • SessionStart-フックによる自動watch:グラフが存在すれば変更を監視して更新し、未初期化のプロジェクトでは「/graphify . を実行してください」と表示するだけ(うっかり開いたルートや巨大フォルダがトークンを食い尽くさないよう配慮)
  • シンプルな no-media トグル(touch ~/.graphify/no-media)— ignoreファイルを手動編集せずに画像・PDF・動画をグラフから除外
  • セキュリティ修正:.graphifyignore.gitignore を「上書き」しなくなった(置換ではなくマージ、PR #1364 としてアップストリームに提出済み)、さらに .gitignore 対象ファイルがグラフに含まれた状態でコミットされないよう pre-commit-guard を追加。

Caveman(§4)が3層目を担う — モデル自身の出力。rtk + graphify + caveman = コマンド入力、リポジトリコンテキスト、モデル出力をそれぞれカバー。ただし文章編集作業では caveman はオフにした方がいい(「normal mode」)— 簡潔すぎる出力スタイルが校正の邪魔になる。

節約チェックリスト

アプローチ節約効果
短いコンテキストのサブエージェント長いセッションで2〜5倍
ルーティンに中国製モデル価格で5〜10倍($30 vs $200)
常駐MCPの代わりにスキル1.5〜2倍
出力フィルタリングのフックテスト/ログタスクで1.5〜3倍
コンパクトなスクリーンショットビジュアルタスクで1.5〜2倍
全コンテキストの代わりにグラフ/RAG3〜5倍
単純タスクでreasoningを無効化1.5〜2倍
サブエージェントに--bareモード毎回の起動で1.5〜2倍
プラン承認付きフレームワーク間接的 — やり直しの削減
rtk — コマンド出力の圧縮(PreToolUse-フック)git/docker/pytest/ログで1.5〜3倍
graphify — 全コンテキストの代わりにグラフ(セマンティクスはOpenRouter)大規模リポジトリのナビゲーションで最大10倍;構築~$0.10、Claudeトークン不使用

いくらでも使い込める — 月額$200のアカウント10個でも限界ではない。でも、それは効率性の指標ではない。目標は、品質を犠牲にせずにコストを少なくとも10分の1に減らすこと。