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を利用して立ち上げるようにすれば, ミドルウェアの管理がかなり楽に, かつ柔軟に(アプリケーションごとに最適なものを選べるように)なりそうです.