メインコンテンツまでスキップ

カスタムサーバー

Next.jsにはデフォルトでnext startが付属しています。既存のバックエンドがある場合でも、Next.jsと一緒に使用できます(これはカスタムサーバーではありません)。カスタムNext.jsサーバーは、カスタムパターン用にプログラムでサーバーを開始することを可能にします。ほとんどの場合、このアプローチが必要になることはありません。ただし、必要に応じて使用可能です。

Good to know:

  • カスタムサーバーを使用することを決める前に、Next.jsの統合されたrouterがアプリの要件を満たせない場合にのみ使用されるべきであることを忘れないでください。カスタムサーバーは、Automatic Static Optimization のような重要なパフォーマンス最適化を削除します。
  • カスタムサーバーは、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 http://localhost:${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インポートは、次のオプションを含むオブジェクトを受け取る関数です:

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

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