LoginSignup
17
10

More than 3 years have passed since last update.

gem configを理解する ~ configを使った定数管理の方法

Last updated at Posted at 2021-03-07

背景

Railsの課題を実施しています。途中で、「定数の管理にはgem configを使いましょう」という指示がありました。「定数管理」という概念がなかったのと、初めて知るgemだったので、調べたことをまとめています。

なぜ、定数を管理する必要があるのか?

調べたところによると、

  • 環境ごとに違う定数を用いたい
  • いろいろなところに散らばる定数をまとめたい

というような時に定数管理を用いるそうです。特に大規模アプリケーションだと必要なのだとか。

定数管理の方法

定数を管理するgemは数多くあり、パッと調べた限りでも以下のものが出てきました。

gem を使わず、自分で設定ファイルと作られたという方もいました!

【Ruby on Rails】 gem を使わないで環境毎に定数管理をする

そのぐらい「定数管理」は必要な概念なんですね〜

configの特徴

上記で取り上げた2つのgemは、どちらもyml形式でファイルを管理するようでした。
両者の公式サイトを見比べる限り、configの方が、体系的に定数を管理できる印象を受けました。

DL数は、configが1.7k、Settingslogicが1.4kと、ややconfigに軍配が上がる模様です。

使い方

インストール

configでは、Gemfilegem 'config'と書いて、bundle install

rails g config:install

で、以下のファイルが生成・追記されます。
Image from Gyazo

生成されたファイル

生成されたそれぞれの設定ファイルの役割は以下の通りです。

ファイル名 役割
config/initializers/config.rb configの設定ファイル
config/settings.yml すべての環境で利用する定数を定義
config/settings.local.yml ローカル環境のみで利用する定数を定義
config/settings/development.yml 開発環境のみで利用する定数を定義
config/settings/production.yml 本番環境のみで利用する定数を定義
config/settings/test.yml テスト環境のみで利用する定数を定義

なお、インストール時に.gitignoreに追記されていた内容は以下の通りですので。

config/settings.local.yml
config/settings/*.local.yml
config/environments/*.local.yml

上記の設定ファイル+これから作成するファイルのうち、localで使うものはgithubに上げないようになっているんですね:innocent:

定数の使い方

今回は、config/settings/development.ymlに以下のように書きました。

config/settings/development.yml
user:
  name: 'Alice'

すると、こんな形で変数にアクセスできます。

[1] pry(main)> Settings.user
=> #<Config::Options name="Alice">
[2] pry(main)> Settings.user.name
=> "Alice"
[3] pry(main)> Settings.user[:name]
=> "Alice"
[4] pry(main)> Settings.user.to_h
=> {:name=>"Alice"}

先に挙げた設定ファイルのどこに書いても呼び出し方法は同じようでしたが、ファイル間で値が重複した場合、上にあるものは下にあるもので上書きされるようです。

config/settings.yml
config/settings/#{environment}.yml
config/environments/#{environment}.yml

config/settings.local.yml
config/settings/#{environment}.local.yml
config/environments/#{environment}.local.yml

これで、うっかり同じ定数を定義してしまっても安心なのですね:relaxed:

感想等

確かに、今まで config/initializerだったり、applicatiotn_controllerだったり、色々なところに定数を書いてきましたが、一つにまとまっていると便利かもしれません。

また、config/initializerに定数を書いていたときは、このファイルにエラーがあるとアプリ全体が起動しなかったので、大きすぎるエラーを出さない上でも便利なのかもしれないです。

今後、使用している場面を見かけたら、使い方を注目してみようと思います^^

17
10
0

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
17
10