dotenv gem で環境変数をスマートに管理
概要
dotenv gem で環境変数をスマートに管理します。
他のエントリでの dotenv gem の登場頻度が増えてきたので、一度詳細にまとめようと思います。
なぜ dotenv gem が必要か?・・・の前に
dotenv gem がなぜ必要か、という話の前提に twelve-factor app に触れておく必要があります。
dotenv の README.md の出だしで
Storing configuration in the environment is one of the tenets of a twelve-factor app.
と記述されています。
twelve-factor app は Heroku が提唱しているモダンなアプリケーションを構築するための 12 のマニュフェストです。
詳細は下記をご確認ください。
さて、上記の 12 項目の中に
III. 設定 (Config)
設定を環境変数に格納する
というものがあります。
DBや認証の設定などはコードから隔離して、環境変数に設定します。
しかし、開発環境やステージング環境で環境変数を設定するのが現実的ではない場合があります。
そこで dotenv gem の出番
dotenv gem を利用すると、 .env ファイルからロードした値を ENV に設定することができます。
このように、 dotenv gem は development での利用を意図して作られています。
Installation
$ gem install dotenv
or
- Add dotenv gem to Gemfile
source "https://rubygems.org"
gem "dotenv"
- And install
bundle install
Usage
開発環境の場合
.env ファイルをプロジェクトルートに作成します
KEY1=dev_value1
KEY2=dev_value2
Staging 環境の場合
.env ファイルをプロジェクトルートに作成します
KEY1=staging_value1
KEY2=staging_value2
プロダクション環境の場合
環境変数を設定します。
export KEY1=production_value1
export KEY2=production_value2
ソースコード
開発環境共、Staging環境、プロダクション環境に同じコードで環境変数 or .env ファイルから値を取得できます。
require 'dotenv'
Dotenv.load
p ENV['KEY1'] # => dev_value1 or staging_value1 or production_value1
p ENV['KEY2'] # => dev_value2 or staging_value2 or production_value2