@ 古曳 純基
この記事はFirebaseの内容をまとめたノートです。
一応、本も参考にしてますが、俺の頭の中のfirebaseをアウトプットするだけの回なので見たい人は勝手にどうぞって感じ。
参考文献は以下になります。
おれのなかのFirebaseのイメージを以下にまとめたいと思います。
赤いところをこの記事では紹介しようと思います。(気が向けば、また記事を書きます。特にコマンドクエリ責任分離や複合インデックスについては概念を抑えておきたいので記事を書くと思います。)
今回は、この辺を思い出すのが精一杯でした。
それでは、上記の内容について説明していきます。
データの操作は以下の4つがあります。
データの作成は、ドキュメントIDを指定する場合と指定せずに自動採番してもらう方法があります。
ID指定してドキュメントを作成する方法
import { doc , setDoc , TimeStamp } from "firebase/firestore";
const userReference = doc(db,"users", "Kohiki")
// データの書き込み=通信を挟む=非同期処理
await setDoc(userReference, {
name: "Kohiki Junki",
age: 18
});
IDを指定せずに作るパターン
import { colection. addDoc } from "firebase/firestore";
const userReference = addDoc(collection(db, "users"), {
name: "annonymous",
age: null
});
簡単やな
データの更新になります。
import { doc. updateDoc } form "firebase/firestore";
const userRef = doc(db, "users" , "Kohiki")
await updateDoc(userRef, {
age: 19
});
ちょいとサーバータイムスタンプも学習しておきますか。
firebaseでは、サーバータイムスタンプなるものを使用するケースもあります。これはセキュリティルールなどで必要になることもあります。
import { updateDoc , serverTimestamp } from "firebase/firestore";
const docRef = doc(db . "objects" , "id")
const updateTimestamp = await updateDoc(userRef , {
serverTimestamp: serverTimestamp()
});
これまでは、FieldValueを使用していましたが、serverTimestampという関数をインポートすればいい感じに処理してくれるみたいですね。
データの取得は以下のようになるらしい(公式ドキュメントより)
import { doc , getDoc } from "firebase/firestore";
const docSnap = await getDoc(doc(db, "users" , "Kohiki"));
if (!docSnap.exist())return;
console.log(docSnap.data.name);
// Kohiki Juki
ゲットオプションは以下のようになります。
以下にキャッシュ優先読み取りの例を示す
imort { doc , getDoc , getDocFromCache } from "firebase/firestore";
const docRef = doc(db, "user" , "Kohiki");
// try chatch構文で書くみたいです
try{
const userDoc = await getDocFromCache(docRef);
if (!userDoc.exist()){
const userDoc = await getDoc(docRef);
}
}catch((error)=>{
console.log("this is error");
})
みたいな感じかな。違うかも(自分の思考実験を書いただけです)
ちなみに、とってきたドキュメントスナップショットには以下のフラグも含まれています。
キャッシュから読み込んだデータは無視するようなコードを書いてみましょう。キャッシュからのコードを無視することで、オフライン対応に弱くなりますが、強い整合性を担保することが可能になります。
import { doc , getDoc } from "firebase/firestore";
const docSnapshot = await getDoc(doc(db, "users" , "Kohiki");
// 早期リターン
if (docSnapshot.metadata.fromCache)return;
console.log(`I'm ${docSnapshot.data().age} years old !");
最後にドキュメントの削除について書いてこの記事は終わります。
import { doc , deleteDoc } from "firebase/firestore";
// 匿名アカウントの情報を削除します
await deleteDoc(doc(db, "users" , "annonymous");
以上や