JSON を Env に変換
JSON オブジェクトを .env の KEY=VALUE 形式に変換。ネストオブジェクトのフラット化とコメント復元に対応、処理はブラウザ内で完結。
JSON オブジェクトを貼り付けると、dotenv などのローダーが起動時に読み込む .env の変数行に変換します。ネストしたオブジェクトは db.host のようなドット付きの変数名にまとめられ、配列は 1 行の JSON テキストとして、true・false・数値はそのままのテキストとして書き出されます。Env to JSON が出力した $comments マップは、各変数の上の # 行として元に戻ります。処理はすべてブラウザ内で行われるため、JSON に含まれるシークレットが端末の外に出ることはありません。
JSON to Env 変換ツールについて
環境変数に入れられるのはフラットな文字列だけなので、JSON から .env を作る作業は、要するに「変数名をどう付けるか」の問題です。フラット化を有効にすると、ネストしたパスの各階層が区切り文字でつながり、{ "app": { "cache": { "ttl": 60 } } } は app.cache.ttl=60 になります。キーの大文字・小文字は JSON に書いたとおりに保たれ、自動で大文字化されることはありません。ただし、ドットを含む名前はシェルでは変数として扱えません。シェルスクリプトからこのファイルを source する予定なら、区切り文字をアンダースコアにして app_cache_ttl の形にしてください。フラット化を無効にした場合、ネストしたオブジェクトは展開されず、1 行の JSON テキストとして等号の後ろにそのまま書き込まれます。
こちらも必要かもしれません
JSON を .env に変換する方法
- 1
JSON オブジェクトを入力する
入力欄に渡せるのはオブジェクトだけで、配列や単独の値は受け付けません。フラスコアイコンを押すと、API キーとポート番号だけを持つ小さなフラットなサンプルが読み込まれます。
- 2
変数名の組み立て方を決める
詳細オプションで、db.host のような dotenv 流の名前ならドットのまま、シェルでも使える db_host にしたいならアンダースコアを選びます。ネストを JSON テキストのまま残したい場合はフラット化をオフにします。
- 3
NAME=value 行を生成する
「変換」を押すと、末端の値が 1 つずつ NAME=value 行になり、JSON のキーの並び順がそのまま保たれます。$comments のエントリは、説明対象の変数のすぐ上に # 行として入ります。改行や前後の空白、# を含む値は引用符で囲んで書き出し(改行は \n と表記)、JSON に戻したときにも元の値のまま読み取れるようにします。
- 4
.env として保存する
テキストをコピーするか .env ファイルとしてダウンロードします。認証情報が入っているならバージョン管理には含めないでください。方向切り替えアイコンを押せば JSON に戻して確認できます。
参考資料
- The Twelve-Factor App — Config
設定を環境変数として保存する方法論。この変換ツールの出力フォーマットもこれに従っている。
- dotenv (motdotla) — README
.env ファイル構文のリファレンス実装で、KEY=VALUE のペアやコメントの慣習的な書き方を示している。
- RFC 8259 — The JSON Data Interchange Format
このツールが解析する JSON 入力フォーマットの元になっている IETF 仕様。
関連する開発者ツール
JSON to Env よくある質問
- 変数名は大文字に変換されますか?
- いいえ。キーは JSON の大文字・小文字をそのまま引き継ぐので、{ "db": { "host": "x" } } は db.host=x になります。Linux や macOS では環境変数名が大文字・小文字を区別するため、アプリケーションが参照する表記どおりに JSON のキーを書いておくのが確実です。
- 生成した .env をシェルスクリプトで source できますか?
- すべての名前がシェルの識別子として有効な場合に限ります。使えるのは英字・数字・アンダースコアのみで、先頭に数字は置けません。db.host のようなドット付きの名前は Node.js の dotenv では問題なく読み込めますが、シェルは代入文として解釈しません。source するファイルではアンダースコア区切りを選んでください。
- 配列は複数の変数に分割されますか?
- されません。フラット化が有効なときもネストしたオブジェクトだけがドット付きの変数に分かれ、配列は tags=["a","b"] のように 1 行の JSON テキストとして出力されます。フラット化を無効にすると、ネストしたオブジェクトも同様に JSON テキストのまま残ります。
- 出力される変数の順番は入れ替わりますか?
- 入れ替わりません。末端の値は JSON 内での元の並び順どおりに 1 行ずつ NAME=value として書き出されるので、生成された .env と元の JSON を突き合わせて確認しやすくなっています。
- true や 8080 といった値の型は .env でどうなりますか?
- .env ファイルには型がないため、true・false・数値はいずれもプレーンテキストとして書かれます。Env to JSON で型の推論を有効にして読み直せば、本物の真偽値や数値として復元されます。
- 元の # コメントは書き戻せますか?
- 書き戻せます。Env to JSON の出力のように JSON に $comments オブジェクトがあれば、各エントリが対応する変数の上に # 行として入ります。NAME=value 行だけが欲しい場合は、詳細オプションの「コメント」を「無視する」に切り替えてください。
- API キー入りの JSON を貼り付けても送信されませんか?
- 送信されません。変換はブラウザ内でローカルに実行されます。.env には API キーやデータベースのパスワードが入っていることが多いので、ここは重要なポイントです。
- 変数名が不正というエラーが出るのはなぜですか?
- 空の名前や、空白・=・:・#・引用符・バックスラッシュを含む名前は .env ファイルから正しく読み戻せません。そのため壊れた行を書き出す代わりに変換を止め、該当するキーを表示します。JSON 側でキー名を変えるか、区切り文字が原因ならほかの区切り文字を選んでください。