Cloudflare Workersの 実装設計:認証・ キャッシュ・ 運用と Lambdaとの 使い分け
まず押さえたいことエッジコンピューティングとは、
利用者に 近い 拠点 (エッジ)で データを 処理する ことで、 応答の 遅れを 抑え、 オリジンサーバーの 負荷を 減らす配信の 仕組みの ことです。
この記事の要点
Workersで動的な処理を実装するときに決めることは、Secretsの置き場所、キャッシュする対象と期間、ログの保存先、障害時の切り分け方の4点です。エッジでの実行は起動の遅れが小さい一方、実行時間とメモリの上限が厳しいため、時間のかかる処理や重いライブラリを使う処理は、AWS Lambdaなどリージョンで動く仕組みに任せるかどうかを判断します。最初は、静的配信に必要な分だけ動的な処理を足す構成から始めます。
この 記事で わかる こと
- Cloudflare Workers vs AWS Lambda (サーバーレス
比較) - 代表的な
構成パターン (静的+BFF) - 認証・
Secrets・ 環境変数の 扱い - 開発設定と
デプロイ(wrangler.toml) - キャッシュ戦略
(何を キャッシュするか) - 運用
(ログ・ 監視・ 障害対応) - よく
ある 落とし穴 (CORS/ルーティング 等) - チェックリスト
(構築前に 決める)
Cloudflare Workers vs AWS Lambda (サーバーレス 比較)
従来の
| 比べる |
Cloudflare Workers |
AWS Lambda |
|---|---|---|
| 実行場所 | Cloudflareの |
指定した |
| 起動速度 | V8 Isolatesを |
数百ms〜数秒 |
| 課金の |
リクエスト |
実行時間 |
| 制約 | 実行時間と |
時間の |
静的配信に近い軽いAPIや、リクエストの振り分けなどには、Workersが候補になります。一方、時間のかかる処理、多くのランタイム機能を必要とする処理、AWS内のデータの近くで動かしたい処理は、Lambdaのほうが扱いやすい場合があります。料金表に加えて、処理にかかる時間、使うライブラリ、データの置き場所で判断します。
代表的な 構成パターン (静的+BFF)
画面は静的配信に任せ、動的な処理だけをWorkersで行う構成が基本の形です。PagesとWorkersのどちらを使うかは、Cloudflare PagesとWorkersの違い:構成を選ぶための判断表で扱っています。この記事では、Workersで動的な処理を実装することを前提に、その設計と運用を説明します。
運用の費用を含めた構成の判断は、中小企業サイトの運用コストを抑える方法で整理しています。また、フロントエンドとAPIをリポジトリごとに分ける場合は、疎結合アーキテクチャの設計が前提になります。
1. 利用者 → Cloudflare Pages
最寄りの
2. 画面
ブラウザから、
3. Workers → 外部の
Workersが
この構成の利点は、オリジンサーバー(重い処理をするサーバー)への負荷を小さくできることです。静的ファイルへのアクセスはオリジンに届かず、動的なリクエストも、Workersがキャッシュや軽い処理で代わりに受け持ちます。
認証・ Secrets・ 環境変数の 扱い
フロントエンドの
原則は、
- 危険な
書き方 :
Reactのコードに const API_KEY = "sk-..."と書く。 → ブラウザの 「ソースを 表示」などで、 誰でも 見られてしまいます。 - 安全な書き方:
APIキーはCloudflare Workersの環境変数に保存し、画面側からはキーを付けずにWorkersを呼び出す。
Workersの中でenv.API_KEYを付けて、外部のAPIへ中継する。
Cloudflareでは、ダッシュボードから暗号化された環境変数を設定できます。コードからは参照できますが、デプロイした後に値を画面で見ることはできないように保護されています。
開発設定と デプロイ(wrangler.toml)
Cloudflare Workersの設定は、一つの設定ファイルで管理します(現在は wrangler.jsonc が推奨の形式ですが、wrangler.toml も引き続き使えます)。最小限の構成例は次のとおりです。
name = "my-worker-app"
main = "src/index.ts"
compatibility_date = "2026-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"
このように、
キャッシュ戦略 (何を キャッシュするか)
エッジを活用するうえで中心になるのは、キャッシュの制御です。Workersを使うと、特定の利用者にはキャッシュを使わない、1分だけキャッシュする、といった細かい制御ができます。
Cache APIの
- ニュース一覧
(誰に :でも 同じ 内容) max-age=600(10分キャッシュ)。 誰が見ても 同じ 内容なので、 エッジから 返し続けます。 - ユーザー情報
(利用者ごとの :内容) no-store(キャッシュしない)。 常に DBから 最新の 情報を 取得します。 - 検索結果:
s-maxage=3600(1時間)。 同じ キーワードでの 検索に よる 負荷を 下げます。
キャッシュできる範囲を先に決めておくと、オリジンやデータベースへの不要なアクセスを減らせます。個人情報を含むレスポンスや、権限によって内容が変わる画面は、共有のキャッシュに入れないように設計します。
運用 (ログ・ 監視・ 障害対応)
サーバーレスでは、サーバーの管理は不要になりますが、運用がなくなるわけではありません。サーバーに入ってログを見ることができないため、何を記録し、どこで確認するかを前もって決めておきます。
- ログの保存:
Workers Logsで実行ログを保存・検索できます(保存期間やサンプリング率はプランによって異なります)。長期間の保管や、外部のSIEMへの集約が必要な場合は、LogpushやDatadogとの連携を設定します。 - リアルタイムの
確認 :
Wrangler tail コマンドで、今起きている エラーを ターミナルで 続けて 確認できます。 開発中の デバッグで 役立ちます。 - バージョン管理:
PagesもWorkersも、過去のデプロイへ1クリックで戻す(ロールバック)機能があります。障害が起きたときは、原因を直すより先に、前のバージョンへ戻すかどうかを判断すると、影響が続く時間を短くできます。
よく ある 落とし穴 (CORS/ルーティング 等)
導入する
- CORSのエラー:
Pages(ドメインA)からWorkers(ドメインB)を呼び出すと、ブラウザが通信をブロックします。Workers側で、適切なAccess-Control-Allow-Originヘッダーを返すように実装します。 - Node.jsのAPIとの違い:
Workersはブラウザと同じ系統のV8エンジンで動いており、Node.jsそのものではありません。fsモジュールなどは使えないため、ライブラリを選ぶときに、Workersで動くかを確かめます(参考:型安全にWorkersを実装するTypeScript開発環境)。
CPU時間とメモリの制約
Workersには、1回のリクエストあたりのCPU実行時間とメモリ使用量に上限があります。主に制限されるのはCPU時間で、外部APIの応答待ちなど、CPUを使わない時間は含まれません。上限はプランによって異なり、有料プランでは大きく引き上げられています。
画像のリサイズや複雑な計算はCPU時間を多く使うため、エラー(1101など)になることがあります。重い処理は、クライアント側で行うか、AWS Lambdaなどを別に非同期で呼び出す構成が選択肢になります。
チェックリスト (構築前に 決める)
Cloudflareで
押さえておきたい点
自社の状況を確認する
- □ Pagesと
Workersの 役割分担 (どこまで 静的に するか)が 決まっている - □ 環境変数
(Secrets)の 管理ルール ( .envはコミットしないなど)を 関係者に 伝えている - □ ブラウザから
直接呼び出してはいけない API (管理用の ものなど)を 洗い 出している - □ CORSの
設定 (許可する オリジンの ドメイン)を 決めている - □ ログの
保存先 (Datadog、 Sentryなど)が 決まっている - □ デプロイの
方法 (GitHub Actionsか Pagesの 標準機能か)が 決まっている - □ ロールバックの
手順を 文書に している - □ 使う
ライブラリが Workersの 実行環境 (Edge Runtime) で 動く ことを 確かめている - □ 独自
ドメインの DNSを 設定する 権限 (Cloudflareへ 移す必要が あるか)を 確認した - □ 利用量の
上限と 課金の アラートを 設定している
よく ある 質問
Q. Cloudflare Pagesと
どちらもホスティングの環境ですが、Cloudflare Pagesは、エッジのネットワークの広さと、転送量の無料枠の大きさに強みがあります。Next.jsの機能をすべて使いたい場合はVercel、費用と速度を重視する場合はPages、という使い分けが考えられます。
Q. 既存の
はい。コンテンツの管理にはWordPressを残し、表示する部分だけをNext.jsとCloudflare Pagesで作る方法(ヘッドレスCMS化)で共存できます。
業務に 合わせて、 使い続けられる システムを つくります。
要件整理、
この分野の全体像
モダンWeb開発の 構成判断:Next.jsと ヘッドレスCMSを どう組み合わせるか
この