powered by TechFeed
表示モード
Deep Dive

Claude Codeのコストが跳ね上がる本当の原因と、キャッシュ活用の最適解をAnthropicのガイドから読み解く

8月15日、insideai.newsが「Anthropic Explains How to Cut Claude Code Costs with Prompt Caching」と題した記事を公開した。Anthropicが公開した技術ガイドをもとに、Claude Codeのコスト構造と、プロンプトキャッシングを活用した削減策を体系的に解説している。Claude Codeを使い込んでいると、想定外にコストやUsage Limitの消費が積み上がることがある。Anthropicのガイドは、その原因を構造的に説明しており、設定1つで大きく改善できる余地があることを示している。まず知るべき「2フェーズ課金」の非対称性すべてのリクエストはGPU上で2段階に分かれて処理される。

8月15日、insideai.newsが「Anthropic Explains How to Cut Claude Code Costs with Prompt Caching」と題した記事を公開した。Anthropicが公開した技術ガイドをもとに、Claude Codeのコスト構造と、プロンプトキャッシングを活用した削減策を体系的に解説している。

Claude Codeを使い込んでいると、想定外にコストやUsage Limitの消費が積み上がることがある。Anthropicのガイドは、その原因を構造的に説明しており、設定1つで大きく改善できる余地があることを示している。

まず知るべき「2フェーズ課金」の非対称性

すべてのリクエストはGPU上で2段階に分かれて処理される。

  • Prefill(プリフィル):会話の文脈全体(システムプロンプト、ユーザー指示、Claudeが開いたファイル、コマンド出力)を読み込む。これが入力トークンだ。
  • Decode(デコード):出力トークンを1つずつ生成する。200トークンの応答であれば、200回のデコードステップが走る。

重要なのは価格差だ。Decodeはトークンあたりの処理時間が長いため、出力価格はおよそ入力の5倍に設定されている。そしてClaude Codeの場合、出力トークンの大部分は「Thinking tokens」——モデルが応答前に推論に使うトークン——が占める。この推論量を制御するのが/effort設定であり、モデル選択と同様にセッションをまたいで維持されるデフォルト値として機能する。

単純な作業であれば、claudeコマンドのオプションで1セッション分だけThinkingを無効化できる。まず/model/effortを新しいセッションで実行して現在の設定を確認することをAnthropicは推奨している。

コスト削減の本命:プロンプトキャッシング

プロンプトキャッシングは、直前のリクエストと同じトークン列で始まる場合、その共有プレフィックスの計算済み状態を再利用する仕組みだ。

操作 コスト
キャッシュ書き込み 通常入力価格の最大2倍
キャッシュ読み込み 通常入力価格の0.1倍

書き込みは1回だけ発生し、以降のターンはすべて0.1倍で読み込める。Claude Codeはこのキャッシングを自動で管理しているが、ユーザーの操作によって意図せず破壊されることがある。

キャッシュが無効化される主なケース:

  • モデルの切り替え(plan modeの出入りを含む)
  • effortレベルの変更
  • Fast modeの変更(キャッシュキーの一部になっているため、セッション開始時に有効化しておくべき)
  • 会話のCompact(古い会話が短い要約に置き換えられるため)
  • サブスクリプションでは1時間、APIキーでは5分でキャッシュが失効。--cache-ttlフラグで最大1時間まで延長可能
  • 古いセッションの再開はほぼ確実にフルプリフィルが走る

キャッシュを保持したまま失敗したターンを取り消したい場合は、CompactではなくRewindを使う。Rewindはターンをエンドカットするだけでキャッシュを維持できる。

「コンテキスト肥大化」が本当のコスト要因

ガイドが強調するのは、一度Claudeが読んだファイルやコマンド出力はセッション中の全後続ターンに再送されるという点だ。キャッシュで安くはなるが、タダではない。また肥大化したコンテキストは無関係なデータをモデルが処理し続ける非効率も生む。

主なコンテキスト増大の要因と対策:

  • CLAUDE.mdは必要な内容に絞り、ワークフロー指示はskillsに移動する(使用時のみ読み込まれる)
  • 不要なMCPサーバー/mcpで無効化する
  • コマンド出力は30,000文字未満であれば全文が会話に追加される。テストランナーの400行の出力もそのまま残り続ける。頻繁に使うコマンドにはquietフラグを付けるか、Hookでノイジーなコマンドを実行前に書き換える
  • タスクの特定性を上げる。「テストが落ちている」ではなく「src/auth/login_test.pyの失敗しているテストを修正して」と指示すれば、Claudeが余分なファイルをgrepして読み込む量を減らせる

セッション管理とSubagentsの使い方

長いセッションは、同じ作業を複数の短いセッションに分けるより高くなる。ターン40では前の39ターンを毎回再読するためだ。

新しいタスクに入るときは新しいセッションを始め、タスクの前半が終わったらCompactする。セッションを後で復元したい場合は事前に/exportを実行する。また、--auto-compactフラグを使えば自動的にコンパクトを行うことができる(※利用可能なバージョン条件については元記事および公式ドキュメントを参照のこと)。

Subagentsは、ノイジーな処理をメインコンテキストから切り離す手段として有効だ。Subagentは独自のコンテキストウィンドウを持ち、最終的な回答のみをメインセッションに返す。ログ解析など出力が多い使い捨ての処理に向いており、model: haikumodel: sonnetでSubagentを定義すれば繰り返しノイジーなタスクを安価に処理できる。

Anthropicが示すコスト管理の4つの優先順位

ガイドが提示するコスト管理の優先順位は以下の4段階で構成されている。

  1. モデル選択:処理内容に見合ったモデルを選ぶことが最初の最適化ポイント
  2. effortレベル:Thinking tokensの量を制御し、出力コストの大部分を左右する
  3. コンテキストサイズ:肥大化を抑えることでキャッシュ効果を最大化する
  4. セッション長:セッションを適切な単位で区切ることで再読コストを抑える

要するにコストは、どれだけ多くのトークンがコンテキストに入り、何ターン維持され、同時にいくつのコンテキストが走るか、の掛け算で決まる。

詳細はAnthropic Explains How to Cut Claude Code Costs with Prompt Cachingを参照していただきたい。