
【設定・環境構築】Next.js アプリを OpenNext で Cloudflare Workers にデプロイする
はじめに
Next.js は Vercel 向けに最適化されているため、Cloudflare Workers で直接動かすことはできません。しかし OpenNext というブリッジライブラリを使うと、Next.js のビルド出力を Workers 互換に変換してくれます。
この記事では anoni アプリ(Next.js 16 / App Router)を Cloudflare Workers に移行した際の手順とハマりポイントを紹介します。
この記事でわかること
-
OpenNext (
@opennextjs/cloudflare) の導入と設定方法 -
wrangler.jsoncの書き方 -
Workers 環境で
fsモジュールが使えない問題の回避策 -
useSearchParams()に Suspense 境界が必要な理由と対処 -
ビルド → デプロイの流れ
対象読者
-
Next.js App Router で開発中のアプリを Cloudflare Workers に載せたい方
-
Vercel 以外のホスティングを検討している方
前提条件
-
Next.js 15+ (App Router)
-
Cloudflare アカウント + Workers 有効化
-
wrangler CLI インストール済み
1. OpenNext の導入
OpenNext は Next.js を Cloudflare Workers 向けにビルドするブリッジです。
bun add @opennextjs/cloudflare wrangler
設定ファイルを作成します。
// open-next.config.ts
import { defineCloudflareConfig } from "@opennextjs/cloudflare";
export default defineCloudflareConfig({});
2. wrangler.jsonc の設定
{
"name": "anoni-dev",
"main": ".open-next/worker.js",
"compatibility_date": "2025-02-26",
"compatibility_flags": ["nodejs_compat_v2"],
"assets": {
"directory": ".open-next/assets",
"binding": "ASSETS"
}
}
nodejs_compat_v2 フラグにより、Workers 上で一部の Node.js API がポリフィルされます。ただし fs、net、child_process などは使えません。3. fs モジュール問題の解決
キャラクタープロンプト(.md ファイル)を fs.readFileSync で読んでいた箇所がエラーになります。解決策は TypeScript の定数ファイルに変換して埋め込むことです。
// src/lib/prompts.ts
const PROMPTS: Record<string, string> = {
"akari.md": `ここにプロンプト内容...`,
"haruto.md": `ここにプロンプト内容...`,
};
export function getPrompt(fileName: string): string {
const content = PROMPTS[fileName];
if (!content) throw new Error(`Prompt not found: ${fileName}`);
return content;
}
.md → .ts の変換は一見不思議に見えるので、PR では「Workers には fs がない」背景を必ず記載しましょう。4. Suspense 境界の追加
Workers SSR 環境では useSearchParams() を使うコンポーネントに Suspense 境界が必須です。
import { Suspense } from "react";
export default function ChatPage() {
return (
<>
<Suspense>
<WelcomeToast />
</Suspense>
<ChatPageContainer />
</>
);
}
5. ビルドとデプロイ
# Workers 向けビルド
npx opennextjs-cloudflare build
# デプロイ
npx wrangler deploy
Tips
wrangler secret put コマンドか、Cloudflare ダッシュボードの Workers 設定から追加できます。まとめ
-
OpenNext (
@opennextjs/cloudflare) を使えば Next.js App Router アプリを Workers にデプロイ可能 -
fsが使えない制約は、ファイル内容を TS 定数に変換して解決 -
useSearchParams()には Suspense 境界を忘れずに -
nodejs_compat_v2フラグで Node.js API の一部がポリフィルされる
最新記事
- 【設定・環境構築】OpenNext でNext.js SSGサイトをCloudflare Workersにデプロイする完全ガイド
2026/3/19
- 【実装】Notion calloutブロックをNext.jsでカラフルなUIコンポーネントとして表示する
2026/3/19
- 【トラブルシューティング】Cloudflare Pages → Workers 移行で遭遇したEdge Runtime問題集
2026/3/19
- 【実践】Next.js 13→16メジャーアップグレードの全記録 — 破壊的変更と対応策
2026/3/19
- 【自動化】Gemini Imagen APIでブログのeyecatch画像を自動生成してR2にアップロードする
2026/3/19
- 【実装】Notion APIでブログシステムを構築する(Next.js 13 App Router × SDK v5)
2026/3/19
- 【移行ガイド】microCMSからNotion APIへブログCMSを完全移行する
2026/3/19
- 【トラブルシューティング】本番デプロイで遭遇した問題と解決策まとめ
2026/3/15
- 【環境構築】Next.js × Cloudflare Workers の本番環境を一から構築する
2026/3/15
- 【設定・環境構築】Neon → Prisma Postgres 移行とローカル開発環境の構築
2026/2/26


