direnvでディレクトリ毎の環境変数を定義する
direnvとは
direnvとはディレクトリ毎に環境変数を定義できる優れものです。任意のディレクトリに移動した時のみ環境変数が有効になります。
Pythonやっている人からしたらディレクトリ毎にPythonのversionを定義できるのでありがたいです。(他にも色々方法はありますが)
インストール
git clone git@github.com:direnv/direnv.git cd direnv make ##/usr/localにインストールする場合 make install
インストールが終わったらシェルにフックさせます。
## bash ~/.bashrcの末尾に以下を追加 eval "$(direnv hook bash)" ## zsh ~/.zshrcの末尾に以下を追加 eval "$(direnv hook zsh)"
他のシェルをお使いの方は公式のSetupを参照してください
使ってみる
簡単なFlaskアプリを作ることを想定してみます。
その場合に必要となるものはPythonのVersionの指定、DBのURLを環境変数に入れるなどがあげられます。
アプリ作成しているルートディレクトリに下記コマンドを打ちます。
direnv edit .
layout python3 export FLASK_APP=app.py export FLASK_DEBUG=1 export DATABASE_URL=hoge
やっていることとしては、
Python3系を使い、Flaskを立ち上げるファイルの定義、デバッグ有効、データベースURLの定義を
このディレクトリになった時に有効にするといったことをしています。
保存できたらディクレトリ上に.envrc
というファイルが作成されます。
direnv: loading .envrc direnv: export +DATABASE_URL +FLASK_APP +FLASK_DEBUG +VIRTUAL_ENV ~PATH
vimを抜けると変更されているのが確認できると思います。
うまく変更されない場合は下記コマンドお試しください。
direnv allow .
最後に
.envrcファイルは.gitignore等に書きコミットしないようにしましょう。
特に上記の場合だとDBのURLを書いているので危険です。