◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-05-03上級

Rork アプリの AI コストを月 ¥50,000 から ¥5,000 に削減させた Cloudflare AI Gateway 設計

Cloudflare AI Gateway の既定キャッシュキーは送信したリクエストそのものから作られます。正規化が効かない理由と cf-aig-cache-key での配線、Gemini フォールバック、React Native 側の実装までを実コードで記録しました。

CloudflareAI Gatewayコスト最適化5OpenAI5Gemini8Rork584Workers

✦ プレミアム記事

Rork でAI機能を搭載したアプリを3本リリースしてから、ある月に請求書を開いて固まりました。OpenAIの月額請求が ¥52,000 になっていたのです。

ユーザー数は約800人。一人あたり月 ¥65 のAIコストは、アプリの収益(月額サブスク ¥580)と比べると無視できない比率です。このままスケールしたら、ユーザーが増えるほど赤字が膨らむ構造になっていました。

調べてみると、問題はシンプルでした。同じプロンプトが何度もAPIに投げられていたのです。たとえばカテゴリ分類の処理では、似たような入力が一日に何百回も送信されていて、すべてに課金されていました。

解決策として導入したのが Cloudflare AI Gateway です。3週間後、同じトラフィックでの月額AIコストは ¥4,800 になっていました。

ここでは私が実装した Cloudflare AI Gateway の設計を、コードレベルで全て公開します。

なぜ個人開発アプリで AI コストが構造的な問題になるのか

実装の話に入る前に、この問題がなぜ「たまたま高かった」で片づけられないのかを整理しておきます。

AI機能を組み込むと、アプリのコスト構造はそれまでの機能とは質的に変わります。プッシュ通知の基盤は、ユーザーが100人でも1万人でも維持費はほぼ一定です。ところがAI APIのコストは、利用量に比例して増えます。設計を誤れば、比例どころか二乗で膨らむこともあります。

下の表は、最適化前のAIコストを1人あたり月 ¥65、サブスクを月額 ¥580 として、ユーザー数ごとに利益を試算したものです。

ユーザー数AIコスト売上(全員課金時)粗利
100人¥6,500¥58,000¥51,500
1,000人¥65,000¥580,000¥515,000
10,000人¥650,000¥5,800,000¥5,150,000
50,000人¥3,250,000¥29,000,000¥25,750,000

小さな規模では問題なく見えます。けれど、AIコストが売上に占める比率は約11%のまま、どれだけ成長しても改善しません。しかもこの試算は「全員が課金する」前提です。無料から有料への転換率が現実的な5〜8%だとすると、採算は一気に反転します。

キャッシュはこの構造そのものを変えます。人気のプロンプトが繰り返されるだけのユーザー数が集まると、新規ユーザー1人あたりの限界コストは下がり始めます。キャッシュヒット率70%を実現できれば、5万人規模でのAIコストは ¥3,250,000 ではなく ¥975,000 前後まで落ちます。規模が大きくなるほど採算が良くなる構造へ変わるわけです。

私が請求書を見て固まったのは、この「成長するほど赤字が膨らむ」構造に気づいた瞬間でした。手を打たなければ、ユーザーが増えることを素直に喜べなくなってしまいます。個人開発者にとって、それはいちばん避けたい状況なのです。

Cloudflare AI Gateway とは何か — Rork アプリとの相性

Cloudflare AI Gateway は、あなたのアプリと OpenAI・Anthropic・Google Gemini などのAIプロバイダーの間に置くインテリジェントプロキシです。

URLを一箇所変えるだけで導入でき、以下の機能が手に入ります。

  • レスポンスキャッシュ: 同一のリクエストであれば、2回目以降をキャッシュから返します
  • マルチプロバイダー対応: OpenAI・Anthropic・Gemini・Groq など主要プロバイダーに対応
  • フォールバック設定: プライマリのプロバイダーが落ちたとき、別のプロバイダーへ自動で切り替えます
  • レート制限: ユーザー単位・グローバルでリクエストの上限を設定できます
  • 詳細ログとアナリティクス: どのプロンプトが何回使われたかをダッシュボードで確認できます

料金は、無料枠で1日10万リクエストまで。個人開発アプリであればほぼ無料で運用できます。

Rork アプリとの組み合わせが特に有効な理由

Rork で作るアプリの多くは、ユーザーの操作に応じてAIを呼び出す設計をとっています。たとえば:

  • 画像の説明文の生成(何百枚もの写真に、同じ構造のプロンプト)
  • テキストのカテゴリ分類(有限のカテゴリに、大量の入力)
  • おすすめコンテンツの生成(人気のコンテンツには、多くのユーザーが似たリクエストを送ります)

これらのユースケースでは、入力が似ていれば出力も似ているという性質があります。キャッシュが非常に効きやすい構造です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦既定のキャッシュキーの構成5要素と、正規化関数が効かないまま二週間を溶かした原因、cf-aig-cache-key で配線し直すコード
✦エラー種別で切り替えを止める Gemini フォールバックと、安全性フィルタで content が空のときに本番だけ落ちる箇所の防ぎ方
✦日本語プロンプトで btoa が例外を投げる React Native 側の実装ミスと、サーバーと同じキーを端末側で作る置き換え
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-04-29
Rork × Cloudflare Durable Objects で『リアルタイム協調アプリ』のバックエンドを作る実装ガイド
Rork で作ったアプリに、Cloudflare Durable Objects を使った自前のリアルタイム協調バックエンドを組み込む実装手順を、本番で動くコードと一緒にまとめました。Liveblocks や Yjs ホスティングを使わずに、低コストで多人数同時接続を支える設計をお伝えします。
⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。
⬡ 開発ツール2026-10-13
リリース前に、書き出した Expo バンドルの中から自分の鍵を探してみる
ソースに鍵がなくても、出来上がったアプリの中に鍵が残ることがあります。Expo SDK 57 で実際に expo export を実行し、バンドルの中身を grep と 60 行ほどの Node スクリプトで調べて、見つかる鍵と見つからない鍵の違いを確かめました。