この記事でわかること
- -- Pages と Workers の根本的な違い
- -- フルスタックアプリで3MBの壁にぶち当たった実体験
- -- Pagesに切り替えても解決しない理由
- -- $5/月で解決する方法と、追加料金が発生しない根拠
- -- 用途別の選び方フローチャート
前回の記事では「GitHubからCloudflare Pagesにつないで、サイトを簡単に公開する方法」をお伝えしました。あの手順通りにやれば、確かにサクッとサイトは公開できます。
で、今回は「その先」の話です。
実際にフルスタックのWebアプリを作り込んでいったら、ある日突然デプロイできなくなりました。原因を調べていく中で「Workers と Pages の違い」を嫌というほど理解したので、その経緯をまとめます。
同じ壁にぶつかっている方の参考になれば。
あれ、Pagesで作ろうとしたのにWorkersを選ばされる
Cloudflareのダッシュボードを開いて、「サイトを公開したいだけなのに」と思いながらプロジェクトを作ろうとすると、なぜか「Workers」を勧められることがあります。
「前はPagesでできたのに、なんで?」って思いますよね。
これ、ちゃんと理由があります。
Pages と Workers、そもそも何が違うのか
ざっくり言うと、こういう違いです。
| Pages | Workers | |
|---|---|---|
| 得意なこと | Webサイトの公開 | バックエンドの処理 |
| 向いてるもの | LP、ブログ、企業サイト、静的サイト | API、フルスタックアプリ、データ処理 |
| GitHub連携 | pushするだけで自動デプロイ | GitHub Actionsの設定が必要 |
| カスタムドメイン | ダッシュボードからポチッと設定 | 設定ファイルに書く |
| PRプレビュー | PRごとにプレビューURLが自動生成 | なし |
| サイズ制限(無料) | 静的ファイル: 25MB | コード全体: 3MB |
| 料金 | 無料 | 無料(有料は$5/月) |
一言でまとめると、Pagesは「サイトを置く場所」、Workersは「プログラムを動かす場所」です。
ただし、実はこの2つの裏側は同じCloudflareのエッジネットワークで動いています。違うのは「入り口」と「管理方法」だけ。性能や速度に差はありません。
じゃあなぜWorkersを選ばされるのか
ここが今回のポイントです。
Next.jsやNuxt.jsのような「フルスタックフレームワーク」(画面表示だけでなく、裏側のデータ処理まで1つのプロジェクトで作れる仕組み)を使ってアプリを作ると、サーバーサイドの処理が発生します。
サーバーサイド処理とは、ページを表示する前にデータベースからデータを取ってきたり、AIを呼び出したり、ログイン状態をチェックしたりする処理のことです。これは閲覧者のブラウザではなく、Cloudflare側のサーバーで実行されます。
この「サーバーサイド処理」は、Pagesだけでは動かせません。Workersが必要になります。
Cloudflare自身も2025年頃からNext.jsのデプロイ先としてWorkersを公式に推奨するようになりました。OpenNextというNext.jsのアダプタも、Workers専用で作られています。
つまり、「Webアプリを作る = Workers一択」という流れになってきています。
実際にぶち当たった「3MBの壁」
ここからは実体験です。
社長の業務システムを開発していて、AI診断、事業計画書の自動生成、案件管理、顧客管理、監査ログと機能を追加していったら、ある日こんなエラーが出ました。
Your Worker exceeded the size limit of 3 MiB.
Please upgrade to a paid plan to deploy Workers up to 10 MiB.
Workers無料プランのサイズ上限は3MB(gzip圧縮後)。アプリは3.1MBで、たった200KBオーバー。
「じゃあPagesに切り替えれば25MBまでいけるのでは?」と思いました。
結論から言うと、それは無理でした。
Pagesに切り替えても解決しない理由
ここが多くの人が誤解するところです。
Pagesの「25MB」は静的ファイル(HTML、CSS、画像など)のサイズ上限です。サーバーサイドの処理(APIや、アクセスのたびにページを動的に生成する仕組み)は、Pages上でも結局Workersとして動きます。つまり、サーバー処理部分には同じ3MBの制限がかかります。
しかも、OpenNext(Next.jsをCloudflareで動かすアダプタ)はWorkers専用で、Pages向けのデプロイパスを用意していません。
Pages に切り替えようとしても:
- -- OpenNextが対応していない
- -- サーバー処理のサイズ制限は同じ
- -- 別のアダプタ(next-on-pages)に移行すると設定を全部やり直し
八方塞がりでした。
解決方法: Workers有料プラン($5/月)
結局、一番シンプルで確実な方法はこれでした。
Cloudflareのダッシュボードから「Workers Paid」プランに切り替える。月額$5。これだけでサイズ上限が3MB → 10MBに上がります。
「$5/月で追加料金がかからないか?」と心配になると思うので、計算してみました。
| 項目 | 無料枠 | 実際の利用量(想定) |
|---|---|---|
| リクエスト数 | 月1,000万回 | 月10〜50万回 |
| CPU時間 | 月3,000万ms | 月100〜300万ms |
月間1,000万リクエストは、1日あたり約33万回に相当します。仮にスタッフ100人が毎日100回操作しても1日1万回、月30万回。無料枠の3%しか使いません。
ちなみに、コードを最適化して不要なライブラリを削ってサイズを100KB程度は削減しましたが、それでも3MBは超えていました。フルスタックのアプリでは、フレームワーク本体だけで1MB近くあるので、機能を削るにも限界があります。
結論: $5/月の固定料金のみ。追加料金は発生しません。
Pages と Workers、どっちを選べばいいの?
迷ったら、このフローチャートで判断してください。
サイトを作りたい
|
+--- サーバー処理が必要?
|
+--- No → Pages(無料)
| LP、ブログ、企業サイト、ポートフォリオなど
|
+--- Yes → Workers
|
+--- 3MBを超えそう?
|
+--- No → Workers 無料プラン
|
+--- Yes → Workers 有料プラン($5/月)
具体的に言うと:
| 作りたいもの | 推奨 | 理由 |
|---|---|---|
| 企業サイト、LP | Pages(無料) | サーバー処理が不要。GitHub pushだけでデプロイ |
| ブログ、ドキュメントサイト | Pages(無料) | 同上 |
| 会員制サイト(ログインあり) | Workers | 認証処理にサーバーが必要 |
| 業務システム(DB連携) | Workers | API、データベースアクセスが必要 |
| ECサイト(決済あり) | Workers | 決済処理にサーバーが必要 |
| AI機能を組み込んだアプリ | Workers(有料推奨) | AI連携でコードが大きくなりやすい |
まとめ
-- Pages = Webサイトを公開する場所。静的サイトならこれ一択
-- Workers = プログラムを動かす場所。フルスタックアプリはこちら
-- 裏側は同じCloudflareのネットワーク。性能差はない
-- Workers無料プランはサイズ3MBまで。フルスタックアプリだと超える可能性がある
-- $5/月で10MBに拡大。追加料金は通常の利用では発生しない
-- 迷ったらまずPagesで始めて、サーバー処理が必要になったらWorkersへ
前回「Pages簡単だよ」とお伝えしましたが、アプリを本格的に作り込んでいくと、こういう壁にぶつかることもあります。でも$5/月で解決できるので、そんなに怖がる必要はないです。
何かわからないことがあればお気軽にどうぞ
お問い合わせ