読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

設定値管理ライブラリ Figaroを使う

Ruby

FigaroRubyアプリ用のシンプルな設定値管理ライブラリ です。

github.com

  • 設定ファイル(YAML)の値を読み込んで、アプリから参照できるようにします。
    • 設定ファイルは1つ。その中に、環境(development,production,test)ごとの設定も書く形。
  • アクセス時のインターフェイスに ENV を使うのが特徴。
    • ENV を 拡張し、設定ファイルから読み込んだ値も ENV['HOGE'] で参照できるようにしてくれます。
    • なので、環境変数で設定値を管理するやり方と親和性が高い。
      Heroku環境では、このやり方が主流になっているようです。

同様の機能を提供するライブラリに、 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'
  • ルートに、キーと値を書きます。
  • 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

警告出ますけど。