direnv を使うメリット
ディレクトリごとに環境変数を変えたい場合があります。
例えば、複数のプロジェクト(サービス)を管理しているときなどです。
もう少し具体的にいうと、 Terraform などで管理している別々の AWS アカウントがあったとします。
1 2 3 4 5 6 7 8 9 10 11 |
. └── terraform ├── terraform-service1 │ ├── modules │ └── workspace ├── terraform-service2 │ ├── modules │ └── workspace └── terraform-service3 ├── modules └── workspace |
このとき、それぞれを実行する IAMキー が共通であれば問題はないのですが、普通は別になっていると思います。
ローカルから Terraform を実行するとして、それぞれ IAMキーを切り替えるには 「~/.aws/config, ~/.aws/credentials」などで調整はできますが少々面倒です。
そんなとき direnv があると便利です。
direnv を使う
direnv は go で実装されています。 ( リポジトリ: https://github.com/zimbatm/direnv )
- Mac を使用しているなら brew でインストールできます
1234567% brew install direnv==> Downloading https://homebrew.bintray.com/bottles/direnv-2.17.0.high_sierra.bottle.tar.gz######################################################################## 100.0%==> Pouring direnv-2.17.0.high_sierra.bottle.tar.gz? /usr/local/Cellar/direnv/2.17.0: 9 files, 5.4MB% - 次に 「~/.zshrc」に以下を追加します。※ お使いのシェル、エディタに合わせてください。
12export EDITOR=vimeval "$(direnv hook zsh)"
変更後は「source ~/.zshrc」で再読込してください。 - 次に環境変数を切り替えたい場所で以下を実行し、環境変数を記載します
123456789% direnv edit .============ 以下、環境変数を記載して保存============export AWS_ACCESS_KEY_ID="xxxxxxxxxxxxxxx"export AWS_SECRET_ACCESS_KEY="xxxxxxxxxxxxxxxxxxxxx"==========================================direnv: loading .envrcdirenv: export +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY% - 確認します
1234567891011121314151617% pwd/Users/user1/terraform/terraform-service1% ls -la .total 8drwxr-xr-x 5 user1 staff 160 9 19 23:55 ./drwxr-xr-x 5 user1 staff 160 9 19 23:37 ../-rw-r--r-- 1 user1 staff 96 9 19 23:54 .envrc -------> ファイルができているdrwxr-xr-x 2 user1 staff 64 9 19 23:37 modules/drwxr-xr-x 2 user1 staff 64 9 19 23:38 workspace/% env | grep AWS -----------> 環境変数がセットされていますAWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxAWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx
「.envrc」というファイルが作成され、環境変数が読まれているのが分かると思います。直接ファイルを修正することも可能です。
このファイルがあるディレクトリ配下に影響があるということも確かめてみます。(上位のディレクトリに移動すると環境変数がアンセットされます)
123456789101112131415% cd ..direnv: unloading% env | grep AWS% cd terraform-service1direnv: loading .envrcdirenv: export +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY% cd workspace% env | grep AWSAWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxAWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxx
まとめ
以上で direnv の使い方の紹介は終わりです。
環境変数の扱いにはいろんなソリューションがあると思いますが、 direnv はその一つとして検討してもよい便利で簡単に使用できるツールだと思います。
多くの場面で活躍するものだと思うのでぜひ試してみてください。
補足
vim などで修正してコメント文などを入れた場合など以下のようなエラーが出ると思います。
問題がなければ指示通り direnv allow コマンドを実行して問題ありません。
1 2 3 4 5 6 7 8 |
% vim .envrc direnv: error .envrc is blocked. Run `direnv allow` to approve its content. % direnv allow direnv: loading .envrc direnv: export +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY % |