【ディレンブ】

direnv とは?

最終更新:
💡 フォルダに合わせて、環境変数を着替える

現在のディレクトリに応じて、シェルの環境変数を読み込み・解除するツール。シェルへの連携設定と、.envrcの内容を確認したうえでの実行許可が必要。

📌 このページのポイント
direnv:フォルダに合わせて着替えるproject-a/.envrcを確認allowで実行許可シェルhookを設定連携の準備フォルダへ入る環境変数を反映フォルダを出る変更を解除準備したシェルで移動する許可は「内容を信頼して実行する」判断秘密の漏えいや、子プロセスの値は消せない
現在のシェルの環境変数を切り替える例。.envrcや読み込み先の内容を確認して許可します。
ひよこ ひよこ
.envrcを置くだけで、自動で切り替わる?
ペンギン先生 ペンギン先生
まずdirenvを入れ、使うシェルにhookを設定するよ。そのうえで、内容を信頼できる.envrcにdirenv allowで許可を出す。移動に応じて、プロンプトなどのタイミングで環境変数を反映する仕組みなんだ。ファイルを置くだけでは準備が足りないよ。
ひよこ ひよこ
フォルダから出ると、どうなるの?
ペンギン先生 ペンギン先生
その.envrcで加えた環境変数の変更を解除するよ。ただし、実行済みのプログラムや子プロセスが受け取った値まで回収するわけではない。切り替えに便利なツールであって、秘密情報が絶対に漏れない隔離の仕組みではないんだ。
ひよこ ひよこ
.envとは何が違うの?
ペンギン先生 ペンギン先生
.envrcはbashで実行するスクリプトだよ。exportで変数を設定したり、PATH_addで検索パスを追加したりできる。dotenvを使えば.envの値も取り込める。現在のシェルには、主に環境変数の差分が戻され、関数やエイリアスをそのまま定義するものではないよ。
ひよこ ひよこ
誰かの.envrcに、allowして大丈夫?
ペンギン先生 ペンギン先生
実行する内容を先に読むことが大切だよ。新しいファイルや変更された.envrcは、許可するまで読み込みを止める。ただしsource_envなどで別のスクリプトを読む場合、そちらは同じ許可確認の対象にならない。読み込み先も含めて、信頼できるか確認しよう。
ひよこ ひよこ
チームで使うときは?
ペンギン先生 ペンギン先生
共有する.envrcに秘密の値を直接書かず、必要に応じてdotenvなどでローカルの設定を読む方法があるよ。秘密を含むファイルはGit管理から外す。なお.gitignoreは暗号化ではなく、すでにコミットした秘密を消す機能でもない。端末やファイルの権限も含めて管理するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「direnv」って出てきたら「フォルダに合わせて、シェルの環境変数を切り替えるツール」と思えばだいたいOK!
📖 おまけ:英語の意味
「direnv」 = ディレクトリに応じた環境変数の管理
💬 ディレクトリと環境を結び付けて覚えると分かりやすい名前。プロジェクトごとに、使う設定を切り替えるんだ。

参考資料

← 用語集にもどる