Railsの環境のよって変わる設定値をどうするか問題については、rails_configとかsettingslogicなどのgemがよく紹介されているけど、今回はdotenvというgemを紹介したいと思います。
これは、仕組みとしてはとても簡単なもので、カレントディレクトリに .env という名前で環境変数を書き込んでおくと、自動的に ENV の中にその値を追加してくれるというものです。
もともと foreman の機能でしたが、切り出されて別のgemになりました。
なので foreman や heroku を使っている人は知っているかと思います。
# .env
AWS_ACCESS_KEY_ID="hogehoge"
AWS_SECRET_ACCESS_KEY="mogamoga"
puts ENV["AWS_ACCESS_KEY_ID"] # => nil
Dotenv.load
puts ENV["AWS_ACCESS_KEY_ID"] # => "hogehoge"
Railsの場合は、dotenv-railsを使います。自動でDotenv.loadしてくれます。
gem 'dotenv-rails'
この.envファイルはVCSにコミットせず、それぞれの開発環境で設定します。
なぜこれが便利なのかというと、設定値へは常に ENV を使ってアクセスすることができるからです。
それが元々環境変数として設定されているのか、.env で設定されているのかは意識する必要がありません。
本番サーバでは環境変数として設定されていて、開発環境ではほかのプロジェクトと競合するなどの理由でグローバルに設定できない設定値も、プロジェクトごとにローカルに設定することができます。
さらに、/bin/dotenv というコマンドを使うと、ruby でないコマンドでも.envの設定を引き継いで実行することができます。