Next.jsのnext export
機能を使って静的サイトを出力し、example.com/sub-path/
のようなサブディレクトリに設置するには、いくつかの設定が必要です。この記事では、設定方法と、正しく設定しなかった場合に起こる不具合、またGitHub Pagesにデプロイする場合の補足も含めて解説します。
まず、next.config.ts
に以下の設定を行うことで、本番環境でのみ/sub-path
を有効にし、ローカル開発時には無効化できます。
1import type { NextConfig } from 'next';
2
3const subPath: string =
4 process.env.NODE_ENV === 'development' ? '' : '/sub-path';
5
6const nextConfig: NextConfig = {
7 output: 'export',
8 trailingSlash: true,
9 basePath: subPath,
10 assetPrefix: subPath,
11};
12
13export default nextConfig;
14
basePath
はルーティングのベースパスを、assetPrefix
はJSやCSSなどのアセットの読み込み先を指定します。これらがサブパスに対応していないと、出力されたHTMLが画像やスクリプトを正しいパスで参照できず、Webページが正しく動作しません。
<Link>
などでのページ遷移が機能しないこれらの不具合は、アセットやリンクのパスが/sub-path
を考慮せずに/
から始まってしまうことが原因です。
以下のコマンドで、Next.jsのビルドと静的ファイルの出力を行います。
1npx next build && npx next export
出力されたout
フォルダの中身を、Webサーバの/sub-path
ディレクトリにアップロードしてください。
GitHub Pagesでは、_next/
などアンダースコアで始まるフォルダが無視されるため、出力先のpublic
ディレクトリに空の.nojekyll
ファイルを配置する必要があります。
このファイルがあることで、GitHub PagesのJekyll処理をスキップし、Next.jsのフォルダ構造を正しく扱ってくれます。
basePath
とassetPrefix
を適切に設定する.nojekyll
を追加するこのように、静的出力をサブディレクトリに設置する場合はパスの扱いに注意が必要です。正しく設定することで、快適なデプロイと動作が可能になります。