システム開発インフラ
5 min read

Cloudflare Pages/Workersでのエッジ配信とサーバーレス活用

#Cloudflare Pages Workers 違い#Cloudflare Workers 使い方#エッジ配信 サーバーレス 構成#Next.js Cloudflare Pages
Definition

エッジコンピューティングとは、ユーザーに最も近い拠点(エッジ)でデータ処理を行うことで、遅延を極小化し、オリジンサーバーの負荷を軽減する配信技術のことです。

TL;DR (要約)

Pagesは高速な静的配信、WorkersはBFF/APIや認証など動的処理に強みがあります。役割分担とSecrets管理、キャッシュ戦略を設計すると、運用負荷を抑えつつ性能を出せます。まずは「静的+必要最小限の動的」から始めるのが安全です。

この記事でわかること

  • Cloudflare Workers vs AWS Lambda (サーバーレス比較)について学べます
  • PagesとWorkersの役割分担(何をどこでやるか)について学べます
  • 代表的な構成パターン(静的+BFF)について学べます
  • 認証・Secrets・環境変数の扱いについて学べます
  • 開発設定とデプロイ(wrangler.toml)について学べます
  • キャッシュ戦略(何をキャッシュするか)について学べます
  • 運用(ログ・監視・障害対応)について学べます
  • よくある落とし穴(CORS/ルーティング等)について学べます
  • チェックリスト(構築前に決める)について学べます

Cloudflare Workers vs AWS Lambda (サーバーレス比較)

従来のサーバーレス(AWS Lambda等)と、エッジサーバーレス(Cloudflare Workers)は、アーキテクチャが根本的に異なります。

比較軸 Cloudflare Workers (Edge) AWS Lambda (Region)
実行場所 世界270都市以上 (ユーザーの最寄り) 指定したリージョン (東京、バージニア等)
起動速度 0ms (Isolate技術で爆速) 数百ms〜数秒 (コールドスタートあり)
課金体系 リクエスト数 + CPU時間 (安価) 実行時間 (GB-seconds) + リクエスト数
制約 実行時間やメモリに厳格な上限あり 長時間処理や重いメモリ処理も可能

静的サイトの配信や軽量なAPIならCloudflareが圧倒的に有利ですが、動画変換や機械学習などの「重い処理」はAWS Lambdaの方が向いています。

PagesとWorkersの役割分担(何をどこでやるか)

Cloudflareのエコシステムは機能が豊富ですが、モダンなWeb開発において主役となるのは「Pages」と「Workers」の2つです。これらを混同せず、適材適所で使い分けることが成功の第一歩です。

💡 実践ガイド
中小企業がコストを抑えて安全にWebサイトを構築する具体的な手順については、👉 中小企業が無料〜安価に高品質HPを作る:Cloudflare Pages × Next.js 実務手順 で詳細に解説しています。

機能 Cloudflare Pages Cloudflare Workers
主な用途 フロントエンドのホスティング
(HTML/JS/CSS/画像)
APIサーバー、BFF、プロキシ
(動的処理、認証、リダイレクト)
デプロイ Git連携 (Pushで自動ビルド) CLI (Wrangler) でデプロイ
ファイルシステム 静的アセットを持つ 原則コードのみ (KV/R2を利用)
開発者体験 Vercel / Netlifyに近い AWS Lambdaに近い

基本戦略は、「画面(UI)はPages、ロジック(API)はWorkers」です。Next.jsなどのフレームワークを使う場合、Pagesの中にFunctions(実体はWorkers)を含めることも可能ですが、大規模化を見越すならリポジトリレベルで分離する疎結合アーキテクチャを検討すべきです。

代表的な構成パターン(静的+BFF)

最もコストパフォーマンスが良く、スケーラビリティが高いのが以下の構成です。

Cloudflare Architecture Diagram

1. UserCloudflare Pages (CDN Edge)

まずは最寄りのエッジから、キャッシュされたHTML/JSを0.1秒で受信します。

2. FrontendCloudflare Workers (BFF)

ブラウザから動的なデータ(在庫、マイページ情報)をWorkersへリクエストします。

3. WorkersUpstream API / DB

WorkersがAPIキーを付与して外部API(Headless CMS, DBなど)を叩き、結果を整形して返します。

この構成のメリットは、「オリジンサーバー(重い処理をするサーバー)への負荷を極小化できる」点です。静的ファイルへのアクセスはオリジンに行かず、動的リクエストもWorkersがキャッシュや軽量処理を肩代わりします。

認証・Secrets・環境変数の扱い

フロントエンド開発で最も危険なのが、APIキーやシークレットトークンの漏洩です。

「Secretsをフロントに出さない」ことが鉄則です。

  • NG (危険)
    Reactコード内に const API_KEY = "sk-..." と書く。
    → ブラウザの「ソースを表示」で誰でも見れてしまいます。
  • OK (安全)
    Cloudflare Workersの環境変数にAPIキーを保存し、フロントからはキー無しでWorkersを叩く。
    Workers内で env.API_KEY を付与して外部APIへプロキシする。

Cloudflareではダッシュボードから暗号化された環境変数を設定でき、コード内からは参照できますが、デプロイ後の値の閲覧はできないよう保護されています。

開発設定とデプロイ(wrangler.toml)

Cloudflare Workersの設定は wrangler.toml ファイル一つで管理します。最小限の構成例を見てみましょう。

name = "my-worker-app"
main = "src/index.ts"
compatibility_date = "2024-01-01"

# ■ 環境変数のバインディング
# シークレットはここには書かず、CLIで `npx wrangler secret put` して登録します
[vars]
API_HOST = "https://api.example.com"

# ■ KV (Key-Valueストア) の設定
[[kv_namespaces]]
binding = "MY_KV"
id = "xxxxxxxxxxxxxxxxxxxxx"

# ■ スマートプレースメント (最適配置) の有効化
# ユーザーに近いエッジではなく、DBに近いエッジで動かす場合にONにする
# [placement]
# mode = "smart"

このように、「インフラの設定」をコードとしてリポジトリ管理(IaC)できる運用性の高さも魅力の一つです。

キャッシュ戦略(何をキャッシュするか)

エッジ活用の醍醐味はキャッシュコントロールにあります。Workersを使えば、「特定のユーザーだけキャッシュしない」「1分だけキャッシュする」といった細かい制御が可能です。

Cache API活用例:

  • ニュース一覧 (Public)max-age=600 (10分キャッシュ)。誰が見ても同じなので、エッジで返し続ける。
  • ユーザー情報 (Private)no-store (キャッシュなし)。常にDBから最新を取得。
  • 検索結果 (Query)s-maxage=3600 (1時間)。同じキーワードでの検索負荷を下げる。

これらを適切に設定するだけで、バックエンドDBの負荷を1/10以下に減らすことも珍しくありません。

運用(ログ・監視・障害対応)

サーバーレスは「サーバー管理が不要」ですが、「運用が不要」なわけではありません。むしろ、ログが見えにくくなるため、意図的な可視化が必要です。

  • ログストリーミング
    Workersのログは標準では保存されません。DatadogやLogpush連携を設定し、永続化します。
  • リアルタイム監視
    「Wrangler tail」コマンドで、今起きているエラーをターミナルで流し見ることができます。開発中のデバッグに必須です。
  • バージョン管理
    PagesもWorkersも、過去のデプロイメントに「1クリックでロールバック(切り戻し)」する機能があります。障害時は修正より先に、まず前バージョンに戻す判断が重要です。

よくある落とし穴(CORS/ルーティング等)

導入時によくハマるポイントを挙げます。

  • CORS (Cross-Origin Resource Sharing) エラー
    Pages (Domain A) から Workers (Domain B) を叩く時、ブラウザがブロックします。Workers側で適切な Access-Control-Allow-Origin ヘッダーを返す実装が必要です。
  • Node.js APIの非互換
    Workersはブラウザ互換のV8エンジンで動いており、Node.jsではありません。fs モジュールなどは使えないため、型安全にWorkersを実装するTypeScript開発環境での実装時にライブラリ選びに注意が必要です。

💡 Tips: CPU時間とメモリの壁

Workers(特にFree/Standardプラン)には、1回のリクエストに対する「CPU実行時間」や「メモリ使用量」に厳しい制約があります。
画像のリサイズや複雑な計算を行うとエラー(1101等)になることがあるため、重い処理はクライアント側でやるか、別途AWS Lambdaなどを非同期で呼ぶアーキテクチャを検討しましょう。

チェックリスト(構築前に決める)

Cloudflare環境での構築プロジェクトを始める前の確認リストです。

重要ポイント

Cloudflareは「安くて速い」という強力な武器ですが、従来のサーバーとは「お作法」が違います。まずは小さな機能(お問い合わせフォームの裏側など)からWorkersを利用し、慣れてからメイン機能へ適用するのが、最も確実な学習ルートです。

チェックリスト

  • □ PagesとWorkersの役割分担(どこまで静的化するか)が決まっている
  • □ 環境変数(Secrets)の管理ルール(.env はコミットしない等)が周知されている
  • □ フロントエンドから直接叩いてはいけないAPI(Admin系)が識別されている
  • □ CORS設定(許可するオリジンドメイン)が定義されている
  • □ ログの保存先(Datadog, Sentry等)が決まっている
  • □ デプロイフロー(GitHub Actionsか、Pages標準機能か)が決まっている
  • □ ロールバックの手順がドキュメント化されている
  • □ 使用するライブラリがEdge Runtime(Workers)で動くか検証済みである
  • □ カスタムドメインのDNS設定権限(Cloudflareへの移管要否)を確認した
  • □ 課金アラート(Usage Limit)の設定を行っている

モダンで拡張性の高いシステム開発

Next.jsやクラウドネイティブ技術を活用し、ビジネスを加速させるシステムを構築します。

システム・アプリ開発について
Theme Overview

モダンなWeb開発の標準:Next.jsとヘッドレスCMSによる構築

このテーマの全体像を把握し、より体系的な理解を深めましょう。

全体像を読む

ビジネスの課題解決を、
もっと具体的に。

Malakeは、テクノロジーと戦略の両面から
貴社のビジネス変革をサポートします。