Railsで定数を一元管理する(config)
Ruby2.1.4, Rails4.1.7で確認
---- 2015/8/23追記 ----
先日、gem名がrails_configからconfigに変更になったようです。
rails以外でも使えるから名前もrailsにとらわれないようにということでしょうか。
gem名がしれっと変わるのはアグレッシブですね。
記事内でrails_configと書いていた部分もconfigにリネームしました。
---- 追記ここまで ----
昨年はrailsの定数管理に settingslogicを使用していたのですが、最近は configを使っています。
基本的な使い方はsettingslogicと同じなので乗り換えもしやすいと思います。
- gem追加
gem 'config'
- bundle install
bundle install --path vendor/bundler/
- 初期設定
./bin/rails g config:install
実行すると以下の設定ファイルが追加されます。
create config/initializers/rails_config.rb
create config/settings.yml
create config/settings.local.yml
create config/settings
create config/settings/development.yml
create config/settings/production.yml
create config/settings/test.yml
append .gitignore
settingslogicの場合は、config/settings.ymlに環境ごとの設定を書いていましたが、configの場合は基本的な設定をconfig/settings.ymlに記述し、環境ごとに異なる設定は別ファイルに記述するようになっています。
管理する値が増えてきた場合はconfigの方が見通しがいいですね。
また、config/settings.local.ymlという設定ファイルが追加されていますが、こちらはローカル環境でdevelopment環境の開発をしている際に、ローカル環境依存の設定を書きたい場合に使います。
例えば環境に応じたURLをsettingsに記述している場合を見てみます。
# config/settings/development.yml
url: 'http://development.url'
この状態で、rails consoleで値を確認すると
./bin/rails c
Loading development environment (Rails 4.1.7)
irb(main):001:0> Settings.url
=> "http://development.url"
development環境なので http://development.url が設定されています。
次にsetting.local.ymlにもurlを設定してみます。
# config/settings.local.yml
url: 'http://local.url'
この状態で、rails consoleで値を確認すると
./bin/rails c
Loading development environment (Rails 4.1.7)
irb(main):001:0> Settings.url
=> "http://local.url"
development環境ですが http://local.url が設定されているのを確認できます。
なお、local.ymlに関してはgenerate時に自動的に.gitignoreに追加されているので、リポジトリに誤ってコミットするミスが防げます。
config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml
これで定数を一元管理できるのでスッキリしますね。