Node.js、開発環境と本番環境の違い
本番環境と開発環境で異なる構成を設定できます。
Node.jsは、常に開発環境で実行されていると想定しています。 NODE_ENV=production
環境変数を設定することで、本番環境で実行されていることをNode.jsに伝えることができます。
これは通常、次のコマンドを実行することで行われます。
export NODE_ENV=production
シェルで実行しますが、シェル設定ファイル(例:Bashシェルの場合は.bash_profile
)に記述することをお勧めします。そうしないと、システムの再起動時に設定が保持されません。
アプリケーションの初期化コマンドの前に環境変数を付加することによっても適用できます。
NODE_ENV=production node app.js
この環境変数は、外部ライブラリでも広く使用されている慣例です。
環境をproduction
に設定すると、一般的に次のことが保証されます。
- ロギングが最小限の必須レベルに抑えられる
- パフォーマンスを最適化するために、より多くのキャッシュレベルが使用される
たとえば、Pug(Expressで使用されるテンプレートライブラリ)は、NODE_ENV
がproduction
に設定されていない場合、デバッグモードでコンパイルされます。Expressビューは、開発モードではすべてのリクエストでコンパイルされますが、本番環境ではキャッシュされます。他にも多くの例があります。
条件文を使用して、異なる環境でコードを実行できます。
if (process.env.NODE_ENV === 'development') {
// ...
}
if (process.env.NODE_ENV === 'production') {
// ...
}
if (['production', 'staging'].includes(process.env.NODE_ENV)) {
// ...
}
たとえば、Expressアプリでは、これを使用して環境ごとに異なるエラーハンドラーを設定できます。
if (process.env.NODE_ENV === 'development') {
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}
if (process.env.NODE_ENV === 'production') {
app.use(express.errorHandler());
}