46
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rails 定数を管理するsettings.yml・環境ごとの定数管理の方法

Posted at

##はじめに
先日初めて、config下のsettings.ymlに定数を設定し、同時に環境ごとの定数も設定しました。
呼び出し方や使い方など、備忘録として纏めます。

##なぜsettingsに定数を設定するか
管理を楽にして、変更があった際に対応しやすくするためでしょう。
例えば、もうすぐ変わる消費税率で考えてみます。いろんなファイルに、tax = 8など別々に定義されていたら、修正するのが大変です。修正漏れも起こるかもしれませんね。

##実際にsettingsに書いてみる
ファイルの配置場所はapi/config下になります。

config/settings.yml
#こんな感じで書きます
api_version: '1.0.0'
user:
  minimum_voting_age: 18
  minimum_smoking_age: 20
include_tax:
  to_go: 1.08
  eat_in: 1.10

##定義した定数を呼び出してみる
rails cでコンソールを起動。


[1] pry(main)> Settings.api_version
=> "1.0.0"
[2] pry(main)> Settings.user.minimum_smoking_age
=> 20
[3] pry(main)> Settings.include_tax.to_go
=> 1.08

Settings.〜〜.〇〇で呼び出せます。

##環境ごとに定数を設定する
urlやリンク先など、環境ごとに定数を変更したいときはconfig/settings下に環境名.ymlを作成します。
開発環境であればconfig/settings/development.yml、ローカル環境であればconfig/settings/localhost.yml等になります。
書き方はsettings.ymlと同様ですが、環境ごとのファイルに定数を設定していきます。

config/settings/test.yml
#テスト環境
web_base_url: example.hoge.jp
config/settings/development.yml
#開発環境
web_base_url: http://dev.hoge.jp

コンソールで確認してみましょう。rails c 環境名で環境ごとのコンソールに入れます(Rails 6からはできなくなるそうですが...)

test環境
#rails c testでテスト環境のコンソールに入りました
[1] pry(main)> Settings.web_base_url
=> "example.hoge.jp"

続いて開発環境へ。

development環境
#rails c developmentで開発環境のコンソールに入りました
[1] pry(main)> Settings.web_base_url
=> "http://dev.hoge.jp"

別々の定数が定義されていると確認できました!

##まとめ
・定数を定義する際はsettingsを使うと便利
・すべての環境で共通の定数はconfig/settings.ymlに。
・環境ごとに定数を設定したい場合はconfig/settings/環境名.ymlに。

phpも時々触るようになったのですが、config/config.phpconfig/環境名/config.phpに定数が設定されていました。
間違っている点等あればご指摘いただけますと幸いです。

46
25
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?