新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Linuxでディレクトリ毎に環境変数を自動で変える方法

Docker Composeのプロジェクト名は、docker-compose.yamlファイルが置かれているディレクトリの名前になります。

しかし、ディレクトリを別の名前にしたいことは多く、そんな時はdocker-composeコマンドを実行する度に-p <project_name>オプションでプロジェクト名を指定するか、環境変数COMPOSE_PROJECT_NAMEにプロジェクト名を設定します。

docker-composeは、手打ちで入力することが多いコマンドなので、コマンド実行毎にプロジェクト名を指定するのは手間なので、環境変数にセットするようにしています。

ただ、プロジェクトを切り替える度に環境変数を設定しなおすのは面倒ですし、実際、設定しなおすのをちょいちょい忘れてしまいます。

そんな時は、ディレクトリ毎に環境変数を自動で変えてくれるツール「direnv」を使うと、超便利です!

direnv.net

使い方

設定したいディレクトリに、.envrcというファイル名で、下記のような環境変数の設定を記載して置きます。

export COMPOSE_PROJECT_NAME="test-project"

すると、そのディレクトリ配下に移動した時に、ファイルに書かれた環境変数が自動でセットされます!

しかも、そのディレクトリ配下から外に移動すると、設定された環境変数は自動で削除されます!

インストール方法

下記コマンドを実行してインストール

curl -sfL https://direnv.net/install.sh | bash

後は、.bashrcなどに、下記コマンドを記載して、シェル実行時にコマンドが呼び出されるようにしておきます。

eval "$(direnv hook bash)"

これだけです。

おまけ

Node.jsのバージョン管理ツールnvmと連携して、Node.jsのバージョンの自動切り替えもできます。

感想など

環境変数って、一度設定したらあまり変えないイメージがあったのですが、docker-composeのように、環境変数で設定を変えるケースはちょいちょい見かけます。

今まで、環境変数を変えるスクリプトを置いて、毎回実行していたのですが正直面倒でした。

そんな時、Google Cloud PlatformのCLIのドキュメントで「direnv」が使われているのを見ました。

使ってみたら超便利!Linuxに標準で入れて欲しいくらいです。