Railsで定数を定義する

はじめに


Railsで定数を作るとき、いつもどうしてたっけ?っていう個人まとめをつくってみました。

決定版みたいなものが無い感じというのもあったりするので参照用という感じです。

グローバルな定数定義


以下のような感じの内容で、「config/initializers」に適当なRubyファイルを作成して定義します

1
2
HOGE = "HOGE"
FUGA = "FUGA"

もしくは、yamlに定数を切り出して、実行タイミング(Rails起動時)にロードという方式でもいいかもしれません。
# yamlに切り出すと管理が大変になるかも・・・という欠点は無きにしもあらずですね。

欠点は以下が考えられます。

  • namespaceの概念が無いので少々使いづらい
  • 環境ごとに値を変更したい場合、切り替え処理を自前でやる必要がある

特に、環境差分とか無ければこれでいいかもしれませんね。
# 尤も、namespaceを使わなくて済む程度という前提が付きますが・・・

コントローラー内で共通な定数定義


以下のような感じで、app/controllers/application_controller.rb 内で定義します

1
2
3
4
class ApplicationController < ActionController::Base
  HOGE = "HOGE"
  FUGA = "FUGA"
end

単にApplicationControllerがすべてのcontrollerのスーパークラスになっているから参照できるというだけの話です。 # あまりここに定義はしたくないですね。

rails_configを使って環境ごとに変更する


rails_configというgemを使う方法ですね。

以下をGemfileに記述し、インストールします。

1
gem 'rails_config'

rails_configを使うように初期設定をします(ただのインストールですが)

1
$rails g rails_config:install

ファイルに関しては以下の通り

環境 ファイルパス
全ての環境で共通 config/settings.yml
ローカル環境 config/settings.local.yml
開発環境 config/settings/development.yml
テスト環境 config/settings/test.yml
本番環境 config/settings/production.yml

YAMLの記述は以下のような感じで行います

1
2
3
hoge:
  fuga: 'fugafuga'
  test: 'test'

使用する場合は、以下のようなコードで出来ます。

1
2
3
Settings.hoge[:fuga]
Settings.hoge['fuga']
Settings[:hoge][:fuga]

他に、同じようなことをする有名なgemに、「settingslogic」があります。
以下の感想でsettingslogicはあまりつかわないです。

  • 一つのファイルで全て定義なのでファイルが肥大化しそう
  • クラス定義も作る必要があるので若干面倒(シンプルに使えない)