【Gem】dotenv
概要
今回はPFを作成するにあたり使用したgemであるdotenv-rails
の紹介です。
用途としては以下のように説明されてます。
Storing configuration in the environment is one of the tenets of a twelve-factor app. Anything that is likely to change between deployment environments–such as resource handles for databases or credentials for external services–should be extracted from the code into environment variables. But it is not always practical to set environment variables on development machines or continuous integration servers where multiple projects are run. dotenv loads variables from a .env file into ENV when the environment is bootstrapped.
訳:
環境に設定を保存することは、アプリの12 原則の 1 つです。データベースのリソースハンドルや外部サービスの認証情報など、デプロイ環境によって変更される可能性があるものは、コードから環境変数に抽出する必要があります。
しかし、複数のプロジェクトを実行する開発マシンや継続的インテグレーションサーバに環境変数を設定することは、必ずしも現実的ではありません。 dotenvは、環境の起動時に.envファイルからENVに変数をロードします。
「環境に設定を保存すること」とはどういうことでしょうか。後ろの文にある「データベースのリソースハンドルや外部サービスの認証情報など、デプロイ環境によって変更される可能性があるもの」から推測するに、環境によって異なる値となるものを保存することと解釈できます。これを環境変数というそうです。認証情報は確かに環境によって異なる値となります。
加えて、認証情報は公開せずに管理する必要があるため、手元で保存する必要があるのです。そのため、このような設定を実行する開発マシンやサーバなどに設定するのは難しいと言っています。
そこで環境の起動時に環境変数を定義している.env
ファイルから変数の読み込みを自動で行うためにこのgemを使います。
まとめると
第三者に漏洩すると危険なパスワードや外部の認証情報を環境変数として管理
ちなみにアプリの12 原則についての公式サイトは以下になります。興味がある方は是非。
導入方法
いつも通りGemファイルに記載するだけですが、環境を指定してインストールを行うこともできます。
gem 'dotenv-rails', groups: [:環境名] or group :環境名 do gem 'dotenv-rails' end
例えば、開発環境でのみdotenv-rails
を使用し、製品環境では別の方法で環境変数を管理する場合に上記のような指定が可能です。
今回は環境指定で開発環境とテスト環境にのみdotenv-rails
を適用させましょう。
# Gemfile group :development, :test do gem 'dotenv-rails'
bundle install Fetching dotenv 2.7.6 Installing dotenv 2.7.6 Fetching dotenv-rails 2.7.6 Installing dotenv-rails 2.7.6
次に、環境変数を定義する.env
ファイルをを作成します。.env
ファイルは手動で作成しないといけません。作成箇所はルートディレクトリ(Gemfileなどがおいてある最上階のディレクトリ)です。
$ touch .env
以上で導入は完了です。
.env
ファイルへの記述
.env
ファイルへの記載は公式では以下のように行っています。
S3_BUCKET=YOURS3BUCKET SECRET_KEY=YOURSECRETKEYGOESHERE
右の値(YOURS3BUCKET
、YOURSECRETKEYGOESHERE
)は環境変数をそのまま記載します。これが左の値(S3_BUCKET
、SECRET_KEY
)に代入されます。左の値は自分で好きに定義できますが、他の値との見た目の差別化のためにすべて大文字にするようですね。
それでは仮になにかのキーの値を11111111111
として.env
ファイルに保存します.
.env SECRET_KEY=1111111111
使用例としてはdevise
認証のためのAPIキーを入れておくなどがあるかなと思います。APIキーは正しく公開しない環境変数の一例ですよね。
記載の方法は以下のようになります。
ENV['.envファイルに記載した定数']
config.omniauth ENV['SECRET_KEY']
これで値の設定は完了です。アプリケーションが起動する時にこちらの値が読み込まれるようになります。