Cloudflare Pages Functionsの制限サイズエラー
Next.js製のサイトをCloudflare Pagesにデプロイする際、Functionsのスクリプトサイズが大きすぎる旨のエラーが発生してデプロイに失敗しました。
Error: Failed to publish your Function. Got error: Your Functions script is over the 1 MiB size limit (workers.api.error.script_too_large)これは、Next.jsのサイトの内部でSanityを使おうとした時に初めて気づいたのですが、結構大きめのプログラムはCloudflareのPages Functionsで動かせないようです。デプロイ自体は進むのですが、最後の最後で失敗します。Next.jsやNuxt.jsのAPI(サーバーサイド)を使う場合はご注意ください。
Pages FunctionsはCloudflare Workers上で実行されるので、仕様や制限もWorkersに準拠します。
追記:上限は1MBから3MBに変わっています
この記事を書いた当時、無料プランの上限は1MBでした。上のエラーメッセージが 1 MiB size limit と言っているのはそのためです。
その後この上限は引き上げられていて、Workersの制限事項によると2026年時点では次のようになっています。
- 無料プラン: gzip後3MB
- 有料プラン: gzip後10MB
つまり当時「課金するしかない」と判断したケースでも、いまなら無料プランのまま収まる可能性があります。
対処法
まず現在のサイズを測るところから始めます。
npx wrangler deploy --dry-run出力の Total Upload: ... / gzip: ... のうち、上限と比べるのは`gzip:` の値です。手前の非圧縮サイズではありません。JavaScriptは圧縮がよく効くので、非圧縮の数字だけ見て慌てる必要はありません。
そのうえで、対処は2パターンです。
- 3MBを超えないように削る — 実行時に本当に必要な依存かを見直す。バイナリ(フォントや画像)はバンドルに入れず静的アセット側に置けば、サイズには乗りません
- 課金する — 外部モジュールを使っていてサイズダウンが難しい場合は、こちらが現実的です
何がこの上限に数えられて何が数えられないのかは、Cloudflare Workers 無料プランの3MB上限に実測値とあわせてまとめています。