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(翻訳)

デザインも頼めるシステム開発会社をお探しならBPS株式会社までどうぞ 開発エンジニア積極採用中です! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833 コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。 これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 実は最近Go言語が好き。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

週刊Railsウォッチ

インフラ

ActiveSupport探訪シリーズ