01 December 2012

node.js で config file

node.js なプロジェクトで config ファイルをどう管理するのが便利なんだろうなあという話.

こういうものが欲しい.

  • json (あるいは yaml) 形式の config ファイルを読んでオブジェクトを返してくれる
  • ベースとなるファイル, 環境 (prod or dev) に応じたファイル, リポジトリに入れないローカルだけのファイルをそれぞれ読みこんでくれる
    • ベース -> 環境ごと -> ローカルのコンフィグファイルという順に読み込んで, 同じキーの設定があった場合はあとから読んだもので上書きができる. (簡単な継承関係)

この手の便利ツールは nodejitsu のやつがいいだろうということで nconf というモジュールを見てみたんですが, どうもイメージと違いました.

flatiron/nconf

  • 多機能で使わないものもいっぱいある
    • 設定を redis に入れたりとか
  • 単純な複数コンフィグファイルでの設定の継承ができない? 使い方間違っただけかも

というわけで簡単なスニペットを書いて済ませました. (世の中に似たようなものがたくさんあるんだろうなあと思いながら)

オブジェクトの deep copy 的な部分の処理が甘いのでもしかしたら直すかも. (例えば foo.bar, foo.baz という設定があって子コンフィグファイルで foo.baz だけを上書きしたい場合.) あとは必要に応じて, 例えば設定データのオブジェクトを freeze して返すように修正するかもしれませんが, 現状はこの程度で十分かなと思ってます. あとあんまりちゃんと調べてないのでデファクトなモジュールとかベストプラクティスがあったら知りたい. 設定を js で書いて require するのが一番簡単なんだろうけど他の言語から読めないので微妙だなあとか.

と, これを書いてて気づいたけど

lorenwest/node-config · GitHub

にしたほうがよかったかも... yaml 扱えるし, 設定の上書きも賢そう.