はじめに
Cloudflare は無料枠が異常に太いことで知られています。
Pages、Workers、R2、D1、KV——個人開発で使うサービスのほとんどが Free プランで提供されており驚きを隠せません。
ただし「無料で使える」と「無料枠で収まる設計にする」は別の話です。上限を知らずに設計すると、思わぬところで課金が発生します。
この記事では各サービスの Free プラン上限を整理し、個人開発で無料枠に収まる構成パターンを紹介します。
この記事で登場する Cloudflare 用語
- R2: 画像・動画・PDF などを置く S3 互換オブジェクトストレージ。egress(下り転送量)が無料で CDN 的な配信にも向く
- D1: SQLite ベースのリレーショナル DB。JOIN やトランザクションが必要なアプリで、従来の RDB と同じ感覚で使える
- KV: キーに対して値を返す超軽量な Key-Value ストア。設定値やキャッシュなど「読み取りが多く書き込みは少ない」データ向け
無料枠の上限一覧
2026 年 4 月時点の主要サービスの Free プラン上限です。最新情報は公式の Plans ページ で確認してください。
| サービス | 主な上限 | 超過時の挙動 |
|---|---|---|
| Pages | 無制限のサイト、500 回/月ビルド | ビルド失敗 |
| Workers | 10 万リクエスト/日、10ms CPU 時間/リクエスト | リクエスト拒否 |
| KV | 10 万読み取り/日、1,000 書き込み/日 | リクエスト拒否 |
| R2 | 10 GB ストレージ、100 万 Class A/月、1,000 万 Class B/月 | 課金開始 |
| D1 | 5 GB ストレージ、500 万行読み取り/日、10 万行書き込み/日 | リクエスト拒否 |
| Queues | 100 万オペレーション/月 | 課金開始 |
Pages のホスティング自体は事実上無制限です。制限があるのはビルド回数(月 500 回)ですが、個人ブログで月 500 回デプロイすることはまずありません。
構成パターン
パターン 1: 静的サイト(このブログの構成)
Pages(Astro SSG)→ 静的 HTML/CSS/JS を配信最もシンプルな構成で、Workers も KV も使いません。ビルド回数以外に上限を気にする要素がなく、無料枠を超える心配は事実上ゼロです。
ブログ、ポートフォリオ、ドキュメントサイトはこの構成で十分です。
パターン 2: 静的サイト + 簡易 API
Pages(フロント)+ Pages Functions(API)+ KV(データ)お問い合わせフォームやアクセスカウンターなど、軽量な動的機能を追加するパターンです。Pages Functions は Workers と同じリクエスト上限(10 万/日)を共有します。
KV の書き込み上限は 1,000 回/日とやや厳しいため、書き込み頻度が高い機能には不向きです。閲覧カウンターのように読み取りが中心のユースケースに適しています。
パターン 3: アプリ + DB + ストレージ
Pages(フロント)+ Workers(API)+ D1(DB)+ R2(ファイル)フルスタックの個人開発アプリ向けです。D1 の読み取り上限は 500 万行/日と余裕がありますが、書き込みは 10 万行/日です。
R2 はストレージが 10 GB まで無料で、egress(下り転送量)は無制限です。画像や PDF のホスティングに向いています。S3 互換 API なので、既存の S3 クライアントがそのまま使えるのも利点です。
無料枠に収めるための設計のコツ
Workers のリクエスト数を減らす
10 万リクエスト/日は多いように見えますが、SPA のバックエンド API として使うと意外に消費します。以下の工夫で節約できます。
- 静的化できるレスポンスは Pages で配信する。Workers を経由させない
- Cache API を使う。Workers 内で
caches.defaultにレスポンスをキャッシュすれば、同じリクエストに対する Workers の実行回数を減らせる - バッチ API を設計する。フロントエンドから 10 回 fetch する代わりに、1 回のリクエストでまとめて取得できる API を作る
KV の書き込み上限に注意する
KV の読み取りは 10 万回/日ですが、書き込みは 1,000 回/日です。2 桁違います。
セッション管理のように頻繁に書き込むユースケースには向きません。設定値やキャッシュのように「書き込みは稀、読み取りは頻繁」なデータに使います。頻繁な書き込みが必要なら D1 を検討してください。
D1 は行数ベースで考える
D1 の制限は「リクエスト数」ではなく「行数」です。SELECT * FROM users が 100 行返せば、100 行分の読み取りとしてカウントされます。
-- 悪い例: 全件取得して JS で絞り込むSELECT * FROM logs
-- 良い例: WHERE で絞ってから取得するSELECT * FROM logs WHERE created_at > date('now', '-7 days') LIMIT 100不要な行を読まない設計が、そのまま無料枠の節約になります。
R2 の Class A / B を理解する
R2 の操作は Class A(変更系 + LIST: PUT, POST, DELETE, LIST)と Class B(読み取り系: GET, HEAD)に分類されます。
| Class | 無料上限 | 主な操作 |
|---|---|---|
| A | 100 万回/月 | PUT, POST, DELETE, LIST |
| B | 1,000 万回/月 | GET, HEAD |
画像を CDN 的に配信する場合、読み取り(Class B)は 1,000 万回/月あるので十分です。一方で LIST 操作(ファイル一覧の取得)は Class A にカウントされるため、管理画面でファイル一覧を頻繁にリロードすると消費が早まります。
モニタリング
無料枠の消費状況は Cloudflare ダッシュボードの Analytics セクションで確認できます。Workers の場合は Workers & Pages → 該当 Worker → Metrics から日次のリクエスト数を見られます。
上限に近づいたときにアラートを受け取りたい場合は、ダッシュボードの Notifications から設定できます。無料枠でも通知設定は利用可能です。
まとめ
- Cloudflare の無料枠は個人開発には十分すぎる水準だが、サービスごとの上限は把握しておく必要がある
- 静的サイトなら Pages のみで事実上無制限。動的機能を追加する場合は Workers のリクエスト数と KV の書き込み上限がボトルネックになりやすい
- D1 は行数ベース、R2 は操作クラスベースの課金体系。不要なデータを読まない設計がそのまま節約になる
- Pages と Workers の使い分けについては前回の記事を、Pages そのものの詳細は Cloudflare Pages 入門を参照