dotenvファイルをキーと値のペアに解析
dotenvファイルは単純に見えますが、値に空白、コメント記号、空の代入、エスケープされた文字が含まれると扱いが難しくなります。このパーサーは明確で予測可能な構文規則に従い、.envファイルの全文を整ったキーと値のオブジェクトへ変換します。空行とコメントを無視し、引用符内の内容を保持し、引用符のない値に続くインラインコメントを認識します。不正な代入があれば正確な行番号をお知らせします。プロセス環境へ変数を読み込まずに構造化データが必要な設定の確認、移行、検証、開発ツールでご利用いただけます。
無料で実行
dotenvの全文をご入力ください
.envファイルの内容をtextフィールドへ貼り付けるか送信してください。意味のある各行には、キー、等号、値が必要です。キーはASCII文字またはアンダースコアで始まり、その後には文字、数字、アンダースコアを使用できます。空行は有効です。空白を除いた最初の文字がハッシュ記号の行はコメントとして扱います。CACHE_PREFIX=のような空の代入も有効で、空文字列になります。結果のvaluesオブジェクトには解析したペアが入り、countには一意なキーの数が入ります。同じキーが複数回現れた場合は、後の代入が前の代入を上書きします。これは設定断片を組み合わせる際に一般的な方式です。このツールは端末の環境へ書き込まず、変数を展開せず、ファイルを読み取らず、外部サービスにも接続しません。送信されたテキストだけを処理するため、動作を安全に確認でき、ビルドスクリプト、エディター拡張、設定チェッカー、移行処理でも同じ結果を再現できます。
引用符、エスケープ、コメントの規則
引用符のない値では前後の空白を取り除きます。ハッシュ記号は、その直前に空白がある場合だけインラインコメントを開始します。そのため、URLのフラグメントやcolor=#fffのようなトークンは変更されません。単一引用符は、ハッシュ記号や空白を含む内部のテキストをそのまま保持します。二重引用符も内容を保持しますが、バックスラッシュによる改行、復帰、タブ、二重引用符、バックスラッシュの一般的なエスケープを解釈します。閉じ引用符の後には空白またはコメントだけを記述できます。この規則により、シェル評価を行わずに曖昧さを排除できます。${HOST}のような参照の展開、コマンド置換の実行、trueや8080から真偽値や数値への変換は行いません。dotenvのデータはテキストであるため、すべての値を文字列として返します。用途固有の型変換は呼び出し側で決められ、先頭のゼロ、大文字と小文字、意図した空の値を失う心配がありません。
不正な入力を明確に処理します
個別の確認にはWebツールを、同じ機能を自動処理に組み込む場合はAPIを使用できます。
活用例
展開前の設定検証
不正なdotenvの内容を早期に拒否し、ご担当者様へ修正が必要な正確な行をお知らせします。
設定移行の事前確認
従来の.envテキストを構造化オブジェクトへ変換してから、別の設定システムへキーを対応付けます。
開発ツールへの組み込み
エディター拡張、設定ウィザード、ビルド用ツール、比較処理で予測可能な出力をご利用いただけます。
よくある質問
1回のリクエスト料金はいくらですか?
APIリクエストは$0.002です。ブラウザ版では同じ内容をローカルで解析できます。
値は数値や真偽値へ変換されますか?
いいえ。8080、true、false、空の代入を含め、すべて文字列のまま返します。
重複したキーはどのように扱われますか?
最後の代入が優先され、countには最終結果に含まれる一意なキーの数が入ります。
引用符付きの値にハッシュ記号を含められますか?
はい。単一引用符または二重引用符の内側にあるハッシュ記号は値の一部であり、コメントを開始しません。
変数参照は展開されますか?
いいえ。${HOST}のような参照はそのまま返し、シェルや環境の式は評価しません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev2/env-file-parse \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="}'const res = await fetch("https://api.kit.forhosting.com/dev2/env-file-parse", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/env-file-parse",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/env-file-parse", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"APP_NAME=\\"Example service\\"\\nDEBUG=true\\nPORT=8080\\n# Optional local override\\nEMPTY="}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/env-file-parse", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "APP_NAME=\"Example service\"\nDEBUG=true\nPORT=8080\n# Optional local override\nEMPTY="
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.env_file_parse",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |