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

.envをJSONに変換|コードがそのまま読める設定に変える

.envファイルをJSONに変換します。引用符もコメントも export も処理されるので、設定はアプリや CI がそのまま読めるオブジェクトとして手元に届きます。

高速 プライベート Cookieゼロ
インデント

.env 入力

JSON 出力

このツールの動作

.env ファイルが平らな JSON のオブジェクトになります。

# サービス
export PORT=8080
NAME="Ada Lovelace"
EMPTY=
{
  "PORT": "8080",
  "NAME": "Ada Lovelace",
  "EMPTY": ""
}

コメント行と空行は読み飛ばし、先頭の export は取り除き、値を囲む引用符も一緒に外します。二重引用符の中では \n と \t が改行とタブになり、一重引用符の中ではすべてが文字どおりのまま残ります。シェルと同じです。

同じ変数が二度あれば断る

PORT=8080
PORT=3000
Duplicate variable "PORT" on line 2: it already has a different value

シェルは最後の代入を採り、何も言いません。最初の値はただ消えていました。併合され、書き換えられ、環境から環境へ写された .env では、この沈黙は高くつきます。ファイルを読み、上のほうに PORT=8080 を見て、走っているのは 3000 番、ということになるからです。いまは変換が止まり、変数名と行番号を告げます。まったく同じ代入は何も語らないので、これまでどおり通ります。本物の欠陥で、このページを書く過程で見つけ、直しました。

すべては文字列

ID=007
ACTIVE=true
COUNT=3
{
  "ID": "007",
  "ACTIVE": "true",
  "COUNT": "3"
}

環境変数は文字です。基本ソフトが保存するのも、process.env が返すのもそれです。ここで COUNT を数として型付けするのは推量であり、ID を数にすればゼロが失われます。変換は文字を保ち、型付けは意味の分かっている場所、つまりあなたのコードに残します。

この形式が運ばないもの

  • 展開。 PATH=$HOME/bin は $HOME/bin のままです。$HOME の中身は、このページからは見えない機械に依存します。
  • 入れ子。 .env は名前と値の平らな並びで、区画も構造もありません。
  • 引用符付きの値のあとのコメント。 A="a #b" は井桁を保ちます。引用符の内側にあるからです。裸の値のあとであれば、 # はコメントを開き、そこで切られます。
  • 好きな名前。 名前は英字、数字、_、. から成り、数字では始まりません。シェル自身が課す規則です。それ以外は、どの .env も受け取れない JSON に書き込む代わりに、名指しして断ります。

プライバシー

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

よくある質問

同じ変数が二度あると、なぜ断るのですか。
二つのうち一方の値が、何も言わずに消えていたからです。シェルは最後の代入を採るので、このツールもそうしていました。しかし `.env` の3行目と40行目に `PORT` があるのは、たいてい判断ではなく併合の失敗です。いまは変換を止め、変数名と行番号を告げます。まったく同じ値の繰り返しは何も語らないので、そのまま通ります。
なぜ `PORT=8080` が JSON では文字列なのですか。
環境変数は文字だからです。基本ソフトが保持するのはそれだけです。`8080` も `true` も `007` も、入るときも出るときも文字列で、`process.env.PORT` も文字列です。型を付ける変換器はこちらで勝手に決めることになり、ついでに桁を揃えた識別子を数に変えてしまいます。
`$HOME` は展開されますか。
いいえ。`PATH=$HOME/bin` は書かれたまま `$HOME/bin` という文字列として返ります。展開はシェルの仕事で、このページからは見えない環境に依存します。推し量れば、あなたのファイルに一度も存在しなかった値が JSON に入ることになります。

関連ツール