hello-world.jp.net
webエンジニアのメモ。とりあえずやってみる。

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

公開日時

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

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

参考


Related #Rails

[rails]fragment cacheを使ってみる

fragment cacheを使うとテンプレートの一部を部分的にキャッシュすることが可能になります。

[ruby][rails]sidekiqのnamespaceにハマった

sidekiq3.0.1で確認。

[Rails]migrationで外部キーを設定する際に、参照先テーブルと異なるカラム名をつけたい場合

migration時に外部キーを設定する場合、referencesを使いますが、参照先テーブルと異なるカラム名をつけたい場合はどうしようと思い調べてみました。

wheneverの設定をcronに反映するコマンドメモ

Rubyでcronのバッチを作成したい場合に whenever をよく使うのですが、cron反映コマンドを毎回忘れて調べているので書き留めておきます。