Aller au contenu principal
友田 陽大
Running the app you built with AI
バイブコーディング
個人開発
Vercel
インフラ
AI

公開したら請求が跳ねた — 従量課金の事故と、上限の設定方法

AIで作ったアプリを公開したあと、クラウドやAIのAPI料金が想定外に跳ねる事故の原因と対策を、非エンジニア向けに解説します。跳ねやすい5つのパターン、Vercel・Supabase・AI APIそれぞれの上限設定、レート制限の入れ方まで。

Published
Reading time
9 min read
Author
友田 陽大
Partager

セキュリティの事故は「攻撃されたら起きる」ものですが、これは誰にも攻撃されなくても起きます。自分のコードのバグだけで十分です。

そして気づくのは、たいてい請求書が届いてからです。


1. なぜ跳ねるのか — 従量課金には天井が無い

昔のレンタルサーバーは「月1,000円で使い放題」でした。使いすぎればサイトが遅くなるだけで、請求額は変わりません。

いまのクラウドサービスは逆です。使った分だけ請求され、上限を設定しない限り天井がありません。 混雑しても遅くならず、スケールして、そのぶん課金されます。

これは本来メリットです。急にアクセスが増えてもサービスが落ちません。ただし**「増えた」の原因が正常なアクセスとは限らない**というのが、この記事の話です。


2. 跳ねやすい5つのパターン

パターン1: AIのAPI呼び出し

いちばん危険です。

OpenAI や Anthropic のAPIは、1リクエストあたりの単価がクラウドの他のサービスより桁違いに高く、しかも入力が長いほど高くなります

AI が書きがちな危険な実装:

  • 会話履歴を毎回全部送る — やり取りが進むほど、1回のコストが上がっていく
  • ユーザーが送った文章の長さを制限していない — 長文を貼られると1回で高額
  • リトライ(再試行)に上限が無い — エラーが続くと同じ呼び出しを繰り返す
  • ログイン不要で使える — 誰でも無制限に呼べる

最後が特に効きます。「試しに使ってもらいたいから」とログイン無しでAI機能を公開すると、それはあなたのお金で誰でもAIを使える窓口になります。

パターン2: 画像・動画の変換

画像の最適化、サムネイル生成、動画のエンコード。これらは処理が重く、多くのサービスで「変換した枚数」や「転送量」で課金されます。

問題は、同じ画像が何度も変換されることです。キャッシュ(一度作ったものを再利用する仕組み)が効いていないと、ページを表示するたびに変換が走ります。

パターン3: 無限ループ

いちばん静かに、いちばん速く跳ねます。

【起きること】
- 処理Aが処理Bを呼び、処理Bが処理Aを呼ぶ
- データ更新をきっかけに動く処理が、自分でデータを更新する
- 失敗したら再試行する処理が、再試行でも失敗し続ける

3番目が特に多いパターンです。「エラーが出たら再試行して」とAIに頼むと、上限を指定しない限り永久に再試行するコードを書くことがあります。

ループは人間の目には見えません。サーバー側で静かに回り続けます。

パターン4: ボットの巡回

公開したサイトには、検索エンジンやAIのクローラーが来ます。これは正常です。

ただし、重い処理を含むページが大量にある場合、クローラーがそれを全部踏んでいきます。

  • 検索結果ページが無限に生成される(?page=1 から ?page=99999 まで)
  • カレンダー機能が無限に未来の日付を生成する
  • フィルタの組み合わせでURLが爆発する

これらは「URLは無限にあるが中身は同じ」という状態で、クローラーは律儀に全部見に行きます。

パターン5: 無料枠を超えた瞬間

最後に、思い込みの問題です。

「無料プランだから請求は来ないはず」——これはサービスによって違います

  • 無料枠を超えたらサービスが停止する → 請求は来ない(ただしサービスが止まる)
  • 無料枠を超えたら自動的に従量課金へ移行する → 請求が来る

どちらの挙動なのかは、公開前に必ず確認してください。カードを登録した時点で後者になっているサービスもあります。


3. 対策1: 支払上限を設定する(最優先)

まずやるべきはこれです。

「請求アラート」では足りない理由

多くの人は請求アラートを設定して安心します。しかしアラートは**「使いすぎました」と教えてくれるだけで、止めてはくれません**。

深夜2時に無限ループが始まったとします。アラートは2時半に届きます。あなたが気づくのは朝7時。その4時間半は、丸ごと課金されています。

必要なのは通知ではなく、支払上限(ハードキャップ) です。

主要サービスでの設定

Vercel — Spend Management の機能で、金額のしきい値に達したときの動作を設定できます。通知だけでなく、デプロイを一時停止する選択もできます。設定できるプランと項目は公式ドキュメントで確認してください。

AI API(OpenAI / Anthropic など) — 管理画面でキー単位・組織単位の使用上限を設定できます。これは必ず設定してください。 金額を指定しておけば、そこで止まります。開発用と本番用でキーを分け、それぞれに上限を付けるとさらに安全です。

Supabase — プランごとの上限と、超過時の課金の扱いを確認してください。Spend cap の設定がある場合は有効にします。

クラウド全般(AWS / GCP) — 予算アラートは設定できますが、自動停止は標準では付いていません。停止まで自動化したい場合は別途仕組みが必要です。

確認すべき2点

どのサービスでも、次の2つを確認してください。

  1. 上限に達したら何が起きるか — 止まるのか、課金され続けるのか
  2. 止まる場合、どうやって復旧するか — 深夜に止まったときの手順

「止まる」設定は、裏を返せば「サービスが落ちる」ということです。個人開発なら、青天井の請求よりサービス停止のほうがましな場合がほとんどですが、それは自分で選ぶべき判断です。


4. 対策2: レート制限を入れる

上限設定が「被害の天井」を決めるのに対し、レート制限は**「そもそも大量に呼ばせない」**ための対策です。

レート制限とは、「同じ人からのリクエストを一定時間内で制限する」仕組みです。たとえば「1人あたり1分間に10回まで」。

上限設定だけだとサービスが止まり、レート制限だけだと天井がありません。両方あって初めて、暴走しても止まらず、かつ課金も跳ねない状態になります。

どこに入れるか

全部に入れる必要はありません。コストが高い処理だけで十分です。

  • AI のAPIを呼ぶ処理 ← 最優先
  • 画像・動画の変換
  • 外部の有料APIを呼ぶ処理
  • メール送信
  • 重い集計・検索

ログイン必須にするだけでも効く

AI 機能をログイン必須にするだけで、無差別な悪用はかなり減ります。「試してもらうために無料で開放したい」気持ちは分かりますが、開放するなら回数制限とセットにしてください。


5. 対策3: 跳ねる原因を先に潰す

上限とレート制限は「起きたときに困らない」ための対策です。そもそも起こさない工夫も、いくつかは簡単に入ります。

再試行に上限を付ける。 「3回まで、間隔を空けて」と決めます。無限に再試行しない。

AIに送る入力を制限する。 文字数の上限を決め、会話履歴も直近N件だけ送る形にします。

変換結果をキャッシュする。 同じ画像を毎回変換しない。

クローラーに見せる範囲を絞る。 robots.txt で、検索結果ページやフィルタの組み合わせページを除外します。中身が実質同じURLを無限に生成しない、というのも設計の話です。

タイムアウトを設定する。 外部サービスの応答を無限に待たない。待っている間も課金されます。


6. AIに貼る指示

このアプリが使っている従量課金のサービスを全部洗い出して、それぞれ
次を表にしてください。

(1) 何が課金の単位になるか(リクエスト数、転送量、実行時間、トークン数)
(2) 想定外に費用が跳ねるシナリオ(具体的に)
(3) 管理画面で設定できる上限やアラートの種類

そのうえで、コードを読んで次の危険な実装が無いか確認してください。

- 再試行(リトライ)に上限が無い箇所
- AIのAPIに送る入力の長さを制限していない箇所
- 会話履歴を毎回全部送っている箇所
- 同じ変換処理が毎回走る(キャッシュされていない)箇所
- ログイン不要で呼べる、コストの高い処理
- 外部サービスの呼び出しにタイムアウトが無い箇所
- 処理が互いを呼び合う可能性がある箇所(無限ループの元)

最後に、コストの高いエンドポイントにレート制限を実装してください。
どのエンドポイントにどんな制限値を入れたかを、理由つきで日本語で
説明してください。私はコードが読めません。

7. 公開直後にやるチェックリスト

  • 使っているサービスを全部書き出した(無料枠のものも含む)
  • それぞれの「無料枠を超えたときの挙動」を確認した(停止か課金か)
  • 支払上限を設定できるサービスでは設定した
  • AI APIのキー単位の上限額を設定した
  • 請求アラートを設定した(上限の代わりではなく、併用として)
  • コストの高い処理にレート制限を入れた
  • AI機能をログイン必須にした、または回数制限を付けた
  • 再試行に上限を付けた
  • 外部呼び出しにタイムアウトを設定した
  • robots.txt で無限に生成されるURLを除外した
  • 公開後1週間、毎日1回は請求画面を見る ← これが最も効く

最後の項目が地味に重要です。跳ね始めは、たいてい小さな異常として現れます。毎日1回見ていれば、初日に気づけます。


まとめ

  • 従量課金には天井が無い。攻撃されなくても、自分のバグだけで跳ねる
  • 跳ねやすいのは5つ — AIのAPI、画像・動画の変換、無限ループ、ボットの巡回、無料枠超過時の自動移行
  • AI APIが最も危険。単価が高く、入力が長いほど高い。キー単位の上限は必須
  • 請求アラートは事後通知でしかない。設定できるなら支払上限を使う
  • レート制限は上限設定と別に必要。上限は「被害の天井」、レート制限は「発生の抑止」
  • 公開後1週間は毎日請求画面を見る。跳ね始めは小さく現れる

これは公開「前」ではなく公開「直後」の項目ですが、後回しにすると痛い出費として返ってきます。公開前の4項目を潰したら、次はここです。

Questions fréquentes

個人開発でも本当に高額請求は起きますか?
起きます。従量課金のサービスは使った分だけ請求される仕組みで、上限を設定しない限り天井がありません。無限ループで同じ処理が繰り返される、ボットが大量にページを巡回する、AIのAPIを1リクエストごとに何度も呼ぶ——こうした状況で、無料枠の想定から数桁ずれることがあります。悪意ある攻撃が無くても、自分のコードのバグだけで起こり得ます。
何にいちばん注意すべきですか?
AIのAPI(OpenAI、Anthropic など)です。1リクエストあたりの単価がクラウドの他のサービスより桁違いに高く、しかも入力が長いほど高くなります。会話履歴を毎回全部送る実装だと、やり取りが進むほど1回のコストが上がっていきます。キー単位の上限額設定と、アプリ側での入力長の制限を必ず入れてください。
請求アラートを設定すれば大丈夫ですか?
不十分です。アラートは「使いすぎた」と教えてくれるだけで、止めてはくれません。通知が届いてあなたが気づくまでの間も課金は進みます。深夜に始まった暴走なら、朝までの数時間が丸ごと課金されます。設定できるサービスでは、通知ではなく支払上限(ハードキャップ)を設定してください。
レート制限とは何ですか?なぜ上限設定と別に必要なのですか?
レート制限は「同じ人からのリクエストを一定時間内で制限する」仕組みです。上限設定が『被害の天井』を決めるのに対し、レート制限は『そもそも大量に呼ばせない』ための対策です。上限だけだとサービスが止まり、レート制限だけだと天井がありません。両方あって初めて、暴走しても止まらず、かつ課金も跳ねない状態になります。
無料枠の中で使っていれば安全ですか?
安全ではありません。多くのサービスは無料枠を超えると自動的に従量課金へ移行するか、あるいはサービスが停止します。どちらの挙動なのかはサービスごとに違うので、公開前に必ず確認してください。『無料プランだから請求は来ないはず』という思い込みが、事故の典型的な入り口です。

Références

友田

友田 陽大

Créateur d’un produit lauréat du prix du ministre (METI). Avec TypeScript + Python + AWS, je livre SaaS, transformation numérique industrielle et IA générative (RAG) prête pour la production — des spécifications à l’infrastructure et à l’exploitation, seul.

“It works. But is it safe to launch?”

Twenty questions, no signup — a pre-launch self-check for the app you built with AI

You don't need to read any code. Answer yes / no / not sure to questions like “can only the person who logged in see their own data?” You get your risks ordered by severity, plus a fix instruction you can paste straight into Claude Code or Cursor. Nothing you type leaves your browser.

Disponible en mission au forfait comme en conseil technique. Commencez par un échange gratuit de 30 minutes.

最短ルート:カレンダーから直接予約

相談内容が固まっている方は、フォーム送信よりその場で日程を確定する方がスムーズです。下記から空き時間をお選びください。

  • 30分のオンライン無料相談
  • Google Meet / Zoom / Microsoft Teams
  • NDA 商談前締結可・無理な営業はいたしません
無料相談の空き枠を予約する

À lire également