Next.js アプリを @opennextjs/cloudflare + wrangler で Cloudflare Workers にデプロイする手順。
- Next.js は本来 Node.js サーバーで動く → Vercel 以外だとそのままデプロイできない
- Cloudflare Workers は V8エンジン(ブラウザと同じ)で動く軽量サーバーレス環境
@opennextjs/cloudflareが「Next.js → Workers」の変換を担当する
- Cloudflare アカウント(Free プランでOK)
- WSL2 + Ubuntu(Windows からのデプロイに必要)
- Node.js 22(WSL 内に nvm 経由でインストール)
なぜ WSL が必要か: wrangler が WASM ファイルを
resvg.wasm?moduleという名前で一時保存するが、Windows ではファイル名に?が使えないためデプロイが失敗する。WSL(Linux)なら?が使えるので問題なし。
PowerShell で実行:
wsl --install -d Ubuntuユーザー名・パスワードを設定。再起動が必要な場合あり。
WSL 内で /etc/wsl.conf を作成:
sudo nano /etc/wsl.conf以下を入力して保存(Ctrl+O → Enter → Ctrl+X):
[automount]
enabled = true
options = "metadata,umask=22,fmask=111"
PowerShell で WSL を再起動:
wsl --shutdown
wsl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash
source ~/.bashrc
nvm install 22cd /mnt/c/<プロジェクトへのパス>
npm install
npx wrangler loginブラウザが開く → Cloudflare にログイン → 「Allow」で認可。
Next.js アプリ
↓ opennextjs-cloudflare build
Workers 用ファイル(.open-next/)
↓ wrangler deploy
Cloudflare Workers(エッジサーバー)
@opennextjs/cloudflareが Next.js のビルド結果を Cloudflare Workers で動く形 に変換するwranglerがそれを Cloudflare にアップロードする
- Cloudflare ダッシュボード → Workers & Pages → 対象アプリ
- Settings → Domains & Routes
- Add → Custom domain
- ドメインを入力 → Add
- DNS レコードが自動作成される
- SSL 証明書も自動で発行される(数分かかる場合あり)
www.example.com → example.com にリダイレクトしたい場合:
- Cloudflare ダッシュボード → ドメインのゾーン → DNS
- CNAME レコードを追加:
www→<アプリ名>.<サブドメイン>.workers.dev(サブドメインはダッシュボードの Workers & Pages → Overview で確認) - Rules → Redirect Rules → ルール追加:
- If: ホスト名 =
www.example.com - Then: 301リダイレクト →
https://example.com${http.request.uri.path}
- If: ホスト名 =
Error: EPERM, Operation not permitted '.open-next/.build'
→ .open-next/ を削除してリトライ:rm -rf .open-next && npm run cf:deploy
→ /etc/wsl.conf の metadata 設定が入っているか確認。
WSL からブラウザが開けない場合は、ターミナルに表示される URL を手動でブラウザに貼ってログインする。
または API トークンを使う方法:
export CLOUDFLARE_API_TOKEN="トークン"トークンは Cloudflare ダッシュボード → My Profile → API Tokens で作成できる。
→ 数分〜最大24時間かかる場合がある。ダッシュボードの SSL/TLS → Edge Certificates で状態を確認。
→ Cloudflare Registrar で買ったドメインは DNS が Cloudflare に向いているので通常は数分で反映。外部レジストラの場合は NS レコードの変更が必要で最大48時間かかることがある。