Cloud Service
Cloudflare Workers
コールドスタートをほぼ意識せずに世界中のエッジで即時実行できる、Cloudflare のサーバーレス実行環境。AWS Lambda 相当の役割をエッジ寄りで担う。
- 1.V8 Isolates 方式でコンテナやVMより高速に起動し、世界中のエッジで実行される。
- 2.KV・D1・R2・Durable Objects などのバインディングでデータ層と直結できる。
- 3.リクエスト数と実行時間ベースの従量課金で、無料枠も用意されている。
解決する課題
オリジンサーバーを常時稼働させる負担や、リージョンごとの配置・スケーリング設計の手間を避けつつ、ユーザーに近い場所で低遅延にコードを実行したい、というニーズに応えます。
- サーバーのプロビジョニングや常時起動をせずにコードを動かしたい
- ユーザーの居場所によらず低レイテンシでリクエストを処理したい
- 急なアクセス急増にも自動でスケールしてほしい
- リクエストの書き換え・認証・A/Bテストなどを既存オリジンの前段で軽量に挟みたい
- サーバーレスの実行環境とKVS/オブジェクトストレージ/DBを疎結合に組み合わせたい
主要概念と用語
- Worker: 実行単位となるスクリプト(JavaScript / TypeScript、または WebAssembly 経由で各種言語)。リクエストイベントに応答する形で動作する
- V8 Isolate: Workers の実行基盤。ブラウザのタブのように軽量な分離単位で、コンテナや仮想マシンに比べて起動が非常に速い
- ルート(Route)/ カスタムドメイン: Worker をどの URL パターンで起動させるかの紐付け設定
- バインディング(Binding): Worker のコードから KV・D1・R2・Durable Objects・Queues・AI などの他サービスへ、環境変数のような形でアクセスするための仕組み
- wrangler: Workers のビルド・ローカル開発・デプロイを行う公式 CLI
- Cron Triggers: 一定間隔で Worker をスケジュール実行する仕組み
- Service Bindings: Worker から別の Worker をネットワークを経由せず直接呼び出す仕組み
- Durable Objects: Workers から利用できる、状態を1か所に集約して一貫性を保つコンパニオン機構(強整合が必要な処理向け)
仕様・制限・クォータ
- CPU 実行時間には上限があり、無料プランと有料プランで許容される時間が異なる(実行時間は「壁時計時間」ではなく「CPU 時間」で計測される点に注意)
- リクエスト本文やレスポンスサイズ、サブリクエスト(Worker から発行する fetch)の回数にも上限があり、プランによって差がある
- 1つの Worker スクリプトのサイズにも上限がある
- 環境変数・バインディングの数、KV/D1 などの容量やスループットは、それぞれの連携サービス側の制限にも従う
- 具体的な数値は変更されることがあるため、最新の上限は公式ドキュメントで都度確認するのが安全
Workers の実行時間制限は、外部リクエストの待ち時間を含まない「CPU使用時間」を基準にすることが多いです。外部APIの応答待ちが長くても、それだけでは上限に到達しにくい設計になっています。ただし処理内容やプランによって扱いが異なるため、想定と違う挙動をしたら制限の種類を確認してください。
内部の仕組み
Workers は仮想マシンやコンテナではなく、V8 Isolate という軽量な分離単位でコードを実行します。ブラウザが多数のタブを1プロセスで安全に分離するのと同じ技術を応用しているため、新しい Isolate の起動はミリ秒単位で完了し、いわゆるコールドスタートの影響をほとんど受けません。
- リクエストは利用者に近いエッジのデータセンターで受け付けられ、そこで Worker のコードが実行される
- 同じスクリプトの Isolate は必要に応じて多数同時に立ち上がり、水平方向に自動でスケールする
- バインディングを介して KV・D1・R2・Durable Objects・Queues などへアクセスすることで、状態やデータの永続化は専用サービス側に委ねる設計になっている
- Service Bindings を使うと、複数の Worker 間の呼び出しをインターネット経由せず内部的に完結できる
Worker 自体はリクエストのたびに使い捨てられる前提のステートレスな実行環境です。処理の間で状態を持ち回りたい場合は、グローバル変数に頼らず KV や D1、あるいは強整合性が必要なら Durable Objects を使うのが基本です。
設計パターン / ベストプラクティス
- 状態は Worker 内に持たず、KV(結果整合の読み取り最適化)、D1(SQLベースの構造化データ)、R2(オブジェクトストレージ)、**Durable Objects(強整合が必要な調整処理)**など用途に応じたサービスに委ねる
- オリジンの前段に置いて、認証チェック・ヘッダー書き換え・キャッシュ制御・A/Bテストなどの軽量なエッジロジックを担わせる
- 重い処理や長時間ジョブは Worker に抱え込ませず、Queues で非同期化し後段で処理する
- 秘密情報はコードや環境変数に直書きせず、Secrets の仕組みで管理する
- 依存や初期化処理を軽くし、スクリプトサイズを抑えることでさらに実行効率を高める
- 複数の Worker にまたがる処理は Service Bindings で疎結合につなぐ
運用・監視
- ログや実行結果は Cloudflare のダッシュボードや
wrangler tailによるリアルタイムログで確認できる - 標準の可観測性機能に加え、外部の監視基盤と連携してメトリクスやログを集約することもできる
- エラー率・実行時間・リクエスト数などの推移を継続的に確認し、しきい値超過やスローダウンの兆候を早期に検知する
- デプロイはバージョン管理されており、問題が起きた場合は前のバージョンへ切り戻せる
コスト
リクエスト数と実行時間(CPU時間ベース)に応じた従量課金が基本で、一定の無料枠が用意されています。バインディングで利用する KV・D1・R2 などは、それぞれ別立てで課金される点に注意してください。
| 課金要素 | 内容 | ポイント |
|---|---|---|
| リクエスト数 | Worker が処理したリクエスト件数に対する課金 | 無料枠を超えた分が従量課金の対象 |
| CPU時間 | 実行に使ったCPU時間に対する課金 | 外部応答待ちの時間は含まれにくい |
| 連携サービス | KV/D1/R2/Durable Objects などの利用量 | Workers本体とは別に、各サービスの料金体系に従う |
| 無料枠 | 一定のリクエスト数・CPU時間が毎月無料 | 小規模な検証や個人利用はほぼ無料で収まることも |
セキュリティ
- 秘密情報は Secrets の仕組みで管理し、コードやリポジトリに直書きしない
- バインディングで接続する KV・D1・R2 などへのアクセス範囲は、それぞれの権限設定で必要最小限に絞る
- オリジンへの到達経路を Worker 経由に限定し、直接アクセスを避けたい場合は WAF やアクセス制御と組み合わせる
- 入力値の検証やレート制御をエッジ側で行うことで、オリジンに届く前に不正なリクエストを弾ける
- Cron Triggers やキュー連携など自動実行の経路についても、実行権限とアクセス範囲を最小限に保つ
APIキーやトークンを Worker のコード内や環境変数にそのまま書き込むのは避けてください。Secrets を使えば、値を暗号化した状態で保持し、コードからは参照のみで扱えます。
関連サービス・比較
| 観点 | Cloudflare Workers | AWS Lambda@Edge / Lambda |
|---|---|---|
| 位置づけ | エッジ実行に特化したサーバーレス | リージョン中心のサーバーレス(Edge版もあり) |
| 実行基盤 | V8 Isolate(軽量分離) | コンテナベースの実行環境 |
| 起動の速さ | コールドスタートの影響が小さい | コンテナ起動分のコールドスタートが発生しやすい |
| データ連携 | KV/D1/R2/Durable Objects などのバインディング | DynamoDB/S3などをSDK経由で利用 |
| 対応言語 | JavaScript/TypeScript中心、WebAssembly経由で拡張 | 多数の言語ランタイムを公式サポート |
| 課金の軸 | リクエスト数 + CPU時間 | リクエスト数 + 実行時間(メモリ比例) |
ハンズオン / CLI例
Workers の作成・開発・デプロイは、公式 CLI である wrangler で行います。
# プロジェクトを新規作成(対話形式でテンプレートを選択)
npx wrangler init my-worker
# ローカルでの開発サーバーを起動し、動作を確認
npx wrangler dev
# リアルタイムログを表示して本番の挙動を確認
npx wrangler tail
# 本番環境へデプロイ
npx wrangler deploy
# シークレットを登録(値は対話プロンプトで入力)
npx wrangler secret put API_KEY
Cloudflare Service
Cloudflare Workersを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンピューティング
比較で見る軸
クラウド: Cloudflare / カテゴリ: コンピューティング / 難易度: basic
導入後に効く点
KV・D1・R2・Durable Objects などのバインディングでデータ層と直結できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Cloudflare
- カテゴリ
- コンピューティング
- 難易度
- basic
- 関連資格
- —
- 設計柱
- performance / cost / operational / reliability
判断チェックリスト
- 自社の用途が「コンピューティング / performance」に近いか確認する。
- 強みである「V8 Isolates 方式でコンテナやVMより高速に起動し、世界中のエッジで実行される。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。