この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
ディレクトリごとに環境変数を設定、管理できるdirenv はそれだけでも非常に便利ですが、今回はチェックアウトしているGitブランチごとに環境変数の値を変更できないか試してみたのでその方法を紹介します。
必要なもの
- direnv
- Git
方針
方針は以下の通りです。
- direnvを使ってチェックアウトしているブランチ名に応じて環境変数の値を変更する
- git post-checkout hookでdirenv allowして環境変数を更新する
実際のスクリプトは以下のようになります。
.envrc
# ブランチ名にspecial_branch が含まれる場合はsecretの値を変更する
if git branch --show-current | grep 'special_branch' > /dev/null; then
export my='mop-cc-app-api-dev'
else
export pz_client_id='mop-api-itg-test'
fi
.git/hooks/post-checkout
#!/usr/bin/env bash
direnv allow .
使用例
以下の例ではmainからspecial_branchに切り替えることで変数 my_secret
の値が変わっていることがわかります。
## mainブランチの場合
$ git checkout main
Already on 'main'
direnv: loading ~/tmp/direnv_on_git/.envrc
direnv: export +my_secret
$ env | grep my_secret
my_secret=usual_secret
## special_branchに切り替え
$ git checkout -b special_branch
Switched to a new branch 'special_branch'
direnv: loading ~/tmp/direnv_on_git/.envrc
direnv: export +my_secret
$ env | grep my_secret
my_secret=another_secret
まとめ
Git hookとdirenvを使ってブランチごとに環境変数の値を変更できました。