始める
フルスタック (SSR) Next.js アプリを Cloudflare Pages にデプロイする方法を学びましょう。
Cloudflare で実行するように事前設定された新しい Next.js アプリを作成するには、次のコマンドを実行します:
npm create cloudflare@latest -- my-next-app --framework=nextyarn create cloudflare@latest my-next-app --framework=nextpnpm create cloudflare@latest my-next-app --framework=nextアプリの開発に関する詳細なガイダンスについては、Bindings または Next.js ドキュメント ↗ を参照してください。
まず、@cloudflare/next-on-pages ↗ をインストールします:
npm install --save-dev @cloudflare/next-on-pages次に、Next.js アプリのルートディレクトリに wrangler.toml ファイルを追加します:
name = "my-app"compatibility_date = "2024-07-29"compatibility_flags = ["nodejs_compat"]pages_build_output_dir = ".vercel/output/static"ここで、Pages プロジェクトを構成し、bindings を介してアクセスできるリソースを定義します。
次に、next.config.mjs ファイルの内容を更新します。
import { setupDevPlatform } from '@cloudflare/next-on-pages/next-dev';
/** @type {import('next').NextConfig} */const nextConfig = {};
if (process.env.NODE_ENV === 'development') { await setupDevPlatform(); }
export default nextConfig;これらの変更により、ローカル開発で bindings にアクセスできるようになります。
Next.js には 2つの “runtimes” ↗ — “Edge” と “Node.js” があります。Cloudflare で Next.js アプリを実行する際には、利用可能な Node.js API を使用できますが、現在は Next.js の “Edge” ランタイムのみを使用できます。
これは、各サーバーレンダリングルート — 例: API ルートや getServerSideProps を使用するルート — に対して “Edge” ランタイムを使用するように構成する必要があることを意味します:
export const runtime = "edge";package.json ファイルのスクリプトフィールドに次の内容を追加します:
"pages:build": "npx @cloudflare/next-on-pages","preview": "npm run pages:build && wrangler pages dev","deploy": "npm run pages:build && wrangler pages deploy"npm run pages:build:next buildを実行し、その出力を Cloudflare Pages と互換性のある形式に変換します。npm run preview: アプリをビルドし、workerd ↗ でローカルに実行します。(next devはアプリを Node.js でのみ実行します)npm run deploy: アプリをビルドし、Cloudflare にデプロイします。
コマンドラインからデプロイするか:
npm run deployまたは、Github または Gitlab リポジトリを接続し、Cloudflare が自動的にマージした各プルリクエストをビルドしてデプロイします。
オプションとして、eslint-plugin-next-on-pages を追加して、Next.js アプリが Cloudflare Pages で正しく実行されるように構成されているかを確認することができます。
npm install --save-dev eslint-plugin-next-on-pagesインストールが完了したら、次の内容を .eslintrc.json に追加します:
{ "extends": [ "next/core-web-vitals", "plugin:eslint-plugin-next-on-pages/recommended" ], "plugins": [ "eslint-plugin-next-on-pages" ]}