はじめに
Next.jsのアプリケーションをビルド(next build
)すると一定の識別子(build_id
)が自動的に生成され、アプリケーションのバージョンが識別されます。通常ならばNext.jsの自動生成に任せておいて問題はないのですが、下記のように複数サーバ構成かつ各サーバで next build
が行われるパターンでは注意が必要です。
サーバ1とサーバ2で build_id
が異なっていると動作に支障が生じる可能性もあるため、両者の build_id
が一致するように設定しなければなりません。
ビルドIDの設定
next.config.js
に generateBuildId
関数を追加します。この関数の返り値が build_id
となります。例示したコードでは各サーバが共通して参照する環境変数に build_id
を定義し、その値を呼び出しています。
なお、ビルド時には別の値にする必要がある点に注意が必要です。最新のコミットハッシュを使ったりするケースが多いようですね。
next.config.js
module.exports = {
+ generateBuildId: async () => {
+ // このコードでは環境変数でbuild_idを管理 ビルド時に環境変数は変更
+ return process.env.BUILD_ID
+ }
}
まとめ
複数サーバ構成を組んでいる場合は、同じ build_id
が割り当てられるように注意をしましょう。特に「開発環境では大丈夫だったのに検証/本番環境で動かなくなった」といったケースの場合、もしかしたら冗長構成が取られていることによりサーバ間で build_id
が異なってしまった結果かもしれません。
参考