1人前のエンジニアを目指して

プログラミングをやっていく上で得た知見を共有していきます。

direnvを使うときは環境変数を.envrcに書くより.envに書いた方が使い勝手が良い

はじめに

こんにちは、@plus_kyotoです。
自分はローカル開発時に、環境変数を設定するためにdirenvを使っています。 その際に、環境変数.envrcに書くより、.envに書いた方が諸々の使い勝手が良いと感じたので紹介します。

tl;dr

  • .envは汎用性が高いので様々な用途で使い回せる。
  • .envrcdotenvと記述するだけで、自動的に.envファイルを読み込んでくれるので楽。

そもそもdirenvとは

direnvはディレクトリごとに環境変数を設定することができるツールです。
.zshrcなどにeval "$(direnv hook zsh)"と書くことで、カレントディレクトリに存在する.envrcに書かれたスクリプトを実行してくれます。

github.com

例えば、次のように.envrcを記述することで、HOGEという環境変数を設定することができます。

export HOGE=hogehoge

これがdirenvのREADMEに書かれている使い方です。

direnvで.envを読み込む

さて、環境変数をファイルで管理する際に、次のような書式で書かれた.envファイルが使われることがあります。

HOGE=hogehoge
FUGA=fugafuga

.envrcと違ってexportは書かず、単にKEY=VALUEという形になっています。

direnvでは.envrcを以下のように記述することで、.envファイルを読み込むことができるようになります。

dotenv

.envに書くことで何が嬉しいのか

.envは汎用性が高いフォーマットであり、様々な場面で流用することができます。

1つ目の例として、docker-composeが挙げられます。
docker-composeは以下のように書くことで、コンテナ内に環境変数を流し込むことができます。 その際のフォーマットが.envと一致しています。

version: "3"
services:
  hoge:
    image: python
    restart: always
    env_file: .env

これにより、「ずっとコンテナ内で開発してたけど、ローカルで試したいな」と思った時に、(少なくとも環境変数は)楽に移行できます。

2つ目は、エディターのエクステンションと相性が良い点です。
私はJetBrains製のIDEを愛している人間なのですが、IDEコンパイル・実行するときにdirenvのフックを発火してくれません。
そのため、環境変数は別の手段で読み込む必要があります。

幸いにもJetBrains Pluginsには、.envファイルを読み込んでくれるプラグインがあるため、正しく環境変数を読み込むことができます。

plugins.jetbrains.com

plugins.jetbrains.com

このように.env環境変数の設定をまとめることで、いい感じに色々な場面で使い回すことができます。
同じ環境変数を複数箇所で書いていた方は一度試してみてはどうでしょうか?