環境変数の設定!Railsアプリで使用
環境変数とは
簡単に言えばOSに保存しておく変数、ということでいいと思います。環境変数に値を設定すると、シェルが簡単にその値にアクセスすることができます。
環境変数を設定するメリット
PATHを通す
環境変数にアプリケーションの場所を設定しておくことで、シェルはどこからでもそのアプリケーションの場所を検索できます。そのため、アプリケーションのコマンドをどのディレクトリからでも使用することが可能になります。このような作業を、PATHを通すと言います。
Macで環境変数を設定
OSはCatalinaを想定しています。Mojave以前だと違うところもあるらしいです。
環境変数の設定は、.zshrcというファイルに記述を追加するだけでOKです。
その1
コマンドでファイルに記述を追加します。
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc
これは、rbenvのPATHを通すときに実行したものです。echo 値 >> ファイル
で、ファイルに値を記述することができます。
.zshrcに記述を追加した後は、次のコマンドを実行してファイルを再読み込みする必要があります。
% source ~/.zshrc
その2
ファイルに直接記述を追加します。
まずは以下のコマンドを実行します。
% vim ~/.zshrc
このコマンドを実行すると、ターミナル上で.zshrcのファイルが開きます。i
と入力すると編集モードになるので、必要な記述を追加します。
export BASIC_AUTH_USER='xxxxx'
BASIC認証のユーザー名を設定しました。
記述を追加したらescキーを押して編集モードを抜け、:wq
と入力して終了します。
% source ~/.zshrc
最後に、.zshrcの再読み込みをして完了です。
ちょっとつまづいた注意点
初めてBasic認証を導入したとき、環境変数を設定してもアプリが思ったような動きをせず困りました。
原因はターミナルのタブを二つ開いて、片方のタブでサーバーを動かしつつもう片方のタブでコマンドの実行を行なっていたことでした。
どうやら.zshrcの編集や読み込みをしたのと同じタブで、rails s
を行いサーバーを立ち上げる必要があるみたいです。別のタブでサーバーを立ち上げても.zshrcの編集が反映されないので、アプリ内で環境変数を使えません。
Railsアプリで環境変数を使う
ENV[]
の中に設定した環境変数を入れるだけです。
payjp.api_key = ENV["PAYJP_SECRET_KEY"]
payjpというAPIの秘密鍵を環境変数に入れたときはこのように使いました。
payjpを使うときはJavaScriptのファイルでも環境変数が必要なのですが、JSで環境変数を使うには、config/initializers/webpacker.rb
に以下のような記述を追加します。
Webpacker::Compiler.env["PAYJP_PUBLIC_KEY"] = ENV["PAYJP_PUBLIC_KEY"]
これで以下のようにJSファイルでも環境変数の使用が可能です。
Payjp.setPublicKey(process.env.PAYJP_PUBLIC_KEY);
Heroku上でも設定
HerokuにデプロイしたRailsアプリで環境変数を使うときは、そのアプリのディレクトリで、以下のようにコマンドを実行して環境変数を設定します。
% heroku config:set BASIC_AUTH_USER="xxxxx"
また、heroku config
というコマンドを実行すると、設定されている環境変数を確認できます。
まとめ
- 環境変数の設定は.zshrcというファイルに書き込めばOK
- RailsアプリではENV["設定した変数"]という感じで使える
- Herokuにデプロイする場合、Heroku上でも環境変数を設定する必要がある
使い方はわかったけど詳しい仕組みは理解できてないから要勉強