Macで環境変数を管理するためのdirenvの設定方法
個人的にはThinkPadを使ってUbuntuで開発を行っていたのもあり、Macにはあまり慣れていませんでした。
Pythonで主に開発を行なっている自分ではありますが、環境変数の管理には主にpython-dotenvというのを使用しています。
今回はMac上で環境変数を管理するためのツールであるdirenvの設定方法についてまとめてみました。
direnvとは
direnvはMacで環境変数を管理できるツールです。
bashを使っていた場合は、環境変数は主に.bash_profileや.bashrcに設定すると思いますが、開発するアプリ毎に環境変数を変えたい場合では不便です。direnvはディレクトリ毎に環境変数を定義できて、.envrcに環境変数を適用します。.envrcがあるディレクトリがカレントディレクトリになった時に環境変数が有効になります。
まずはdirenvをインストールします。brewでインストールが可能です。
$ brew install direnv
次に~/.bashrcの下記に以下を追加してください。
# ~/.bashrc
eval "$(direnv hook bash)"
~/.bashrcの再読み込みしてdirenvを動作するようにします。
$ source ~/.bashrc
direnvの設定
次に開発を行うディレクトリ上に.envrcファイルを作成します。.envrcに環境変数を記述します。
$ touch .envrc
以下のように環境変数を記述していきます。例としてPostgreSQLの環境変数を定義する際などを記述しています。
export POSTGRES_HOST=db
export POSTGRES_USER=postgres
export POSTGRES_PASSWORD=postgres
direnvの有効化
.envrcファイルがある場所で以下のコマンドを叩いてください。以下のコマンドでdirenvが有効化されます。$ direnv allow .
$ direnv allow .
direnv: loading .envrc
.envrcがあるディレクトリから抜けると、以下が表示されてdirenvが一時無効化されます。
$ cd ..
direnv: unloading
再度、.envrcがあるディレクトリに入ると以下のように表示され、.envrcの内容が環境変数に追加されていることがわかります。
$ cd project/
direnv: loading .envrc
$ printenv|grep POST
POSTGRES_PASSWORD=postgres
POSTGRES_USER=postgres
POSTGRES_HOST=db
.envrcの運用について
当然ですが、.envrcにはSECRET_KEYやアクセストークンnadono悪用されてはまずいような情報も書き込む可能性もあるため、GitHubにリポジトリとしてあげる際には.gitignoreに.envrcを入れておくことをオススメします。
//.gitignore
.envrc
ほとんどの場合は環境変数の値部分を抜いた雛形となる.envrc.sampleなどのファイルを用意して、実際に適用する際は.envrcにコピーして値を書き込んで有効化することがほとんだと思います。
$ touch .envrc.sample
.envrc.sampleの内容を以下のように書き込みます。
// .envrc.sample
export POSTGRES_HOST=
export POSTGRES_USER=
export POSTGRES_PASSWORD=
.envrcを使用する際は、以下のようにコピーして値を書き込んでから有効化します。
$ cp .envrc.sample .envrc
# 以下で編集を行う
$ vim .envrc
$ cat .envrc
export POSTGRES_PASSWORD=postgres
export POSTGRES_USER=postgres
export POSTGRES_HOST=db
# 有効化
$ direnv allow .