• PagesとWorkersのどちらを選べばいいか分からない
  • PagesでもFunctionsでサーバー処理ができると聞いて違いが曖昧になった
  • 無料枠や料金、機能の違いを一覧で比較したい

CloudflareでサイトやWebアプリを作ろうとすると、最初にPagesとWorkersの選択で手が止まります。

どちらもCloudflareのエッジネットワーク上で動作し、JavaScriptやTypeScriptを使ってサーバー処理を動かせるため、違いが分かりにくく感じられるかもしれません。

迷ったときは、公開したい対象が「HTMLや画像を含むWebサイト」なのか、「単体のAPIや裏方の処理」なのかで分けると判断しやすいです。

WebサイトやWebアプリならPages、APIやリバースプロキシ単体ならWorkersを選ぶと失敗しません。

目次

Cloudflare PagesとWorkersの違いを一目で判断する基準

Cloudflare PagesとWorkersの選び方を公開対象と役割で判断するフロー

HTML、CSS、JavaScript、画像などのアセットをまとめて配信したい場合は、Pagesが向いています。

一方で、フロントエンドの画面を持たず、JSONを返すAPIやWebhookの受け口を作りたいならWorkersの出番です。

両者の根本的な違いは、「静的アセットの配信とGit連携を中心にしたWebサイト向けプラットフォーム」か、「エッジで動く汎用的なサーバーレス実行環境」かという点にあります。

実は、Pagesでサーバー処理を担当する「Pages Functions」の裏側では、Workersと同じ仕組みが動いています。

PagesはWorkersを土台にして、Webサイトを運用しやすいようにビルド機能やGit連携をまとめたパッケージと言い換えてもよいでしょう。

機能と仕組みの比較表

比較項目Cloudflare PagesCloudflare Workers
主な用途Webサイト、ブログ、WebアプリAPI、Webhook、リバースプロキシ、Bot
静的ファイルの配信得意(専用の高速配信機構あり)可能だがアセット配置の追加設定が必要
デプロイ方法Git連携(GitHub/GitLab)、Wrangler CLIWrangler CLI(コマンドデプロイ)
自動ビルド機能あり(リポジトリ連携で自動実行)なし(手元やCI/CDでビルドして送信)
プレビューURLプルリクエストごとに自動生成手動設定が必要
サーバー処理Pages Functions(裏でWorkersが動作)ネイティブのWorkerスクリプト
無料枠のリクエスト数静的アセットは無制限(Functionsは1日10万回)1日10万回
定期実行(Cron)単体では非対応対応(Cron Triggers)
D1 / KV / R2バインディング対応対応

表から分かるように、静的ファイルのホスティングとGit連携の手軽さではPagesが優れています。

逆に、定期的なバッチ処理や自由度の高いリクエスト中継を行いたい場合はWorkersの柔軟性が強みになります。

Cloudflare Pagesを選ぶべきケース

WebサイトやWebフロントエンドが存在するプロジェクトなら、迷わずPagesを選んでください。

代表的なユースケースは次の3点です。

  • Astro、Next.js、Remix、Nuxtなどの静的サイトやSSRアプリを動かす
  • GitHubのリポジトリへpushするだけで自動ビルドと公開を完了させたい
  • プルリクエストごとにプレビューURLを発行して画面の事前確認を行いたい

Pages最大の利点は、ビルド環境とGit連携が最初から組み込まれている点です。

手元のパソコンにビルドツールがなくても、GitHubへコードをpushするだけでCloudflare側が自動でビルドして配信してくれます。

個人ブログやコーポレートサイト、ドキュメントサイトなら、設定の手間が格段に少なくて済みます。

静的ブログの運用コストや商用利用のルールが気になる方は、あわせて次の記事も確認してみてください。

関連記事Cloudflare Pagesの無料枠で個人ブログは運用できる?制限と注意点を解説Cloudflare Pagesの無料枠で個人ブログをどこまで運用できるのか。月500回のビルド、静的リクエスト無制限、帯域幅無制限、Functions利用時の注意点です。 関連記事Cloudflare Pagesは商用利用できる?広告付き個人ブログの注意点Cloudflare Pagesは商用利用できます。個人ブログに広告やアフィリエイトを貼る前に、規約・禁止事項・無料枠の制限を確認しておきたい人向けです。

Cloudflare Workersを選ぶべきケース

画面を持たない裏方の処理や、独立したマイクロサービスを作りたいときはWorkersを選びます。

次のような用途にはWorkersが最適です。

  • 外部サービスからのWebhook通知を受け取って処理する
  • SlackやDiscordなどのボット用バックエンドを動かす
  • 既存サーバーの前段に置いて、URLのリライトやヘッダー書き換えを行う
  • 定期的にデータを収集・更新するバッチ処理(Cron Triggers)を実行する

Workersはリクエストを受け取ってからレスポンスを返すまでのミリ秒単位の処理に特化しています。

HTMLファイルを配信するサーバーを用意することなく、数行のJavaScriptを書くだけで世界中のエッジサーバーへAPIを展開できる手軽さが魅力です。

料金と無料枠の違いに注意する

PagesとWorkersのどちらを使うかを決める際、無料枠のカウント方法の違いを把握しておくと安心です。

Freeプランにおけるリクエスト数の扱いには、次のような違いがあります。

  • Pages(静的ファイル): リクエスト数も帯域幅も無制限
  • Workers(およびPages Functions): 合計で1日10万リクエストまで

画像やHTMLを配信するだけの静的ページであれば、Pagesなら何万回アクセスされても無料枠の上限を気にする必要がありません。

ただし、Pagesで動的ルーティングやFunctionsを使った場合は、そのリクエストがWorkers側の「1日10万回」の枠を消費します。

アクセスの大半が記事の閲覧で、問い合わせフォームなど一部だけFunctionsを使う構成なら、無料枠の範囲内で十分に収まるケースが多いでしょう。

デプロイの世代管理や不要な履歴の削除手順については、こちらの記事で整理しています。

関連記事Cloudflare Pagesの古いデプロイを自動削除するスクリプトを作ったCloudflare Pagesはデプロイのたびに履歴が溜まっていきます。Node.jsとAPIで古いデプロイを一括削除するスクリプトを作った際の設計と、単純な日付ソートでは危険な理由を解説します。

今後はどうなる?「Workers & Pages」の統合について

Cloudflareは現在、PagesとWorkersの統合を急速に進めています。

すでに管理画面(ダッシュボード)では「Workers & Pages」として1つのメニューに統合されました。

開発用CLIツールのWranglerでも、WorkersとPagesの両方を同じコマンド体系でデプロイできるようになっています。

将来的には両者の垣根がさらに薄くなり、「アセット配信機能付きのWorker」として統一されていく見込みです。

そのため、「どちらか一方を選んだら後戻りできないのでは」と心配する必要はありません。

現時点の分かりやすい基準として、Webサイトを作りたいならPages、単体APIならWorkersという分け方で進めて問題ありません。

よくある質問

Pages FunctionsとWorkersは全く同じものですか?

実行基盤は同じWorkersのランタイムですが、ファイルの配置場所とルーティング方法が異なります。Pages Functionsはfunctionsディレクトリ配下にファイルを置くだけでファイル名に基づいたルーティングが自動生成されるため、フロントエンドと一体開発しやすい構造になっています。

WorkersだけでWebサイトを作ることはできますか?

可能です。Workersスクリプト内でHTML文字列を返したり、Workers Static Assets機能を使って静的アセットを配信できます。ただ、Git連携による自動ビルドやプレビューURLの生成はPagesのほうが手軽に扱えます。

個人ブログを立ち上げる場合、どちらがおすすめですか?

Pagesをおすすめします。Astroなどの静的サイトジェネレーターと相性が抜群で、静的ファイルの配信リクエストが無制限なため、アクセス急増時にもコストの心配なく運用できます。

まとめと最初の一歩

Cloudflare PagesとWorkersの選び方はシンプルです。

判断基準は次の3点に集約されます。

  • HTMLや画像を含むWebサイト・ブログを作るならPages
  • 単体のAPI、Webhook、プロキシ、定期処理ならWorkers
  • 画面のあるWebアプリでSSRやAPIも同時に動かしたいならPages(Functions活用)

まずは公開したいプロジェクトの性質を確認してください。

個人ブログやWebサイトの公開を目指しているなら、まずはGitHubリポジトリとCloudflare Pagesを連携して最初のデプロイを試してみましょう。