shimotsu tech

Webフロントエンドエンジニア @ to-R inc.

Next.js でクライアントから環境変数が読み込めない

Next.js で今個人的に作っているアプリケーションにおいて、クライアント(ブラウザ)から環境変数(.env.*)が読めないという事象に遭遇したので、その原因と解決法をメモしておきます。

やりたいことは、ページコンポーネント上で、アクセス時に毎回 Firebase の匿名認証を実行するというもの。

useEffect(() => {
    // 匿名ログイン実行
    async function initFirebase() {
      firebase.auth().onAuthStateChanged(async (user) => {
        if (!user) {
          await firebase.auth().signInAnonymously()
        } else {
          console.log(user)
        }
      })
    }

    initFirebase()
  }, [])

この実行時に "auth/invalid-api-key" というエラーが出てしまいました。

ずばり原因としては、.env ファイルで設定した環境変数に問題があり、Firebase の 設定用ファイルにおいて、それを正しく読み込めていませんでした。

本来、Next.js でブラウザから環境変数を呼ぶ際は、以下のように 'NEXT_PUBLIC_****' と命名しなければいけないのですが、

NEXT_PUBLIC_FIREBASE_PUBLIC_API_KEY=xxxxxxx
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=xxxxxxx
NEXT_PUBLIC_FIREBASE_PROJECT_ID=xxxxxxx
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=xxxxxxx
NEXT_PUBLIC_FIREBASE_APP_ID=xxxxxxx

以下のようにしてしまっておりました。

FIREBASE_PUBLIC_API_KEY=xxxxxxx
FIREBASE_AUTH_DOMAIN=xxxxxxx
FIREBASE_PROJECT_ID=xxxxxxx
FIREBASE_MESSAGING_SENDER_ID=xxxxxxx
FIREBASE_APP_ID=xxxxxxx

上記のように環境変数名を変更すると、無事読み込むことができました。めでたしめでたし。