Node.js、開発環境と本番環境の違い

Node.js には開発環境と本番環境の間に違いはありません。つまり、Node.js を本番環境設定で動作させるために適用する必要がある特定の設定はありません。しかし、npm レジストリ内のいくつかのライブラリは NODE_ENV 変数を使用することを認識しており、デフォルトでは development に設定されています。Node.js は常に NODE_ENV=production を設定して実行してください。

アプリケーションを設定する一般的な方法は、Twelve-Factor App を使用することです。

NODE_ENV がアンチパターンと見なされるのはなぜですか?

環境とは、エンジニアがソフトウェア製品を構築、テスト、デプロイ、管理できるデジタルプラットフォームまたはシステムのことです。従来、アプリケーションが実行される環境には4つのステージまたはタイプがあります。

  • 開発環境 (Development)
  • テスト環境 (Testing)
  • ステージング環境 (Staging)
  • 本番環境 (Production)

NODE_ENV の根本的な問題は、開発者が最適化とソフトウェアの動作を、ソフトウェアが実行されている環境と組み合わせてしまうことに起因します。その結果、以下のようなコードが生まれます。

if (.. === 'development') {
  // ...
}

if (.. === 'production') {
  // ...
}

if (['production', 'staging'].(..)) {
  // ...
}

これは無害に見えるかもしれませんが、本番環境とステージング環境を異なるものにしてしまい、信頼性の高いテストを不可能にします。たとえば、NODE_ENVdevelopment に設定されている場合はテストや製品の機能がパスするのに、NODE_ENVproduction に設定すると失敗する可能性があります。したがって、NODE_ENVproduction 以外に設定することはアンチパターンと見なされます。