こんばんわ、daihaseです。
段々寒い季節になってきましたね。自分もまさかの若干風邪気味です...。 気を取り直し、今日はNode.jsを使った開発に関する内容を。
Node.jsのプロジェクトでは起動時に、どの環境設定を元に立ち上げるかを指定することが出来ます。
どういうことか、例えばWebアプリケーション開発において一般公開するものはProduction(本番環境)、日々修正したり改修を加えるものをDevelopment(開発環境)といったように通常わけて開発をします。開発しているプロジェクトのソースなどは1種類ですが、データベースの参照先やAPIのURL、他様々なパスなど、開発・本番によって基本的に切り分けて開発を行います。
Node.jsには環境変数というものがあり、それを設定することで簡単に環境を切り替えることが出来ます。Node.jsで開発する際にpm2という便利なデーモン化するツールがあり、今回はそれを使って説明します。
環境ごとの設定ファイルを用意
基本的にExpressを使ったNode.jsのアプリを起動する場合、「node app.js」と入力しますが、ここでは設定ファイルから起動するための準備をまず行います。
プロジェクトのルートフォルダに好きなファイル名でOKなので、適当にjsonファイルを作成します。
自分は「configuration.json」としています。中身は以下のように、環境変数NODE_ENVごとにそれぞれ「development」「staging」「production」と定義されているのがわかりますね。
{ "name" : "board", "script" : "./bin/www", "env": { "NODE_ENV" : "development" }, "env_staging": { "NODE_ENV" : "staging" }, "env_production": { "NODE_ENV" : "production" } }
設定ファイルを作成したとこで、ちょっと便利なnpmを紹介。 node-configというもので、こちらを以下コマンドでプロジェクト内にインストール。
npm install config --save
Expressプロジェクトのトップにconfigフォルダを作成します。公式にもdefault.jsonを作成するようにありますが、こちらは何も指定しない場合に自動に読み込む設定ファイルで、自分で必要な環境分のjsonファイルを作成します。「development.json」「staging.json」「production.json」などと用意してやればいいでしょう。
中身はこんなイメージ。
{ "server": { "port": 3000 }, "db": { "host": "xxx.co.jp", "user": "root", "password": "pass", "database": "db", "timezone": "utc", "dateStrings": "date" } }
こうして環境ごとのjsonファイルを用意しておけば、後のpm2にてオプション付きで起動することでdefault.jsonへその内容を上書き、それぞれのjsonファイルに記載した内容を読み込み実行する形になります。
pm2でオプションを指定し起動
上の方で通常「node app.js」と叩きアプリを起動するといいましたが、pm2を使った場合は以下のようにオプションを指定し、読み込むjsonファイルを指定し起動します。
pm2 start configuration.json --env development
これで、devemopment.json内に書かれた内容を元にアプリを起動します。jsonにはそれぞれ開発・本番ごとにデータベースやAPI URLの向き先が指定されているので、これで環境ごとに簡単に起動モードを切り分けることが出来るのです。
ちなみにnode-configは「const config = require('config');」とするだけでそれぞれのjsonの中身を取得出来るので、
const config = require('config'); const db = config.get('db');
としてやるだけで、先ほどの環境設定ファイルであるjson(development.jsonなど)の中身を取得出来るため、ソース上で開発環境か本番環境かなどの分岐等、全く意識することなく処理を書けます。
サーバーサイドの開発は、どうしても開発、本番とサーバーをわけて開発することが多いので、こういった環境の切り替えは簡単に出来ると色々捗りますよね。
今日はここまで、それでは良い開発ライフを〜