Figaro は Rubyアプリ用のシンプルな設定値管理ライブラリ です。
- 設定ファイル(YAML)の値を読み込んで、アプリから参照できるようにします。
- 設定ファイルは1つ。その中に、環境(development,production,test)ごとの設定も書く形。
- アクセス時のインターフェイスに ENV を使うのが特徴。
同様の機能を提供するライブラリに、 Dotenv もあります。違いはざっくり以下の3つ。
違い | Figaro | Dotenv |
---|---|---|
設定ファイルの形式 | YAML | 独自のKey-Value形式 |
環境ごとの設定の切り分け | 1つのYAMLの中に書く形 | ファイルを別ける |
Rails | Railsでの利用にフォーカス | 非Rails環境もサポート |
設定ファイルはYAMLのほうがいいかな・・・、と思ってFigaroにしました。参照使えるしね。ただし、Rails向けに作られているところがあるので、非Rails環境で使うには一工夫必要です。
使い方
インストール:
$ gem install figaro
設定ファイル( ./config/application.yml )を用意ます。
# デフォルトの設定 KEY1: 'key1' KEY2: 'key2-default' # ERBで処理されるので、rubyコードも利用可 ERB : <%= 'abc' * 3 %> # 特定環境での設定 test: KEY2: 'key2-test' development: KEY2: 'key2-development'
- ルートに、キーと値を書きます。
- アクセス時のインターフェイスはENVなので、階層を作ったりはできません。
- test や development のようなエントリーを用意して、特定環境下でのみ有効な設定を記載できます。
- 値の優先順位は、以下の通りです。
- 1.環境変数の値
- 2.特定環境下向けの設定
- 3.デフォルトの設定
- 値の優先順位は、以下の通りです。
- ERBで処理されるので、rubyコードも書けます。
設定ファイルを使うサンプルです。
require 'figaro' class Application < Figaro::Application private # 設定ファイルのパス。 ./config/application.yml から読み込む def default_path File.join( File.dirname(__FILE__), 'config', 'application.yml') end # 環境(development,test..)の取得先。環境変数RACK_ENVを使う def default_environment ENV['RACK_ENV'] end end Figaro.adapter = Application Figaro.load puts ENV['KEY1'] puts ENV['KEY2'] puts ENV['ERB_VALUE']
- Figaro::Application を継承した Application を用意して、設定ファイルのパスと環境の取得先を指定します。
- あとは、 Figaro.load すれば ENV で値を参照できるようになります。
実行してみます。 まずは素で実行。デフォルトの設定が使われます。
$ ruby test.rb key1 key2-default abcabcabc
RACK_ENVを指定すると、特定環境用の設定がアクティブになります。
$ RACK_ENV=test ruby test.rb key1 key2-test abcabcabc $ RACK_ENV=development ruby test.rb key1 key2-development abcabcabc
さらに、環境変数で値を上書きすることも可能です。
$ KEY1=foo KEY2=var RACK_ENV=test ruby test.rb WARNING: Skipping key "KEY1". Already set in ENV. WARNING: Skipping key "KEY2". Already set in ENV. foo var abcabcabc
警告出ますけど。