◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/API & SDK
⬡ API & SDK/2026-06-24上級

ツール定義を一行直しただけで、キャッシュが丸ごと作り直しになりました — cache_control ブレークポイントの置き場所

ヒット率が突然ゼロに張り付いた原因は、揮発するブロックを安定したブロックより上流に置いていたことでした。prefix キャッシュのカスケード失効の仕組みと、安定→揮発でブロックを並べ替え、4つしかない cache_control ブレークポイントをどこに置くかを実装と判断表で整理します。

claude-api83prompt-caching15cost-optimization28context-management5performance4

✦ プレミアム記事

ある朝、個人開発で続けている Dolice Labs の4サイトの自動投稿パイプラインの API コストを見直していて手が止まりました。リクエスト本数も投入トークン数もほとんど変わっていないのに、cache_read_input_tokens がほぼゼロに張り付いていたのです。前週まではプレフィックスの大半がキャッシュから読まれていたはずでした。

直前にやった変更は一つだけ、思い当たりました。ツール定義の description を一行だけ手直ししていたのです。日本語の言い回しを整えただけのつもりでした。けれどその一行が、その下にぶら下がっていた system プロンプトも few-shot 例も、丸ごとキャッシュの作り直しに追い込んでいました。プロンプトキャッシュは「ブロック単位」で効くものではなく「先頭からの連続した一致(prefix)」で効くものだ、という当たり前の事実を、コストの数字で思い出させられた朝でした。

この記事は、その「カスケード失効」がなぜ起きるのか、そしてブロックの並び順とブレークポイントの置き場所をどう設計すれば、揮発する部分を直しても安定した部分のキャッシュが生き残るのかを、実装と判断表でまとめたものです。

prefix キャッシュは「ブロック」ではなく「先頭からの一致」で効く

prompt caching を理解するうえで一番誤解しやすいのが、ここだと感じています。cache_control を付けたブロックだけが独立してキャッシュされるわけではありません。実際には、リクエストの先頭から cache_control ブレークポイントまでの連続したプレフィックス全体が一つのキャッシュエントリになります。

リクエストは決まった順序で連結されます。tools → system → messages の順です。キャッシュの照合は毎回この連結された列の先頭から行われ、「前回と完全に一致する最長のプレフィックス」までがキャッシュから読まれます。途中で一文字でも違えば、その地点から後ろは一致しなくなり、新しく書き直し(cache creation)になります。

私のケースで起きていたのはまさにこれでした。tools は最上流にあります。そのツール定義を一行直したことで、tools の途中で前回との一致が途切れ、その後ろに続く system も messages も「一致しないプレフィックス」になってしまったわけです。下流のブロックの中身は一切変えていないのに、上流が動いた瞬間に全部が巻き添えになる。これがカスケード失効です。

逆に言えば、揮発するものを下流に、安定したものを上流に置くだけで、この巻き添えはほとんど防げます。

usage の4つの数字を正しく読む

並べ替えの効果を判断するには、usage を正しく読めることが前提になります。私が毎回確認しているのは次の4つです。

フィールド意味おおまかな課金感
cache_creation_input_tokens新しくキャッシュに書き込んだトークン通常入力より割高(5分TTLで約1.25倍、1時間TTLで約2倍)
cache_read_input_tokensキャッシュから読めたトークン通常入力の約0.1倍と安い
input_tokensキャッシュ対象外の素の入力通常価格
output_tokens生成された出力出力価格

健全な状態では、2回目以降のリクエストで cache_read_input_tokens が大きく、cache_creation_input_tokens が小さい(変わった末尾だけ)はずです。私の障害時は逆で、毎回 cache_creation_input_tokens が膨らみ cache_read_input_tokens がほぼゼロでした。「creation が毎回出続けている」のは、上流のどこかが毎回変わっているサインだと考えて、まず疑うようにしています。

def cache_health(usage) -> dict:
    created = usage.cache_creation_input_tokens or 0
    read = usage.cache_read_input_tokens or 0
    fresh = usage.input_tokens or 0
    cacheable = created + read
    # キャッシュ可能だった分のうち、実際に読めた割合
    read_ratio = read / cacheable if cacheable else 0.0
    return {
        "read_ratio": round(read_ratio, 3),
        "created": created,
        "read": read,
        "uncached": fresh,
    }

read_ratio が 2回目以降も低いままなら、TTL 切れ(時間の問題)か、上流の揮発(並び順の問題)のどちらかです。本数を増やしても下がらず、間隔を詰めると改善するなら TTL 側。間隔に関係なく下がりっぱなしなら、並び順側を疑います。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦上流のブロックが1つ変わると下流のキャッシュが全て失効する「カスケード失効」の仕組みを、usage の cache_creation_input_tokens と cache_read_input_tokens の読み方とあわせて把握できます
✦安定→揮発(tools → system → 大きな定数 → 動的参照 → 会話履歴)でブロックを並べ替え、最大4つのブレークポイントをどこに spend するかの判断表を持ち帰れます
✦並べ替え後にヒット率の回帰を検出する最小スクリプト(cache_read 比率の閾値監視)を、無人パイプラインに組み込める形で示します
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ API & SDK2026-09-07
キャッシュ読み取りが 75% 安くなっても、請求の下がり方は構成しだいで 10 倍違います
Fable 5.1 と Mythos 5.1 でキャッシュ読み取りの倍率が 0.1 から 0.025 へ変わりました。自分のトークン内訳から削減幅を先に見積もる手順と、倍率を定数で持つコードの直し方をまとめます。
⬡ API & SDK2026-04-26
Claude API のプロンプトキャッシュで月額コストを半分にした実装メモ
長文のシステムプロンプトを毎リクエスト送る本番ワークロードでは、プロンプトキャッシュの設計次第で月額コストが大きく変わります。ヒット率の計測から始める手順、TTLの選択、トークン下限と4ブロック上限、toolsを1つ足してヒット率が0になった失敗談に加え、ヒット率から入力コストを逆算する計算と損益分岐(5分TTLで約22%、1時間TTLで約53%)まで、半年の運用実例でまとめました。
⬡ API & SDK2026-05-25
二段構えのモデル構成 — Haiku 4.5 オーケストレーター × Opus 4.6 ワーカーで保つコストと品質の均衡
オーケストレーションをHaiku 4.5に、専門タスクをOpus 4.6に任せる二段構えの構成を、公表単価に当てた月次試算つきで書き残します。ワーカーに任せる5つの判定基準、ストリーミングの使い分け、詰まった落とし穴、そして来なかった値上げに備えて設計を動かしてしまった失敗まで。