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


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

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

これは、12factorアプリ(サービスとしてのソフトウェアアプリを構築するための方法論)環境変数をロードし、プロジェクトごとに分離された開発環境を作成し、展開用のシークレットをロードするために使用されます。さらに、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などの他のディストリビューション、またはスナップをサポートするディストリビューションでは、スナップとしてインストールできます。これには、システムにスナップインストールされている必要があります。

$ sudo snap install direnv

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

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

プロンプトを操作するrvm、git-prompt、およびその他のシェル拡張の後でさえも表示されることを確認してください。

eval "$(direnv hook bash)"

〜/ .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 u003d 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ページを参照してください。

$ man direnv

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

使用可能なすべての関数のドキュメントを見つけるには、direnv-stdlibの手動入力ページを確認してください。

$ man direnv-stdlib

それが私たちがあなたのために持っていたすべてです!ご質問やご意見がございましたら、以下のフィードバックフォームをご利用ください。