Cloudflareの無料プランは青天井にならないのか:自分のアカウントの課金設定を点検した記録

開発misc-dev

Cloudflareの無料プランは青天井にならないのか:自分のアカウントの課金設定を点検した記録

Cloudflare の従量課金で、桁違いの請求を受けた人をネットでたびたび見かける。 見かけるたびに、自分のアカウントは大丈夫だろうかと気になっていた。 月10ドルを上限にするような制限くらいは、設定でかけられるはずだと思っていた。 それがちゃんと入っているかを、朝のうちに確かめることにした。

「月10ドル」は止めてくれなかった

Claude Code に課金設定を点検させた。 cf CLI では読み取りだけを実行させ、予算アラートが上限として止まるのか通知だけなのかは、公式ドキュメントで確かめさせた。

返ってきた答えは、思っていたものと違った。 10ドルの設定は確かに入っていた。 ただしそれは上限ではなく、しきい値を超えたらメールで知らせるだけの予算アラートだった。 このアラートは自分で作ったものではなく、自動で作られていた。 Cloudflare には、使いすぎたら自動で止める機能そのものがない。

ほかに分かったのは次の3点である。

  • ゾーンはすべて無料プランだった
  • Workers Paid は契約していなかった
  • 従量課金の契約になっていたのは R2 Paid だけだった

r2.dev の公開URLを止めさせた

点検結果には、R2 のバケットの1つ(eurekapu-assets)で r2.dev の公開URLが有効になっている、という項目もあった。 r2.dev はキャッシュが効かないので、大量に叩かれるとその回数がそのまま読み取り操作として課金される、という説明が付いていた。

これは危険ではないかと思い、公開を止めるよう頼んだ。 止めたあとは、同じファイルで r2.dev のURLが401を、独自ドメインのURLが200を返すことを確かめさせた。 独自ドメインからの配信は、それまでどおり動いている。

ただ、あとで公開記事を書く段になって、この件の重さは一段下がった。 R2 の読み取りは月1,000万回まで無料で、超えても100万回あたり0.36ドルにとどまる。 r2.dev には、Cloudflare 側でアクセス数の制限もかかっている。 報告されている高額請求のような桁にはなりにくく、開けておく理由がないから閉じた、という程度の話だった。

高額請求はどういう形で起きているのか

ネットで見かける高額請求がどういうパターンなのか、調べて公開記事にまとめるよう頼んだ。 Claude Code に x-search で事例を集めさせ、公式ドキュメントと突き合わせてから書かせた。 推敲では事実関係の修正が3点出て、全文を書き直させた。 そのあと、dev 環境でデスクトップとスマホ幅の表示を確認させた。

スマホ幅では6列の表が潰れていた。 原因の列を外して4列にさせると、残ったはみ出しは3pxになった。 それが表の中だけのスクロールに収まっていることを確かめて、エミュレーションを解除させた。

できあがったのが Cloudflareの従量課金で高額請求が起きるパターン である。 集めた6件は、どれも有料の従量課金製品で起きていた。

無料プランなら青天井にはならないのか

記事ができたあと、改めて聞いた。 自分は無料プランのはずだから、無限に課金されるような状態にはなっていない、ということでいいのか。

答えは「ほぼそのとおり。ただし R2 だけは従量課金の契約に入っているので、理屈の上では青天井」だった。

その回答に Durable Objects と Queues の名前が出ていたので、聞き返した。 それを使うと、上限を超えて課金されることがあるのか。

ここで、前の回答にあった「使うときにアップグレードを促されることがある」という言い方は誤解を招く、という訂正が入った。 使うこと自体では課金されず、どちらも無料プランのまま使える。

聞き終えて、自分の理解は次のように落ち着いた。

  • 無料プランの上限は「止まる線」である。Durable Objects は無料プランでも SQLite 型なら使え、無料の上限を超えるとその種類の操作がエラーになるだけで、課金はされない
  • 月5ドルの Workers Paid などの有料プランに入ると、同じ線が「無料で使える量」に変わり、超えた分は止まらずに課金される
  • 予算アラートは、どちらの場合も使用量を止めない

青天井になるかどうかは、どの機能を使うかではなく、どの契約に入っているかで決まる。 自分の場合、その契約は R2 にだけあった。

止まる側の余裕はどうか

料金の心配がないなら、次に気になるのは、上限に当たって止まる側の余裕だった。 eurekapu-nuxt4 はバッファーが少なかった気がしたので、全プロジェクトを洗い出してもらった。

資源は Pages 29件、Workers 10件、D1 6件、KV 10件、R2 9件だった。 利用量はダッシュボードで見させた(読み取りだけ)。 eurekapu-nuxt4 は、直近24時間で7,031リクエスト、エラーは0件だった。 料金の面ではどのプロジェクトも心配はなく、止まる側の余裕で見ると、気になる点が2つ挙がった。

その流れで、R2 がなぜそんなに重いのかを調べさせた。 全体18.98 GB のうち、さっき公開URLを止めたバケットが10.02 GB を占めていた。 原因は、eurekapu-nuxt4 の動画講座用の読み上げ音声を、圧縮していない WAV のまま R2 に置いていたことだった。 WAV だけで7.44 GB(約4割)あり、そのほとんどが9月と10月に上げた分である。

WAV のままではもったいないので、せめて MP3 にしたいと思った。 気になったのは、MP3 を使って動画を書き出すと劣化するのかどうかで、それを聞いた。 ナレーションだけの音声なら、動画に書き出したあとで聞き比べても違いはまず分からない、という答えだった。 ただ、WAV を MP3 にするだけでは約12 GB までしか下がらない。 10 GB を切るには、ほかのバケットでも約2 GB 削る必要がある。 削減の計画書は、同じ日に別途作った。

従量課金の契約がある唯一の製品で、ちょうど容量が膨らんでいたことになる。 使いすぎたら止める上限は、Cloudflare が「2026年第4四半期に早期提供する」と書いている段階で、10月14日の時点ではまだ使えない。

個人開発のマネタイズ議論をまとめた

並行して別のセッションでは、個人開発者がマネタイズする悩みを書いた X の投稿について、付いた返信と引用をまとめさせていた。 取得した返信は35件で、反応は16人からの返信と引用1件だった。 まとめを memo に保存させたあと、公開記事にまとめてほしいと頼んだ。

この途中で一度、Cloudflare 点検のセッションに送るはずだった質問を、こちらに誤送信した。 返ってきたのは、どのサービスの話か特定できないという確認だった。 そのうえで、Cloudflare のことなら「無料プランだから青天井にはならない」とは言い切れず、R2 は無料枠を超えると請求される従量課金だ、と答えていた。 誤送信だと伝えたあとも、記事作成の途中でもう一度答えてきた。 別セッションが書いた高額請求の記事を根拠に、無料プランのままなら Durable Objects や Queues を使っても青天井にはならず、高額請求になるのは有料プランに切り替えた場合だ、という内容である。 本来のセッションへ送り直した質問とほぼ同じ結論が、宛先を間違えたセッションからも返ってきた。

記事のほうは、途中で貼り付けた内容をもとに検討した結果を書き足させ、そのうえで非公開記事に切り替えた。 そのあと、前提の訂正が2回続いた。

1回目は、決済の実装はあるが、ページはすべて無料のはずだと伝え、「今は全ページ無料で、課金の要素はまだない」という前提に書き直させた。 2回目は、一部の章だけを無料にして、残りはログインすれば解けるようにこの間変えたはずだ、と指摘した。 確かめさせると、その変更は本番でちゃんと効いていた。 前の報告は、ローカルのコードの初期値だけを見たもので、本番の設定までは確かめていなかった。

学び

  • 「月10ドル」の予算アラートは通知だけで、使用量を止めない。月10ドルの上限くらいはかけられるものだと思っていた
  • 青天井になるかどうかは、使う機能ではなく契約で決まる。無料プランの上限はエラーで止まる線で、有料プランに入ると、同じ線から先が課金に変わる
  • 「設定が効いているか」の報告は、ローカルのコードの初期値だけを見ていることがある。本番の状態まで確かめさせる
#cloudflare#従量課金#R2#Durable Objects#日記