CLAUDE LABEN
MODEL — Claude Opus 4.8とHaiku 4.5がMessages APIで利用可能になり、コーディングやエージェント処理に使えますCODE — Claude Codeが/rewindで/clear前の会話に戻れるようになり、MCPの信頼性とOAuthの再試行も改善されましたCODE — ストリーミング時のCPU使用が約37%削減され、長時間セッションの安定性が向上しましたCLOUD — ClaudeがMicrosoft Foundry(Azure)で一般提供され、Azureネイティブで利用できるようになりましたSECURITY — 静的APIキーをWIF(短命・スコープ付き資格情報)へ置き換えられるようになりましたPOLICY — 米政府がMythos 5モデルを約100社・連邦機関へ限定提供することを許可しましたMODEL — Claude Opus 4.8とHaiku 4.5がMessages APIで利用可能になり、コーディングやエージェント処理に使えますCODE — Claude Codeが/rewindで/clear前の会話に戻れるようになり、MCPの信頼性とOAuthの再試行も改善されましたCODE — ストリーミング時のCPU使用が約37%削減され、長時間セッションの安定性が向上しましたCLOUD — ClaudeがMicrosoft Foundry(Azure)で一般提供され、Azureネイティブで利用できるようになりましたSECURITY — 静的APIキーをWIF(短命・スコープ付き資格情報)へ置き換えられるようになりましたPOLICY — 米政府がMythos 5モデルを約100社・連邦機関へ限定提供することを許可しました
記事一覧/API & SDK
API & SDK/2026-07-01中級

新モデルが増えてもコスト集計をズラさない Claude API 単価レジストリと fail-closed 設計

Opus 4.8 と Haiku 4.5 が Messages API に加わったとき、コード中に散らばった単価がコスト集計を静かに狂わせます。単価を1か所に集約し、未知モデルを fail-closed で弾く実装を、実コード付きで紹介します。

Claude API96コスト管理11モデル単価運用10TypeScript18

プレミアム記事

6月30日に Opus 4.8 と Haiku 4.5 が Messages API に加わった翌朝、私の手元の夜間コスト集計は静かにズレていました。エラーは一行も出ていません。ただ、前日比のグラフが不自然に低かったのです。

原因はすぐに分かりました。新しいモデルIDのリクエストはちゃんと成功して課金もされているのに、私が書いた集計スクリプトの単価テーブルにそのIDが無く、該当分が単価ゼロ=コスト0円として素通りしていただけでした。落ちてくれた方がまだ親切で、黙って過少報告されるのが一番たちが悪いと感じた瞬間です。

個人開発で複数サイトの自動投稿を回していると、新モデルは「試したい対象」であると同時に「会計を壊しに来る存在」でもあります。ここでは、その壊れ方を二度と起こさないための単価レジストリの作り方を、動くコードでまとめます。

なぜ単価がコード中に散らばると壊れるのか

最初に書いたとき、私はコストを出したい場所それぞれに if (model === "...") rate = ... を直書きしていました。集計スクリプト、月次の請求リコンサイル、ダッシュボードの3か所です。

この形は、モデルが固定されている間は何の問題も起こしません。壊れるのは「新しいモデルIDが増えた瞬間」だけです。そして増えた瞬間に壊れることが、最悪のタイミングを意味します。新モデルを試すのは普通、コストを注視したい時期だからです。

散在した単価の問題は3つに整理できます。

症状起きること気づきにくさ
未知モデルが単価0新モデル分がコスト0円で集計される例外が出ないので非常に高い
更新漏れ3か所のうち1か所だけ旧単価のまま場所ごとに金額が食い違う
キャッシュ未考慮プロンプトキャッシュの読み書きを入力単価で計算キャッシュ多用時ほど誤差が拡大

どれも「例外が飛ばない」のが共通点です。だからこそ、設計でしか防げません。

単価を1か所に集約する

まず、単価の正本(single source of truth)を1つのレジストリに固めます。ポイントは、表示価格をハードコードする代わりに「モデルIDをキーにした構造」を持つことです。単価そのものは更新されますが、構造は安定します。

// pricing.ts — 単価の正本。ここ以外に単価を書かない
// 値は USD / 100万トークン。⚠️ 必ず公式の最新値で埋めること
export interface ModelRate {
  input: number;        // 入力トークン単価
  output: number;       // 出力トークン単価
  cacheWrite5m: number; // 5分キャッシュ書き込み(= input の 1.25倍が目安)
  cacheWrite1h: number; // 1時間キャッシュ書き込み(= input の 2倍が目安)
  cacheRead: number;    // キャッシュ読み込み(= input の 0.1倍が目安)
}
 
// 単価は公式の料金ページで最新値を確認してから埋めます。
// モデル更新時に変わるため、ここに「記憶で書いた数字」を置かないのが要点です。
const RATES: Record<string, ModelRate> = {
  "claude-opus-4-8": rate(15.0, 75.0),
  "claude-sonnet-4-6": rate(3.0, 15.0),
  "claude-haiku-4-5": rate(/* input */ 0, /* output */ 0), // TODO: 公式値で更新
};
 
// 入力・出力単価からキャッシュ系を倍率で導出するヘルパー。
// 倍率(5分1.25倍・1時間2倍・読込0.1倍)は単価が変わっても安定します。
function rate(input: number, output: number): ModelRate {
  return {
    input,
    output,
    cacheWrite5m: input * 1.25,
    cacheWrite1h: input * 2.0,
    cacheRead: input * 0.1,
  };
}
 
export { RATES };

ここで rate() ヘルパーを挟んでいるのは意図的です。入力単価さえ正しく入れれば、キャッシュ書き込み・読み込みの単価が自動で揃います。私はかつて「入力単価だけ更新してキャッシュ単価を直し忘れる」を実際にやったので、導出に寄せておくと安心できます。

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

この記事の続きを読む

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

この記事で得られること
モデルIDをキーにした単価レジストリと、usageブロック(キャッシュ込み)から実コストを出す完全なTypeScript実装
未知モデルを「黙って0円」にしないfail-closed設計と、新モデル投入を事故にしないCIテスト
5分/1時間プロンプトキャッシュの倍率を含めたコスト按分と、私自身の自動投稿運用で効いた判断
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

API & SDK2026-06-22
Claude API のコスト計算が請求と合わないとき — usage の4トークンバケットを正しく会計する
プロンプトキャッシュを有効にすると、自前のコスト集計とコンソールの請求額がずれます。usage が返す4つのトークンバケットを重み付きで会計し、突合できる台帳を組む方法をまとめました。
API & SDK2026-06-17
Claude API のドキュメント抽出が「確信を持って間違える」とき — 検証層の設計メモ
Claude API で請求書や契約書を構造化抽出するとき、最も怖いのは例外ではなく「もっともらしく間違った JSON」です。スキーマ検証・算術整合・二重抽出の一致率で誤抽出を本番前に捕まえる検証層を、TypeScript の実装とともにまとめました。
API & SDK2026-06-17
Claude API のマルチテナント SaaS で「請求が合わない」を消す — テナント分離とコスト帰属の実装メモ
Claude API の SaaS をマルチテナント化したとき最初に壊れるのはコスト帳尻です。計測の単一窓口・原子的カウンター・Anthropic 請求との突合・テナント分離の敵対的検証まで、本番で動く TypeScript と運用判断を実装メモとしてまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →