100% ローカル — データがブラウザの外に出ることはありません

JSONを.envに変換|DockerやCIにそのまま渡せる

平たいJSONオブジェクトを .env ファイルに変換します。変数名は検査され、シェルが必要とする場所には引用符が付き、Docker や CI にそのまま渡せます。

高速 プライベート Cookieゼロ

JSON 入力

.env 出力

このツールの動作

平たい JSON オブジェクトが、一行に一つの代入を持つ .env ファイルになります。

{ "PORT": 3000, "NAME": "my app", "DEBUG": true }
PORT=3000
NAME="my app"
DEBUG=true

値は文字のまま残ります。数値も真偽値も、同じ文字からなる文字列も、同じように出ます。.env ファイルは文字しか持てないからです。

読み手が拒む名前は、今は変換を止める

変数名は何かを書き出す前に検査されます。英字、数字、_、. のみ、先頭に数字は来ません。my key や 2fa は拒まれ、問題の鍵が示されます。

これは率直に述べるに値します。この道具が抱えていた欠陥だからです。以前はどんな鍵も受け取ってそのまま書いたので、{"my key": "1"} は次を出していました。

my key=1

この行は、同じ場所にある .env の読み手が拒む行であり、シェルも代入とは見なさない行です。自分の逆変換に拒まれる出力を出す変換器は、欠陥のある変換器です。この文章を書く過程で見つけ、直しました。

引用符は必要なところにだけ

裸のままだと値の終わりが変わってしまうとき、値は引用符で囲まれます。空白、注釈を始めてしまう #、引用符、逆斜線を含むときです。

{ "GREETING": "hello world", "NOTE": "a # b" }
GREETING="hello world"
NOTE="a # b"

引用符の中では、本物の改行は \n と書かれます。変数は一行のものであり、値の途中の改行はそこで代入を終わらせてしまうからです。

.env ファイルが持てないもの

入れ子はそこに居場所がありません。{"db": {"host": "x"}} は db を示して拒まれます。DB_HOST や db.host へ作り変えたりはしません。そのどちらをあなたの応用が待っているかは、JSON のどこにも書かれていないからです。

そして null は空の値 KEY= になり、空文字列として読み戻されます。その区別はこの形式にそもそも無いものです。頼りにする前に知っておいてください。

プライバシー

すべての処理はブラウザ内のJavaScriptだけで完結します。データがアップロードされることはないため、機密情報でも安心して利用でき、オフラインでも動作します。

よくある質問

なぜ鍵が拒まれたのですか。
`.env` ファイルが持てる名前ではないからです。英字、数字、`_`、`.` のみで、数字で始まってはいけません。`my key` や `2fa` のようなそれ以外は、メッセージにその鍵を示して拒みます。理由は単純です。`my key=1` は代入ではなく、どのシェルも dotenv の読み手もそう扱いません。
値はいつ引用符で囲まれますか。
囲まないと読み誤られるときだけです。値の中に空白、`#`、引用符、逆斜線があるときです。`PORT=3000` は裸のまま、`NAME="my app"` は空白が値を早く終わらせるので囲まれます。改行は引用符の中で `\n` と書かれ、変数は一行に収まります。
小文字の名前でも動きますか。
動きます。大文字は流儀であって規則ではなく、この道具はそれを押しつけるために鍵を書き換えません。`port` を `PORT` に改名すれば、読む側のコードと合わない文字列を渡すことになります。名前は妥当かどうかで受け取るか拒むかが決まり、大文字小文字では決まりません。

関連ツール