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

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

direnv

direnv は、特定のディレクトリに移動したときのみ環境変数を有効化するツールです。アプリごとに環境変数を変更したいときに便利なアイテムです。ちなみに、言語は Go で開発されているようです。

私は、Middleman で静的 Web サイトを S3 にデプロイするとき (ちなみに middleman-s3_sync という 便利 Gem) の AWS のアクセスキーとシークレットキーを設定するときに使いました。類似ツールに Dotenv がありますが、こちらは環境変数を有効化するために Dotenv.load を実行する必要があります。direnv はディレクトリに移動してきたタイミングで自動で有効化してくれて楽だったのでこっちを採用しました。どちらが良いかは開発環境に依るかなぁと思います。

direnv を使おう

早速使ってみましょう。Mac の場合は Homebrew でインストールするのがオススメです。

$ brew install direnv

インストールが終わったら ~/.zshrc ファイルを開き、次のコマンドを追加して保存します(Bash の場合は zsh 部分が bash になります)。保存後は source ~/.zshrc で再読み込みを忘れずに。

eval "$(direnv hook zsh)"

以上で direnv が利用できるようになりました。設定したいディレクトリ下で次のコマンドを実行しましょう。

$ direnv edit .

カレントディレクトリに .envrc というファイルが作成されます。このファイル内に定義したい環境変数を記述していきます。

export AWS_ACCESS_KEY_ID="AWSのアクセスキー"
export AWS_SECRET_ACCESS_KEY="AWSのシークレットアクセスキー"

保存すると記述した内容が実行されます。echo してみると、設定した環境変数がちゃんと設定されていることが確認できます。

direnv: loading .envrc                                                          
direnv: export +AWS_ACCESS_KEY_ID +AWS_SECRET_ACCESS_KEY

$ echo $AWS_ACCESS_KEY_ID
AWSのアクセスキー

また、direnv を設定したディレクトリから離れると自動でアンロードしてくれます。便利ですね!

$ cd ../
direnv: unloading

まとめ

AWS のアクセスキーとシークレットアクセスキーを例として紹介しましたが、それに限らず開発の現場ではいろいろ必要な場面が出てくると思います。ぜひ使ってみてください!

あ、そして .envrc を Git の Index に追加しないように注意してくださいねw

参考