[Ruby on Rails 5] config にアプリ固有の値を定義する

YAML 設定ファイルに持たせた値を活用する。

[markdown]
[railsconfig/config v1.4.0](https://github.com/railsconfig/config) が Rails v5.1 でうまく動かなかったので、マニュアルで設定を追加します。

## 設定ファイルの作成

`config/initializers` に、YAML ファイルを読み込むスクリプトを用意します。

“`ruby:config/initializers/my_config.rb
file = File.read(“#{Rails.root}/config/my_config.yml”)
MY_APP = YAML.safe_load(file, [], [], true)[Rails.env]
“`

`config/` に、固定値を設定する YAML ファイルを用意します。
COMMON には全ての環境で共通する設定を持たせます。

“`yml:config/my_config.yml
COMMON: &COMMON
code: ‘foo’
development:
bar: ‘dev’
<<: *COMMON test: bar: 'test' <<: *COMMON production: bar: 'prod' <<: *COMMON ``` 例えば view 内で `MY_APP['code']` のように設定値を利用することができます。 ```ruby:app/views/items/index.html.haml = check_box_tag :search, MY_APP['code'], true, class: 'form-check-input' ``` このあたりは「Ruby on Rails 5アプリケーションプログラミング」を参考にさせて頂きました。

Ruby on Rails 5アプリケーションプログラミング
山田 祥寛
技術評論社
売り上げランキング: 12,115

## YAML.safe_load

当初 `YAML.load(file)` を利用していたのですが、[bbatsov/rubocop](https://github.com/bbatsov/rubocop) に `YAML.safe_load` を使うように言われました。
置き換えるとエラーが発生するので調べると、`#safe_load` は引数の指定が違いました。

> * [module Psych (Ruby 2.4.0)](https://docs.ruby-lang.org/ja/latest/class/Psych.html#S_SAFE_LOAD)

“`ruby:config/initializers/my_config.rb
file = File.read(“#{Rails.root}/config/my_config.yml”)
MY_APP = YAML.safe_load(file, [], [], true)[Rails.env]
“`

こちらが参考になりました。

> * [ruby on rails – Why is YAML.safe_load failing on a YAML alias? – Stack Overflow](https://stackoverflow.com/questions/43000576/why-is-yaml-safe-load-failing-on-a-yaml-alias)
> * [YAML.load を YAML.safe_load に書き換えると Psych::BadAlias エラーが発生する – Qiita](http://qiita.com/QUANON/items/f07004c030824d2b79fd)
[/markdown]