戻る

環境変数変換

開発ツール

読み込み中

ツールを読み込んでいます

ツールを準備しています。残り時間はまだわかりません。

このツールの処理はすべてブラウザー内で行われ、入力内容はサーバーへ送信されません。

このツールについて

従来の .env ↔ JSON 変換を使うか、変更前と変更後の環境変数テキストをブラウザー内で比較できます。追加・削除・変更・変更なし・曖昧を区別し、未定義、空文字列、空白のみの違いも保持します。値は初期状態で非表示です。固定プレースホルダーの .env.example を作成し、値を含む JSON は明示的に選択した場合だけ出力します。

主な用途

  • 指定した二つの .env テキストを比較し、サーバーへ接続せずに不足や名前の変更を確認します。名前変更は削除一件と追加一件として表示されます。
  • 有効で曖昧さのない変数名から、元の値とコメントを取り除いた導入用 .env.example を作成します。
  • .env の代入を JSON の文字列へ、JSON オブジェクトのプロパティを .env へ引き続き変換し、再利用前に引用符と型の変換を確認します。

使い方

  1. 1.従来の変換には .env → JSON または JSON → .env を選びます。比較モードでは変更前と変更後をそれぞれ貼り付けます。比較の空入力は変数がゼロであることを表し、変換モードでは空でない入力が必要です。
  2. 2.比較を実行し、元の行番号付き診断と五種類の件数を確認して、絞り込みやページ切り替えを使います。値を隠していても未定義・空・空白のみ・値ありを区別できます。不正な行を修正し、重複キーは解決するまで一つの確定値として扱わないでください。
  3. 3..env.example の対象を変更前・変更後・和集合から選び、名前を確認してコピーまたはダウンロードします。JSON の値は既定で非表示です。表の値の表示とレポートへの値の追加は個別に選択します。入力を編集すると結果と値の公開設定がリセットされます。

実行可能な変換と比較の例

環境変数の代入を JSON 文字列に変換する

APP_NAME=EveryTools
DEBUG=true
export API_URL="https://example.test"
{
  "APP_NAME": "EveryTools",
  "DEBUG": "true",
  "API_URL": "https://example.test"
}

.env → JSON を選びます。true を含め、三つの値はすべて文字列のままです。任意の export 接頭辞を取り除きますが、変数をブラウザーやプロセス環境へ読み込むことはありません。

型の文字列化を確認しながら JSON を変換する

{"APP_NAME":"EveryTools","EMPTY":"","FLAGS":["a","b"],"DEBUG":true}
APP_NAME=EveryTools
EMPTY=""
FLAGS="[\"a\",\"b\"]"
DEBUG=true

JSON → .env を選びます。空文字列は明示され、真偽値はテキスト、配列は引用符付き JSON 文字列になります。その後 .env → JSON に戻しても元の JSON の型は復元しません。

曖昧さのない四種類の差分を確認する

before:
APP=demo
PORT=3000
OLD=retire

after:
APP=demo
PORT=4000
NEW=added
[{"key":"APP","status":"unchanged","before":"value","after":"value"},{"key":"NEW","status":"added","before":"missing","after":"value"},{"key":"OLD","status":"removed","before":"value","after":"missing"},{"key":"PORT","status":"changed","before":"value","after":"value"}]

before と after を対応する比較欄に貼り付けます。下の出力はキー順のキー/変更状態/値状態の要約で、ダウンロードする完全なレポートではありません。PORT は変化し、APP は同じです。

未定義・空文字列・空白のみを区別する

before:
EMPTY=
SPACE=" "
GONE=

after:
EMPTY=""
SPACE=
ADDED=" "
[{"key":"ADDED","status":"added","before":"missing","after":"whitespace"},{"key":"EMPTY","status":"unchanged","before":"empty","after":"empty"},{"key":"GONE","status":"removed","before":"empty","after":"missing"},{"key":"SPACE","status":"changed","before":"whitespace","after":"empty"}]

値そのものを表示しなくても状態を確認できます。未定義・空文字列・空白のみは異なる状態です。EMPTY は引用方法が違っても同じ空文字列で、SPACE は一つのスペースから空文字列に変化します。

引用符・コメント・参照文字列を復号して比較する

before:
export HASH="a#b" # comment
LINE="a\nb"
REF=${HOME}
COMMAND="$(whoami)"
PATH='C:\temp'

after:
HASH=a#b
LINE="a\u000ab"
REF='${HOME}'
COMMAND='$(whoami)'
PATH="C:\\temp"
[{"key":"COMMAND","status":"unchanged","before":"value","after":"value"},{"key":"HASH","status":"unchanged","before":"value","after":"value"},{"key":"LINE","status":"unchanged","before":"value","after":"value"},{"key":"PATH","status":"unchanged","before":"value","after":"value"},{"key":"REF","status":"unchanged","before":"value","after":"value"}]

二つの入力は同じ値へ復号されます。単一の入力行にある JSON \n と \u000a は同じ改行文字です。変数参照やコマンドらしい文字列も文字のままで、展開・実行・ネットワーク取得はしません。

重複した代入を曖昧なまま明示する

before:
TOKEN=first
TOKEN=second
SAME=demo

after:
TOKEN=second
SAME=demo
[{"key":"SAME","status":"unchanged","before":"value","after":"value"},{"key":"TOKEN","status":"ambiguous","before":"ambiguous","after":"value"}]

TOKEN は変更前の 1、2 行目で重複するため曖昧です。最後の値だけを変更後に合わせると競合を隠してしまうため、どちらも採用しません。SAME は通常どおり比較できます。

固定プレースホルダーだけの和集合を作る

before:
__proto__=synthetic-before
constructor=synthetic-constructor
OLD=retired
# internal comment
DUP=first
DUP=second

after:
__proto__=synthetic-after
constructor=synthetic-constructor
NEW=synthetic-added
DUP=only
NEW=REPLACE_ME
OLD=REPLACE_ME
__proto__=REPLACE_ME
constructor=REPLACE_ME

.env.example の生成では和集合を選びます。二つの特別な JavaScript プロパティ名も有効な ASCII 変数名です。DUP は変更前で重複するため除外されます。元の値やコメントは含めず、すべての名前に固定の REPLACE_ME を付けます。

不正な変数名を含む比較全体を止める

before:
GOOD=ok
BAD-NAME=synthetic

after:
GOOD=ok
{"valid":false,"rows":[],"beforeIssues":[{"code":"invalidKey","line":2}],"afterIssues":[]}

変更前の 2 行目の BAD-NAME は ASCII キーの規則に合いません。診断の要約では比較行を作らず、GOOD を誤って変更なしと報告しません。まず元のテキストを直してください。JSON 差分と .env.example の出力は停止します。

よくある .env の誤りと情報漏えい

  • 引用符なしでスペース後の # を値の一部だと思うこと。その文字列が必要なら対応する引用符で囲んでください。
  • shell スクリプトや複数行の秘密を貼り付けること。比較器は明示した単一行サブセットだけを解析し、実行しません。
  • 重複キーは最後の値になると思い込むこと。同じ値に見えても曖昧さの確認が必要です。
  • 値付きレポートや値を表示した画面を共有すること。認証情報だけでなく、非表示レポートやサンプルのキー名も機密の場合があります。
  • REPLACE_ME を本番の既定値として使うこと。サンプルは確認用の名前一覧で、利用可能な設定値を含みません。

制限と注意事項

  • 比較器は明示された独自の単一行サブセットを使い、dotenv や shell の完全な互換性は保証しません。キーは大文字小文字を区別する ASCII [A-Za-z_][A-Za-z0-9_]* で、__proto__ と constructor も有効です。先頭の BOM、LF/CRLF、任意の export、代入前後の ASCII スペースとタブに対応します。 二重引用符は JSON エスケープを使います。単一引用符はエスケープされた単一引用符とバックスラッシュのみを復号し、他のバックスラッシュは文字として保持します。引用符内の空白は保持され、引用符なしでは前後の ASCII スペースとタブを除去します。値の先頭かスペース/タブ後の # はコメント開始、a#b は文字列です。閉じ引用符の後はスペース/タブとコメントだけを許可します。
  • 複数行の値、単独の CR、水平タブ以外の生の制御文字、Unicode 行区切り、不正な名前、閉じていない引用符、曖昧な引用符なし shell 構文は拒否します。引用符なしの内部引用符、バッククォート、バックスラッシュ、; | & < > には対応する引用形式が必要です。${HOME} と $(whoami) はデータのままで、変数展開・コマンド置換・評価は行いません。
  • 不正な行が一つでもあると比較全体と JSON/サンプル出力を停止し、無視した行を削除と誤判定しません。重複キーは元の行番号とともに曖昧として残し、最後の値を採用しません。和集合サンプルではどちらかで重複した名前を除外し、片側のサンプルでは選んだ側で一意である必要があります。
  • 比較入力は片側 200,000 UTF-16 コード単位、5,000 物理行まで、出力は 1 MB(1,000,000 UTF-8 バイト)までです。最後の改行は物理行を一つ増やしません。上限超過は明示的なエラーとなり、出力を切り詰めません。従来の変換も 200,000 文字と最大 5,000 行または JSON プロパティに制限し、変換独自の規則を維持します。
  • 処理はブラウザー内のみで、入力のアップロード、ネットワーク参照、永続保存はありません。値を隠す設定は表示/出力の選択であり暗号化ではありません。値付き JSON は秘密を含む可能性があり、非表示レポートや .env.example でもキー名と構造が分かります。サンプル値は必ず REPLACE_ME で、既定値を推測せず、元の値・コメント・不正な行をコピーしません。

よくある質問

未定義・空文字列・空白のみはどう違いますか?

未定義はそのキーの代入がない状態です。KEY= と KEY="" は空文字列、KEY=" " はスペース一文字を持つ空白のみの値です。引用符なしの前後の空白は除去します。復号後の文字列を比較し、真偽値・数値・大文字小文字の正規化は行いません。

同じキーが二回現れたらどうなりますか?

両方の元の行番号を表示します。同じ値の重複でも曖昧となり、変更なしや最後の値として扱いません。値を使う前に重複を解決してください。和集合の .env.example はその名前を除外します。

既定の非表示 JSON に元の値は入りますか?

既定のレポートは value プロパティと生の入力行を省略し、キー・値の状態・行番号・変更状態・件数を保持します。値を含めると明示的に選ぶと解析済みの値が加わり、秘密が漏れる可能性があります。表で値を表示しても、出力に値を含める設定は自動で有効になりません。

既存の .env と JSON は引き続き変換できますか?

はい。従来の二方向を維持します。.env → JSON は文字列値を返し重複キーを拒否します。JSON → .env は真偽値と数値を文字列化し、null を空値、配列とオブジェクトを JSON テキストにします。変換器は従来の引用符/コメント規則を維持し、比較器には上記の厳格な独自サブセットを使います。

関連ツール