direnvでエレガントな開発環境を
direnvとは
ディレクトリごとに環境変数を定義してカレントディレクトリになった時に環境変数を適用してくれるツール。
Githubはこちら
https://github.com/direnv/direnv
Goでできててなうい感じ。 ドキュメントも充実してます。
インストール
Mac上でHomeBrewをいれているときはbrew install direnv
そうじゃない人は
git clone https://github.com/direnv/direnv.git cd direnv sudo make install
これでインストールは完了
hookの追加
.zshrcや.bashrcにhookを追加する。
export EDITOR=vim(ここはお気に入りのエディタに読み替えてください) eval "$(direnv hook zsh)"
bashの場合は
eval "$(direnv hook bash)"
pathを通して環境を作る
環境構築したいディレクトリに移動して
direnv edit .
とすると記載のためのエディタが立ち上がるので、そこに
export PATH=bin:$PATH
を追加する。
PATH_add bin
こっちでもできます。
保存が完了すると.envrcができているので追加があるときは編集してください。
エラーが発生する
.envrcが読まれると時たまエラーが出ます。そんなときは
direnv allow
として問題解決
direnvを使うメリット
pvmとかpyenvとか色々管理ツールはあるわけですが管理ツールの管理に追われるというジレンマに陥りがち。
あれ、何が原因で動かないんだ?ってなった時に.envrcを見に行ってごにょごにょするだけでいいなら楽チンです。 僕はplayFrameworkの管理がきっかけで使うようになりました。 play1.2.7を使う時にjava7使わないといけなかったり他ではscala使ったりjava8つかったりしてる関係でとても重宝しています。
これで余計な労力を使わずエレガントな環境構築と変更が可能です。
おまけ
alias
.direnvrcを開いて
export_function() { local name=$1 local alias_dir=$PWD/.direnv/aliases mkdir -p "$alias_dir" PATH_add "$alias_dir" local target="$alias_dir/$name" if declare -f "$name" >/dev/null; then echo "#!/usr/bin/env bash" > "$target" declare -f "$name" >> "$target" 2>/dev/null echo "$name" >> "$target" chmod +x "$target" fi }
を書き込む。
hoge() { こまんど } export_function hoge
こちらで議論してます。参考にどうぞ https://github.com/direnv/direnv/issues/73