FireStoreがバージョン9へアップデートした際、各メソッドをそれぞれインポートする方向に変更されてたので各操作を改めて記載。

目次

初期化

import { initializeApp } from 'firebase/app'
import { getFirestore } from 'firebase/firestore'

const config = {
  apiKey: process.env.API_KEY,
  authDomain: process.env.AUTH_DOMAIN,
  databaseURL: process.env.DATABASE_URL,
  projectId: process.env.PROJECT_ID,
  storageBucket: process.env.STORAGE_BUCKET,
  messagingSenderId: process.env.MESSAGING_SENDER_ID,
  appId: process.env.APP_ID,
  measurementId: process.env.MEASUREMENT_ID,
}

const firebaseApp = initializeApp(config)
const db = getFirestore(firebaseApp)

ドキュメント(レコード)一覧取得

import { collection, query, getDocs } from 'firebase/firestore'

const getDocs = async () => {
  try {
    const q = query(collection(db, 'コレクション名'))
    const querySnapshot = await getDocs(q)
    return querySnapshot.docs.map(doc => doc.data())
  } catch (e) {
    throw Error(e)
  }
}

条件付き取得(where)

import { collection, query, where, getDocs, doc, getDoc } from 'firebase/firestore'

// 条件付き一覧取得
const getConditionalDocs = async (name: string) => {
  try {
    const q = query(collection(db, 'コレクション名'), where('name', '==', name))
    const querySnapshot = await getDocs(q)
    return querySnapshot.docs.map(doc => doc.data())
  } catch (e) {
    throw Error(e)
  }
}

// IDから単一ドキュメント取得
const getDoc = (id: string) => {
  try {
    const docRef = doc(db, 'コレクション名', id)
    const docSnap = await getDoc(docRef)
    if (!docSnap.exists()) throw Error
    return docSnap.data()
  } catch (e) {
    throw Error(e)
  }
}

queryの第二引数以降は可変長となっているのでそのまま複数条件指定が可能。

作成

import { doc, collection, setDoc, addDoc } from 'firebase/firestore'

// IDが決まってる場合
const postDoc = async (id: string, data: any) => {
  try {
    await setDoc(doc(db, 'コレクション名', id), data)
  } catch (e) {
    throw Error(e)
  }
}

// IDを自動生成する場合
const postDoc = async (data: any) => {
  try {
    const { id } = await addDoc(collection(db, 'コレクション名'), data)
  } catch (e) {
    throw Error(e)
  }
}

同一IDが存在する場合有無を言わさずそのまま置き換わってしまうので注意が必要。

更新

import { doc, updateDoc } from 'firebase/firestore'

const updateDoc = async (data: any) => {
  try {
    await updateDoc(doc(db, 'コレクション名', 'ID'), data)
  } catch (e) {
    throw Error(e)
  }
}

削除

import { doc, deleteDoc } from 'firebase/firestore'

const updateDoc = async (id: string) => {
  try {
    await deleteDoc(doc(db, 'コレクション名', id))
  } catch (e) {
    throw Error(e)
  }
}
プロフィール画像

ふじわら

よくわからないもので戯れてたら自分のことすらよくわからない人間になってしまいました。

ひっそりYouTubeしてます。