環境変数の設定方法

f:id:ryoutaku_jo:20190213212719p:plain

【結論】
環境変数とは、パスワードなどGitHubで公開したくないデータを
 サーバーなどのOSが保持しておき、アプリに渡す仕組み

・下記の設定方法がある
 dotenv-railsというgemの利用
 .bash_profileファイルの利用
 .bashrcファイルの利用


【目次】


【本題】

情報漏洩から守る

Facebook認証やS3(AWS)への画像保存など、
サービスへのアクセスキーが必要な場面が最近多々ありますが、
そこで利用する環境変数について、今回はまとめます。

環境変数とは

先ほど例にあげたアクセスキーのほか、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」というファイルを作成します。

f:id:ryoutaku_jo:20190213212731p:plain


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接続後に先ほどのコマンドを実行すれば設定可能です。

総括

そもそもパスワードなど公開したくないデータを管理するというのは、
環境変数の活用方法の一例に過ぎない様で、他にも利用方法がある様ですが、
現時点の私の技術レベルでは理解に時間が掛かりそうでした。
追い追い勉強して行きたいと思います。

《今日の学習進捗》

チーム開発:19日目
Facebook認証のappIDの環境変数が読み込まれず・・・
S3のアクセスキーの環境変数も読み込めず・・・
元を辿れば、BASIC認証でも環境変数が読み込めず・・・
今回のチーム開発では環境変数に悩まされ続ける・・・

学習開始からの期間 :68日
今日までの合計時間:716h
今日までに到達すべき目標時間:621h
目標との解離:95h
「10,000時間」まで、

残り・・・「9284時間!」