Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Railsの技: 起動時に環境変数の存在を確認する(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Railsの技: 起動時に環境変数の存在を確認する(翻訳)

Twelove-Factor Appにも書かれているように、Railsにおける外部サービスなどのオプション設定は環境変数で行うのが定番です。こうした環境変数の値は、Gitなどのソースコード管理にチェックインせず、環境ごとに切り替えて使うのが普通です。

Railsには「イニシャライザ」という概念があり、Railsアプリの起動中に実行するコードを指します。

必要な環境変数が設定されているかどうかをチェックするカスタムのイニシャライザを追加することで、後でコードが値の存在を期待して例外が発生するのを防げるようになります。

利用法

アプリのconfig/initializersディレクトリの下に以下のイニシャライザを作成して、必須にする環境変数を配列に追加します。

# config/initializers/01_ensure_environment.rb

if Rails.env.development?
  %w[
    AWS_ACCESS_KEY_ID
    AWS_SECRET_ACCESS_KEY
    S3_BUCKET
    ALGOLIA_ID
    ALGOLIA_API_KEY
    ALGOLIA_SEARCH_KEY
    ALGOLIA_INDEX
    ALGOLIA_CAMPAIGN_INDEX
    TWITTER_API_SECRET
    TWITTER_API_TOKEN
  ].each do |env_var|
    if !ENV.has_key?(env_var) || ENV[env_var].blank?
      raise <<~EOL
      Missing environment variable: #{env_var}

      Ask a teammate for the appropriate value.
      EOL
    end
  end
end

オプション

Railsのイニシャライザファイルは、ABC順に読み込まれて実行されます。これを利用して、01_ensure_environment.rbのような名前でソート順を制御し、このイニシャライザが最初に読み込まれるようにします。

環境変数の値を空にしたサンプルの.env.sampleファイルをgitにチェックインしておけば、新しいチームメンバーがこれを利用して自分の環境を簡単に設定できるようになります。

参考資料

関連記事

Rubyの技: 文字列操作で便利かつ高速なdelete_prefixとdelete_suffix(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。