Vagrant + Digitalocean + Ansible でのサーバ構築も結構慣れてきたので、Vagrantfile や Ansible playbook を Github にプッシュしておこうと思ったのですが、Vagrantfile に digitalocean のAPIキーなど、公開してはいけない情報があったので direnv を使って隠すようにしました。
direnvは、ディレクトリに環境変数をセットして、そのディレクトリがカレントになった時だけ環境変数が有効になるというもので、使い方によってはかなり便利に使えるものだと思います。
direnvのインストールですが、OS Xの場合はHomebrewでインストール出来ます
$ brew install direnv
インストール後、zshrcに下記記述をして source ~/.zshrc します(他シェルの場合はドキュメントを確認下さい)
eval "$(direnv hook zsh)"
そして、direnv edit . とコマンドを打ち、立ち上がったエディターで
export SECRET_KEY=secretkeyのように記述し、保存します。保存すると、カレントディレクトリに .envrc というファイルが出来ます。
作成した環境変数をシェルで確認してみます。
$ echo $SECRET_KEY
今度はPythonで確認してみます。
>>> import os >>> os.environ.get("SECRET_KEY")
肝心のVagrantfileへの記述する場合ですが、VagrantfileはRuby記法で書かれている為、Rubyで環境変数を取得するようにします。
ENV["SECRET_KEY"]と書けばいいみたいです。
追記: .envrc は .gitignoreへ記述して公開リポジトリへアップしないようにしましょう!
追記その2:zshrc への記述を
if [ -x "$(which direnv)" ]; then eval "$(direnv hook zsh)" fiのようにするとdirenv有無にかかわらずzshrcを使い回せます。