akishin999の日記

調べた事などを書いて行きます。

Rails 以外で Settingslogic を使う

最近は Rails で環境毎に変更する必要がある独自設定の管理に Settingslogic を使っています。

binarylogic/settingslogic
https://github.com/binarylogic/settingslogic

使い方はこの辺が分かりやすいです。

Rails - settingslogicで定数を管理する - Qiita [キータ]
http://qiita.com/torshinor/items/9d81c80dafcc4c73f026

で、Rails と関係ない Ruby のバッチプログラムを書く時にも Settingslogic が使えたら便利だな、と思ったので調べてみました。
環境は Ruby 2.0.0p247 です。

インストール

取りあえずお試しなので bundler は使わず普通に gem でインストールしました。

% gem install settingslogic --no-rdoc --no-ri

使ってみる

まずはディレクトリを作成します。

% mkdir -p ~/src/ruby/2.0/settingslogic/config
% cd ~/src/ruby/2.0/settingslogic

設定管理用のクラスを作成します。
環境切り替え用の環境変数の名前は取りあえず「BATCH_ENV」としておきました。

  • settings.rb
require 'settingslogic'

class Settings < Settingslogic
  source File.expand_path("../config/application.yml", __FILE__)
  namespace ENV['BATCH_ENV']
end

次に config ディレクトリ以下に application.yml ファイルを作成します。

  • config/application.yml
defaults: &defaults
  max_price: 9999

development:
  <<: *defaults
  min_price: 1

production:
  <<: *defaults
  max_price: 100000
  min_price: 100

このファイルが設定ファイルになります。

取りあえずここでは環境に関係ないデフォルト値を定義する defaults 以外に、development と production 環境を定義しました。

いよいよバッチ本体です。
目的は取りあえず Settingslogic が使えるか試す事なので、ここでは以下のように設定値を出力するだけの内容にしました。

  • example_batch.rb
require File.expand_path("../settings.rb", __FILE__)

puts Settings.max_price
puts Settings.min_price

実行してみます。
まずは development 環境を指定。

% BATCH_ENV=development ruby example_batch.rb
9999
1

問題なく値を取得できているみたいです。
それでは環境を production に切り替えてみます。

% BATCH_ENV=production ruby example_batch.rb
100000
100

今度は production 環境として定義した値が取得できました。
問題なく使えるようですね。

これでバッチプログラム開発時も手軽に環境毎の設定を持たせる事が出来そうです。