dotenv から dotenvx へ - 次世代の Config 管理ツール
(dotenvx.com)- 2013年7月の dotenv の最初のコミット以降、11年間で世界的に最も広く依存されるパッケージの1つへと成長
- TypeScript や ESLint のような必須ソフトウェアに近い位置づけに到達
dotenv の問題点
- .env ファイル漏えいのリスク
- マルチ環境の管理が難しい
- プラットフォーム間の一貫性が不足
問題の解決策: dotenvx
- すべてのプラットフォームで同じように動作
- マルチ環境をサポート
- 環境変数ファイルの暗号化
どこでも実行可能
- すべての言語、フレームワーク、プラットフォームで同じように動作
dotenvx run -- your-cmdで実行時に環境変数を注入可能- .env パースエンジン、変数展開、コマンド置換などが同じように動作
- npm、brew、curl、docker、windows などさまざまな方法でインストール可能
$ echo "HELLO=World" > .env $ echo "console.log('Hello ' + process.env.HELLO)" > index.js $ node index.js # dotenvx なし Hello undefined $ dotenvx run -- node index.js # dotenvx 使用 Hello World
複数環境のサポート
.env.productionファイルを作成し、-fオプションで読み込み- 複数の
-fフラグを使ってマルチ環境を構成可能$ echo "HELLO=production" > .env.production $ dotenvx run -f .env.production -- node index.js [dotenvx][info] loading env (1) from .env.production Hello production
暗号化
dotenvx encryptコマンドで .env ファイルに暗号化を追加- 公開鍵暗号方式を使用
- .env ファイルが漏えいしても
DOTENV_PRIVATE_KEYなしでは復号不可能 - オープンソースプロジェクトで、以前の秘密情報を復号せずに新しい設定を追加可能
$ dotenvx encrypt ✔ encrypted (.env)
1.0.0 バージョンをリリース
- dotenvx 1.0.0 のリリースを発表
- 次世代の設定管理ツールとして多くの開発者に活用されそう
GN⁺の見解
dotenvxはセキュリティと利便性を同時に提供- 複数環境を簡単に管理でき、開発者にとって有用
- 暗号化機能はセキュリティに敏感なプロジェクトで特に有用
dotenvxの機能はさまざまな言語とプラットフォームで一貫性を提供し、開発効率を高める
2件のコメント
プログラム内で製品モードと開発モードを分けなくても、実行スクリプトでそのまま宣言できるんですね。
Hacker Newsのコメント
秘密情報を環境変数で渡さないほうがよい。環境変数は簡単に漏えいする可能性がある。代わりに、プロセス内部で vault やファイルシステムから秘密情報を読み込むのがよい。
.envファイルが使われる理由は、シンプルで明快だから。より安全で強力な設定方式を使うなら、ドキュメントを読む必要がある。作業で Mise を使い始めた。まだそれほど使い込んではいないが、有望に見える。ローカルのテスト DB 初期化、lint スクリプトの実行などのタスクを処理し、環境変数や仮想環境も管理する。
秘密情報の漏えいは大きな問題なので、dotenvx を使う際に秘密情報を暗号化するのは賢明だ。暗号化されていない秘密情報をサポートしないツールのほうが安全である。
Sops に似ているが、デフォルトで暗号化機能がない。Sops は AWS や既存のキー管理ソリューションと簡単に統合でき、5年間で2つの職場で使った経験からすると非常によかった。
秘密情報を暗号化してコミットできるのは便利だが、暗号鍵にアクセスできればすべての秘密情報が露出しうる。クラウド環境のシークレットマネージャーに設定して、以後は触らないほうが安全だ。
環境変数は共有されすぎており、ファイルはローカル権限に依存する。プロセス間で秘密情報を転送する新しい方法が必要だ。たとえば、Unix ソケットを通じて一度だけ読み取れる形で秘密情報を渡す方法など。
.envファイルを vault に正しく入れる方法についてのドキュメントが必要だ。vault がパスワード保護されているなら、アプリケーションが vault のパスワードを読めるように平文で書かなければならないという問題がある。すべての環境変数を単一ファイルで TOML 形式として管理したい。そうすれば更新、比較、共有がしやすくなる。ただし、環境名の一貫性を保つのが難しい。これはしばしば場当たり的な判断や必要性から生じるが、修正するのが怖い。