Nuxt.jsでFirebase 9を利用する

Nuxt.js に Firebase を導入するために Nuxt Firebase というパッケージが用意されていますが,公式ドキュメントをよく見てみると v7.5 から更新されていません.

一方で,Firebase はバージョン8の namespaced 形式からバージョン9の modular 形式へと仕様が変更されています.

現在の Nuxt Firebase の最新バージョンは v8.2.2 ですが,Nuxt Firebase v8+ では modular 形式のサポートとなっています.また,パッケージの実装は終わっていないようで,modular 形式を導入する場合にはパッケージではなく,自分で導入するようにと書かれていました.

インストール

バージョン9の firebase パッケージをインストールします.

terminal

$ yarn add firebase

設定

firebase の初期化は一回のみ行う必要があります.初期化されている状態で初期化の処理を行おうとするとエラーが発生するため,プラグインで実装します.

plugins/firebase.js

import { initializeApp, getApps } from 'firebase/app'
import { getFirestore } from 'firebase/firestore'
import { getAuth } from 'firebase/auth'

const firebaseConfig = {
  apiKey: '<replace this>',
  authDomain: '<replace this>',
  databaseURL: '<replace this>',
  projectId: '<replace this>',
  storageBucket: '<replace this>',
  messagingSenderId: '<replace this>',
  appId: '<replace this>',
}
const apps = getApps()
const firebaseApp = !apps.length ? initializeApp(firebaseConfig) : apps[0]

const db = getFirestore(firebaseApp, {})
const auth = getAuth(firebaseApp, {})

export { db }

設定ファイルも編集します.

nuxt.config.js

export default {
  ...,

  // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins
  plugins: ['~/plugins/firebase.js'],

}

使用方法

プラグインを用意したら,各コンポーネントで読み込むだけです.

<script>
import { auth } from '@/plugins/firebase.js'
import { createUserWithEmailAndPassword } from 'firebase/auth'

export default {
  methods: {
    async createUser() {
      try {
        const userCredential = await createUserWithEmailAndPassword(
          auth,
          this.email,
          this.password
        )
      } catch (e) {
        console.error(e)
      }
    },
  },
}
</script>

参考