コンテンツにスキップ

カスタムサーバー

Next.jsはデフォルトでnext startによる独自のサーバーを含んでいます。既存のバックエンドがある場合でも、Next.jsと組み合わせて使用できます(これはカスタムサーバーではありません)。カスタムNext.jsサーバーを使用すると、カスタムパターン用にプログラムでサーバーを起動できます。ほとんどの場合、このアプローチは必要ありません。ただし、独自のサーバーを導入する必要がある場合には利用できます。

知っておくと良いこと:

  • カスタムサーバーの使用を決定する前に、Next.jsの統合ルーターがアプリケーションの要件を満たせない場合にのみ使用すべきであることを覚えておいてください。カスタムサーバーを使用すると、自動静的最適化のような重要なパフォーマンス最適化が失われます。
  • カスタムサーバーはVercelにデプロイできません
  • スタンドアロン出力モードを使用する場合、カスタムサーバーファイルはトレースされません。このモードでは、代わりに最小限の個別のserver.jsファイルが出力されます。これらは一緒に使用できません。

カスタムサーバーの以下の例をご覧ください

server.ts
import { createServer } from 'http'
import { parse } from 'url'
import next from 'next'
 
const port = parseInt(process.env.PORT || '3000', 10)
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
 
app.prepare().then(() => {
  createServer((req, res) => {
    const parsedUrl = parse(req.url!, true)
    handle(req, res, parsedUrl)
  }).listen(port)
 
  console.log(
    `> Server listening at https://:${port} as ${
      dev ? 'development' : process.env.NODE_ENV
    }`
  )
})

server.jsはNext.jsコンパイラやバンドルプロセスを経由しません。このファイルが必要とする構文とソースコードが、現在使用しているNode.jsのバージョンと互換性があることを確認してください。例を見る

カスタムサーバーを実行するには、package.jsonscriptsを以下のように更新する必要があります

package.json
{
  "scripts": {
    "dev": "node server.js",
    "build": "next build",
    "start": "NODE_ENV=production node server.js"
  }
}

あるいは、nodemonをセットアップすることもできます()。カスタムサーバーは、サーバーとNext.jsアプリケーションを接続するために以下のインポートを使用します

import next from 'next'
 
const app = next({})

上記のnextインポートは、以下のオプションを持つオブジェクトを受け取る関数です

オプション説明
confObjectnext.config.jsで使用するのと同じオブジェクトです。デフォルトは{}です
devBoolean(任意) Next.jsを開発モードで起動するかどうか。デフォルトはfalseです
dirString(任意) Next.jsプロジェクトの場所。デフォルトは'.'です
quietBoolean(任意) サーバー情報を含むエラーメッセージを非表示にします。デフォルトはfalseです
hostnameString(任意) サーバーが稼働しているホスト名
portNumber(任意) サーバーが稼働しているポート
httpServernode:http#Server(任意) Next.jsが稼働しているHTTPサーバー
turboBoolean(任意) Turbopackを有効にする

返されたappは、必要に応じてNext.jsにリクエストを処理させるために使用できます。