(npm) dotenv の .env ファイルではインラインコメントを避ける

タイトルで終了ではあるのですが、軽く嵌まったのでメモしておきます。

npm から dotenv をインストールして .env ファイルに設定を書き込んで利用していた際、意図しない挙動が発生しました。

.env

DEV_MODE=prod # dev, demo, prod

DEV_MODE なるパラメータに値をセットしてあります。

EJS

<%
const DEV_MODE = process.env.DEV_MODE;

// 略

if (DEV_MODE !== 'prod') {
-%>
    <meta name="robots" content="noindex, nofollow">
<%
}
-%>

プログラム( EJS 内の JavaScript )側では、その値によって meta name="robots" を出力する・しないを分岐しています。

しかし、 .envDEV_MODEprod にセットしても meta name="robots" が出力されてしまいました。何故……。

検証

試しにパラメータを近くで(仮に今は亡き meta name="keywords" として)出力させてみます。

<meta name="keywords" content="DEV_MODE:prod # dev, demo, prod, ...(略)">
.env のパラメータを試験的に EJS 内で出力。コメントも含めてパラメータに格納されてしまっていることが分かる。
.env のパラメータを試験的に EJS 内で出力。コメントも含めてパラメータに格納されてしまっていることが分かる。

prod # dev, demo, prod が該当部分。……コメントも値として渡ってきてしまっています。これでは DEV_MODE !== 'prod'true になってしまうわけです。

対処

# DEV_MODE: Please choose from the three parameters below.
# dev, demo, prod
DEV_MODE=dev

値とコメントを別の行にしました。

<meta name="keywords" content="DEV_MODE:prod, ...(略)">
.env のパラメータを試験的に EJS 内で出力。コメントが消えました。
.env のパラメータを試験的に EJS 内で出力。コメントが消えました。

これでコメントが消え、 meta name="robots" も出力されなくなりました。

いや、迂闊でした……。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。