開発 へ戻る
.env ファイル パーサ — key/value 一覧 + 型推定 + ${VAR} 展開プレビュー

.env ファイル パーサ — key/value 一覧 + 型推定 + ${VAR} 展開プレビュー

`.env` ファイル (dotenv / Node.js / Vite / Docker / Cloudflare Workers などで使われる環境変数定義) を貼り付けると、key/value を **テーブル** として整形表示。各値の **型推定** (string / number / boolean / url / json / empty)、**コメント** (#)、**`export` プレフィックス**、**シングル/ダブルクォート/トリプルクォート multiline**、**${VAR} の展開プレビュー** (前方参照済みキー)、**エラー行** の検出を一括で行います。結果は **JSON** / **YAML** 形式でエクスポート可能。シェルへの貼り付け前の sanity check、CI/CD の環境変数監査、複数 .env ファイルの突き合わせなどで重宝。

使い方

`.env` ファイルの内容を貼り付けると、(1) **KEY=VALUE ペア** を抽出して表形式に表示、(2) 値の **型推定** (string / number / boolean / url / json / empty)、(3) **コメント行** (`# ...`) / **`export` プレフィックス** / **シングル/ダブルクォート** / **トリプルクォート multiline** を識別、(4) **`${VAR}` 展開プレビュー** (前方参照済みキーから値を埋める) を表示、(5) 解析できない行は **エラーとして** マークします。**JSON / YAML 形式で結果をエクスポート** 可能。シェルへの貼り付け前の sanity check、CI/CD 環境変数監査 (GitHub Actions / GitLab CI / Cloudflare Pages の secret 管理)、複数 .env ファイルの突き合わせ、Docker Compose / k8s manifest への移行などで重宝。

詳細解説

.env ファイルが内包する秘密の密度

.env ファイルは、プロジェクトの「実行に必要なすべての秘密」を 1 ファイルに集める設計です。DATABASE_URL にはホスト名・ユーザー名・パスワード・DB 名がすべて入り、AWS_SECRET_ACCESS_KEY は AWS リソース全体へのアクセスキーになりえます。STRIPE_SECRET_KEY は決済処理の権限、SLACK_BOT_TOKEN はワークスペース全体の読み書き権限、OPENAI_API_KEY は API 利用料金を請求するための鍵です。これらが 1 ファイルに揃っているということは、.env を外部サーバーに送信した瞬間に、プロジェクト全体のインフラへのアクセス権が漏洩する可能性があります。

実際、GitHub にうっかりコミットした .env ファイルは数秒でスキャナーに発見されるという報告が多数あります。オンライン系の「.env パーサー」や「dotenv ビジュアライザー」に貼り付けることは、それと同等のリスクを持つ操作です。

CI/CD 環境変数の監査をオンラインツールで行う危険性

GitHub Actions secrets、GitLab CI 変数、Cloudflare Pages の環境変数は、UI からは値が見えない仕様になっています。これをデバッグや監査のためにローカルにコピーして別のツールに貼る場合、そのツールがサーバーと通信していれば、「UI から見えないはずの値」が外部に出てしまいます。

「どの変数が設定されているか確認したいだけ」「型推定が欲しいだけ」という目的であっても、その操作のために秘密鍵を含む文字列をコピーして外部に渡す構造になっています。オンライン系のパーサーはこうした使い方をほぼ想定した設計ですが、ログを残さないという保証はサービスごとに異なり、第三者監査もありません。

ブラウザ内 JavaScript パーサーで完結する仕組み

このツールの解析エンジンは純粋な JavaScript で書かれたカスタムパーサーです。入力された .env テキストを行単位でトークナイズし、クォートのネスト・エスケープシーケンス (\\n \\t \\r) の解釈、export プレフィックスの除去、インラインコメントの分離、$\{VAR} 前方参照の展開を行います。処理はすべてブラウザのメモリ内で完結し、外部ライブラリへの通信も外部 API の呼び出しも存在しません。

URL state には .env の値ではなく展開トグルなどの設定のみを載せているため、ブラウザのアドレスバーにも秘密鍵は露出しません。DevTools の Network タブを開いてパースを実行すると、リクエストがゼロであることをリアルタイムで確認できます。

共有前のチェックリストとして .env パーサーを使う

.env.example を作成してチームに共有する前、あるいは Docker Compose の environment: セクションや k8s の ConfigMap に移植する前に、本ツールで変数の型推定と構文チェックを行うことをおすすめします。実際の秘密値は含まないサンプルであっても、構文エラーがあるとアプリの起動に失敗します。特に $\{VAR} 参照の前方参照ミスや、トリプルクォートの未閉じは、ランタイムエラーになって初めて気づくケースが多いです。

dotenv 系ランタイムの構文差を吸収するパーサ実装

.env には統一仕様が存在せず、Node.js の dotenv、Vite、Docker Compose、Cloudflare Workers、Python python-dotenv、Ruby dotenv などが、それぞれ少しずつ異なる構文を解釈します。たとえば値の # をコメント開始と扱うか文字列リテラルとして扱うかは実装で割れていて、dotenv v16 以降はクォートで囲まれた値の中の # を文字としてそのまま保持しますが、古い実装ではコメント区切りになります。本ツールはクォート文脈を追跡してこの差を吸収する方針を採用しています。

${VAR} の参照展開も実装差が大きい部分です。Docker Compose は ${VAR:-default} ${VAR:?error} のような Shell 由来の修飾子をサポートしますが、python-dotenv の標準モードでは展開自体を行いません。本ツールは前方参照のみの単純展開を「プレビュー」として表示する設計で、実ランタイムでの挙動を完全には再現しないことを明示しています。値の改行を \n エスケープで表現するか、トリプルクォートで物理改行を許すかの選択も実装によって異なります。

CI/CD と Cloudflare Secrets で踏みやすい型と引用符の罠

PORT=3000 のように見える値も、ほとんどの dotenv ランタイムは文字列として読み込みます。parseInt(process.env.PORT) を忘れたままアプリに渡すと「数値演算で '3000' + 1'30001' になる」JavaScript 特有のバグを踏みます。本ツールの「型推定」列は推測値であって、ランタイム側で自動的にキャストされる保証ではありません。

クォートの扱いも事故が多い領域です。SECRET="abc def"dotenvabc def と読みますが、シェルで source .env した場合は外側のダブルクォートも含めて環境変数の値になるケースがあります。Cloudflare Workers の wrangler secret put のように UI 経由で登録するシークレットでは、改行を含む値が壊れたまま登録される事故も報告されています。本ツールでトリプルクォートの multiline を可視化し、改行が意図通りに保持されているかを事前確認できます。出力した JSON / YAML を更に整形して PR に貼りたいときは json-formatyaml-json-convert を続けて掛けられ、いずれも同じローカル処理として .env.example のレビューワークフローに組み込めます。

よくある質問

入力データはサーバーに送信されますか?
いいえ。すべてブラウザ内で完結します。ローカルなパーサのみで、外部 API への通信はありません。**API キーや DB パスワード** などのセンシティブな値を含む .env を扱うので、ブラウザ完結は重要。
サポートする .env 構文は?
**dotenv (Node.js) / Vite / Docker Compose** などの de facto 標準準拠: (1) `KEY=value` のシンプルなペア。(2) `# コメント` の行。(3) `KEY="value with spaces"` ダブルクォート (エスケープ `\n` `\t` `\r` `\\` `\"` 解釈)。(4) `KEY='literal'` シングルクォート (展開なし)。(5) `KEY="""multi\nline\nvalue"""` トリプルクォート (改行をそのまま保持)。(6) `export KEY=value` の bash プレフィックス。(7) `KEY=value # inline comment` のインラインコメント (値の後に空白+#)。
`${VAR}` 展開はどう動きますか?
**前方参照** で展開: ファイル内ですでに定義された KEY を `${HOST}` や `$HOST` で参照可能。例: `HOST=api.nosend-tools.com` の次の行で `URL=https://${HOST}/v1` と書くと URL は `https://api.nosend-tools.com/v1` に展開されます。**シングルクォート内は展開されません** (`'literal $VAR'`)。展開トグル OFF にすると元のテキストのまま表示します。
型推定 (type guess) の判定基準は?
**`number`**: `^-?\d+(?:\.\d+)?$` にマッチ (例: `42`, `-3.14`)。**`boolean`**: `true` / `false` (大文字小文字無視)。**`url`**: `https?://...` プロトコル付き。**`json`**: `{` または `[` で始まり JSON.parse 成功。**`empty`**: 空文字列。**それ以外**: `string`。dotenv は **すべての値が文字列** ですが、利用側が `Number(process.env.PORT)` のような変換をするので、型推定があれば「ここは数値として使うつもり」が一目で分かります。
クォートの違い (single / double / triple) は?
**シングルクォート `'...'`**: **エスケープ・展開なし**、リテラル文字列。Bash 風に「絶対にそのまま」。**ダブルクォート `"..."`**: **エスケープ `\n` `\t` `\r` 解釈** + **`${VAR}` 展開**。シェルスクリプトと同じ動作。**トリプルクォート `"""..."""`**: 複数行を改行ごと保持。PEM 鍵や JSON 設定などの長い値に。
エラー行が出るケースは?
(1) **`KEY` の文字種が違反** (英字 + 数字 + `_` 以外、または数字始まり)、(2) **`=` がない** (例: `JUST_TEXT` だけの行)、(3) **未閉じのクォート** (`KEY="unterminated...`)、(4) **トリプルクォート未閉鎖** (ファイル末尾まで閉じない `"""`)。エラー行は表で **赤マーク** で示されます。コメント行や空行はエラーではなく **正常 (情報)** として扱われます。
JSON / YAML エクスポートはどう使う?
**JSON コピー**: パース結果を `{KEY: value, ...}` の JSON オブジェクトとしてクリップボードへ。**YAML コピー**: `KEY: value` の YAML 行列としてコピー (改行・特殊文字は自動エスケープ)。**Cloudflare Pages / GitHub Actions の secret 一括登録**、**k8s ConfigMap への変換**、**Helm chart の values.yaml 移植** などで使えます。
セキュリティ的に大丈夫ですか?
**API キーや秘密鍵を貼り付けても安全** な設計: (1) 入力データはブラウザ内 (`useState`) のみに保持され外部送信なし。(2) URL state には含めない (`v` パラメータなし。Share ボタンは expand トグル等の設定だけ載せる)。(3) 出力先はクリップボードのみで、サーバーに送信されません。ただし **ブラウザの拡張機能や開発者ツール** からは読めるので、**完全に他人の目を避けたいなら** 専用のオフライン環境を推奨。
他に Mode 切替で扱えるツールは?
本ツールは Mode なし (.env → JSON / YAML の一方向)。**JSON → .env の逆変換** が欲しい場合は別途リクエストください。関連ツールとして `json-flatten` (ネスト JSON を dot-notation キーに平坦化、.env 風に近い形式) が併用候補です。

「送らない」を確かめるには

このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。

類似のツール