Cloudflare Pages で Next.js の静的サイトをデプロイすると「Error: Output directory "out" not found.」と出る

Cloudflare Pages で Next.js の静的サイトをデプロイすると「Error: Output directory "out" not found.」と出る

こんにちは、じゅんじゅんです。

Next.js で作成した静的サイトを Cloudflare Pages にデプロイしようとしたところ、以下のエラーが発生しました。

Error: Output directory "out" not found.

原因と解決策

原因は Next.js の出力モードが静的エクスポートに設定されていなかったため、ビルド時に out ディレクトリが作成されなかったことです。

Cloudflare Pages で Next.js の静的エクスポートを行う場合、ビルド後に静的ファイルが生成される「出力ディレクトリ」を指定します。

「ビルド構成」の「フレームワーク プリセット」で「Next.js (Static HTML Export)」を選択すると、「ビルド出力ディレクトリ」にデフォルトで out が入ります。

11

Cloudflare Pages のビルド構成

これで静的エクスポートができると思いデプロイを実行したところ、「Error: Output directory “out” not found.」が発生しました。

調べたところ、 Next.js のアプリを静的サイトとしてエクスポートするには、 next.config.jsnextConfig に以下の設定を追加して、出力モードを静的エクスポートにする必要がありました。

next.config.js
const nextConfig = {
  output: "export"
};

上記により、 npx next build を実行した際に静的ファイルを含んだ out ディレクトリが自動的に作成されます。初期状態だと nextConfig は空のため、この設定を追加する必要があります。

Next.js 側は next.config.js の修正ができていなかったため静的エクスポートになっていませんでしたが、 Cloudflare Pages 側では「Next.js (Static HTML Export)」が選択できるので、ずれが生じていました。

デプロイ方法に合わせて、 next.config.js を適切に設定しましょう。

原因は以上ですが、せっかくなのでデプロイまでの手順を記載します。

Next.js のセットアップ

まずは Next.js のセットアップを行います。以下のコマンドを実行してください。ディレクトリ名は cloudflare-pages-test としました。

npx create-next-app@latest

Cloudflare Pages にホスティングする際、 GitHub のリポジトリが必要になるので作成しておきます。

page.tsx の内容はとりあえず以下のようにしておきます。

page.tsx
export default function Home() {
  return (
    <main className="p-24">
      <div className="text-2xl">
        cloudflare test
      </div>
    </main>
  );
}

原因に記載した next.config.js の修正をします。

next.config.js
/** @type {import('next').NextConfig} */
// const nextConfig = {};
const nextConfig = {
  output: "export",
};

export default nextConfig;

Cloudflare のアカウント作成

Cloudflare のサインアップ画面にアクセスし、メールアドレス、パスワードを入力してサインアップします。

1

Cloudflare にサインアップ

入力したメールアドレス宛に認証メールが届くので、有効化します。

Pages の作成

「Workers & pages」を開きます。

2

「Workers & pages」を開く

「Pages」タブを選択し、「Git に接続」をクリックします。

4

Pages → 「Git に接続」をクリック

「GitHub」タブの「GitHub に接続」をクリックします。

5

「GitHub に接続」をクリック

GitHub のアカウントを選んだら「Select repositories」をクリックし、先ほど作成したリポジトリを選択します。選択できたら「Save」をクリックします。

6

リポジトリの選択

Pages に戻り、「セットアップの開始」をクリックします。

7

「セットアップの開始」をクリック

「ビルドの設定」の「フレームワーク プリセット」の部分は「Next.js (Static HTML Export)」を選択します。

すると「ビルド コマンド」には「npx next build」が、ビルド出力ディレクトリには「out」が自動で入力されます。「保存してデプロイ」をクリックします。

8

「フレームワーク プリセット」の選択

しばらく待つとデプロイが成功します。

9

デプロイが成功

cloudflare-pages-test1-8g2.pages.dev にアクセスするとページが表示されました。

10

ページが表示

参考

junya-gera