Tech Racho エンジニアの「?」を「!」に。
  • 開発

Rails tips: アプリをYAMLファイルで楽に構成する(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails tips: アプリをYAMLファイルで楽に構成する(翻訳)

Railにはymlファイルで定義されている設定を読み込める組み込みメソッドがあることをご存知でしょうか?このメソッドは、外部のgemを一切使わずにアプリで使えます。

やりたいこと

guestbookという名前のアプリで、Guestbook.configでファイルにアクセスしたいと思います。これは設定のネステッドハッシュを返すはずです。

設定

最初に設定ファイルを作成しましょう。configディレクトリにguestbook.ymlという名前の空ファイルを作成します。支払情報やログインcredentialなどのように開発中は不要なものや、production以外で使うのは危険な設定もありますので、この問題を解決するためにファイル内にセクションを設けます。defaultsセクションとdevelopmenttestproductionセクションです。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』をどうぞお役立てください。

関連記事

Rails: 多機能ベンチマークgem「derailed_benchmarks」README(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。