Cloudflare Workersのサイズ上限が全プラン一律・非圧縮64 MBになった件をwranglerで確認する

Cloudflare Workersのサイズ上限が全プラン一律・非圧縮64 MBになった件をwranglerで確認する

Cloudflare Workersのサイズ上限が、圧縮後3MB/10MBから全プラン共通の非圧縮64MBに変わりました。Freeプランのアカウントで、圧縮後6MB超のWorkerがデプロイできること、64MB超はcode 10027で拒否されることを確かめました。
2026.10.11

どうも!オペ部の西村祐二です!

Cloudflare Workers には長らく「圧縮後 3 MB(Free)/ 10 MB(Paid)」というバンドルサイズ上限がありました。重いフレームワークや依存を積むと、gzip 後のサイズを気にしながらデプロイしていた方も多いはずです。

公式の changelog(2026-09-04)によると、この圧縮後の上限が撤廃され、全プラン共通で「非圧縮 64 MB」だけを見る方式に変わりました。判定に使う数値そのものが変わったので、wrangler の dry-run で判定対象のサイズを確かめたうえで、Free プランのアカウントに実際にデプロイして、旧上限を超えるバンドルが通るか、64 MB を超えるとどう拒否されるかを試しました。

今回の変更点

公式の Limits ドキュメントでも、Worker サイズの上限は Workers Free / Workers Paid ともに 64 MB とされ、次のように書かれています。

There is no compressed size limit. Only the uncompressed bundle size counts.

(圧縮後のサイズに上限はなく、非圧縮のバンドルサイズだけが数えられる、という趣旨です。)

なお、公式ドキュメントや wrangler の出力では 1024 単位の MiB / KiB で表記されています(64 MiB は 67,108,864 バイト)。本文では読みやすさを優先して MB / KB と書き、コマンドの出力はそのまま載せています。

注目したいポイント

判定に使う数値が「圧縮後」から「非圧縮」へ変わったので、バンドルの中身によって影響の出方が違います。

  • 特に見ておきたいこと: wrangler の出力に出る Total Upload(非圧縮サイズ)が、そのまま 64 MB の判定対象になります。今まで意識していた gzip 後の数値は参考値扱いに変わりました。
  • 自分の環境で確認したいこと: 画像・フォント・WASM などすでに圧縮済み、あるいはミニファイ済みで gzip が効きにくいアセットを同梱している Worker は、非圧縮サイズが素直に効いてきます。とはいえ上限が 64 MB と大きいため、従来 10 MB 圧縮で悩んでいたケースはかなり余裕が出ます。
  • Free と Paid が同じ上限になった点: 旧ルールでは Free が圧縮後 3 MB と厳しめでした。今回の変更で Free も Paid と同じ非圧縮 64 MB になったため、大きめの WASM や Next.js(OpenNext)、Prisma などを同梱していて 3 MB 圧縮上限に引っかかっていた構成が、Free プランでも収まりやすくなりました。

試してみる

まず wrangler deploy --dry-run で判定対象のサイズを確かめ、そのあと Free プランのアカウントに実際にデプロイします。

環境

  • OS: Ubuntu 24.04(arm64、使い捨てのコンテナ)
  • Node.js: v24.21.0
  • wrangler: 4.149.0
  • Cloudflare: Workers Free プランのアカウント

1. 確認用の最小 Worker を用意する

非圧縮と gzip の差が分かるように、圧縮の効きやすい繰り返し文字列(約 2 MB)を埋め込んだ Worker を用意しました。

src/index.js
import { BIG } from "./big.js";

export default {
  async fetch() {
    return new Response("len=" + BIG.length);
  },
};
wrangler.toml
name = "size-limit-demo"
main = "src/index.js"
compatibility_date = "2026-09-01"

src/big.js は export const BIG = "AAAA...";(約 200 万文字)という、同じ文字の繰り返しで gzip 後が極端に小さくなる内容です(後述の出力で確認できます)。

2. dry-run で判定対象サイズを確認する

wrangler deploy --dry-run は、実際にはデプロイせずにバンドルだけを作ってサイズを出力します。ログインは不要です。

npx wrangler@4.149.0 deploy --outdir bundled/ --dry-run

出力は次の通りでした(wrangler のバナー行は省略しています)。

Total Upload: 1953.33 KiB / gzip: 2.10 KiB
No bindings found.
--dry-run: exiting now.

wrangler deploy --dry-run の出力。Total Upload: 1953.33 KiB / gzip: 2.10 KiB

Total Upload が 1953.33 KB(非圧縮)、gzip が 2.10 KB です。繰り返し文字列なので gzip は極端に小さくなりますが、64 MB の判定に使われるのは非圧縮の Total Upload の方です。生成されたバンドルの実サイズを見ても、非圧縮で 2,000,212 バイト、gzip で 2,159 バイトと、Total Upload 側と一致していました。

3. 旧上限を超えるバンドルを Free プランにデプロイする

次に、ランダムな文字列 8 MB を埋め込んだ Worker を作りました。ランダムな文字列は gzip がほとんど効かないので、圧縮後でも旧 Free 上限の 3 MB を大きく超えます。

npx wrangler@4.149.0 deploy
Total Upload: 8192.21 KiB / gzip: 6170.27 KiB
Deployed blog-verify-size-b triggers (0.46 sec)

圧縮後 6 MB 超でもデプロイは通り、公開 URL にアクセスすると len=8388608 が返りました。旧ルールなら Free プランでは弾かれていたサイズです。

4. 非圧縮で 64 MB を超えるとどう拒否されるか

最後に、同じ文字の繰り返しで 65 MB の Worker を作ってデプロイしました。gzip 後は 65 KB 弱です。

Total Upload: 66560.21 KiB / gzip: 64.91 KiB
✘ [ERROR] Your Worker failed validation because it exceeded size limits.
   - Your Worker exceeded the uncompressed size limit of 64 MiB. [code: 10027]

gzip 後がどれだけ小さくても、非圧縮が 64 MB を超えればエラーコード 10027 で拒否されました。

8 MB の Worker は Free プランでデプロイでき、65 MB の Worker は code 10027 で拒否された結果

検証で作った Worker は、確認後に wrangler delete で削除しています。

検証結果の考察

  • 確認できたこと: wrangler deploy --dry-run がログインなしで Total Upload(非圧縮)と gzip(参考)を出力すること、Free プランでも圧縮後 6 MB 超の Worker がデプロイできること、非圧縮 65 MB の Worker は gzip 後 65 KB 弱でも code: 10027 で拒否されることを確認しました。
  • 公式情報と照合したこと: changelog に書かれた旧上限(圧縮後で Free 3 MB / Paid 10 MB)と新上限(全プラン共通で非圧縮 64 MB、圧縮後の上限は撤廃)が、Limits ドキュメントの現行の記載と一致することを確かめました。
  • 未検証: Paid プランでの挙動(公式ドキュメントでは Free と同じ 64 MB とされていますが、今回は試していません)、64 MB ちょうど付近の境界、大きなバンドルと起動時間の上限(1 秒)の関係は確かめていません。

実務でどう扱うか

  • すぐ確認したほうがよい場合: 圧縮後 10 MB 上限に近くて分割やアセット外出しで工夫していた Worker は、非圧縮 64 MB の余裕を前提に構成を見直せそうです。CI やデプロイ前チェックで gzip 後サイズを閾値にしている場合は、判定対象が非圧縮に変わった点を反映しておくと実態と合います。
  • 様子見でよい場合: バンドルが元々小さいプロジェクトは影響を受けません。数値が大きく変わったわけではなく、判定に使う軸が変わっただけなので、慌てて設定を変える必要はなさそうです。
  • チームで決めておきたいこと: デプロイ前チェックを持っているなら、wrangler deploy --dry-run の Total Upload を基準にするよう揃えておくと、メンバー間で「どのサイズを見るか」の齟齬が減ります。旧上限(3 MB / 10 MB 圧縮)を前提にした社内ドキュメントが残っている場合は更新対象です。

まとめ

Cloudflare Workers のサイズ上限が、圧縮後 3 MB / 10 MB から、全プラン共通の非圧縮 64 MB に変わりました。判定に使う数値が「圧縮後」から「非圧縮」へ移ったのが要点です。

  • Free プランでも、圧縮後 6 MB 超の Worker がデプロイできました
  • 非圧縮で 64 MB を超えると、gzip 後が小さくても code: 10027 で拒否されました
  • wrangler deploy --dry-run の Total Upload を見れば、ログイン不要で判定対象のサイズを事前に確かめられます

旧上限を前提に工夫していた構成があれば、一度見直してみると良さそうです。

誰かの参考になれば幸いです。


参考リンク:

この記事をシェアする

関連記事