direnv, 常日頃から愛用していて, これまでは「新しい環境変数のセット(export TEST=test
)」しかできないと思っていたんですけど, 今日試していたらなんと
export PATH=/path/to/tool:$PATH
みたいな, 環境変数の上書きもいい感じにやってくれる事が判明したので, 忘備録的にメモしておきます.
解説
こういうディレクトリ構成があるとして,
parent |-- child |-- .envrc
child
ディレクトリの.envrc
の中身は次のようになっているとします.
export TEST=this_is_$TEST
このとき, parent
ディレクトリで, 次のようにして環境変数TEST
をセットします.
$ export TEST=test $ echo $TEST test
この状態で, cd
でchild
ディレクトリに移動すると…
$ cd child direnv: loading .envrc direnv: export ~TEST
こうなり, echo
コマンドで環境変数TEST
の中身を表示すると…
$ echo $TEST this_is_test
.envrc
で指定したように, this_is_
が先頭に付くように上書きされます.
さらにここから, cd ..
でchild
ディレクトリを抜け…
$ cd .. direnv: unloading
echo
コマンドで環境変数TEST
の中身を確認すると, なんと環境変数TEST
の中身は元通りに戻っています.
$ echo $TEST test
ユースケース
諸事情あって, 複数のバージョンのMySQLをHomebrewで管理して使い分けている時, 例えばあるアプリケーションではMySQL 5.6を使うようにしたいのであれば, そのアプリケーションのルートに.envrc
を置いて,
export PATH=/usr/local/opt/mysql@5.6/bin:$PATH
と書いておけば良さそうで, こうすればこのアプリケーションの開発環境ではmysql
コマンドなどで5.6のものを優先して使ってくれるようになります.
brew link
やbrew unlink
を駆使して, Homebrewで利用するMySQLのバージョンを切り替える必要がなくなって, 楽そうな感じがします.
加えて, MySQLのサーバはDockerを利用して立ち上げるようにすれば, ミドルウェアの管理がかなり楽に, かつ柔軟に(アプリケーションごとに最適なものを選べるように)なりそうです.