マルチクラウド・マルチプロジェクトにおける環境変数の切り替えにはdirenv

Posted on

CLI上で業務・開発を行う人間にとって環境変数はとても重要で敏感なモノであると思う。
無邪気にSDKやツールをインストールしていたあの若かりし日が懐かしい。
自ら環境を破壊し、自らの成長を妨げていた事に当時気づけなかった事が悔やまれる。

direnvの導入とセットアップ

整頓された環境変数を用意する為にdirenvを導入したが、今のところフィットしていて不都合がない。

導入の為のインストールなどはreadmeを読んで頂いた方が良いだろう。

使用しているシェルによって、セットアップの為に追記すべき1行が異なるのでそこだけは注意かもしれない。
私はzshを愛用しているので eval "$(direnv hook zsh)"~/.zshrcに追記している。

direnvで出来ること

ディレクトリを移動した際に.envrcファイルが存在すれば、そのファイルを読み込み実行する。
その.envrcにAWSのaccess keyやsecret keyをexportするように記述しておけば良い。
とてもシンプルだし考えれば思いつきそうだが、これをシンプルに実現している所が気に入っている。

良いツールは常にシンプルだ。

direnvが行っていること

main.goを読むとわかると思う。

main関数で実行しているCommandsDispatch()がその全てと言ってよいと思う。
CommandsDispatch()自体はcommands.goファイルに記述されている。

commands.goのinit関数で生成されているCmd構造体のスライスであるCmdListの各Cmd構造体を追っていけば何をしているか理解出来ると思う。
各Cmd構造体はcmd_XXX.goというファイル名で宣言されているので各ファイルを読めば何をしているのかは明快だ。

良いツールは常にシンプルだ。

git管理する時は。gitignoreに注意

当たり前だが、direnvを使うために.envrcファイルを作成したディレクトリをgit管理する場合は.gitignore.envrcの記述が必須になる。
うっかりとGitHubに自分のkey情報を記載した.envrcを公開してしまう事は避けたい。

二重のチェックの意味でawslabs/git-secretsというツールを使う事もオススメだ。
Gitのhooksを使ってawsのaccess keyのコミットを防いでくれるものだ。
こちらも仕組みはシンプルだが強力でなくてはならないツールだ。

いつだって良いツールは常にシンプルだ。