Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新(準備中)

May 22, 2025 - 日記

dotenvxで環境変数管理をもっと快適に

環境変数管理ツール「dotenvx」を最近プロジェクトで導入したので、基本機能や使い方、他ツールとの違い、実際の活用シナリオなどをまとめてみます。普段は python-dotenvdirenv などを使ってきましたが、dotenvxはCLIの使い勝手やCI/CDとの親和性が高く、個人的にかなり気に入っています。

dotenvxとは?

dotenvx は、.envファイルを使った環境変数管理をより便利にするためのCLIツールです。従来の dotenvpython-dotenv などのライブラリと異なり、言語非依存でCLIから環境変数のロード・管理・同期ができます。

主な特徴:

  • .envファイルのロード・バリデーション・同期
  • CLIから環境変数の確認・編集・暗号化
  • 複数環境(dev, prod, testなど)への対応
  • GitHub ActionsやVercelなどCI/CDとの連携が容易
  • 言語・フレームワーク非依存

基本的な使い方

インストール

Homebrew(macOS/Linux)

brew install dotenvx/brew/dotenvx

curl(バイナリ直ダウンロード)

curl -fsSL https://dotenvx.sh | sh

公式: https://dotenvx.com/docs/install

環境変数のget/set・編集

dotenvx はCLIから直接.envファイルの値を取得・設定できます。.envファイルのあるディレクトリ内で以下のように値を設定します。

値の設定(set)

$ dotenvx set API_KEY new-value
✔ set API_KEY with encryption (.env)
✔ key added to .env.keys (DOTENV_PRIVATE_KEY)
⮕  next run [dotenvx ext gitignore --pattern .env.keys] to gitignore .env.keys
⮕  next run [DOTENV_PRIVATE_KEY='dummy-private-key' dotenvx get API_KEY] to test decryption locally

値の取得(get)

$ dotenvx get API_KEY
new-value

-f/–env-file オプションの活用

-f または --env-file オプションで、任意の.envファイルを指定して操作できます。

例: 本番用の.env.productionを編集

dotenvx set -f .env.production API_KEY prod-key

get/validate/pull/push など、ほぼ全てのサブコマンドで -f オプションが利用可能です。

.env.keysと環境変数の暗号化

.env.keys ファイルは、dotenvxの暗号化機能で使用される秘密鍵を保存するためのファイルです。環境変数を暗号化すると、復号化に必要な秘密鍵が .env.keys に保存されます。このファイルはソースコード管理にコミットすべきではなく、安全に管理する必要があります。

環境変数の暗号化

dotenvx set API_KEY "secret-value" -f .env.production

上記のコマンドを実行すると、 .env.production ファイルにAPI_KEYが暗号化された形式で保存され、復号化に必要な秘密鍵が .env.keys に生成されます。

暗号化された環境変数の使用

暗号化された環境変数を使用するには、 .env.keys ファイルが存在するか、対応する DOTENV_PRIVATE_KEY_* 環境変数が設定されている必要があります。

dotenvx run -f .env.production -- node app.js

または、秘密鍵を直接指定して実行:

DOTENV_PRIVATE_KEY_PRODUCTION="your-private-key" dotenvx run -f .env.production -- node app.js

暗号化機能を使用することで、暗号化された .env.production ファイルは安全にGitリポジトリにコミットできます。

.envファイルのロード

通常の .env ファイルがあれば、以下のようにコマンドで環境変数をロードしてコマンドを実行できます。

dotenvx run -- python main.py

Node.jsの場合:

dotenvx run -- node app.js

複数環境の切り替え

.env.development.env.production など複数のenvファイルを用意している場合、

dotenvx run -f .env.production -- python main.py

のように -f|--env-file オプションで切り替え可能です。

バリデーション・同期

dotenvxは .env.example とのバリデーションや、クラウド同期(Pro機能)もサポートしています。

dotenvx pull   # クラウドから.envを取得

他の環境変数管理ツールとの比較

ツールCLI言語依存バリデーションクラウド同期CI/CD連携
dotenvx×○(Pro)
python-dotenvPython×
direnv×××
dotenv-cli×××
  • dotenvxはCLI主体で、言語やフレームワークを問わず使えるのが最大の強み。
  • クラウド同期やバリデーション、CI/CD連携も公式でサポート。
  • python-dotenvはPython専用で、CLI用途はやや弱い。
  • direnvはシェルのhookで自動ロードできるが、バリデーションや同期は非対応。

実際の活用シナリオ・所感

  • CI/CDでの安全な環境変数管理: GitHub ActionsやVercelなどで、dotenvxのpull/push機能を使うと、.envファイルを安全に同期・管理できる。Secretsの手動管理より楽。
  • 複数プロジェクト・複数環境の切り替え: -f|--env-file オプションでdev/prod/testを簡単に切り替えられるのが便利。
  • バリデーションで事故防止: .env.example との比較で、必要な変数が漏れていないかチェックできる。
  • CLI主体のシンプルな運用: 言語やフレームワークを問わず、CLI一発で環境変数を注入できるのはやはり快適。

所感

個人的には「.env管理の決定版」と言える使い勝手。特にCI/CDやチーム開発での.env同期・バリデーションは、従来の手作業やスクリプト管理より圧倒的に楽です。Pro機能のクラウド同期も便利ですが、無料でも十分実用的。

「.env管理が面倒」「CI/CDで安全に環境変数を扱いたい」という方は、ぜひ一度dotenvxを試してみてください。