Railsで定数を一元管理する(config)


[まとめ] 現在開催中のKindleセール情報はこちら

Ruby2.1.4, Rails4.1.7で確認

—- 2015/8/23追記 —-

先日、gem名がrails_configからconfigに変更になったようです。

rails以外でも使えるから名前もrailsにとらわれないようにということでしょうか。

gem名がしれっと変わるのはアグレッシブですね。

railsconfig/config

記事内で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

これで定数を一元管理できるのでスッキリしますね。

参考

パーフェクトシリーズについにKindle版が出てました!

[まとめ] 現在開催中のKindleセール情報はこちら