この記事について
各種AIの利用明細・課金明細は、プロバイダーごとに単位も粒度も形式も違います。Anthropic/OpenAIの直接API、AWS Bedrock/Google Vertex AI/Azure AI Foundry経由、GitHub Copilotのクレジット制、シートライセンス——これらを「同じ表」に載せて比較・最適化するための共通スキーマ案を、仕様書の体裁で書き起こしました。
- 名称:ACUS(AI Cost & Usage Schema)v0.1
- 位置づけ:FinOps Foundation の FOCUS 1.4 を骨格に、AI固有の列を FOCUS のカスタム列規約(
x_接頭辞)で追加した「橋渡し仕様」。FOCUS 1.5 でAI関連の属性が批准されたら、その意味と粒度に合わせて変換する前提 - 記法:要求水準は 必須/条件付き/推奨/任意 の4段階。一次資料で確認できていない箇所には ※ を付す
- 基準日:2026年9月10日
本稿は筆者個人の仕様書案であり、FinOps Foundation・Linux Foundation・各プロバイダーの公式仕様ではありません。列名・列挙値は議論のたたき台です。FOCUS 列の存在・型・NULL可否・条件付き必須は FOCUS 1.4 の定義を優先し、本稿の要求水準はそれを緩和しません。
1. 背景
1.1 2026年9月時点の標準化状況
| 取り組み | 状態 | 本仕様との関係 |
|---|---|---|
| FOCUS 1.4(FinOps Foundation) | 2026年6月4日批准。Invoice Detail/Billing Period の2データセットと47列を追加。1.3で非推奨となった ProviderName・PublisherName を削除し、ServiceProviderName・HostProviderName・InvoiceIssuerName に役割を分離 |
骨格として採用 |
| FOCUS 1.5(策定中・未批准) | 作業ドラフトでは、モデル識別(ModelDeveloper/ModelFamily/ModelId/ModelVersion)を新列ではなく SkuPriceDetails のプロパティとして取り込み済み(2026年7月20日マージ)。トークン種別(Input/Output/CacheRead/CacheWrite)は提案中。価格データセットは「SKU Price」の名称で策定中 |
移行先(14章) |
| Tokenomics Foundation(Linux Foundation) | 2026年6月3日に設立意向、8月4日に正式発足。FinOps Foundation と協働し、FOCUS へのトークン費用テレメトリ組込みをロードマップに掲げる。定義案・運営モデル案は公開済みだが、ACUS を置換する独立の課金明細標準の公開・批准は本稿執筆時点で確認できず | 動向監視 |
| OpenTelemetry GenAI semantic conventions |
gen_ai.client.token.usage(gen_ai.token.type=input/output)等。使用トークンと課金対象トークンの両方が得られる場合は課金対象を報告することが必須。安定度は Development |
計測値・帰属の取込元 |
| GitHub Copilot 従量課金化 | 2026年6月1日から GitHub AI Credits 制(1 AI Credit=0.01 USD)。入力・出力・キャッシュトークン×モデル別公示単価で算定。年契約の Pro/Pro+ は満了まで旧PRU制を継続可。コード補完等はクレジットを消費しない。コードレビューは AI Credits に加えて Actions 分も消費 | クレジット・シート・旧単位の正規化対象 |
| Anthropic Usage & Cost Admin API/OpenAI Usage・Costs API | 組織単位の使用量・費用を取得可能。両社とも Usage と Cost は集計軸が異なり、単純な1対1結合はできない | 主要な取込元(11章) |
| AWS/Azure/Google Cloud の FOCUS 対応 | 3社とも FOCUS 1.2 対応のエクスポートを提供(Google Cloud の専用エクスポートは Preview 表記)。1.4 への正規化は取込側の作業 | クラウド経由分の取込元 |
1.2 なぜ明細を並べられないのか
- 課金単位の混在:トークン(入力/出力/キャッシュ読/キャッシュ書/推論)、リクエスト(PRU)、シート、クレジット、Actions分、プロビジョンド時間
- 料金差要因の多さ:バッチ割、キャッシュ読み書きの単価差(保持時間別の差を含む)、長文脈サーチャージ、優先処理
- トークナイザ差:同一テキストでもモデル系列によりトークン数が異なるため、per-token 単価の横並び比較は成立しない
- 経路差:同一モデルでも直接/クラウド経由/Copilot経由で単価・粒度が異なる
- 帰属欠落:請求書には「誰が・どのワークフローで」が載らない
- 単価表の未分離:定価が明細行に埋め込まれ、契約比較・コミット最適化に使えない
2. 用語
| 用語 | 定義 |
|---|---|
| サービス提供者(Service Provider) | サービスを販売・提供する主体。FOCUS の ServiceProviderName(例:Anthropic、GitHub、AWS) |
| ホスト提供者(Host Provider) | リソースを実際に稼働させる基盤の提供者。FOCUS の HostProviderName(Bedrock 経由の Claude なら AWS) |
| 請求書発行者(Invoice Issuer) | 請求書を発行する主体。FOCUS の InvoiceIssuerName(販売代理店経由の場合は代理店) |
| モデル開発元(Model Developer) | モデルを開発した主体。上記のいずれとも一致しない場合がある。ACUS の x_ModelProvider
|
| 経路(Access Path) | モデルに到達する契約上・技術上の経路。ACUS の x_AccessPath
|
| 課金対象トークン(Billable Tokens) | サービス提供者が課金の根拠として計上したトークン数。FOCUS の ConsumedQuantity(ConsumedUnit=Tokens)で表す |
| 計測トークン(Measured Tokens) | 利用側がプロバイダー応答に依らず独自に推計したトークン数(トークナイザ推計等)。ACUS の x_MeasuredTokens
|
| 枠(Entitlement) | プラン・シート・月次クレジット等、事前に付与される消費可能量 |
| 帰属(Attribution) | 費用を部署・プロジェクト・利用者・ワークフローに割り当てること |
3. 適用範囲
対象
- LLM/埋め込み/画像・音声モデルの推論課金(トークン・リクエスト・秒・文字数・枚数)
- ファインチューニング、バッチ推論、プロビジョンドスループット
- エージェント製品のクレジット・シート課金(GitHub Copilot 等)
- クラウド経由のモデル利用(Bedrock/Vertex AI/Foundry)
- 付随課金(Web検索ツール呼び出し、ファイル保存、オーケストレーション手数料、コードレビューに伴う Actions 分)
対象外
- 自前ホスティングのGPU原価(FOCUS の Compute 行として別途扱う)
- 品質・精度の評価指標(コストのみ)
- 決済・認可のシーケンス(別稿「エージェント間 費用見積・同意・請求・照合シーケンス AECS」で扱う)
4. 設計原則
- P1 FOCUS優先:FOCUS 1.4 に存在する列は再定義せず、その定義・要求水準のまま使う
-
P2 拡張は
x_接頭辞:FOCUS のカスタム列規約に従い、将来の正式列と衝突しない - P3 三分離:使用量(A)・単価表(B)・枠(C)を別データセットにする
- P4 一行一単位:1行=1課金期間×1 SKU価格×1経路×1トークン種別×1帰属。同一リクエストの入力と出力は別行にし、リクエスト数は1行にだけ記録する(R17)
-
P5 課金対象が正:
ConsumedQuantityは課金の根拠となった量を格納し、利用側の推計値はx_MeasuredTokensに分ける - P6 換算しない:PRU 等の旧単位はトークンに換算せず原単位で保持する
- P7 原文保持:元データに識別子があれば必ず残す。無い場合は再現可能な取込識別子を生成し、元IDでないことを区別する(R14)
-
P8 加算範囲の明示:合計に含める行と内訳として持つ行を
x_LineRoleで区別し、二重計上を防ぐ(R16)
5. データセット構成
- A: AI Cost & Usage — 明細行。FOCUS Cost and Usage データセットの拡張
- B: Price Sheet — 定価表。FOCUS 1.5 で策定中の SKU Price データセットの先行実装
- C: Entitlement — シート・クレジット・月次枠を一括管理する独自データセット。FOCUS には Contract Commitment や購入・使用の区別があるが、付与量・消費量・残量・リセット規則を一つにまとめた表はないため補う
6. データセットA:AI Cost & Usage
6.1 FOCUS 由来の列(抜粋)
FOCUS 1.4 の Cost and Usage 列はすべて持ち込み可。ACUS として使い方を固定するものを抜粋する。表の要求水準は「ACUS として値を埋めることを求める度合い」であり、列の存在・型・NULL可否・条件付き必須は FOCUS 1.4 の定義が優先する。
| 列 | 要求水準 | 型 | ACUS での使い方 |
|---|---|---|---|
| BillingAccountId/BillingAccountName | 必須 | String | 請求アカウント(組織・請求先) |
| SubAccountId/SubAccountName | 条件付き | String | プロジェクト/ワークスペース/Enterprise org。該当する副アカウントがある行では非NULL |
| BillingCurrency | 必須 | String | 請求通貨(JPY/USD) |
| BillingPeriodStart/End | 必須 | DateTime | 請求期間 |
| ChargePeriodStart/End | 必須 | DateTime | 課金期間(日次または時間次) |
| ChargeCategory | 必須 | String | Usage/Purchase/Tax/Credit/Adjustment。Credit は請求元が別途付与した経済的インセンティブ等に限る(R5) |
| ChargeClass | 条件付き | String | 訂正行は Correction |
| ChargeFrequency | 必須 | String | One-Time/Recurring/Usage-Based |
| ChargeDescription | 必須 | String | 請求元の説明文・明細項目名(原文) |
| ServiceProviderName | 必須 | String | サービス提供者 |
| HostProviderName | 必須 | String | ホスト提供者。直接APIでは提供者と同じ、クラウド経由ではクラウド事業者 |
| InvoiceIssuerName | 必須 | String | 請求書発行者 |
| InvoiceId | 条件付き | String | 請求書番号(FOCUS 1.2〜)。請求書が発行される行では非NULL |
| ServiceCategory | 必須 | String | 原則 AI and Machine Learning。Actions 分は Developer Tools
|
| ServiceName | 必須 | String | 例:Claude API、Copilot、Amazon Bedrock |
| SkuId/SkuPriceId | 条件付き | String | 単価表(B)への結合キー。ServiceProviderName と組で一意(7章) |
| SkuPriceDetails | 条件付き | Key-Value | 価格属性。FOCUS 1.5 のモデル識別プロパティの受け皿(14章) |
| PricingCategory | 条件付き | String | Standard/Dynamic/Committed/Other |
| PricingUnit | 条件付き | String | FOCUS UnitFormat に従う。単位数量を含められる(例:1000000 Tokens、1000 Characters、Seat、Minute) |
| PricingQuantity | 条件付き | Decimal |
PricingUnit での数量。ConsumedQuantity を単位数量で割った値 |
| ConsumedUnit/ConsumedQuantity | 条件付き | String/Decimal | 消費単位と消費量。トークン課金では Tokens と課金対象トークン数 |
| ListUnitPrice/ListCost | 必須(Cost) | Decimal | 定価。ListUnitPrice は PricingUnit 1単位当たり・BillingCurrency 建て |
| ContractedUnitPrice/ContractedCost | 必須(Cost) | Decimal | 契約価 |
| BilledCost | 必須 | Decimal | 請求額 |
| EffectiveCost | 必須 | Decimal | 実効額(償却・配賦後) |
| PricingCurrency/PricingCurrencyListUnitPrice 等 | 条件付き | String/Decimal | 単価通貨が請求通貨と異なる場合に使う(R11) |
| CommitmentDiscountId 他 | 条件付き | String | コミット割引(Provisioned Throughput 等) |
| ResourceId/ResourceName/ResourceType | 条件付き | String | APIキー識別子・デプロイメント・ワークスペース等 |
| RegionId/RegionName | 条件付き | String | 請求・利用上のリージョン識別。保管・処理・バックアップ先の契約保証は別途確認する |
| Tags | 条件付き | Key-Value | 帰属(部署・プロジェクト・費目)。FOCUS では条件付き列であり、ACUS の帰属率KPI(K9)はこの列の付与状況を測る |
6.2 拡張列(x_)
| 列 | 要求水準 | 型 | 説明 |
|---|---|---|---|
| x_SchemaVersion | 必須 | String |
acus-0.1 固定 |
| x_LineRole | 必須 | String |
billed(請求集計に含める行)/breakdown(内訳。集計に含めない)/allocation(配賦行) |
| x_ModelProvider | 条件付き(モデル行) | String | モデル開発元(anthropic/openai/google/meta/mistral 等、小文字)。特定モデルの使用量またはモデル別課金に対応する行で必須 |
| x_ModelId | 条件付き(モデル行) | String | 正規化モデルID。形式 provider/model-name(例:anthropic/claude-opus-5) |
| x_ModelIdRaw | 条件付き(モデル行) | String | 経路固有のモデル識別子(Bedrock のモデルID等)を原文で保持 |
| x_ModelVersion | 任意 | String | 日付版・スナップショット識別子。不明なら NULL |
| x_AccessPath | 必須 | String | 経路。6.3 の列挙値 |
| x_GatewayId | 条件付き(gateway 経路) |
String | 中継ゲートウェイの識別子 |
| x_UsageType | 必須 | String | 用途種別。6.3 の列挙値 |
| x_TokenType | 条件付き(トークン課金行) | String | トークン種別。6.3 の列挙値 |
| x_MeasuredTokens | 任意 | Integer | 利用側の独自推計トークン数。プロバイダー応答の使用量は本列ではなく ConsumedQuantity に入れる |
| x_RequestCount | 条件付き | Integer | リクエスト数。同一リクエスト群の1行(既定は output 行、非トークン行は当該行)にだけ格納し、他行は NULL(R17) |
| x_RequestUnit | 条件付き(x_RequestCount あり) |
String |
model_call/user_request/task。比較は同じ単位どうしに限る |
| x_PricingModifier | 推奨 | String | 単価修飾子。6.3 の列挙値。複数条件は SkuPriceId と SkuPriceDetails で表す |
| x_ContextTier | 任意 | String | 文脈長ティア。提供者の区分を原値で保持し、独自区分に正規化する場合は対応表を持つ |
| x_LegacyUnit | 条件付き | String | 旧単位(PRU 等) |
| x_LegacyQuantity | 条件付き | Decimal | 旧単位での数量(乗数適用後) |
| x_EntitlementId | 条件付き | String | 消費元の枠(データセットC) |
| x_AllocationMethod | 条件付き(配賦行) | String |
even/usage_weighted/request_weighted
|
| x_AttributionSource | 推奨 | String | 帰属の根拠。6.3 の列挙値 |
| x_AttributionConfidence | 任意 | String |
exact/allocated/estimated
|
| x_PrincipalId | 任意 | String | 利用者識別子(仮名化必須) |
| x_WorkflowId | 任意 | String | エージェント・ワークフロー識別子(AECS の task_id と結合) |
| x_ConsentId/x_ReceiptId | 条件付き(AECS 経由) | String | AECS の同意ID・受領証ID |
| x_ProviderAgentId | 条件付き(AECS 経由) | String | AECS の提供エージェント識別子 |
| x_SettlementRail/x_SettlementRef | 条件付き(AECS 経由) | String | 決済レールと決済参照 |
| x_ParentReceiptId | 条件付き(内訳行) | String | 親受領証。内訳行は x_LineRole=breakdown
|
| x_FxRate/x_FxRateDate | 条件付き(通貨換算時) | Decimal/Date | 換算レートと基準日 |
| x_SourceRecordId | 条件付き | String | 取込元の行ID。元データに識別子がある場合は必須 |
| x_IngestRecordId | 条件付き | String | 元データに行IDがない場合に生成する再現可能な取込識別子(取込元・期間・集計キーから決定的に生成) |
6.3 列挙値
x_AccessPath
| 値 | 意味 |
|---|---|
direct |
モデル開発元の直接API |
aws_bedrock |
Amazon Bedrock 経由 |
google_vertex |
Google Vertex AI 経由 |
azure_foundry |
Azure AI Foundry(旧 Azure OpenAI)経由 |
github_copilot |
GitHub Copilot 経由 |
openrouter |
OpenRouter 等のアグリゲーター経由 |
gateway |
自組織ゲートウェイ経由(x_GatewayId 必須) |
other |
その他 |
x_UsageType
| 値 | 意味 |
|---|---|
inference |
通常推論 |
batch_inference |
バッチ推論 |
embedding |
埋め込み |
fine_tuning |
ファインチューニング(学習) |
tool_call |
プロバイダー側ツール呼び出し課金(Web検索等) |
storage |
ファイル・キャッシュ保存 |
provisioned |
プロビジョンド容量(時間課金) |
seat |
シートライセンス |
credit |
請求元が別途付与したクレジット(ChargeCategory=Credit の行) |
compute_minutes |
付随する計算時間(Actions 分等) |
fee |
オーケストレーション手数料等、モデル使用量に紐づかない手数料 |
x_TokenType
| 値 | 意味 |
|---|---|
input |
入力(キャッシュ非該当) |
output |
出力 |
cache_read |
キャッシュ読み取り入力 |
cache_write |
キャッシュ書き込み入力。保持時間別に単価が異なる場合は SkuPriceId を分ける |
reasoning |
推論(思考)トークン。分離課金の体系でのみ使う。出力に含めて課金される体系では output に含め、本種別の行は作らない(R15) |
audio_input/audio_output
|
音声 |
image_input |
画像入力 |
embedding_input |
埋め込み入力 |
other |
その他 |
x_PricingModifier
| 値 | 意味 |
|---|---|
standard |
標準 |
batch |
バッチ割引適用 |
priority |
優先処理割増 |
long_context |
長文脈サーチャージ適用(x_ContextTier 併用) |
flex |
低優先・遅延許容の割引 |
provisioned |
プロビジョンド単価 |
x_AttributionSource
| 値 | 意味 |
|---|---|
invoice |
請求書・請求明細に記載 |
provider_api |
プロバイダーの Usage/Cost API |
gateway |
自組織ゲートウェイのログ |
otel |
OpenTelemetry で運ばれた値(プロバイダー応答の使用量か独自推計かは列で区別する) |
manual |
手作業配賦 |
7. データセットB:Price Sheet
| 列 | 要求水準 | 型 | 説明 |
|---|---|---|---|
| x_SchemaVersion | 必須 | String | acus-0.2 |
| ServiceProviderName | 必須(キー) | String | サービス提供者。価格IDの名前空間を兼ねる |
| ServiceName | 必須 | String | サービス名 |
| SkuId | 必須 | String | SKU |
| SkuPriceId | 必須(キー) | String | 価格ID(提供者の原値を書き換えない) |
| x_EffectiveFrom | 必須(キー) | DateTime | 価格の有効開始。改定ごとにスナップショット行を追加 |
| x_EffectiveTo | 任意 | DateTime | 有効終了 |
| x_ModelProvider/x_ModelId | 条件付き | String | モデル |
| x_AccessPath | 必須 | String | 経路 |
| x_UsageType | 必須 | String | 用途 |
| x_TokenType | 条件付き | String | トークン種別。キャッシュ書き込みの保持時間別価格は別 SkuPriceId
|
| x_PricingModifier | 推奨 | String | 修飾子 |
| x_ContextTier | 任意 | String | 文脈長ティア |
| PricingUnit | 必須 | String | FOCUS UnitFormat 準拠(例:1000000 Tokens) |
| ListUnitPrice | 必須 | Decimal |
PricingUnit 1単位当たりの定価 |
| PricingCurrency | 必須 | String | 単価通貨 |
| SkuPriceDetails | 推奨 | Key-Value | 価格属性(モデル識別プロパティ等) |
| x_SourceUrl | 推奨 | String | 価格表の出典URL |
| x_RetrievedAt | 必須 | DateTime | 取得日時 |
- A と B の結合キーは
ServiceProviderName+SkuPriceId+(課金期間に有効なx_EffectiveFrom) -
ListUnitPriceは公開定価。個別契約の値引きは A のContractedUnitPrice側で表す
Price Sheet を明細から分離する理由は、契約比較・コミット最適化のときに「そのときの定価」を再現できるようにするためです。FOCUS 1.5 の SKU Price データセットが批准されたら、キー・履歴・単位・通貨を合わせて置換します。
8. データセットC:Entitlement
| 列 | 要求水準 | 型 | 説明 |
|---|---|---|---|
| x_SchemaVersion | 必須 | String | acus-0.2 |
| x_EntitlementId | 必須(主キー) | String | 枠ID |
| ServiceProviderName/ServiceName | 必須 | String | 提供者・サービス |
| BillingAccountId/SubAccountId | 必須/条件付き | String | 帰属アカウント |
| x_PlanName | 必須 | String | プラン名(Copilot Business 等) |
| x_EntitlementUnit | 必須 | String |
Seat/Credit/Request/Token/Minute
|
| x_UnitValue/x_UnitValueCurrency | 条件付き(Credit 等) |
Decimal/String | 1単位の通貨換算値(例:GitHub AI Credit は 0.01 USD) |
| x_IncludedQuantity | 必須 | Decimal | 付与量(枠の単位) |
| x_ConsumedQuantity | 必須 | Decimal | 消費量(枠の単位) |
| x_RemainingQuantity | 推奨 | Decimal | 残量 |
| x_OverageAllowed | 必須 | Boolean | 超過利用の可否 |
| x_OverageUnitPrice | 条件付き | Decimal | 超過単価 |
| x_ResetPolicy | 必須 | String | リセット規則(例:monthly_utc_1st、no_rollover) |
| x_PeriodStart/x_PeriodEnd | 必須 | DateTime | 枠の適用期間 |
| BilledCost | 必須 | Decimal | 枠の対価(月額等) |
| BillingCurrency | 必須 | String | 通貨 |
9. 正規化ルール
| ID | ルール |
|---|---|
| R1 | 行の粒度は P4 に従う。入力と出力は単価が異なるため必ず別行にする |
| R2 |
ConsumedQuantity には課金の根拠となった量(プロバイダー応答・請求API・請求書の値)を入れ、利用側の独自推計は x_MeasuredTokens に入れる。両者の乖離は KPI(12章 K8)で監視し、行の値は書き換えない |
| R3 | シート・サブスクリプションは ChargeCategory=Purchase、ChargeFrequency=Recurring、PricingUnit=Seat の行で計上する |
| R4 | シートの対価を利用者・部署に配賦する場合は x_LineRole=allocation、ChargeCategory=Usage、BilledCost=0、EffectiveCost=配賦額の行を追加し、購入行の EffectiveCost を 0 にする。x_AllocationMethod を明示し、配賦行の EffectiveCost 合計は購入行の BilledCost に一致させる |
| R5 | 枠内消費(GitHub AI Credits 等)は Usage 行に ListCost=トークン×定価、BilledCost=0 で計上し、x_EntitlementId で C に紐づける。枠超過分は Usage 行の BilledCost に計上する。ChargeCategory=Credit の行は、請求元が別途付与したクレジット(プロモーション等)が請求明細に現れる場合に限り、一度だけ計上する。枠による控除を Credit 行として重ねて計上しない |
| R6 | PRU 等の旧単位はトークンに換算しない。PricingUnit=Request、x_LegacyUnit/x_LegacyQuantity に原単位を保持する |
| R7 | 同一モデルの異経路は x_ModelId を共通にし、x_AccessPath で分ける。x_ModelIdRaw に経路固有名を残す |
| R8 | キャッシュは修飾子ではなく種別として扱う(x_TokenType=cache_read/cache_write)。キャッシュ書き込みの保持時間別価格(例:5分/1時間)は SkuPriceId を分け、同一価格IDに合算しない |
| R9 | バッチ・優先・Flex は x_PricingModifier で表し、ListUnitPrice は修飾後単価とする。標準単価との差は B を参照して算出する |
| R10 | 長文脈サーチャージは x_PricingModifier=long_context と x_ContextTier で表す。1リクエスト全体にティアが適用される課金体系では、そのリクエストの全トークン行に同一ティアを付す |
| R11 |
ListUnitPrice・ListCost 等は BillingCurrency 建て。単価通貨が異なる場合は PricingCurrency と PricingCurrencyListUnitPrice 等に原値を保持し、換算した x_FxRate/x_FxRateDate を必須とする |
| R12 |
PricingUnit は FOCUS UnitFormat に従い、単位数量を含められる(1000000 Tokens)。PricingQuantity=ConsumedQuantity÷単位数量、ListCost=ListUnitPrice×PricingQuantity が成り立つこと |
| R13 | クラウド経由分は AWS/Azure/GCP の FOCUS エクスポート行を取り込み、取込時に FOCUS 1.4 へ正規化する(廃止列の役割分離、条件付き必須列の補完)。補完できない行は 1.4 適合済みとしない。x_ 列は SkuId/SkuPriceDetails/ChargeDescription/ResourceId から対応辞書で派生し、未知の SKU は x_TokenType=other で原文保持する(11章) |
| R14 | 元データに行IDがあれば x_SourceRecordId に原文保持する(必須)。ない場合は x_IngestRecordId を取込元・取得期間・集計キーから決定的に生成し、元IDではないことを区別する |
| R15 | 訂正は ChargeClass=Correction の行として追加し、元行を削除しない。推論(思考)トークンが出力に含めて課金される体系では output に含め、reasoning 行は作らない。分離課金の体系のみ reasoning 行を作る |
| R16 | 集計に含める行は x_LineRole=billed のみ。内訳行(breakdown)は BilledCost・EffectiveCost を NULL とし、親行の x_ParentReceiptId 等で関係を示す。親費用が子費用を含む場合に子を別行展開しても合計が増えないようにする |
| R17 |
x_RequestCount は同一リクエスト群の1行にだけ格納する(既定は output 行。非トークン行はその行)。他行は NULL。x_RequestUnit を併記し、単位の異なる件数を合算しない |
| R18 | Copilot コードレビュー等に付随する Actions 分は ServiceCategory=Developer Tools、x_UsageType=compute_minutes とし、x_WorkflowId で AI 利用行と結ぶ |
10. 課金モデル別の行の作り方
以下の例は主要列のみの抜粋であり、そのままでは ACUS の適合性検査用の完全レコードではない。金額はすべて説明用の架空値(単価は 2026年9月時点の公開価格表を参考にしたが、例示の正確さを保証しない)。
10.1 トークン従量(直接API)
1リクエスト群(日次集計・980リクエスト)が input/cache_read/output の3行になる例。PricingUnit に単位数量を含め、ListCost=ListUnitPrice×PricingQuantity が成り立つ形にする。
[
{"x_SchemaVersion":"acus-0.2","x_LineRole":"billed",
"BillingAccountId":"org-1","SubAccountId":"ws-info-policy","BillingCurrency":"USD",
"BillingPeriodStart":"2026-09-01T00:00:00Z","BillingPeriodEnd":"2026-10-01T00:00:00Z",
"ChargePeriodStart":"2026-09-01T00:00:00Z","ChargePeriodEnd":"2026-09-02T00:00:00Z",
"ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","ChargeDescription":"Claude Opus 5 input tokens",
"ServiceProviderName":"Anthropic","HostProviderName":"Anthropic","InvoiceIssuerName":"Anthropic",
"ServiceCategory":"AI and Machine Learning","ServiceName":"Claude API",
"SkuPriceId":"opus-5-input-std","PricingCategory":"Standard",
"x_ModelProvider":"anthropic","x_ModelId":"anthropic/claude-opus-5","x_AccessPath":"direct",
"x_UsageType":"inference","x_TokenType":"input","x_PricingModifier":"standard",
"ConsumedUnit":"Tokens","ConsumedQuantity":1200000,"PricingUnit":"1000000 Tokens","PricingQuantity":1.2,
"ListUnitPrice":5.00,"ListCost":6.00,"ContractedUnitPrice":5.00,"ContractedCost":6.00,"BilledCost":6.00,"EffectiveCost":6.00,
"x_RequestCount":null,"x_AttributionSource":"provider_api","x_SourceRecordId":"usage-2026-09-01-opus-input",
"Tags":{"dept":"info-policy","project":"kokuho-report"}},
{"x_SchemaVersion":"acus-0.2","x_LineRole":"billed",
"BillingAccountId":"org-1","SubAccountId":"ws-info-policy","BillingCurrency":"USD",
"BillingPeriodStart":"2026-09-01T00:00:00Z","BillingPeriodEnd":"2026-10-01T00:00:00Z",
"ChargePeriodStart":"2026-09-01T00:00:00Z","ChargePeriodEnd":"2026-09-02T00:00:00Z",
"ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","ChargeDescription":"Claude Opus 5 cache read input tokens",
"ServiceProviderName":"Anthropic","HostProviderName":"Anthropic","InvoiceIssuerName":"Anthropic",
"ServiceCategory":"AI and Machine Learning","ServiceName":"Claude API",
"SkuPriceId":"opus-5-cache-read-std","PricingCategory":"Standard",
"x_ModelProvider":"anthropic","x_ModelId":"anthropic/claude-opus-5","x_AccessPath":"direct",
"x_UsageType":"inference","x_TokenType":"cache_read","x_PricingModifier":"standard",
"ConsumedUnit":"Tokens","ConsumedQuantity":4800000,"PricingUnit":"1000000 Tokens","PricingQuantity":4.8,
"ListUnitPrice":0.50,"ListCost":2.40,"ContractedUnitPrice":0.50,"ContractedCost":2.40,"BilledCost":2.40,"EffectiveCost":2.40,
"x_RequestCount":null,"x_AttributionSource":"provider_api","x_SourceRecordId":"usage-2026-09-01-opus-cache-read",
"Tags":{"dept":"info-policy","project":"kokuho-report"}},
{"x_SchemaVersion":"acus-0.2","x_LineRole":"billed",
"BillingAccountId":"org-1","SubAccountId":"ws-info-policy","BillingCurrency":"USD",
"BillingPeriodStart":"2026-09-01T00:00:00Z","BillingPeriodEnd":"2026-10-01T00:00:00Z",
"ChargePeriodStart":"2026-09-01T00:00:00Z","ChargePeriodEnd":"2026-09-02T00:00:00Z",
"ChargeCategory":"Usage","ChargeFrequency":"Usage-Based","ChargeDescription":"Claude Opus 5 output tokens",
"ServiceProviderName":"Anthropic","HostProviderName":"Anthropic","InvoiceIssuerName":"Anthropic",
"ServiceCategory":"AI and Machine Learning","ServiceName":"Claude API",
"SkuPriceId":"opus-5-output-std","PricingCategory":"Standard",
"x_ModelProvider":"anthropic","x_ModelId":"anthropic/claude-opus-5","x_AccessPath":"direct",
"x_UsageType":"inference","x_TokenType":"output","x_PricingModifier":"standard",
"ConsumedUnit":"Tokens","ConsumedQuantity":310000,"PricingUnit":"1000000 Tokens","PricingQuantity":0.31,
"ListUnitPrice":25.00,"ListCost":7.75,"ContractedUnitPrice":25.00,"ContractedCost":7.75,"BilledCost":7.75,"EffectiveCost":7.75,
"x_RequestCount":980,"x_RequestUnit":"model_call","x_AttributionSource":"provider_api","x_SourceRecordId":"usage-2026-09-01-opus-output",
"Tags":{"dept":"info-policy","project":"kokuho-report"}}
]
3行の ListCost 合計は 16.15。x_RequestCount は output 行にだけ入れている(R17)。
10.2 クレジット制(GitHub Copilot Business、2026年6月以降)
シート料金に月次の AI Credits 枠が含まれ、枠内の消費は請求額ゼロ、超過分に請求が立つ。枠の単位は AI Credit(1 Credit=0.01 USD)であり、金額と混同しない。この例ではシート料金を利用行へ配賦しない(EffectiveCost=BilledCost)。
| 行 | ChargeCategory | x_UsageType | x_TokenType | ListCost | BilledCost | EffectiveCost | x_EntitlementId |
|---|---|---|---|---|---|---|---|
| 1 | Purchase | seat | — | 760.00 | 760.00 | 760.00 | — |
| 2 | Usage | inference | input | 12.00 | 0.00 | 0.00 | ent-copilot-2026-09 |
| 3 | Usage | inference | output | 18.00 | 0.00 | 0.00 | ent-copilot-2026-09 |
| 4 | Usage | inference | output | 5.00 | 5.00 | 5.00 | ent-copilot-2026-09 |
| 5 | Usage | compute_minutes | — | 0.80 | 0.80 | 0.80 | (Actions 枠は別途 C に登録) |
- 行1:40シート×19.00 USD(架空値)。
PricingUnit=Seat、PricingQuantity=40 - 行2〜3:枠内消費(合計 30.00 USD=3,000 Credits)。
BilledCost=0 - 行4:枠超過分(5.00 USD=500 Credits)。
BilledCost=5.00 - 行5:コードレビューに伴う Actions 分(
ServiceCategory=Developer Tools) -
BilledCost合計は 765.80、ListCost合計は 795.80。Credit 行は作らない(R5)
データセットC には次を登録する:x_PlanName=Copilot Business、x_EntitlementUnit=Credit、x_UnitValue=0.01、x_UnitValueCurrency=USD、x_IncludedQuantity=3000、x_ConsumedQuantity=3500、x_OverageAllowed=true、x_ResetPolicy=monthly_utc_1st。
10.3 シートライセンスの配賦
| 行 | x_LineRole | ChargeCategory | ChargeFrequency | PricingUnit | PricingQuantity | BilledCost | EffectiveCost | x_AllocationMethod |
|---|---|---|---|---|---|---|---|---|
| 1 | billed | Purchase | Recurring | Seat | 40 | 760.00 | 0.00 | — |
| 2 | allocation | Usage | Usage-Based | Seat | 1 | 0.00 | 19.00 | even |
| … | allocation | … | … | … | … | … | … | … |
行1が請求書上の行、行2以降が利用者ごとの配賦行(40行、R4)。配賦行の EffectiveCost 合計(760.00)が行1の BilledCost に一致することを整合性チェックとする。
10.4 旧単位(PRU)
年契約で PRU 制が残る場合は PricingUnit=Request、x_LegacyUnit=PRU、x_LegacyQuantity=乗数適用後の PRU 数とし、トークン行は作らない。x_RequestUnit=user_request を付け、model_call 単位の行とは K1 で直接比較しない。
11. ソース別マッピング
各取込元から ACUS の主要列をどう埋めるかの対応。フィールド名は基準日時点の公式ドキュメントで確認したもの(※印は未確認)。集計条件により属性が NULL になる場合があり、欠けたモデル・トークン情報を推測で補わない。
11.1 Anthropic Usage & Cost Admin API
| 実フィールド | ACUS 列 | 注意 |
|---|---|---|
uncached_input_tokens |
x_TokenType=input、ConsumedQuantity
|
|
cache_creation.ephemeral_5m_input_tokens/ephemeral_1h_input_tokens
|
x_TokenType=cache_write、ConsumedQuantity
|
保持時間別に SkuPriceId を分ける(R8) |
cache_read_input_tokens |
x_TokenType=cache_read |
|
output_tokens |
x_TokenType=output |
推論の包含関係は R15 |
model |
x_ModelIdRaw → 対応辞書で x_ModelId
|
|
workspace_id |
SubAccountId |
|
api_key_id |
ResourceId(ResourceType=API Key) |
秘密鍵文字列ではなく識別子 |
service_tier |
x_PricingModifier |
原値を SkuPriceDetails に保持 |
context_window |
x_ContextTier |
原値(例:0-200k/200k-1M)を保持 |
Cost report の amount/currency/description
|
BilledCost/BillingCurrency/ChargeDescription
|
amount はセント単位の小数文字列として説明されているため、USD 額へ直すときは 100 で除する |
結合規則:Usage report と Cost report は集計軸が異なる(Cost は日次・description/workspace_id 軸)。両方で共通に得られる粒度(日付×ワークスペース×モデル×トークン種別)へ揃えてから結合し、Cost 側にない細粒度(APIキー等)への費用配賦は x_AllocationMethod で区別する。日付+モデルだけでの結合は多対多になるため禁止。
11.2 OpenAI Usage API/Costs API
| 実フィールド | ACUS 列 | 注意 |
|---|---|---|
input_uncached_tokens |
x_TokenType=input |
input_tokens はキャッシュ分を含む総数なので、非キャッシュ入力にはこちらを使う。返される対象・版を記録する |
input_cached_tokens |
x_TokenType=cache_read |
|
input_cache_write_tokens |
x_TokenType=cache_write |
|
output_tokens |
x_TokenType=output |
|
num_model_requests |
x_RequestCount(x_RequestUnit=model_call) |
R17 に従い1行にだけ格納 |
project_id/user_id/api_key_id
|
SubAccountId/x_PrincipalId(仮名化)/ResourceId
|
|
model/batch/service_tier
|
x_ModelIdRaw/x_PricingModifier
|
batch は Boolean。service_tier と一つの文字列に無条件に上書きしない |
Costs の amount.value/amount.currency/line_item/project_id
|
BilledCost/BillingCurrency/ChargeDescription/SubAccountId
|
通貨金額として取り込む(セント方式と仮定しない)。Usage の user/api_key 粒度の費用は直接取得できるとは限らない |
11.3 GitHub(CSV と REST API を区別する)
| 取込形式 | 実フィールド | ACUS 列 | 注意 |
|---|---|---|---|
| 課金 CSV(共通列) |
date/product/sku/quantity/unit_type/applied_cost_per_quantity/gross_amount/discount_amount/net_amount
|
ChargePeriodStart/ServiceName/SkuId/PricingQuantity/PricingUnit/ListUnitPrice/ListCost/BilledCost(net_amount) |
枠による割引が discount_amount に反映済みなら、同じ額を Credit 行で再度減算しない(R5) |
| 詳細 CSV の帰属列 |
username/organization/repository/workflow_path/cost_center_name
|
x_PrincipalId(仮名化)/SubAccountId/Tags
|
レポート種別・権限で提供範囲が異なる |
| AI usage CSV |
model/input/output/cache_read/cache_write
|
x_ModelIdRaw/x_TokenType 別の ConsumedQuantity
|
一般課金レポートに同じ列があると仮定しない |
| AI Credit Usage REST API |
usageItems[].model/unitType/pricePerUnit/grossQuantity/grossAmount/discountQuantity/discountAmount/netQuantity/netAmount
|
x_ModelIdRaw/PricingUnit/ListUnitPrice/ListCost/BilledCost
|
クレジット数量・金額中心の応答。生トークン列は CSV 側から取る |
| 旧年契約(PRU) | プレミアムリクエスト数 |
x_LegacyUnit=PRU、x_RequestUnit=user_request
|
11.4 クラウド経由と OpenTelemetry
| 取込元 | 対応 | 注意 |
|---|---|---|
| AWS FOCUS エクスポート(Bedrock) |
x_ModelIdRaw←SkuId/ChargeDescription、x_AccessPath=aws_bedrock、CommitmentDiscount*(Provisioned Throughput) |
SkuMeter 列は FOCUS 1.2 AWS 列定義に存在するが、対象モデルの実エクスポートでどの値が4種のトークンに対応するかは未確認(※)。確認済みの対応辞書だけを使い、未知の SKU は other で原文保持する |
| Azure FOCUS エクスポート(AI Foundry) |
x_ModelIdRaw←SkuId/ChargeDescription、x_AccessPath=azure_foundry、RegionId
|
PTU は x_PricingModifier=provisioned |
| Google Cloud FOCUS エクスポート(Vertex AI) |
x_ModelIdRaw←SkuId/ChargeDescription、x_AccessPath=google_vertex |
専用エクスポートは Preview 表記。文字数課金のSKUは PricingUnit=1000 Characters 等で表す |
OpenTelemetry(gen_ai.*) |
gen_ai.request.model→x_ModelIdRaw、gen_ai.usage.input_tokens/output_tokens→ 値の由来に応じて ConsumedQuantity(プロバイダー応答の使用量)または x_MeasuredTokens(独自推計)、x_WorkflowId、Tags
|
OTel は運搬・計装方式であり、値が課金値か推計かは別途区別する。Span 由来値と Histogram 集計を二重に取り込まない。入力総数にキャッシュを含むかどうかの範囲を揃える |
12. 比較・最適化KPI
per-token 単価ではなく、正規化コストで比較する。K3/K4/K7 は x_TokenType で抽出した ConsumedQuantity の合計を使う。分母がゼロの場合は NULL とし、適用対象(通常テキスト推論に限る等)と除外条件を KPI ごとに定める。
| ID | KPI | 定義 | 用途 |
|---|---|---|---|
| K1 | リクエスト当たり実効コスト | ΣEffectiveCost(billed 行)÷ Σx_RequestCount(同一 x_RequestUnit、重複排除済み) |
経路・モデルを横断して比較。単位の異なる件数(user_request と model_call)は比較しない |
| K2 | 入力1,000文字当たり実効コスト | ΣEffectiveCost(input+cache_read+cache_write 行)÷ 入力文字数×1,000 |
トークナイザ差の吸収。入力文字数は列にないため、同一対象の外部計測表と重複なく結合する。文字の数え方とキャッシュ分の扱いを定義する |
| K3 | キャッシュヒット率 | Σcache_read ÷ Σ(input+cache_read+cache_write) | プロンプト設計の最適化 |
| K4 | 出力トークン比率 | Σoutput ÷ Σ(input+cache_read+cache_write+output) | 出力単価が支配的なため |
| K5 | 枠消化率 |
x_ConsumedQuantity ÷ x_IncludedQuantity(同一枠・同一期間・同一単位) |
過剰・過少契約の検知 |
| K6 | 経路プレミアム | 同一 x_ModelId の K1(経由)÷ K1(direct)。同一 x_RequestUnit に限る |
経路選択の根拠 |
| K7 | 修飾子適用率 | batch/flex 適用トークン ÷ 全トークン | 遅延許容ワークロードの移行余地 |
| K8 | 計測乖離率 | abs(ConsumedQuantity − x_MeasuredTokens) ÷ ConsumedQuantity。同一粒度・同一範囲の行に限る |
計測・帰属の信頼性 |
| K9 | 帰属率 |
Tags に帰属キーが付いた billed 行の EffectiveCost ÷ 全 billed 行の EffectiveCost(費用ゼロ・負値の行は分母から除く) |
配賦の完成度 |
13. 適合性レベル
| レベル | 要件 |
|---|---|
| L0 | FOCUS 1.4 準拠の取込段階。FOCUS 必須列+x_SchemaVersion+x_LineRole。明細を1表に集約できる |
| L1 | L0+x_AccessPath/x_UsageType(全行)、x_ModelProvider/x_ModelId(モデル行)、x_TokenType(トークン課金行)。モデル・経路別比較ができる |
| L2 | L1+データセットB・Cとの結合、R12 の単価整合。単価再現・枠管理ができる |
| L3 | L2+Tags/x_WorkflowId/x_MeasuredTokens/x_RequestUnit。帰属と計測突合ができる |
14. FOCUS 1.5 への移行方針
FOCUS 1.5 は基準日時点で未批准であり、作業ドラフトへマージ済みの変更と提案中の変更を区別する。単純な列名置換ではなく、採択された列・SkuPriceDetails プロパティ・データセットの意味と粒度に合わせて変換する。
| ACUS 側 | FOCUS 側の候補 | 確認状態(2026年9月10日) |
|---|---|---|
x_ModelProvider |
SkuPriceDetails.ModelDeveloper |
作業ドラフトへマージ済み(2026年7月20日) |
x_ModelId/x_ModelIdRaw
|
SkuPriceDetails.ModelId |
同上。独自の正規化表記と公式識別子は意味を確認して対応付ける |
x_ModelVersion |
SkuPriceDetails.ModelVersion |
同上 |
| (該当列なし) | SkuPriceDetails.ModelFamily |
同上。必要なら価格属性から補完 |
x_TokenType(input/output/cache_read/cache_write) |
SkuPriceDetails.TokenType(Input/Output/CacheRead/CacheWrite) |
提案中・未マージ |
x_ContextTier/x_PricingModifier
|
文脈長・処理ティア・プロビジョンド・リージョン等の隣接提案 | 提案・検討中 |
ConsumedQuantity/PricingUnit
|
既存列のまま | AI専用のトークン数列を新設する採択は確認できず |
| B: Price Sheet | 策定中の SKU Price データセット | 名称置換ではなく、キー・履歴・単位・通貨・必須情報を合わせる |
| C: Entitlement | 直接の対応先は確認できず | 当面は x_ のまま維持 |
x_AccessPath/x_GatewayId
|
ServiceProviderName/HostProviderName で一部表現可能だが同義ではない |
互換性を検証するまで独自列を維持 |
SkuPriceDetails.ModelId 等のドット表記は、構造化列の中のプロパティを指す。同名のトップレベル列が追加されたという意味ではない。Tokenomics Foundation の成果物が公開されたら、x_TokenType の列挙値をそちらに合わせる。
15. 未決事項
- トークナイザ差の正規化基準:K2 の分母を文字数・バイト数・単語数のどれにするか、キャッシュ分の入力をどう数えるか。日本語では文字数が実務上妥当と考えるが未検証
- 推論トークンの扱い:分離課金の体系が増えた場合、R15 の二分法で足りるか
-
リクエスト粒度の統一:
x_RequestUnitの3値(model_call/user_request/task)で、エージェントの再帰呼び出しやCopilotの利用者要求を十分に区別できるか - クレジット前払いの会計処理:公費で年間クレジットを前払いした場合の償却(FOCUS の Commitment Discount として扱うか)
-
データレジデンシー:
RegionIdだけでは契約上の所在地保証を表せない。x_DataResidencyの要否 -
個人識別子:
x_PrincipalIdの仮名化方式と保持期間 - OTel 由来値の重複排除:Span 属性と Histogram 集計の両方が届く場合の突合キー
-
Bedrock の SKU 対応辞書:実エクスポートでの
SkuMeter等の値とトークン種別の対応(※未確認)
16. 関連する取り組み
| 名称 | 確認した機能 | ACUS との関係 |
|---|---|---|
| FOCUS 1.5(FinOps Foundation) | SKU・モデル属性、AI課金、SKU Price データセットの策定 | 最も直接的な移行先(14章) |
| Tokenomics Foundation | 定義案・運営モデル・トークン費用テレメトリの FOCUS 組込み | 上位の概念整理。課金明細標準の批准は未確認 |
| LiteLLM Spend Tracking | モデル/APIキー/利用者別の利用ログ・集計 | ゲートウェイ経路の取込元候補。標準ではなく実装 |
| OpenCost | Kubernetes の資源コスト配賦 | 自前ホスティング原価側。ACUS の対象外を担う |
| OpenTelemetry GenAI semantic conventions | 計装レベルのトークン・モデル属性 | 帰属と計測値の取込元(11.4) |
参考資料
- FinOps Foundation「Introducing FOCUS 1.4」 https://www.finops.org/insights/introducing-focus-1-4/
- FOCUS 1.4 仕様 https://focus.finops.org/docs/specification/v1-4/
- FOCUS 仕様 Changelog(working_draft) https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/blob/working_draft/CHANGELOG.md
- FOCUS 1.5 Release Scope https://focus.finops.org/focus-1-5-release-scope/
- FOCUS PR #2442(AI model identity as SkuPriceDetails properties) https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/pull/2442
- FOCUS PR #2606(Distinguish cached from uncached token costs、提案中) https://github.com/FinOps-Open-Cost-and-Usage-Spec/FOCUS_Spec/pull/2606
- FOCUS データジェネレーター一覧(AWS/Azure/Google Cloud) https://focus.finops.org/docs/implementation/data-generators/aws/
- Linux Foundation「Launches the Tokenomics Foundation」(2026年8月4日) https://www.linuxfoundation.org/press/linux-foundation-launches-the-tokenomics-foundation-to-define-the-economics-and-roi-of-ai-value
- OpenTelemetry Semantic Conventions for Generative AI metrics https://github.com/open-telemetry/semantic-conventions-genai/blob/main/docs/gen-ai/gen-ai-metrics.md
- Anthropic Usage and Cost API https://platform.claude.com/docs/en/manage-claude/usage-cost-api
- Anthropic Admin API — Retrieve messages usage report https://platform.claude.com/docs/en/api/admin/usage_report/retrieve_messages
- OpenAI Organization Usage and Costs API https://developers.openai.com/api/reference/resources/admin/subresources/organization/subresources/usage
- GitHub Docs「Usage-based billing for organizations and enterprises」 https://docs.github.com/en/copilot/concepts/billing/usage-based-billing-for-organizations-and-enterprises
- GitHub Docs「Billing reports」 https://docs.github.com/en/billing/reference/billing-reports
- GitHub REST API「Usage」 https://docs.github.com/en/rest/billing/usage
- AWS「FOCUS 1.2 columns」 https://docs.aws.amazon.com/cur/latest/userguide/table-dictionary-focus-1-2-aws-columns.html
制作クレジット
- 問題設定・選定:筆者
- 起草・最終稿:Claude Fable 5.1(Anthropic)
- 事実検証・検証メモ:GPT-6 Astra Pro(OpenAI)
- 検証メモの精査と一次資料の再照合:Claude Fable 5.1