今回は各環境(development, test, staging, production)の共通設定をRails::Application.config_forを用いてyml形式で管理する方法についてまとめたので解説したいと思います。
Rails::Application.config_forを用いた管理方法
ymlファイルの配置
まずはymlファイルをconfig直下に配置します。今回はリンクを管理するため、link.ymlというファイルを配置します。
config
- link.yml
各環境の記載
先ほど作成したlink.ymlに各環境の設定を記載します。共通の環境で用いる設定はdefaultに記載され、各環境それぞれでdefaultを読み込む形になっています。
# config/link.yml
# 共通の設定
default: &default
# 開発環境の設定
development:
<<: *default
# テスト環境の設定
test:
<<: *default
# 本番環境の設定
production:
<<: *default
# ステージング環境の設定
staging:
<<: *default
共通設定の記載
続いて、先ほど記述したdefault部分に共通で用いる設定を記載します。今回は試しにGoogleとYahooのリンクを追記しました。
# config/link.yml
# 共通の設定
default: &default
google:
https://www.google.com/
yahoo:
ja:
https://www.yahoo.co.jp/
en:
https://www.yahoo.com/
# 開発環境の設定
development:
<<: *default
# テスト環境の設定
test:
<<: *default
# 本番環境の設定
production:
<<: *default
# ステージング環境の設定
staging:
<<: *default
以下のようにネストすることも可能です。
yahoo:
ja:
https://www.yahoo.co.jp/
en:
https://www.yahoo.com/
ymlファイルの読み込み
最後にlink.ymlを読み込む記述をapplication.rbに追記します。
require_relative 'boot'
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module SlackNotificationApp
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 6.0
# Settings in config/environments/* take precedence over those specified here.
# Application configuration can go into files in config/initializers
# -- all .rb files in that directory are automatically loaded after loading
# the framework and any gems in your application.
config.x.link = config_for(:link) ← 追記
end
end
ネストされた状態ではconfig.x.linkのようにxを挟む必要があります。
> config.link
NoMethodError: undefined method `link' for #<Rails::Application::Configuration:0x00007f903e2e2220>
> config.x.link
{:google=>"https://www.google.com/", :yahoo=>{:ja=>"https://www.yahoo.co.jp/", :en=>"https://www.yahoo.com/"}}
> config.x.link.google
"https://www.google.com/"
参考: Railsガイド 8カスタム設定
リンクの取得
link.ymlで設定した記述をコントローラー等で引っ張りたい場合は「Rails.configuration.x…」で呼び出すことができます。
def google_url
Rails.configuration.x.link.google
end
def yahoo_ja_url
Rails.configuration.x.link.yahoo[:ja]
end
def yahoo_en_url
Rails.configuration.x.link.yahoo[:en]
end
まとめ
- 共通の環境で用いる設定はdefaultに記載する
- ymlファイルではネストして記述することも可能
- ネストされた状態ではconfig.x.linkのようにxを挟む必要がある
- ymlファイルで設定した記述はRails.configuration.x…で呼び出せる
参考
今回は各環境(development、test、production…)の共通設定をRails::Application.config_forを用いてyml形式で管理する方法について解説しました。1つにまとめられそうな設定があれば、Rails::Application.config_forを使ってみてください。