Cloudflare Pages の Functions 制限と Workers 連携の組み立て方

公開: / 著者: StackComp 編集部

Cloudflare Pages はもともと静的サイトホスティングですが、Pages Functions を使えばサーバーレス関数を組み合わせられます。 ただし完全な Worker と同等ではなく、いくつかの実用上の制約があります。本記事では「いつ Pages Functions で済ませ、いつ Workers を併用すべきか」を整理します。

Pages Functions と Workers の関係

結論から言うと、Pages Functions は実態として Workers 上で動いている。 Pages のリポジトリの functions/ ディレクトリに置いたファイルが、デプロイ時に自動で Workers として登録されます。

違いは「Pages のデプロイサイクルに統合されているか」。Pages Functions は git push → ビルド → Pages と Functions が同時に更新される。 一方で純粋な Workers は別ライフサイクルで管理(wrangler deploy)。

Pages Functions の実用上の制約

1. ファイルベースルーティング限定

Pages Functions は functions/api/users.ts/api/users のように、 ファイルパス = URL パス の形でしか定義できません。 動的ルーティング(functions/api/users/[id].ts)はサポートされていますが、 プログラマブルなルーター(Hono の app.route() のような書き方)は素では使えません。

2. Cron Triggers なし

Pages Functions では「毎日0時に実行」のようなスケジュール処理は定義できません。 Workers の Cron Triggers を別途使うか、Cloudflare Workflows などを併用する必要があります。

3. Durable Objects はバインドのみ

Pages Functions から Durable Objects を呼び出すことはできますが、 DO 自体を Pages リポ内で定義することはできません(Workers として別途デプロイが必要)。

4. 一部の Workers 限定機能

Workers Logs、Tail Workers、複雑な migrations 等、一部の高度な機能は Pages Functions では使えないか制限的。

定石の組み立てパターン

パターン A: Pages Functions だけで完結

シンプルな API(認証・データCRUD・お問い合わせフォーム送信等)なら Pages Functions だけで十分。 リポ1つでフロント+APIが完結し、デプロイも統合されている。個人開発の90%はこれで済む

functions/
  api/
    contact.ts       # POST /api/contact
    users/
      [id].ts        # GET /api/users/:id

パターン B: Pages + 専用 Worker(推奨パターン)

Cron 処理・Durable Objects・複雑な API ルーティングが必要なら、 専用の Worker を別途用意して Pages から呼び出すのが定石。

パターン C: 全部 Workers

フロントも Workers で配信する構成。Workers Static Assets(2024年GA)を使えば、 Pages を使わずに静的ファイルも配信可能。Pages よりも柔軟だが、Pages のプレビューデプロイ等の DX を失う。

Functions が使えないケース → Vercel との比較

Next.js の App Router で Server Actions・Streaming・Middleware を多用するアプリは、 Pages Functions / Workers Runtime の制限(Node.js 純正 API の一部が動かない)に当たることがあります。

そういうケースは Vercel のほうがスムーズです(Vercel と Cloudflare Pages の比較)。 ただし収益化サイトを Vercel Hobby で運用するのは TOS 違反(Vercel Hobby は商用利用NGの罠)。

料金面のメリット

Pages Functions の請求は Workers と同じ:

無料枠だけで月300万リクエストまで実質無料運用できる。同水準で Vercel Pro なら$20/seat、 AWS Lambda + API Gateway なら数十ドル発生するボリュームでも、Cloudflare なら $5。

まとめ

個人開発・小〜中規模アプリは Pages Functions だけで90%まで対応可能。 Cron や複雑な状態管理が必要になったら、専用 Worker を追加で組み合わせるのが最も柔軟で安いです。 料金感は ホスティング月額シミュレーター で確認してください。