Cloudflare Workers で Nuxt 4 をデプロイするまで
Nitro の cloudflare_module preset を使って Nuxt 4 アプリを Cloudflare Workers に乗せる手順と、途中で踏みやすい落とし穴をまとめる。
AI 要約
Claude Haiku 4.5 で記事を 150 文字程度に要約します。
live AI 要約は公開デモのコスト保護のため、アクセスキー入力後に実行できます。 記事本文、検索、タグ、記事詳細はアクセスキーなしで確認できます。
Nuxt 4 はサーバーランタイム Nitro を介して 15 種類以上のデプロイターゲットに対応しており、Cloudflare Workers もそのひとつです。ここでは、ローカル開発から本番デプロイまでの流れを整理します。
1. preset を指定する
nuxt.config.ts で Nitro の preset を cloudflare_module に切り替えます。
export default defineNuxtConfig({
nitro: {
preset: 'cloudflare_module',
},
});
cloudflare_module は Worker の Module 形式(export default { fetch })で出力され、wrangler からそのまま deploy できる形です。Pages Functions 形式を使いたい場合は cloudflare-pages preset に切り替えます。
2. wrangler.jsonc を用意する
プロジェクト直下に wrangler.jsonc を置き、Nitro が生成するエントリを参照します。
{
"name": "my-nuxt-app",
"main": ".output/server/index.mjs",
"compatibility_date": "2026-04-24",
"compatibility_flags": ["nodejs_compat"],
"assets": { "directory": ".output/public", "binding": "ASSETS" }
}
nodejs_compat フラグは node:* モジュールを使うライブラリのために必要です。
3. Secrets を登録する
API Key のような秘匿値は wrangler secret put で登録します。ソース管理対象の .env に入れてはいけません。
npx wrangler secret put NUXT_ANTHROPIC_API_KEY
Nuxt 側では useRuntimeConfig() を介して参照できます。runtimeConfig は server 側のみで読み取れる値と、client に公開する public 値を分ける設計になっています。
4. ビルド・デプロイ
npm run build
npx wrangler deploy
Nuxt のビルドは .output/ に成果物を生成し、wrangler がそれを Workers に送ります。初回 deploy 時は https://<worker>.<subdomain>.workers.dev という URL が発行されます。
落とし穴
- 3 MiB 制限: Free プランでは gzip 圧縮後 3 MiB を超えるとデプロイが拒否されます。
@nuxt/imageのような重い依存を Worker バンドルに入れるときは注意が必要です。 - Request.signal の abort イベント: クライアント切断を検知するには compatibility flag
enable_request_signalを追加しないと発火しません。ストリーミング API で課金が続く事故を防ぐため、AI 系エンドポイントには必ず入れておきます。 - SQLite 系モジュール: Nuxt Content 3 はデフォルトで SQLite を使います。ローカルでは Node.js 組み込みの
node:sqliteまたはbetter-sqlite3が必要、本番 Workers では D1 に切り替える必要があります。
デプロイまでいけば、あとはエッジ配信の恩恵を受けられます。世界中のロケーションから数十ミリ秒でレスポンスが返るのは、Nitro + Cloudflare の組み合わせの大きな魅力です。