Direnv - Linux でプロジェクト固有の環境変数を管理する
direnv は、Linux や macOS などの UNIX オペレーティング システム上のシェル用の気の利いたオープンソース拡張機能です。これは単一の静的実行可能ファイルにコンパイルされ、bash、zsh、tcsh、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
ファイルの最後に次の行を追加します。
rvm、git-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
さらに、direnv は stdlib (direnv-stdlib) も使用します。ディレクトリに新しいディレクトリを簡単に追加できるいくつかの関数が付属しています。パスを使用して、さらに多くのことを実行します。
利用可能なすべての関数のドキュメントを見つけるには、direnv-stdlib マニュアル エントリ ページを確認してください。
man direnv-stdlib
以上で終わりです!ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。