TL;DR

設定ファイルのような流動的な値は環境変数を用いたりするが、個人的には環境変数よりも設定ファイルに残したいと思っている。 今回はパスワードのようにSCMへ保存するものではないので注意。

class Foo
  BAR = "baz".freeze

  def qux
    BAR
  end
end

設定ファイルのような概念までは不要な場合、定数にしてしまうのが最も簡単かもしれない。 ただしRailsなどのようなアプリケーションではこのようなファイルをどこに保存しようか悩みがちである。 またこれは好みだけれども、複数の設定項目がある場合、それだけ定数が複数存在するのも好ましく思えない。

Custom Configurationにもいくつか紹介されているようだが、今回はRails::Application.config_forの方法を使う。

# config/settings.yml
shared:
  bar: baz
# config/application.rb
module MyApp
  class Application < Rails::Application
    config.settings = config_for(:settings)
  end
end
class Foo
  SETTINGS = Rails.configuration.settings

  def qux
    SETTINGS[:bar] #=> baz
  end
end

コード例では割愛しているが、個人的にはこのアプローチはなかなか気に入っている。