PM2でNODE_ENVを設定する

こんにちは! 株式会社あゆた所属の増島です。初の投稿になります。
普段は主にiOSアプリの開発に携わっていますが、 このブログでは勉強中のNode.jsなど様々な内容を投稿したいと思います。

今回はNode.js関連の話です。

Node.jsで開発環境や本番環境などを切り替える際にNODE_ENVに環境を設定して、
起動するという事が多いかと思います。

今回はデーモン化ツールのPM2を使用する場合にNODE_ENVを設定する方法を書きます。 検証は下記の環境で実施しました。

  • 「Node.js」 v4.2.3
  • 「Express」 4.12.2
  • 「PM2」 1.1.2

設定ファイルの用意

起動する際の設定情報を記述するjsonを用意し、ここに各環境を定義しておきます。今回はexpress-generatorなどで作成したプロジェクトのルートフォルダにjsonを配置する想定でjsonを作成しています。

例としてデフォルト環境の他に「production」「staging」を定義してみましょう。
設定内容は下のようになります。 ファイル名はお好きな内容で大丈夫ですよ!

ファイル名:configuration.json
{
  "name" : "TEST-APP",
  "script" : "./bin/www",
  "env": {
    "NODE_ENV" : "development"
  },
  "env_staging": {
    "NODE_ENV" : "staging"
  },
  "env_production": {
    "NODE_ENV" : "production"
  }
}

起動環境をオプションに指定して起動

通常起動する際は「app.js」や「./bin/www」などを指定しますが、 今回は先ほどのjsonからアプリケーションを起動します。

pm2 start configuration.json --env staging  

--env オプションに起動したい環境を指定するだけです。 指定しない場合はenvに設定されている環境で起動します。

このように起動することで、 指定した文字列がNODE_ENVに設定された状態でアプリケーションが起動します。 あとはコード内で環境を見たり、node-configを使用するなどして処理を分けるだけです。

ちなみにexpressの場合は下記の方法でNODE_ENVに設定された情報を参照出来ます!

var app = express();  
console.log("環境は:" + app.get('env'));  
環境は:staging

非常に簡単ですね! 設定ファイルから起動する方法では他にも色々なオプションを指定出来るので、どんどん活用していきたいですね!