連載の現在地:Phase 2「費用と安定」(1 / 4本目) — 使われ始めたら、財布と稼働を守る
1. 公開 → 2. 費用と安定 → 3. 安全 → 4. 品質 → 5. 自動化
こんな悩みの人へ
月末に請求を見て、想像より高くて青ざめた。どの機能、どのユーザーがAPIを多く使っているのかも分からない。上限を決めたいけれど、どこで止めればいいのか分からない。そんな方に向けた記事です。
結論
アプリとLLMのAPIの間に、Cloudflare AI Gatewayを1枚はさむのがおすすめです。
[変更前] あなたのアプリ ---------------------> OpenAI / Anthropic
[変更後] あなたのアプリ ---> [AI Gateway] ---> OpenAI / Anthropic
ここで記録・キャッシュ・上限チェック既存SDKの接続先を変えて通信を経由させ、必要なメタデータとゲートウェイ側の設定を追加します。これにより、利用状況の見える化、同じ質問へのキャッシュ、回数や金額での上限設定を組み合わせられます。ダッシュボードでの分析、キャッシュ、レート制限といった中心の機能は無料で使えます。
なぜ請求額が読めなくなるのか
請求額が読めなくなる理由は、主に3つあります。
1つ目は、料金が「回数」ではなく「トークン」で決まることです。同じ1回の呼び出しでも、入力と出力の長さで金額が何倍も変わります。会話履歴を毎回送る作りだと、使うほど1回あたりが高くなっていきます。
2つ目は、誰が使ったかを記録していないことです。APIの管理画面で分かる集計単位は、プロバイダーや設定によって異なります。アプリ内の利用者や機能と対応付けるには、ユーザーIDなどを記録しておく必要があります。
3つ目は、止める仕組みがないことです。バグによる無限ループや、悪意のある連続リクエストがあっても、気づくのは請求が来てからになります。
解決策の比較
方法 | 費用 | 手間 | 向いている状況 |
|---|---|---|---|
Cloudflare AI Gateway | 分析・キャッシュ・レート制限は無料。モデル・ログ等は別料金の場合あり | 接続先・メタデータ・ゲートウェイの設定 | 複数のモデルやプロバイダーを使う。ユーザー別に把握したい |
各プロバイダーの管理画面の上限・アラート | 無料 | 少ない | 1社だけを使っていて、合計額だけ守れればよい |
自前で記録・集計する | 開発の工数 | 多い | 課金ロジックなど、独自の計算が必要 |
LLMプロキシを自分で立てる(OSS) | サーバー代 | 中〜多い | 独自の接続・記録要件があり、自社で運用できる |
プロバイダー側の上限設定は、AI Gatewayと併用できます。予算設定が通知だけなのか、実際にリクエストを停止するものかを確認して併用します。
どれを選ぶか
使っているのが1社だけで、合計額だけ守れればよいなら、まずプロバイダーの予算設定を確認します。その設定が通知だけであれば、アプリ側にも停止条件が必要です。機能別・ユーザー別に知りたい場合や、複数のモデルを使う場合は、AI Gatewayが向いています。社外のサービスを経由させられない規程があるなら、自前のプロキシを検討します。
手順
前提:Cloudflareのアカウント。npm install openai@latest で導入したOpenAI SDKと、GPT-6 LunaのResponses APIを使う例で説明します。既存アプリの接続先を変える場合は、そのアプリが使うAPI形式を維持してゲートウェイを通せます。
- Cloudflareのダッシュボードで「AI」→「AI Gateway」を開き、ゲートウェイを作成します。名前(例:
my-app)を決めます。 - アプリの接続先を、ゲートウェイのURLに差し替えます。形式は
https://gateway.ai.cloudflare.com/v1/{アカウントID}/{ゲートウェイ名}/{プロバイダー}です。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: `https://gateway.ai.cloudflare.com/v1/${process.env.CF_ACCOUNT_ID}/my-app/openai`,
defaultHeaders: {
"cf-aig-authorization": `Bearer ${process.env.CLOUDFLARE_API_TOKEN}`,
},
});このURLはOpenAIのAPI形式を維持する「Provider Native」の接続先です。例ではAuthenticated Gatewayを有効にし、AI GatewayのRun権限を持つCloudflare APIトークンをサーバー環境変数に設定します。OpenAIのキーとは別に管理します。Anthropicなども対応する接続先がありますが、各社のAPI形式・SDKに合わせて呼び出します。
- ユーザーや機能の情報を付けて送ります。 あとで内訳を見るための一番大事な作業です。AI Gatewayの「カスタムメタデータ」として、リクエストのヘッダーに付けます(1リクエストあたり5項目まで)。
const res = await client.responses.create(
{
model: "gpt-6-luna",
input: messages,
reasoning: { effort: "none" },
max_output_tokens: 1024,
store: false,
},
{
headers: {
"cf-aig-metadata": JSON.stringify({ userId: user.id, feature: "summary" }),
},
},
);
const answer = res.output_text;- ダッシュボードの「Settings」で、キャッシュ、レート制限、支出上限の3つを設定します。
キャッシュは、同じ内容のリクエストに保存した結果を返す機能で、FAQのように同じ質問が多い機能で効果を発揮します。レート制限は一定時間あたりの回数に上限を設けるもので、暴走や連打を止められます。**支出上限(Spend Limits、ベータ)**は、「Settings」→「Spend limits」で金額と期間を設定します。モデル別、プロバイダー別、メタデータ(ユーザーやチーム)別にも設定できます。
- 数日動かしたら、「Analytics」で、リクエスト数、トークン数、費用、エラーを確認します。メタデータで絞り込むと、どの機能・どのユーザーに費用がかかっているかが分かります。
更新日:2026-11-03
つまずきやすい点
キャッシュが効くのは、内容が完全に同じリクエストだけです。会話履歴や日時を毎回含めていると、ほとんど当たりません。利用者固有の情報を含む処理では、キャッシュを無効にするか、他の利用者と共有されないキャッシュキーを設計します。メタデータを付けただけで、利用者ごとに分離できたと考えないでください。
支出上限も、厳密な請求額を保証するものではありません。同時リクエストでは、集計の反映が追いつくまでに予算を超えることがあります。また、料金が分かっているモデルにしか効きません。プロバイダー側の上限設定も残しておきましょう。
ログの保存内容と料金も確認が必要です。プロンプトや応答は、ログ設定に応じて保存されます。初めてゲートウェイを作った日が2026-09-24以降のアカウントにはWorkers Logsの料金・保持期間が適用され、それ以前のアカウントはLegacy Logsを使います。個人情報を記録しない設定と、保存量を確認してください。なお、Responses APIの store: false はOpenAI側の保存設定で、AI Gatewayのログを無効にするものではありません。
ゲートウェイを通しても、APIキーは必要です。キーの管理方法は「APIキーの漏えいが怖い」で整理しています。


次に出やすい悩み
費用が見えるようになると、次に気になるのは「止まらないか」と「誰が使いすぎているか」です。混雑する時間帯に429エラーが出始めたら「レート制限やエラーで、AIの機能が止まる」を、一部のユーザーだけが大量に使っていると分かったら「ユーザーごとにAIの利用量を制限したい」を読んでみてください。ログインなしで使える公開機能に、見覚えのないアクセスが増えている場合は、Phase 3の「ボットにAPIを食いつぶされる」が参考になります。
「いまの請求額が妥当なのか分からない」「どこから手をつければいいか知りたい」という段階でも構いません。API費用の見える化と上限の設計はCloudflareインフラ構築でご相談いただけます。
よくある質問
Q. AI Gatewayを使えば、LLMプロバイダーのAPIキーは不要ですか?
接続方式によって異なります。本文のProvider Nativeの例では、LLMプロバイダーのキーと、ゲートウェイの認証に使うトークンを別に管理します。どの提供元へ、どの認証方式で接続しているかを確認し、秘密情報はサーバー側だけで保持してください。
Q. 利用者の個人情報を含む回答も、キャッシュしてよいですか?
他の利用者へ共有してはいけない情報は、キャッシュを無効にするか、認可と対応する共有範囲を設計します。メタデータを付けるだけで利用者ごとに分離されたと考えないでください。カスタムキーが同じリクエストは応答を共有するため、キャッシュキーの仕様も確認します。
Q. Spend Limitsを設定すれば、請求額は設定額を絶対に超えませんか?
厳密な請求額の保証としては扱えません。同時リクエストでは、費用の集計が反映される前に予算を超える場合があります。対象モデルの料金情報も確認し、余裕を持った上限と、提供元側やアプリ側の制限を組み合わせます。支出上限の仕様を参照してください。
Q. 請求アラートと支出上限は、どう違いますか?
アラートは費用の状況を知らせるもので、通知だけの設定では呼び出しを止められません。支出上限やアプリ側の停止条件を別に設け、上限到達時に利用者へ何を表示するかも決めます。ゲートウェイを通らない別の呼び出し経路がないか、提供元の利用履歴でも確認します。
執筆者情報
IT顧問、AI・業務アプリ開発、SESを通じて、企業のIT活用を支援しています。代表の藤澤 昌隆は、2007年からシステム開発・運用に携わり、アクセンチュアでの業務ITコンサルティングを経て、2019年にパブロフ株式会社を設立しました。
AI活用の支援事例として、営業工程を支える7つの業務別AIアプリの構築を公開しています。アプリの開発に加え、入力・出力の形式、評価基準、テストケースの整備にも取り組んでいます。
記事の内容に関するご質問や誤りのご指摘は、お問い合わせ窓口へお寄せください。
