dotenvはNode.jsで利用される環境変数を読み込むためによく使われているライブラリ。
.env
ファイルに書き込んだ環境変数を読み込んで、JSファイルでprocess.env
から取得できるようになります。
簡単な例としては以下のとおりです。
.env
ファイル
MY_ENV=myvalue
index.js
ファイル
require('dotenv').config();
console.log(process.env.MY_ENV); // myvalue
さて、問題は.env
ファイルで文字列ではなく、数値やbooleanのつもりで渡したときにもJSファイルでは文字列型になることです。
以下のような.env
ファイルとJSファイルを用意して確認しました。
(他にも気になる部分やdotenvのドキュメントに書かれていたものを使ったコードはGitHubに置きました。)
.env
ファイルは下のようにしています。
NUMBER_ENV
およびBOOLEAN_ENV
はこのままであればJSファイルでは数値型とboolean型になりそうな気もします。
STRING_ENV="string value"
NUMBER_ENV=123
BOOLEAN_ENV=true
index.js
ファイルでconsole.logを使って確認してみると、NUMBER_ENV
およびBOOLEAN_ENV
の両方とも文字列型(string
)と表示されてしまいます。
require('dotenv').config();
const stringEnv = process.env.STRING_ENV;
console.log('STRING_ENV type:', typeof stringEnv); // string
console.log('STRING_ENV:', stringEnv); // string value
const numberEnv = process.env.NUMBER_ENV;
console.log('NUMBER_ENV type:', typeof numberEnv); // string
console.log('NUMBER_ENV:', numberEnv); // 123
const booleanEnv = process.env.BOOLEAN_ENV;
console.log('BOOLEAN_ENV type:', typeof booleanEnv); // string
console.log('BOOLEAN_ENV:', booleanEnv); // true
文字列型から数値型への変換はNumberオブジェクトを利用したり、boolean型には===
を使って比較したりすることで変換できます。
ついでに、今まで知らなかったdotenvの機能として、v15以降では複数行の環境変数が利用できます。
MULTI_ENV="THIS IS MULTILINE
ENV VALUE
END"
require('dotenv').config();
const multiEnv = process.env.MULTI_ENV;
console.log('MULTI_ENV:', multiEnv); // THIS IS MULTILINE
// ENV VALUE
// END
なんとなくで利用していたdotenvモジュールだったので、今回気がつけてよかったです。
コードを書いているとき、process.env.MY_ENV
のように取り出した環境変数は文字列型だ、とVS Codeが指摘してくれたので気が付きました。
よく使うライブラリもあまり勉強していないのがよくわかりました。。。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント