5 月 5 日 の朝 (01:45) に「Cache TTL が 1 時間から 5 分に silent flip した話」 を 公開 した。 5 月 6 日 の 朝、 Anthropic は v2.1.129 を 出荷 し、 release note の 1 行 で 修正 を 出荷 した。
Fixed 1-hour prompt cache TTL being silently downgraded to 5 minutes
そして、 これ は 5 日 の 中 で 2 件目 の cache TTL 関連 の 修正。 5 月 1 日 の v2.1.126 に 次 の 項目 が 既 に 含まれて いた。
Fixed subscribers who set DISABLE_TELEMETRY falling back to 5-minute prompt cache TTL instead of 1 hour
5/5 の 記事 を 読んだ 方 へ の 続編 と して、 5/6 の 段 で 起こった 事 と、 自分 の セッション 記録 240 件 で 実測 した 結果 を 共有 する。
5 日 で 2 件 の 修正:並び の 構造
5 月 1 日、 v2.1.126。 個人 の 情報 の 公開 を 拒否 した 加入者 (DISABLE_TELEMETRY を 設定 した 人) が 沈黙 で 5 分 の TTL に 振り分けられて いた 連動 を 修正。 関連 の 問題 報告 #45381 は 既 に 閉鎖。
5 月 6 日、 v2.1.129。 個人 の 情報 の 設定 と 関係 ない、 全体 の 沈黙 の 短縮 を 修正。
5 日 で 2 件、 全て cache TTL の 表面 に 集中。 「閉鎖、 計画 なし」 の 構え から、 能動 的 な 工学 の 対象 に 変わった 事 を 示す。 2026 年 4 月 13 日 の Register の 記事 で、 公式 が 「TTL の 変更 は 加入者 の 報告 した 規模 の 枠 の 消費 を 起こして いない」 と 述べた 時 から の、 最大 の 構え の 変化。
自分 の セッション 240 件 で 実測
「明日 計測 する」 の 約束 では なく、 直近 の 自分 の Claude Code の セッション 記録 240 件 (2026-04-15 以降、 約 52,000 件 の 助手 の 返信) を Python で 解析 した。 関連 の 領域 は usage.cache_creation の 内部 の 内訳。
import json
from collections import defaultdict
from pathlib import Path
data = defaultdict(lambda: {'h1': 0, 'm5': 0, 'cr': 0, 'msgs': 0})
for f in Path("~/.claude/projects/").expanduser().rglob("*.jsonl"):
current_version = None
for line in f.open():
obj = json.loads(line)
if obj.get('version'):
current_version = obj['version']
msg = obj.get('message', {})
usage = msg.get('usage') if isinstance(msg, dict) else None
if not usage:
continue
cc = usage.get('cache_creation', {})
if not isinstance(cc, dict):
continue
date = obj.get('timestamp', '')[:10]
key = (date, current_version)
data[key]['h1'] += cc.get('ephemeral_1h_input_tokens', 0)
data[key]['m5'] += cc.get('ephemeral_5m_input_tokens', 0)
data[key]['cr'] += usage.get('cache_read_input_tokens', 0)
data[key]['msgs'] += 1
結果 の 主要 な 表 (7 行)。
| 日付 | 出荷 の 番号 | 1h % | 5m % |
|---|---|---|---|
| 2026-04-15 | 2.1.87 | 25.4 % | 74.6 % |
| 2026-04-17 | 2.1.87 | 68.2 % | 31.8 % |
| 2026-04-23 | 2.1.118 | 95.9 % | 4.1 % |
| 2026-04-29 | 2.1.121 | 93.6 % | 6.4 % |
| 2026-05-01 | 2.1.121 | 100.0 % | 0.0 % |
| 2026-05-05 | 2.1.121 | 94.3 % | 5.7 % |
| 2026-05-06 | 2.1.121 | 100.0 % | 0.0 % |
自分 の 仕事 で 起こって いた 事。 4/23 の 前 (v2.1.87 の 期間) は 5 分 の TTL が 主導 (74.6 %)。 4/14 の v2.1.108 で ENABLE_PROMPT_CACHING_1H=1 の 任意 の 設定 が 出荷 され、 自分 は 設定 を 入れた。 4/23 以降 (v2.1.118 + 環境 の 設定) で 1 時間 が 主導 (95.9 %)。 5 月 1 日 と 5 月 6 日 で は 100 % が 1 時間。
ただし 重要 な 注意。 自分 の セッション は 環境 の 設定 で 任意 に 入る 経路 で あって、 v2.1.129 が 修正 した 自動 の 既定 の 経路 の 検証 で は ない。 環境 の 設定 を して いない 加入者 が v2.1.129 に 上書き した 場合、 同じ 形 (5 分 の % が 0 % に 近づく) が 自動 で 反映 される はず。
自分 の 仕事 で 確認 する 手順 (40 行 の Python)
「自分 の 仕事 で 修正 が 効いて いる か」 を 確認 する 手順 を、 既存 の セッション 記録 から 計算 する 形 で 共有。 上 の Python の 短い 版。
import json
from pathlib import Path
cc_total = 0 # cache_creation
cr_total = 0 # cache_read
for f in Path("~/.claude/projects/").expanduser().rglob("*.jsonl"):
for line in f.open():
try:
obj = json.loads(line)
except:
continue
msg = obj.get('message', {})
usage = msg.get('usage') if isinstance(msg, dict) else None
if not usage:
continue
cc = usage.get('cache_creation', {})
if isinstance(cc, dict):
cc_total += cc.get('ephemeral_1h_input_tokens', 0)
cc_total += cc.get('ephemeral_5m_input_tokens', 0)
cr_total += usage.get('cache_read_input_tokens', 0)
print(f"cache_creation total: {cc_total:,}")
print(f"cache_read total: {cr_total:,}")
total = cc_total + cr_total
if total > 0:
print(f"cc / total ratio: {cc_total/total:.4f}")
実行 後、 cc / total ratio が 0.05 以下 で 1h TTL が 主導 で 動いて いる。 0.10 を 越えて いる 場合 は、 1h と 5m の 内訳 を 出して、 5m の 主導 が 残って いる か 確認。
残る 4 つ の 触媒
cache TTL の 修正 は、 5 月 5 日 の 記事 で 整理 した 退行 の 集まり の 1 件 だけ。 残り の 4 件 は 動いて いない:
- 上位 の 模型 の 符号化 の 増加 (1.35 から 1.46 倍 の トークン、 長 文脈 で 46 点 の 退行)、 問題 報告 #46917 は open
- 4 月 の 上位 の 枠 の 表示 の 問題 と 枠 の 仕組み の 使い 心地 は 戻って いない
- 2026-04-04 の 第三者 の 道具 の 方針 は 変わって いない
- HERMES.md / OpenClaw の 文字列 の 経路 の 問題 (HN #47963204 で 1,341 点、 718 件 の 書き込み) は 個別 の 返金 で 終わって いる
5 つ の 触媒 が 全て 動いて いる 状態 から、 4 つ が 動いて いる 状態 に 変わった。 移行 の 判断 が 五件 の 触媒 の 判断 から 四件 の 触媒 の 判断 に 変わる。
5 月 6 日 の 加入者 が 今 で きる 事
ひとつ目。 v2.1.131 (5/6 出荷) に 上書き。 v2.1.129 が cache TTL の 修正、 v2.1.130 と v2.1.131 は 後続 の patch で、 修正 の 撤回 の 様子 は 出荷 の 説明 で 見え ない。
ふたつ目。 修正 が 自分 の 仕事 に 反映 される 前 の 基準 を 取る。 まだ 上書き して いない 段 で、 上 の Python の 計算 を 走らせる。 1-3 日 後 の 数値 と の 差 が 答え。
みっつ目。 計測 する まで 移行 の 計画 を 修正 し ない。 出荷 の 説明 で 移行 の 判断 を 動かす と、 出荷 の 説明 自体 より 結果 が ぶれる。
よっつ目。 残り の 4 つ の 触媒 を 個別 に 追跡 する。 5 つ の 触媒 の 判断 から 4 つ の 触媒 の 判断 に 変わる だけ。 第 2 章 の 仕組み 自体 は 変わら ない。
5/5 の 記事 を 読んだ 方 へ
5 月 5 日 の Qiita 記事「Cache TTL が 1 時間から 5 分に silent flip した話、 Issue #46829 を 1 ヶ月後に postmortem として読み」 の 続編 と して、 5/6 v2.1.129 で 出荷 された 修正 の 中身 と、 残り の 触媒 の 状況 を 整理 した。 5/5 の 記事 の 末尾 で 推奨 した 環境 の 設定 で の 任意 の 1h TTL の 経路 は、 v2.1.129 が 自動 の 既定 を 修正 した 後 も 引き続き 有効。 環境 の 設定 を して いない 場合 は、 v2.1.129 へ の 上書き で 自動 で 反映 される はず。
英語 圏 で の 同 主題 の 整理 は Hashnode 版 と hatena ブログ 版 を 公開 して いる。
移行 を 検討 中 の 方 へ。 Claude Code 移行 の 手引き は、 本 記事 の 枠組み の 約 117 ページ の 判断 の 文書、 19 ドル。 第 1 版 の 加入者 は、 残り の 触媒 の 状況 が 変わった 場合 の 第 2 版 の 上書き を 無料 で 受け取る (5/22 出荷 を 5/15 の 監査 で 確定 する 予定)。 Token 関連 の 全体 像 は Token Book EN で 整理。 月次 の 更新 は CC Safety Lab Founder Membership (月 500 円)。
5/8 で 移行 の 手引き の 公的 な 告知 を 行う 予定 (今 は 第 1 版、 5/22 で 第 2 版 の 出荷 を 5/15 の 監査 で 確定 する 予定)。 残り の 4 つ の 触媒 が 5 月 の 半 ば で 同様 の 修正 の 流れ に 入る か、 入ら ない か で、 第 2 版 の 中身 の 重み が 大きく 変わる。