Claude CodeのmodelPricingで契約単価をコストに反映する設定
modelPricingのmultiplierとoverridesで、/usageやステータスラインのコスト表示を契約単価に合わせる設定手順とよくあるつまずきをまとめます。
Claude Codeが /usage やステータスラインに表示するコスト金額は、既定では一律のリスト価格で計算されます。組織が契約単価を結んでいる場合、この表示額は実際の請求と食い違います。modelPricing は、このコスト表示と --max-budget-usd の上限判定を契約単価に合わせて補正する設定です。設定できる人と書き方、反映される画面と反映されない画面、そしてよくあるつまずきを取り上げます。
Claude CodeのmodelPricingで何が変わるか
modelPricing とは、Claude Codeが算出するコスト表示を契約単価に置き換えるためのmanaged設定です。Anthropicへの請求額そのものは変わりませんが、コスト表示と --max-budget-usd の上限判定に使われる単価が変わります。
反映先は5か所あります。/usage のSession欄、ステータスラインのコスト表示、Agent SDKの total_cost_usd、--max-budget-usd の上限判定、そしてOpenTelemetryのコストメトリクスとイベントです。いずれもClaude Codeがローカルでトークン数から計算する見積もり額で、契約単価が設定されていればその単価で、なければリスト価格で算出されます。--max-budget-usd はprint mode専用の上限で、サブエージェントの消費もこの上限にカウントされます。上限に達すると新しいサブエージェントの起動が Budget limit reached で失敗し、実行中のバックグラウンドサブエージェントも停止します。modelPricing を設定していれば、この上限判定にも契約単価が使われます。
利用にはClaude Code v2.1.242以降が必要です。v2.1.243前後の変更点はv2.1.243のリリースノートにもまとまっています。契約単価を結ぶのは、主にClaude Consoleでトークン課金されているワークスペースや、Amazon Bedrock・Google CloudのAgent Platform・Microsoft Foundryなどクラウド経由でトークン課金されている組織です。Claude for TeamsやEnterpriseの席数ベースの契約は利用量が席の割り当てから消費される仕組みのため、この設定を使う場面自体が少なくなります。
Claude Codeを組み込んだホストアプリケーションでは、環境変数 CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST を設定したうえで、Agent SDKの managedSettings オプションから独自のレート表を渡すこともできます。これはどの管理設定ソースも modelPricing を配布していないときだけ使われ、Claude Code v2.1.246以降が必要です。
スコープはManagedに固定されています。個人の設定ファイルには効きません。ユーザー設定・プロジェクト設定・ローカル設定、--settings フラグ、Windowsのユーザー書き込み可能なHKCUレジストリのいずれに書いても無視されます。設定できるのは、サーバー管理設定・MDMポリシー・managed-settings.json・ポリシーヘルパーのいずれかで配布したときだけです。設定が思ったとおりに反映されない場合の切り分けは、Claude Code設定が反映されない原因の探し方で扱っている配置・書式の見落としも合わせて確認すると早く原因にたどり着けます。
multiplierとoverridesの書き方
modelPricing は multiplier と overrides の2つのフィールドを持つオブジェクトです。どちらか一方だけでも、両方でも設定できます。
multiplier は0より大きく1以下の数値です。overrides の行があるかどうかに関係なく、Claude Codeが計算するすべてのコストにこの倍率をかけます。overrides は、モデルIDをキーにしたレートのマップです。1つのモデルにつき input / output / cacheRead / cacheWrite の4つを、100万トークンあたりの米ドル単価(0から10000の範囲)としてすべて指定します。cacheWrite は5分キャッシュと1時間キャッシュの両方の書き込みに同じ値が使われ、TTLごとに分けることはできません。
{
"modelPricing": {
"multiplier": 0.85,
"overrides": {
"claude-sonnet-4-6": {
"input": 2.4,
"output": 12,
"cacheRead": 0.24,
"cacheWrite": 3
}
}
}
}レートは書いたとおりの値がそのまま使われます。fast modeの追加料金や、米国内推論限定のレートが自動的に上乗せされることはありません。multiplier も同時に設定していれば、overrides の行にもその倍率が掛け合わされます。パースできないレートや multiplier を含む行は警告なく無視され、残りの設定はそのまま使われます。
契約単価を反映させる手順
- 契約書の単価を確認する。Claude Codeは契約内容やClaude Consoleからレートを自動取得しません。契約が変わったら手動で書き直します。
- 設定を書く。一律の割引だけなら
multiplier、モデルごとに単価が違うならoverrides、両方が必要ならその両方を書きます。 - Managed設定として配布する。サーバー管理設定、MDMポリシー、
managed-settings.json、ポリシーヘルパーのいずれかで配ります。ユーザー設定やプロジェクト設定に置いても反映されません。
配布が効いているかどうかは、配布先のセッションで /usage を実行して確認します。
/usageSession欄の Total cost の行に「at your organization's configured rates」という注記が付けば、契約単価が適用されています。この金額はあくまで見積もりで、正式な請求額はClaude Consoleの利用状況ページで確認します。サーバー管理設定を使っている場合、セッション開始直後はまだ設定の取得が終わっておらず、取得が確認できるまでの間はリスト価格のまま表示されます。
注記が付かないときは、/status の Setting sources 行でどの管理設定ソースが選ばれたかを確認します。選ばれたソースは (remote)(サーバー管理設定)や (file)(managed-settings.json)のようなラベルとともに表示され、別のソースに優先順位で上書きされて見送られた場合は Skipped sources の行にその名前が出ます。行そのものが表示されないなら、配布先にどの管理設定ソースも届いていません。レートや multiplier の値がパースできずに落とされたエントリーがある場合は、claude doctor の出力に警告が残ります。設定はエラーを出さずに静かに無視される仕様なので、意図した値と /usage の表示が食い違うときはこの2つのコマンドで切り分けるのが確実です。
multiplierとoverridesの使い分け早見表
| 契約の形 | 設定 | 理由 |
|---|---|---|
| 全モデル一律の割引率だけ契約している | 設定multiplier のみ | 理由1つの数値ですべてのモデルに適用され、新しいモデルが増えても自動的にカバーする |
| モデルごとに異なる単価を契約している | 設定overrides のみ | 理由input / output / cacheRead / cacheWriteの4レートをモデルごとに個別指定できる |
| 割引率に加えて一部モデルだけ別単価がある | 設定両方 | 理由overrides の行にも multiplier の倍率がそのまま掛かる |
| ゲートウェイ経由のエイリアスモデルを使っている | 設定overrides のキーにエイリアスIDを指定 | 理由ビルトインモデルのIDと違い、指定した1つのIDだけに適用される |
レートが適用されるモデルの判定ルール
overrides のキーがどのモデルに効くかは、キーの種類で決まります。判定は3通りです。
キーがClaude Codeがビルトインモデルの識別に使うID(claude-sonnet-4-6 のようなモデル自身のIDでも、Bedrock・Agent Platform・FoundryのIDでも同じ)であれば、その行は日付付きスナップショットIDやプロバイダー固有IDも含め、そのモデルのすべての呼び名に適用されます。ビルトインモデルのIDではないキー(ゲートウェイのエイリアス名など)は、書いたその1つのIDにしか適用されません。あるIDがビルトインモデルのキーによる行にも、完全一致する別のキーによる行にも該当する場合は、完全一致する行が優先されます。
Bedrockのアプリケーション推論プロファイルは、modelOverrides マップや bedrock:GetInferenceProfile の参照によって実際のモデルへ解決されたあと、そのモデルの行が適用されます。
たとえば overrides に claude-sonnet-4-6 の行と、社内ゲートウェイのエイリアス internal-sonnet の行を両方書いたとします。実際に使われるモデルIDが internal-sonnet と完全一致すればそちらの行が優先され、claude-sonnet-4-6 の行は日付付きスナップショットIDなど、そのモデルの他の呼び名にだけ使われます。
よくあるつまずき
- 個人のsettings.jsonに書いて反映されない。
modelPricingはスコープがManaged固定なので、ユーザー・プロジェクト・ローカルのどの設定ファイルに書いても無視されます。組織の管理者がManaged設定として配布する必要があります。 /modelピッカーの単価表示が変わらない。ピッカーに出る100万トークンあたりの単価は常にリスト価格のままで、契約単価には更新されません。契約単価が反映されるのは/usageやステータスラインなど実際の消費額を示す画面だけです。- 設定した直後は反映されて見えない。サーバー管理設定を使う場合、そのセッションが設定を取得し終えるまではリスト価格で表示されます。設定漏れではなく取得待ちのケースもあるため、時間を置いてから
/usageで確認します。 - cacheWriteのTTLを分けたい。
cacheWriteは5分キャッシュと1時間キャッシュの書き込みをまとめて1つの単価で扱う仕様で、TTLごとに別の単価は設定できません。 - 一部のモデルだけレートが効かない。レートの行やmultiplierがパースできない形式だと、その行だけ静かに無視され、他の設定はそのまま使われます。エラーにならないため、意図した値と
/usageの表示を突き合わせて確認するのが安全です。
まとめ
modelPricing は、Claude Consoleでトークン課金されているワークスペースや、Bedrock・Agent Platform・Foundry経由で契約単価を結んでいる組織の管理者が、/usage やステータスライン、Agent SDK、OpenTelemetryの表示額を実際の請求に近づけるための設定です。個人の開発者が設定ファイルに書いても効かない点と、/model ピッカーの単価はリスト価格のまま変わらない点の2つを押さえておけば、/usage の注記で反映を確認するところまで迷わず進められます。ステータスラインの表示項目やAgent Teamsのコスト管理と合わせて設定しておくと、チーム全体のコスト可視化がより実態に近づきます。コスト警告のメッセージ自体を消したいだけならDISABLE_COST_WARNINGSで足ります。管理設定として配布できる唯一の設定が modelPricing です(ホスト組み込み時のみ、Agent SDKの managedSettings 経由の指定もあります)。