ペイの技術MEMO

文系大学生の技術メモ

direnvでディレクトリ毎の環境変数を定義する

direnvとは

direnvとはディレクトリ毎に環境変数を定義できる優れものです。任意のディレクトリに移動した時のみ環境変数が有効になります。

Pythonやっている人からしたらディレクトリ毎にPythonのversionを定義できるのでありがたいです。(他にも色々方法はありますが)

direnv.net

インストール

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 .

vim等が立ち上がると思うので環境変数を書きます。

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を書いているので危険です。