Reactでdotenvを使って、任意のページで環境変数を読み込みたい。でも、なぜかundifined
が返ってくる。そんなときの対処法を紹介します。
確認ポイント
- 変数は
REACT_APP_
から始まっているかどうか(例: REACT_APP_FIREBASE_API_KEY) - サーバーを再起動したかどうか
-
.env
ファイルはプロジェクトルートに配置されているかどうか -
require('dotenv').config()
は必要ありません
変数はREACT_APP_
から始まっているかどうか
create-react-appを使っていて、.env
を使う際に、変数の先頭にREACT_APP_
とつけないとundifined
になります。
また、.env
ファイルはそれぞれの行にコロン(:)
、セミコロン(;)
をつける必要はありません。
REACT_APP_FIREBASE_API_KEY=xxxxxxxxxxxx
REACT_APP_FIREBASE_AUTH_DOMAIN=xxxxxxxxxxxxxxxx
サーバーを再起動したかどうか
環境変数についてのコードの変更を行った際は、変更を反映するためにサーバーを再起動する必要があります。
Ctrl+C
でサーバーを停止して、npm start
やdocker-compose up
などで再起動しましょう。
.env
ファイルはプロジェクトルートに配置されているかどうか
package.json
やREADME.md
、.gitignore
などのファイルがあるプロジェクトルートの階層に.env
を配置する必要がります。srcフォルダの中ではなく、プロジェクトルートです。
require('dotenv').config()
は必要ありません
dotnev
は以下のような使い方をしますと公式に書かれています。
require('dotenv').config()
しかし、このコードは必要ありません!!
理由は、create-react-appがすでに.env
ファイルを使えるようにしてくれているからです。(dotenvをインストールした意味がなかった。。😅)
以下のように読み込みたいファイルで直接process.env
で読み込めます。
const sampleId = process.env.REACT_APP_SAMPLE_ID;
参考
react evironment variables .env return undefined
Reactにおける環境変数を設定について、ようやく理解したので原因と共にまとめてみる_100DaysOfCodeチャレンジ38日目(Day_38:#100DaysOfCode)