この記事はCodex製です。
##依頼内容と課題
Cloudflare の bun x wrangler deploy が code: 10027 で失敗し、Your Worker exceeded the size limit of 3 MiB が出ていました。
今回のログでは、2026年3月6日時点の build で worker gzip estimate: 3233141 bytes、無料枠上限 3145728 bytes を約 87 KB 超過していました。
build:cf 自体は成功しているので、問題は静的アセットではなく Worker script 本体のサイズでした。
特に課題だったのは、memo 系の実装が次の3つを Worker 側に持ち込んでいたことです。
src/lib/memo/snapshot.jsonに本文まで含めていた/memo/rssが runtime で RSS XML を組み立てていた/memo/*.md導線のために raw 本文フォールバックを code bundle 側で抱えていた
##アプローチ
Worker に本文を載せない方針へ切り替えました。
scripts/generate-content-snapshots.mjsでmemo本文を metadata snapshot と分離- raw 本文は
public/memo/raw/**/*.mdとして build 前に静的 asset 化 /api/memo/raw/[...slug]は- ローカル source があれば直接返す
- source が無い環境では静的 asset へ
307 redirect
/memo/rssは runtime 生成をやめ、public/memo/rss.xmlを build 前に生成して redirect のみに変更/memo/[...slug]はfallback: "blocking"をやめてfallback: falseに変更memo一覧/詳細は top-level import を減らし、build-time の動的 import へ寄せた
重要なのは「Worker に必要なものだけ残す」ことでした。
OpenNext の default handler が route runtime 依存を bundle するため、runtime でしか使わない本文データや RSS 生成処理を static asset へ逃がすのが最短でした。
この bundle への効き方は、cf-build-size の前後差分からの inference です。
##アウトプット
主な変更:
scripts/generate-content-snapshots.mjsmemometadata snapshot 生成public/memo/raw/**/*.md生成public/memo/rss.xml生成
src/lib/memo/api.ts- metadata-only 前提に整理
- raw asset path helper 追加
src/pages/api/memo/raw/[...slug].ts- source 直読み or static asset redirect へ変更
src/pages/memo/[...slug].tsxfallback: false
src/pages/memo/rss.tsx- static RSS への redirect のみに変更
src/components/memo/MemoShell.tsx- RSS リンクを
/memo/rss.xmlに変更
- RSS リンクを
結果:
- 修正前:
worker gzip estimate = 3233141 bytes - 中間:
3153219 bytes - 最終:
3138043 bytes
無料枠上限 3145728 bytes を 7685 bytes 下回りました。
さらに実デプロイも通過し、Cloudflare 反映結果は次でした。
- Deploy command:
bun x wrangler deploy - Deploy result: success
- Worker URL:
https://ro1-dev.ro1.workers.dev - Version ID:
66f64dc8-cbf9-4233-83c9-a50651d53e79
##参照した一次情報・一次ソース
- Cloudflare Workers Limits
- Cloudflare: Next.js on Workers
- Next.js:
getStaticPaths - Next.js: Static Assets in
public
推論明記:
- OpenNext の default handler へ route runtime 依存が乗ったこと自体は、
cf-build-sizeの差分と bundle 挙動からの実装上の inference です。