概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Ruby on Rails - easy configuration for you app with YAML files
- 原文公開日: 2018/02/01
- 著者: Paweł Dąbrowsk
Rails tips: アプリをYAMLファイルで楽に構成する(翻訳)
Railにはyml
ファイルで定義されている設定を読み込める組み込みメソッドがあることをご存知でしょうか?このメソッドは、外部のgemを一切使わずにアプリで使えます。
やりたいこと
guestbookという名前のアプリで、Guestbook.config
でファイルにアクセスしたいと思います。これは設定のネステッドハッシュを返すはずです。
設定
最初に設定ファイルを作成しましょう。config
ディレクトリにguestbook.yml
という名前の空ファイルを作成します。支払情報やログインcredentialなどのように開発中は不要なものや、production以外で使うのは危険な設定もありますので、この問題を解決するためにファイル内にセクションを設けます。defaults
セクションとdevelopment
、test
、production
セクションです。stagingなど、その他の環境も使うことは可能ですが、ここでは普通使われている環境を使うことにしましょう。
defaults: &defaults
development:
<<: *defaults
production:
<<: *defaults
test: &test
<<: *defaults
設定を見るとわかるように、各環境はdefaults
セクションの設定を引っ張ってきています。default
設定は他のセクションよりも上にあるので、各環境の設定を簡単に上書きできます。たとえばname
という設定があるとして、productionではこれを別の名前にしたい場合は次のようにします。
defaults: &defaults
name: GuestBook
development:
<<: *defaults
production:
<<: *defaults
name: GuestBook Production
test: &test
<<: *defaults
これで、defaults
にあるname
の名前はproduction以外のすべての環境で表示されます。defaults
セクションや環境ごとの個別のセクションはいくらでも柔軟に設定できます。これは、productionやdevelopmentのエンドポイントにアクセスする外部APIを用いる場合に特に便利です。API環境を切り替えたい場合は、コード内のロジックではなく、設定だけを変更するようにしなければなりません。
メソッド作成の設定
作成したファイルの設定はできましたので、今度はGuestbook.config
でアクセスできるようにしたいですね。それにはconfig/application.rb
ファイルに新しいクラスメソッドを追加します。
module Guestbook
def self.config
Rails.application.config_for(:guestbook)
end
class Application
...
end
end
テストする
動作をテストしたい場合は、まずRAILS_ENV=development bundle exec rails c
を実行し、続いてRAILS_ENV=production bundle exec rails c
を実行して、Guestbook.conifg[:name]
呼び出しの値が異なっていることを確認します。
お知らせ: RSpec & TDDの電子書籍を無料でダウンロード
もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。