ウェブサイト検索

Direnv - Linux でプロジェクト固有の環境変数を管理する


direnv は、Linux や macOS などの UNIX オペレーティング システム上のシェル用の気の利いたオープンソース拡張機能です。これは単一の静的実行可能ファイルにコンパイルされ、bashzshtcsh、fish などのシェルをサポートします。

direnv の主な目的は、~/.profile や関連するシェル起動ファイルを乱雑にすることなく、プロジェクト固有の環境変数を使用できるようにすることです。現在のディレクトリに応じて環境変数をロードおよびアンロードする新しい方法を実装します。

これは12factor アプリ (Software-as-a-Service アプリを構築するための手法) 環境変数をロードし、プロジェクトごとに分離された開発環境を作成し、展開用のシークレットをロードするために使用されます。さらに、rbenv、pyenv、phpenv と同様のマルチバージョンのインストールおよび管理ソリューションを構築するために使用できます。

では、direnv はどのように機能するのでしょうか?

シェルがコマンド プロンプトをロードする前に、direnv は現在のディレクトリ (pwd コマンドを使用して表示できます) と親ディレクトリに .envrc ファイルが存在するかどうかを確認します。チェックプロセスは迅速であり、各プロンプトに気付かれることはありません。

適切な権限を持つ .envrc ファイルを見つけると、それを bash サブシェルにロードし、エクスポートされたすべての変数をキャプチャして、現在のシェルで使用できるようにします。

Linux システムへの direnv のインストール

ほとんどの Linux ディストリビューションでは、図に示すように、システム パッケージ マネージャーを使用してデフォルトのリポジトリからdirenv パッケージをインストールできます。

sudo apt install direnv		#Debian,Ubuntu and Mint
sudo dnf install direnv		#Fedora

Red Hat Enterprise Linux (RHEL) や CentOS などの他のディストリビューション、またはスナップをサポートするディストリビューションでは、 > スナップします。これには、システムに snapd がインストールされている必要があります。

sudo snap install direnv

direnv を Bash シェルにフックする方法

direnv をインストールしたら、それを現在の Linux シェルに接続する必要があります。たとえば、Bash の場合は、~/.bashrc ファイルの最後に次の行を追加します。

rvmgit-prompt、およびプロンプトを操作するその他のシェル拡張機能の後にも表示されるようにしてください。

eval "$(direnv hook bash)"

ZSHシェルの場合

~/.zshrc ファイルの末尾に次の行を追加します。

eval "$(direnv hook zsh)" 

フィッシュシェル用

~/.config/fish/config.fish ファイルの末尾に次の行を追加します。

eval (direnv hook fish)

次に、アクティブなターミナル ウィンドウを閉じて、新しいシェルを開くか、図のようにファイルをソースします。

source ~/.bashrc
source  ~/.zshrc 
source ~/.config/fish/config.fish

Linux シェルで direnv を使用する方法

direnv がどのように機能するかを示すために、tecmint_projects という新しいディレクトリを作成し、そこに移動します。

mkdir ~/tecmint_projects
cd tecmint_projects/

次に、コマンドラインで TEST_VARIABLE という新しい変数を作成しましょう。エコーされると、値は空になります。

echo $TEST_VARIABLE

次に、direnv によってロードされる Bash コードを含む新しい .envrc ファイルを作成します。また、echo コマンドと出力リダイレクト文字 (>) を使用して、「export the TEST_VARIABLE=tecmint 」という行を追加してみます。

echo export TEST_VARIABLE=tecmint > .envrc

デフォルトでは、セキュリティ メカニズムにより .envrc ファイルの読み込みがブロックされます。これは安全なファイルであることがわかっているため、次のコマンドを実行してその内容を承認する必要があります。

direnv allow .

.envrc ファイルのコンテンツのロードが許可されたので、前に設定した TEST_VARIABLE の値を確認してみましょう。

echo $TEST_VARIABLE

tecmint_project ディレクトリを終了すると、direnv がアンロードされ、TEST_VARIABLE の値をもう一度確認すると空になっているはずです。

cd ..
echo $TEST_VARIABLE

tecmint_projects ディレクトリに移動するたびに、次のスクリーンショットに示すように、.envrc ファイルがロードされます。

cd tecmint_projects/

特定の .envrc の承認を取り消すには、deny コマンドを使用します。

direnv deny .			#in current directory
OR
direnv deny /path/to/.envrc

詳細と使用手順については、direnv のマニュアル ページを参照してください。

man direnv

さらに、direnvstdlib (direnv-stdlib) も使用します。ディレクトリに新しいディレクトリを簡単に追加できるいくつかの関数が付属しています。パスを使用して、さらに多くのことを実行します。

利用可能なすべての関数のドキュメントを見つけるには、direnv-stdlib マニュアル エントリ ページを確認してください。

man direnv-stdlib

以上で終わりです!ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。