タイトル通りでdirenvを使うとディレクトリごとに環境変数を定義することができて便利だと感じたのでメモ。サイバーエージェントのMLOps資料で知ったのをきっかけに使い始めました。
例えば、aws cliを使用する際に--profileオプションで認証情報を指定することができるが、つけ忘れる可能性があるし面倒なのでもっと楽にしたい時などに使ってます。
本記事の実行環境:Ubuntu 22.04.2 LTS(WSL 2)
使ってみる
.envrc
を作成し環境変数を記述します。例えば、/work/sample_direnv/に以下の.envrc
を作成します。=と文字間はスペースを入れずに詰めてください。
export HOGE=hoge
export FUGA=111
ちなみにexport
コマンドは環境変数を設定するときに使用するコマンドです。
direnv: error /home/user/work/sample_direnv/.envrc is blocked. Run `direnv allow` to approve its content
.envrc
を書き換えた場合、そのままだとこのようなエラーが発生するはずです。direnv allow
コマンドで.envrc
の内容を承認する必要があります。
読み込んだ環境変数は.envrc
が置かれているディレクトリ以下で使用できます。
/work/sample_direnv$ echo ${HOGE}
hoge
例えば、ここから一つ上のworkディレクトリに移動すると、direnv: unloading
と表示され、環境変数が使用できなくなると通知されます。
aws cli向けにdirenvを使用する場合、前述の流れでAWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_DEFAULT_REGION等必要な情報を記述すれば良いです。
補足
.envrc
をリポジトリにコミットしてしまうと認証情報が洩れるので注意してください。
例えば、.gitignore
ファイルに.envrc
を記述する等して回避します。