Edited at

環境によって変わる設定値はdotenvを使うと便利

More than 3 years have passed since last update.

Railsの環境のよって変わる設定値をどうするか問題については、rails_configとかsettingslogicなどのgemがよく紹介されているけど、今回はdotenvというgemを紹介したいと思います。

http://rubygems.org/gems/dotenv

これは、仕組みとしてはとても簡単なもので、カレントディレクトリに .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の設定を引き継いで実行することができます。


ところで

Repro株式会社 では一緒に切磋琢磨できる仲間を募集しています! ぜひこちらをごらんください!