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にチェックインしておけば、新しいチームメンバーがこれを利用して自分の環境を簡単に設定できるようになります。
参考資料
- Railsガイド: Rails アプリケーションを設定する
概要
原著者の許諾を得て翻訳・公開いたします。