この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
環境ごとに値を設定する場合よくgem ‘config’が使われますが、個人的にgem ‘global’の方が使いやすいと思うので紹介します。
gem ‘config’との違い
gem ‘config’との大きな違いは.ymlファイルの持ち方です。
gem ‘config’
config/settings.yml
config/settings/development.yml
config/settings/production.yml
config/settings/test.yml
config/settings.yml
web_domain: localhost
api_domain: api.local
config/settings/production.yml
web_domain: web.com
api_domain: api.com
gem ‘config’は環境ごとに.ymlを持つのに対し、gem ‘global’は機能ごとや値の種類ごとにファイルを持つ形になります。
gem ‘global’
config/global/domains.yml
default:
web: localhost
api: api.local
development:
web: localhost
api: api.local
production:
web: web.com
api: api.com
test:
web: test.com
api: api.test.com
導入方法
1.Gemfileにgem ‘global’の追記
gem 'global'
2.config/initializers/global.rbの作成
Global.configure do |config|
config.environment = Rails.env.to_s
config.config_directory = Rails.root.join('config/global').to_s
end
使い方
基本
> Rails.env
=> "development"
> Global.domains
=> { "api" => "api.local", "web" => "localhost" }
> Global.domains.api
=>"api.local"
> Rails.env
=> "production"
> Global.domains
=> { "api" => "api.com", "web" => "web.com" }
> Global.domains.api
=>"api.com"
名前空間付き
config/global/name_space/domains.yml
> Global.name_space.domains
=> { "api" => "api.com", "web" => "web.com" }
> Global.name_space.domains.api
=> "api.com"
ネストを入れる
config/global/domains.yml
default:
nest:
web: localhost
api: api.local
development:
nest:
web: localhost
api: api.local
production:
nest:
web: web.com
api: api.com
test:
nest:
web: test.com
api: api.test.com
> Global.domains.nest
=> { "api" => "api.com", "web" => "web.com" }
> Global.domains.nest.api
=> "api.com"
ERB
config/global/domains.yml
default:
web: localhost<%= 1 + 2 %>
api: api.local
> Global.domains.web
=> "localhost3"
リロード
> Global.reload!
他にもjavascriptで使えたりするのでぜひ使ってみてください。