| 機能 | Workers Free | Workers Paid |
|---|---|---|
| リクエスト | 100,000/日 | 制限なし |
| CPU 時間 | 10 ms | 5 分 |
| メモリ | 128 MB | 128 MB |
| サブリクエスト | 50/リクエスト | 10,000/リクエスト |
| 同時送信 接続数/リクエスト |
6 | 6 |
| 環境変数 | 64/Worker | 128/Worker |
| 環境変数の サイズ |
5 KB | 5 KB |
| Worker サイズ | 64 MiB | 64 MiB |
| Worker 起動時間 | 1 秒 | 1 秒 |
| Worker 数 | 100 | 5001 |
| アカウントあたりの Cron Triggers 数 | 5 | 250 |
| Worker バージョンあたりの 静的アセット ファイル数 | 20,000 | 100,000 |
| 静的アセット の個別ファイルサイズ | 25 MiB | 25 MiB |
| 制限 | 値 |
|---|---|
| URL サイズ | 16 KB |
| リクエストヘッダーサイズ | 128 KB(合計) |
| レスポンスヘッダーサイズ | 128 KB(合計) |
| レスポンス本文サイズ | 強制制限なし |
リクエスト本文のサイズ制限は、Workers プランではなく Cloudflare アカウントプランに依存します。これらの上限を超えるリクエストには 413 Request entity too large エラーが返ります。
| Cloudflare プラン | リクエスト本文の最大サイズ |
|---|---|
| Free | 100 MB |
| Pro | 100 MB |
| Business | 200 MB |
| Enterprise | 最大 5 GB(セルフサービス) |
Enterprise のお客様は、ゾーンの Network ページ(Maximum Upload Size)から、リクエスト本文の最大サイズを最大 5 GB まで自分で変更できます。5 GB を超える上限が必要な場合は、アカウントチームまたは Cloudflare サポート に連絡してください。
Cloudflare はレスポンス本文サイズの制限を強制しません。CDN キャッシュの制限 が適用されます。Free、Pro、Business プランは 512 MB、Enterprise は 5 GB です。
CPU 時間は、Worker コードの実行に CPU が使った時間です。ネットワーク待ち(fetch() 呼び出し、KV 読み取り、データベースクエリなど)は、CPU 時間に含まれません。
| 制限 | Workers Free | Workers Paid |
|---|---|---|
| HTTP リクエストあたりの CPU 時間 | 10 ms | 5 分(デフォルト: 30 秒) |
| Cron Trigger あたりの CPU 時間 | 10 ms | 30 秒(間隔が 1 時間未満) 15 分(間隔が 1 時間以上) |
ほとんどの Worker が使う CPU 時間はごくわずかです。平均はリクエストあたり約 2.2 ms です。認証、サーバーサイドレンダリング、大きなペイロードのパースなど、負荷の高い処理では通常 10〜20 ms です。
各 isolate には、Worker が設定した上限をたまに超える場合に備えた余裕があります。上限を継続的に超えるようになると、設定した上限に従って実行が打ち切られます。
Worker が CPU 時間の上限を超えると、Cloudflare はクライアントに Error 1102 を返し、メッセージは Worker exceeded resource limits です。ダッシュボードでは、Metrics > Errors > Invocation Statuses の下に Exceeded CPU Time Limits と表示されます。分析と Logpush では、呼び出し結果は exceededCpu です。
CPU 時間の上限エラーを解消するには:
- CPU 時間の上限を上げる — Workers Paid プランでは、デフォルトの 30 秒から最大 5 分(300,000 ms)まで上げられます。Wrangler 設定またはダッシュボードで設定します。
- コードを最適化する — DevTools の CPU プロファイリング で、CPU 負荷の高い箇所を特定します。
- 処理をオフロードする — 重い計算を Durable Objects に移すか、データを複数リクエストに分けて小さく処理します。
Workers Paid プランでは、CPU 時間の上限をデフォルトの 30 秒から 5 分(300,000 ms)まで上げられます。
{
// ...rest of your configuration...
"limits": {
"cpu_ms": 300000, // default is 30000 (30 seconds)
},
// ...rest of your configuration...
}[limits]
cpu_ms = 300_000ダッシュボードでも変更できます。Workers & Pages を開き、対象の Worker を選び、Settings で CPU 時間の上限を調整します。
- Workers Logs — CPU 時間とウォールタイムは 呼び出しログ に表示されます。
- Tail Workers / Logpush — CPU 時間とウォールタイムは Workers Trace Events オブジェクト のトップレベルに表示されます。
- DevTools — ローカルで DevTools の CPU プロファイリング を使い、CPU 負荷の高い箇所を特定します。
| 制限 | 値 |
|---|---|
| isolate あたりのメモリ | 128 MB |
各 isolate は、JavaScript ヒープと WebAssembly 割り当てを含め、最大 128 MB のメモリを使えます。この制限は呼び出しごとではなく、isolate ごとです。1 つの isolate が多数の同時リクエストを処理できます。
isolate が 128 MB を超えると、Workers ランタイムは進行中のリクエストを完了させ、以降のリクエスト用に新しい isolate を作ります。極端に負荷が高いときは、安定性を保つために一部の受信リクエストをキャンセルすることがあります。
Worker がメモリ上限を超えると、Cloudflare はクライアントに Error 1102 を返し、メッセージは Worker exceeded resource limits です。ダッシュボードでは、Metrics > Errors > Invocation Statuses の下に Exceeded Memory と表示されます。分析と Logpush では、呼び出し結果は exceededMemory です。
上限を超えるレスポンス本文をバッファしようとすると、ランタイムエラー Memory limit would be exceeded before EOF も出ることがあります。
メモリ上限エラーを解消するには:
- リクエスト本文とレスポンス本文をストリーミングする — ペイロード全体をメモリに載せず、
TransformStreamまたはnode:streamを使います。 - 大きなインメモリオブジェクトを避ける — 大きなデータは Worker メモリに持たず、KV、R2、D1 に保存します。
- Zod を更新する — Worker で Zod を使っている場合は、バージョン 4.5.0 以降 ↗ を使います。それ以前のバージョンは、スキーマあたりのメモリ使用量が大幅に多いです。
- メモリ使用量をプロファイリングする — ローカルで DevTools のメモリプロファイリング を使い、リークとメモリ消費の大きい割り当てを特定します。
ダッシュボードでメモリエラーを確認する手順は次のとおりです。
-
Workers & Pages を開きます。
Workers & Pages を開く ↗ -
調査する Worker を選びます。
-
Metrics で Errors > Invocation Statuses を選び、Exceeded Memory を確認します。
継続時間は、Worker 呼び出しの開始から終了までのウォールクロック時間です。
| トリガー種別 | 継続時間の上限 |
|---|---|
| HTTP リクエスト | 制限なし |
| Cron Trigger | 15 分 |
| Durable Object Alarm | 15 分 |
| Queue Consumer | 15 分 |
HTTP トリガーの Workers には、継続時間の厳密な上限はありません。クライアントが接続している限り、Worker は処理、サブリクエスト、レスポンス本文のストリーミングを続けられます。クライアントが切断するかレスポンスが完了すると、そのリクエストに紐づくタスクはキャンセルされることがあります。レスポンス返却後の処理には ctx.waitUntil() を使います。waitUntil() は、レスポンス送信後またはクライアント切断後、最大 30 秒まで実行を延ばせます。
Workers は Cloudflare のグローバルネットワーク全体で自動的にスケールします。1 秒あたりのリクエスト数に一般的な上限はありません。
Workers Free プランのアカウントには、1 日 100,000 リクエストの上限があり、UTC の午前 0 時にリセットされます。この上限を超えると、Cloudflare は Error 1027 を返します。
| ルートモード | 動作 |
|---|---|
| フェイルオープン | Worker をバイパスします。Worker が設定されていない場合と同じ動作です。 |
| フェイルクローズ | Cloudflare の 1027 エラーページを返します。セキュリティ上重要な Worker ではこちらを使います。 |
フェイルモードは、対応する ルート の切り替えで設定できます。
サブリクエストは、Worker が Fetch API を使って行うリクエスト、または R2、KV、D1 などの Cloudflare サービスへのリクエストです。
| 制限 | Workers Free | Workers Paid |
|---|---|---|
| 呼び出しあたりのサブリクエスト | 50 | 10,000(最大 1,000万) |
| 内部サービスへのサブリクエスト | 1,000 | 設定した上限に一致(デフォルト 10,000) |
リダイレクトチェーン内の各サブリクエストも、この上限にカウントされます。サブリクエストの合計は、コード内の fetch() 呼び出し数を超えることがあります。Worker ごとのサブリクエスト上限は、Wrangler 設定ファイルの limits 設定 で変更できます。
個々のサブリクエストに決まった時間制限はありません。クライアントが接続している限り、Worker はサブリクエストを続けられます。クライアントが切断するかレスポンスが完了すると、未完了の処理はキャンセルされることがあります。ただし ctx.waitUntil() に渡した場合は、最大 30 秒まで実行を延ばせます。
同じアカウント上の別の Worker へインターネットを経由せずにリクエストを送るには、Service Bindings を使います。
同じ ゾーン 上の別の Worker を、Service Bindings なしでグローバル fetch() から呼ぶと失敗します。Workers は カスタムドメイン 宛てのリクエストを受け付けます。
各 Worker 呼び出しは、レスポンスヘッダー待ちの接続を同時に最大 6 本まで持てます。初期接続の確立中で、サーバーがまだ応答していないあいだ、次の API 呼び出しがこの上限にカウントされます。
- Fetch API の
fetch()メソッド - Workers KV 名前空間オブジェクト の
get()、put()、list()、delete()メソッド - Cache オブジェクト の
put()、match()、delete()メソッド - R2 の
list()、get()、put()、delete()、head()メソッド - Queues の
send()、sendBatch()メソッド connect()API で TCP ソケットを開くこと
外向きの WebSocket 接続も、この上限にカウントされます。
接続のレスポンスヘッダーが届くと、その接続は 6 本制限の対象外になります。つまり、同時にオープンな接続は多数持てますが、「ヘッダー待ち」の初期段階にあるのは同時に 6 本までです。すでに 6 本がヘッダー待ちのときに 7 本目を試みると、既存のいずれかがレスポンスヘッダーを受け取るまでキューに入ります。
fetch() を使うがレスポンス本文が不要な場合は、メモリを解放するために response.body.cancel() を呼ぶのがよい習慣です。
const response = await fetch(url);
// Only read the response body for successful responses
if (response.status <= 299) {
// Call response.json(), response.text() or otherwise process the body
} else {
// Explicitly cancel it
response.body.cancel();
}const response = await fetch(url);
// Only read the response body for successful responses
if (response.status <= 299) {
// Call response.json(), response.text() or otherwise process the body
} else {
// Explicitly cancel it
response.body.cancel();
}| 制限 | Workers Free | Workers Paid |
|---|---|---|
| Worker あたりの変数(シークレット + テキスト) | 64 | 128 |
| 変数サイズ | 5 KB | 5 KB |
| アカウントあたりの変数 | 制限なし | 制限なし |
| 制限 | Workers Free | Workers Paid |
|---|---|---|
| Worker サイズ(非圧縮) | 64 MiB | 64 MiB |
圧縮サイズの上限はありません。カウントされるのは非圧縮バンドルサイズだけです。
Worker バンドルが大きいと、起動時間に影響することがあります。Worker バンドルサイズを確認するには:
wrangler deploy --outdir bundled/ --dry-runTotal Upload: 259.61 KiB / gzip: 47.23 KiBTotal Upload の値が非圧縮バンドルサイズです。gzip の値は参考表示であり、制限ではありません。
Worker サイズを小さくするには:
- 不要な依存関係とパッケージを削除します。
- 設定ファイル、静的アセット、バイナリデータはバンドルせず、KV、R2、D1、または Workers Static Assets に保存します。
- Service bindings を使い、機能を複数の Workers に分割します。
| 制限 | 値 |
|---|---|
| 起動時間 | 1 秒 |
Worker は、グローバルスコープ(ハンドラーの外にあるトップレベルコード)のパースと実行を 1 秒以内に終える必要があります。バンドルが大きい場合や、グローバルスコープで重い初期化をしている場合、起動時間は長くなります。
Worker が起動時間の上限を超えてプラットフォームがデプロイを拒否すると、検証はエラー Script startup exceeded CPU time limit(エラーコード 10021)を返します。Wrangler は CPU プロファイルを自動生成し、Chrome DevTools にインポートするか VS Code で開けます。詳細は wrangler check startup を参照してください。
起動時間を測るには、npx wrangler@latest deploy または npx wrangler@latest versions upload を実行します。Wrangler は出力に startup_time_ms を表示します。
起動時間を短くするには、グローバルスコープで重い処理をしないでください。初期化ロジックはハンドラー内かビルド時に移します。たとえば、大きなスキーマをトップレベルで生成または消費すると、この上限を超えやすくなります。
| 制限 | Workers Free | Workers Paid |
|---|---|---|
| アカウントあたりの Workers | 100 | 5001 |
| 制限 | 値 |
|---|---|
| ゾーンあたりの ルート | 1,000 |
ゾーンあたりのルート(wrangler dev --remote) |
50 |
| ゾーンあたりの カスタムドメイン | 100 |
| Worker あたりのルート対象ゾーン | 1,000 |
--remote フラグで リモート開発 セッションを実行すると、Cloudflare はゾーンあたり 50 ルートの上限を適用します。Cloudflare ダッシュボードの Quick Editor も wrangler dev --remote を使うため、同じ上限が適用されます。
ゾーンのルートが 50 を超えている場合は、上限未満になるまでルートを削除しないとリモートセッションを実行できません。
Worker あたり 1,000 を超えるルート、または 1,000 を超えるルート対象ゾーンが必要な場合は、Workers for Platforms の利用を検討してください。ゾーンあたり 100 を超えるカスタムドメインが必要な場合は、ワイルドカード ルート の利用を検討してください。
| 機能 | Workers Free | Workers Paid |
|---|---|---|
| オブジェクトの最大サイズ | 512 MB | 512 MB |
| リクエストあたりの呼び出し数 | 50 | 1,000 |
リクエストあたりの呼び出し数は、リクエストごとの Cache API の put()、match()、delete() 呼び出し回数です。サブリクエスト(fetch())と同じクォータを共有します。
| 制限 | 値 |
|---|---|
| リクエストあたりのログデータ | 256 KB |
この制限は、1 リクエストについて console.log() の出力、例外、リクエストメタデータ、ヘッダーとして出るすべてのデータを対象にします。この上限を超えると、そのリクエストについて、ログ、tail ログ、Tail Workers に追加のコンテキストは記録されません。
Logpush 宛先へ送るフィールドの制限は、Workers Trace Event Logpush のドキュメント を参照してください。
Workers で Image Resizing を使う場合の制限は、Image Resizing のドキュメント を参照してください。
| 制限 | Workers Free | Workers Paid |
|---|---|---|
| Worker バージョンあたりのファイル数 | 20,000 | 100,000 |
| 個別ファイルサイズ | 25 MiB | 25 MiB |
_headers ルール |
100 | 100 |
_headers の 1 行あたりの文字数 |
2,000 | 2,000 |
_redirects の静的リダイレクト |
2,000 | 2,000 |
_redirects の動的リダイレクト |
100 | 100 |
_redirects 合計 |
2,100 | 2,100 |
_redirects のルールあたりの文字数 |
1,000 | 1,000 |
Worker が Unbound プランの場合、制限は Workers Paid プランと同じです。
Worker が Bundled プランの場合、制限は Workers Paid プランと同じですが、次の例外があります。
| 機能 | Bundled プランの上限 |
|---|---|
| サブリクエスト | 50/リクエスト |
| CPU 時間(HTTP リクエスト) | 50 ms |
| CPU 時間(Cron Triggers) | 50 ms |
| Cache API 呼び出し/リクエスト | 50 |
Bundled プランの Workers には、Cron Triggers、Durable Object Alarms、Queue Consumers の継続時間制限はありません。
ウォールタイム(ウォールクロック時間とも呼ばれます)は、呼び出しの開始から終了までの経過時間の合計です。ネットワークリクエスト、I/O、その他の非同期処理の待ち時間も含みます。CPU 時間 とは異なります。CPU 時間は、CPU がコードを実際に実行している時間だけを測ります。
次の表は、開発者プラットフォーム全体における Worker の呼び出し種別ごとのウォールタイム上限です。
| 呼び出し種別 | ウォールタイム上限 | 詳細 |
|---|---|---|
| 受信 HTTP リクエスト | 無制限 | クライアントが接続している間は、ハード上限はありません。レスポンス本文をストリーミング中の Worker はアクティブのままです。waitUntil() は、レスポンス後または切断後、最大 30 秒まで実行を延ばします。 |
| Cron Triggers | 15 分 | スケジュール実行の Workers は、呼び出しあたり最大 15 分のウォールタイムです。 |
| Queue consumers | 15 分 | 各コンシューマーの呼び出しは、最大 15 分のウォールタイムです。 |
| Durable Object alarm handlers | 15 分 | アラームハンドラーの呼び出しは、最大 15 分のウォールタイムです。 |
| Durable Objects(RPC / HTTP) | 無制限 | 呼び出し元が Durable Object に接続している間は、ハード上限はありません。リクエスト、RPC 呼び出し、レスポンスストリーム、WebSocket、または進行中の I/O がある間、Durable Objects はアクティブのままです。 |
| Workflows(ステップごと) | 無制限 | 各ステップは無制限のウォールタイムで実行できます。個々のステップには、設定した CPU 時間上限 が適用されます。 |
-
Worker の上限をさらに上げたい場合は、Workers for Platforms を使います。 ↩ ↩2