node.jsのいろいろなモジュール13 – node-configで設定ファイルを切り替えたりする

2013.01.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

node.jsでconfigファイルを使用する

アプリケーションを作成するうえで、ユーザー名やパスワード、ホスト名など固定値を定義しておくために設定ファイルはよく使用します。
先日、
・特定のフォーマットで値を保持したい
・環境に応じて設定を切り替えたい
という要件に合うモジュールがないかと探していたところ、良さそうなモジュールがありました。
今回はnode.jsで設定ファイルを使用するためのモジュールは多数ありますが、その中でも比較的多機能(とおもわれる)
node-configについてご紹介します。

環境構築

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Node.js : v0.8.15
  • npm : 1.1.66

適当なディレクトリを作成し、そこでnpmを使用してインストールしましょう。

% mkdir sampleConfig
% cd sampleConfig
% npm install config
% touch app.js //このファイルにサンプルプログラムを記述

node-configを使ってみる

node-configがもっている代表的な機能は次のようなものです。

  • 設定ファイルをjson/js/yaml/coffeeのフォーマットで記述することができる
  • 通常は./config/defoult.xxxのファイルを読み込む。また、NODE_ENV環境変数で指定した値のファイル名を読み込む
  • 複数のファイルを読み込んだ場合にマージしてくれる
  • プログラム実行中にruntime.jsonというファイルを変更した場合、その変更をプログラムに反映できる

ではサンプルで試してみましょう。その前に読み込み対象となる設定ファイルを作成します。
今回はjson形式の設定ファイルを用意します。
sampleConfig/configディレクトリにdefault.jsonファイルを下記内容で作成しましょう。

{
    "foo":{
        "bar":"hello"
    }
}

次はsampleConfig/configディレクトリにdev.jsonファイルを作成します。

{
	"env":"for dev"
}

最後にsampleConfig/configディレクトリにprod.jsonファイルを作成します。

{
	"env":"for prod"
}

node-configを試してみる

ではnode-configをつかったサンプルプログラムを試してみましょう。下記プログラムを作成してください。
使い方は簡単で、requireでモジュールを読み込んだ後、設定ファイルに定義してあるキーを指定するだけです。

var conf = require('config');

console.log(conf.foo.bar);
console.log(conf.env);

nodeコマンドで実行してみます。
この時点ではdefault.jsonしか読み込まれていないので、envは出力されないはずです。

% node app.js
hello
undefined

では、dev.jsonを読み込むようにしてみましょう。NODE_ENV環境変数を設定してdefault.jsonとdev.jsonを使用するようにします。

% export NODE_ENV=dev
% node app.js
hello
for dev

prod.jsonを読み込むようにしてみます。こうやって使えば開発環境と本番環境の切り替えができますね。

% export NODE_ENV=prod
% node app.js
hello
for prod

プログラム実行中に設定ファイルを変更してみる

node-configではプログラム中に内容を変更した内容を自動で反映させることができます。
サンプルプログラム実行後、configディレクト内に「runtime.json」というファイルができているとおもいます。
このファイルの内容はnode-configが自動で変更を反映してくれるファイルです。
runtime.jsonを下記のように記述しましょう。

{
  "runtime": "value1"
}

変更の反映を確認するため、app.jsを下記のようにします。

var conf = require('config');

setInterval(function () {
    console.log(conf.runtime);
}, 1000);

app.jsを実行してみてください。最初はコンソールに1秒ごとに「value1」の表示がされるはずです。
そのままruntime.jsonの「value1」部分を適当に変更してみてください。
すぐにコンソールの表示がその値に変更されるはずです。

まとめ

今回はnodeで設定ファイルを扱うためのモジュール、node-configを紹介しました。
設定ファイルを扱うモジュールはこれ以外にも相当数ありますので、用途に応じて取捨選択しましょう。

参考サイトなど