.envファイルの引用符、コメント、空の値、複数行の値の構文ルールと、dotenvとDocker Composeで解釈が異なる点を解説。ファイルを貼り付けて確認できるリンター付き。
.envファイルは、1行に1つのKEY=valueの組を書くプレーンテキストです。空行は読み飛ばされ、#で始まる行はコメントになります。値の両端に空白がある場合、#記号を含む場合、改行を含む場合は引用符で囲みます。統一された標準はないため、Node用のdotenvとDocker Composeでは、いくつかの境界ケースの解釈が異なります。
よくある行をdotenvがどう読むか
壊れた.envファイルの多くは、同じいくつかの細部でつまずいています。パスワード中の#、複数行にわたって貼り付けた秘密鍵、閉じられていない引用符です。ファイルをリンターに貼り付けると、各キーについてdotenvが読み取る値と、Docker Composeでは解釈が異なる箇所がわかります。
ありません。この形式はシェルの変数代入から発展したもので、各ローダーが独自のルールを文書化しています。Node用のdotenvパッケージとDocker Composeはどちらもルールを公開しており、基本部分は共通です。KEY=valueの行、#によるコメント、引用符で囲んだ値です。
必要なときだけで十分です。#記号を含む値、先頭や末尾に空白がある値、改行を含む値には引用符が必要です。Composeで$をそのまま残したいときは一重引用符を使いましょう。Composeでは一重引用符の値は展開されないからです。
二重引用符で囲み、実際の改行をそのまま残します。dotenvはバージョン15.0.0からこれに対応しています。二重引用符内の\nは改行になるため、1行にまとめて改行の位置に\nと書く方法もあります。
書けますが注意が必要です。dotenvは引用符の外の#をコメントの開始として扱います。Docker Composeは#の前に空白がある場合だけコメントとみなすため、KEY=a#bはComposeではa#b、dotenvではaになります。安全のため、行内コメントの前には空白を入れましょう。
しません。デフォルトでは、環境にすでに存在する変数をdotenvが変更することはないため、シェルやホストが設定した値が優先されます。ファイルの値で置き換えたい場合は、overrideオプションをtrueにして渡してください。
同じ行を2つのローダーが読んだ結果
本物のファイルと同じキー、安全なダミー値、各グループを説明するコメント。コミットするのはこのファイルで、本物の.envは決してコミットしません。
config()はデフォルトで現在の作業ディレクトリの.envを読み込みます。すでに環境にある値はそのまま残ります。
.envファイルを貼り付け
dotenvが各行から読み取る内容
行
キー
値
注記
(空文字列)
{n}個のキーを読み取り、うち{v}個に注記あり
キーはまだ見つかりません。
=記号がないため、この行は無視されます。
キーに空白が含まれています。削除しないと、この行は期待どおりに解析されません。
移植性のない名前です。シェルは英字、数字、アンダースコアを想定しており、数字で始まる名前は使えません。
引用符が閉じていないため、ファイルの残りがこの値に取り込まれる可能性があります。
{n}行目でも設定されています。どちらが優先されるか迷わないよう、1つだけ残しましょう。
dotenvは#で値を切りますが、前に空白がないためDocker Composeは#を残します。値を引用符で囲みましょう。
$が含まれています。Docker Composeは展開しますが、素のdotenvは書かれたとおりに残します。
引用符内で複数行にわたっています。
無料で始める · クレジットカード不要