Skip to content

Repository files navigation

Next.jsのサイトをWorkersにデプロイする

CodeGridの連載「Webサイトホスティングで使うCloudflare Workers」第3回のサンプルです。Next.jsで作ったサイトをCloudflare Workersにデプロイし、静的エクスポート(SSG)とOpenNextアダプターによるSSRの両方を動かすところまでを扱います。

記事の手順を1ステップずつコミットに分けていますので、git logを追いながら、どのファイルがどの段階で変わったのかを確認できます。

コミットの流れ

コミット 内容 記事の対応箇所
Initial commit from create-next-app npx create-next-app@latest(App Router、TypeScript) Next.jsの準備
静的エクスポートを有効にして… output: 'export'と、outを配信するwrangler.jsonc SSGの場合
next/imageのデフォルトの… images.unoptimizedの指定 静的エクスポートと画像最適化
OpenNextアダプターを導入して… npx opennextjs-cloudflare migrateが生成した各ファイル SSRの場合(OpenNext)
オンデマンドレンダリング(SSR)の… dynamic = 'force-dynamic'/ssrと、/api/hello SSRアダプターの導入

なお、SSRに切り替える段階で、静的エクスポート用の設定(output: 'export'images.unoptimized)はnext.config.tsから削除しています。migrateコマンドはここまでは面倒を見てくれないので、残したままだとOpenNextのビルドが失敗します。

動かし方

依存パッケージをインストールします。

npm install

Next.jsの開発サーバーで確認する場合は次のとおりです。ただし、この方法ではWorkersのランタイム(workerd)は使われず、Node.jsで動きます。

npm run dev

workerd上での挙動を確認したい場合は、ビルドしてからWranglerの開発サーバーを起動します。npm run previewがその両方をまとめて実行します。

npm run preview

/は静的なページ、/ssrはリクエストのたびにレンダリングされるページです。リロードするたびに表示時刻が変わることを確認してみてください。/api/hello?name=CodeGridは、リクエストの内容を読むRoute Handlerです。存在しないパス(/no-such-pageなど)にアクセスすると404が返ります。

デプロイ

Cloudflareアカウントにログインした状態でデプロイします。

npm run deploy

いきなり本番に反映せず、プレビュー用のURLで確認したい場合は次のようにします。実行後に出力されるVersion Preview URL:のURLでプレビューできます。

npm run upload

なお、wrangler.jsoncname2026-workers-hosting-nextjsにしてありますので、自分のアカウントにデプロイする際は適宜変更してください。servicesWORKER_SELF_REFERENCEnameと一致させる必要がある点に注意してください。

補足

cloudflare-env.d.tsは自動生成されるファイルのため、リポジトリには含めていません。型が必要な場合は次のコマンドで生成できます。

npm run cf-typegen

About

Webサイトホスティングで使うCloudflare Workers 第3回のデモ(Next.js)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages