【結論】
・環境変数とは、パスワードなどGitHubで公開したくないデータを
サーバーなどのOSが保持しておき、アプリに渡す仕組み
・下記の設定方法がある
dotenv-railsというgemの利用
.bash_profileファイルの利用
.bashrcファイルの利用
【目次】
【本題】
環境変数とは
先ほど例にあげたアクセスキーのほか、BASIC認証のパスワードなど
アプリケーションを正常に動作させる上で不可欠なデータがありますが、
それらは情報漏洩すると不正利用などのリスクがある為、GitHubで公開したくありません。
そこで登場するのが、環境変数です。
環境変数は、アプリケーション側ではなく、サーバーのOSに
データを保持しておき、アプリに渡す事が出来る仕組みです。
これにより、アプリケーションに直接パスワードなどを記述しなくとも、
OSからデータを渡す事で、情報漏洩の心配なく、アプリを稼働させる事ができます。
環境変数は、一般的な変数と同じ様に、名前(変数名)を付けることができるので、
その名前でそれぞれの環境変数が区別し、取得できます。
環境変数の設定方法
Railsで環境変数を設定・利用する場合、いくつか方法があります。
下記が主な設定方法です。
・dotenv-railsというgemの利用
・.bash_profileファイルの利用
・.bashrcファイルの利用
dotenv-railsでの設定
「dotenv-rails」というのはgemの一種で、環境変数をファイルで管理する事ができます。
設定手順は下記の通りです。
1:gemを導入する
まずはgemを導入します。
gem 'dotenv-rails'
2:.envファイルを作成する
次に、アプリケーションのルートディレクトリに、「.env」というファイルを作成します。
3:ファイル内に環境変数を記述する
最後に下記の様に環境変数を記述します。
AWS_SECRET_ACCESS_KEY='WX*************************************URFJa' AWS_ACCESS_KEY_ID='AK****************WSA' BASIC_AUTH_USER='admin' BASIC_AUTH_PASSWORD='j*******5' FACEBOOK_KEY='2***********619' FACEBOOK_SECRET='c76*********************bd9' GOOGLE_CLIENT_ID='7********************************************************.com' GOOGLE_CLIENT_SECRET='M*******************************Q_rL'
以上の処理で、アプリ上で環境変数を呼び出す事が可能になります。
なお、環境変数を呼び出す際は、下記の様に記述します。
ENV['FACEBOOK_KEY']
bash_profileの設定方法
次にbash_profileでの設定方法です。こちらの方が一般的な様です。
設定方法は下記の通りです。
1:bash_profileファイルを編集する
下記のコマンドを実行し、
vimで環境変数を入力すれば問題ありません。
vim ~/.bash_profile
2:編集したファイルを読み込める様にする
編集した.bash_profileを読み込み直して、追加した環境変数を使えるようにする
$ source ~/.bash_profile
以上で設定完了です。
なお、「bashrc」でも設定方法は変わりません。
「bashrc」「bash_profile」の違いは下記の通りです。
・bash_profile:ログインしたタイミングで読み込まれる
・bashrc:bashを起動した時に読み込まれる
正直、現時点でどう使い分ければ良いのか分かりませんが、
一部の記事では「bash_profile」で上手く環境変数が反映されない時の対処法として、
「bashrc」を利用する方法を上げていたりしました(直りませんでしたが・・・)
他にも「sudo vim /etc/environment」で設定ファイルを作成したり、
「tcsh」という物を利用したりと、様々な手段がある様です。
/etc/environment というファイルに保存することで、サーバ全体に適用されます。
設定時の注意点
環境変数は名前の通り、環境毎に設定する必要があります。
ローカル環境と本番環境どちらでも利用したい場合は、
両方で設定する必要があるので、注意が必要です。
なお、本番環境に設定する際は、
ssh接続後に先ほどのコマンドを実行すれば設定可能です。
総括
そもそもパスワードなど公開したくないデータを管理するというのは、
環境変数の活用方法の一例に過ぎない様で、他にも利用方法がある様ですが、
現時点の私の技術レベルでは理解に時間が掛かりそうでした。
追い追い勉強して行きたいと思います。