.envエディター - 環境ファイルの解析、検証、比較&変換 オンライン
.envファイルを解析、検証、比較、変換。構文チェック、サイドバイサイド比較、.env/JSON/YAML/Docker Compose間のフォーマット変換 — 100%クライアントサイド処理。
よくある質問
.envファイルエディターとは?
.envファイルエディターは、開発者が.env(dotenv)ファイルを解析、検証、編集、ソート、比較、変換できるオンラインツールです。構文検証、アルファベット順ソート、2つの.envファイルのサイドバイサイド比較、.env/JSON/YAML/Docker Compose間のフォーマット変換を提供し、すべて100%ブラウザ上で実行されます。
この.envエディターの使い方は?
1. 編集タブ:.envファイルの内容を貼り付けます。ツールが即座に検証します。2. 比較タブ:2つの.envファイルをサイドバイサイドパネルに貼り付けます。3. 変換タブ:サポートされている形式でコンテンツを貼り付け、出力形式を選択します。
データは安全ですか?
データは100%安全で、ブラウザから離れることはありません。すべての処理は完全にクライアントサイドJavaScriptで行われます。
どのような検証チェックを行いますか?
バリデーターは以下を確認します:(1) 無効な変数名。(2) セパレーター欠落。(3) 重複キー。(4) 空の値。(5) 閉じられていない引用符。各問題には行番号が含まれます。
.envファイルの比較はどのように機能しますか?
比較ツールは2つの.envファイルを分析し、各変数を4つのグループに分類します:ファイルAのみ(赤)、ファイルBのみ(緑)、異なる値(黄)、同一(グレー)。
どのフォーマット間で変換できますか?
.env、JSON、YAML、Docker Compose environment間の双方向変換をサポートしています。コンバーターは入力形式を自動検出します。
.envファイルをアルファベット順にソートできますか?
はい、ソート機能はすべての変数をキー名でアルファベット順(A-ZまたはZ-A)に並べ替えます。コメントは保持され、次の変数に紐づけられます。
コード例
// .env File Parser, Validator, and Converter
function parseEnv(content) {
const lines = content.split('\n');
const entries = [];
const errors = [];
const warnings = [];
const seen = new Map();
for (let i = 0; i < lines.length; i++) {
const lineNum = i + 1;
const raw = lines[i];
const trimmed = raw.trim();
if (!trimmed || trimmed.startsWith('#')) continue;
const eqIdx = trimmed.indexOf('=');
if (eqIdx === -1) {
errors.push({ line: lineNum, message: "Missing '=' separator" });
continue;
}
const key = trimmed.slice(0, eqIdx).trim();
let value = trimmed.slice(eqIdx + 1);
if (!key) {
errors.push({ line: lineNum, message: 'Empty key name' });
continue;
}
if (!/^[A-Za-z_]\w*$/.test(key)) {
errors.push({ line: lineNum, message: `Invalid name "${key}"` });
continue;
}
// Handle quoted values
if (value.startsWith('"') && value.endsWith('"')) {
value = value.slice(1, -1).replace(/\\n/g, '\n');
} else if (value.startsWith("'") && value.endsWith("'")) {
value = value.slice(1, -1);
} else {
const commentIdx = value.indexOf(' #');
if (commentIdx !== -1) value = value.slice(0, commentIdx);
value = value.trim();
}
if (seen.has(key)) {
warnings.push({ line: lineNum, message: `Duplicate key "${key}"` });
}
seen.set(key, lineNum);
entries.push({ key, value, line: lineNum });
}
return { entries, errors, warnings };
}
function envToJson(entries, indent = 2) {
const obj = {};
for (const { key, value } of entries) obj[key] = value;
return JSON.stringify(obj, null, indent);
}
function diffEnv(entriesA, entriesB) {
const mapA = new Map(entriesA.map(e => [e.key, e.value]));
const mapB = new Map(entriesB.map(e => [e.key, e.value]));
const onlyInA = [], onlyInB = [], different = [], identical = [];
for (const [key, valA] of mapA) {
if (!mapB.has(key)) onlyInA.push(key);
else if (mapB.get(key) !== valA) different.push({ key, valueA: valA, valueB: mapB.get(key) });
else identical.push(key);
}
for (const key of mapB.keys()) {
if (!mapA.has(key)) onlyInB.push(key);
}
return { onlyInA, onlyInB, different, identical };
}
// Usage
const result = parseEnv('DB_HOST=localhost\nDB_PORT=5432\nAPI_KEY=sk_live_abc');
console.log('Entries:', result.entries.length);
console.log('JSON:', envToJson(result.entries));