Next.jsでカスタムサーバーをセットアップする方法
Next.jsはデフォルトでnext start
コマンドを使用して独自のサーバーを起動します。既存のバックエンドがある場合でも、Next.jsと一緒に使用できます(これはカスタムサーバーではありません)。カスタムNext.jsサーバーを使用すると、カスタムパターン用にプログラムでサーバーを起動できます。ほとんどの場合、この方法は必要ありませんが、必要に応じて利用可能です。
知っておくと良いこと:
- カスタムサーバーを使用する前に、Next.jsの統合ルーターがアプリの要件を満たせない場合にのみ使用するようにしてください。カスタムサーバーを使用すると、**自動静的最適化**のような重要なパフォーマンス最適化が無効になります。
- スタンドアロン出力モードを使用する場合、カスタムサーバーファイルはトレースされません。代わりに、最小限の
server.js
ファイルが別途出力されます。これらを一緒に使用することはできません。
カスタムサーバーのサンプル例をご覧ください:
server.js
はNext.jsコンパイラーやバンドルプロセスを経由しません。このファイルで使用する構文とソースコードが、現在使用しているNode.jsバージョンと互換性があることを確認してください。サンプル例を参照。
カスタムサーバーを実行するには、package.json
のscripts
を次のように更新します:
または、nodemon
をセットアップすることもできます(サンプル例)。カスタムサーバーは、Next.jsアプリケーションとサーバーを接続するために次のインポートを使用します:
上記のnext
インポートは、次のオプションを持つオブジェクトを受け取る関数です:
オプション | タイプ | 説明 |
---|---|---|
conf | Object | next.config.js で使用するのと同じオブジェクト。デフォルトは{} |
dev | Boolean | (オプション)Next.jsを開発モードで起動するかどうか。デフォルトはfalse |
dir | String | (オプション)Next.jsプロジェクトの場所。デフォルトは'.' |
quiet | Boolean | (オプション)サーバー情報を含むエラーメッセージを非表示にする。デフォルトはfalse |
hostname | String | (オプション)サーバーが実行されているホスト名 |
port | Number | (オプション)サーバーが実行されているポート番号 |
httpServer | node:http#Server | (オプション)Next.jsが実行されているHTTPサーバー |
turbo | Boolean | (オプション)Turbopackを有効にする |
返されたapp
は、必要に応じてNext.jsにリクエストを処理させるために使用できます。
ファイルシステムルーティングの無効化
デフォルトでは、Next
はpages
フォルダ内の各ファイルをファイル名に一致するパス名で提供します。カスタムサーバーを使用するプロジェクトでは、この動作により同じコンテンツが複数のパスから提供される可能性があり、SEOやUXに問題が生じる可能性があります。
この動作を無効にしてpages
内のファイルに基づくルーティングを防止するには、next.config.js
を開き、useFileSystemPublicRoutes
設定を無効にします:
useFileSystemPublicRoutes
はSSRからのファイル名ルートを無効にしますが、クライアントサイドルーティングではこれらのパスにアクセス可能な場合があります。このオプションを使用する場合は、プログラムで不要なルートへのナビゲーションを防ぐ必要があります。
また、クライアントサイドルーターを設定して、ファイル名ルートへのクライアントサイドリダイレクトを禁止することもできます。詳細は
router.beforePopState
を参照してください。