こんにちは。
今回は、firebase SDKとfirebase-admin SDKでfirestoreをそれぞれ呼び出してみたときの違いを紹介します。
firebase SDKとfirebase-admin SDKの違い
Admin SDK は、特権環境から Firebase を操作するために使用するサーバー ライブラリのセットであり、次のような操作を行うことができます。
- Realtime Database のデータの読み取りと書き込みを完全な管理者権限で実行する。
- Firebase Cloud Messaging サーバー プロトコルへの簡単な代替アプローチを使用して、プログラムにより Firebase Cloud Messaging メッセージを送信する。
- Firebase Auth トークンを生成し確認する。
- Google Cloud リソース(Cloud Storage バケットや、Firebase プロジェクトに関連付けられた Cloud Firestore データベースなど)にアクセスする。
- 独自の簡単な管理コンソールを作成して、認証のためにユーザーデータの検索やユーザーのメールアドレス変更などの作業を行う。
特権環境(サーバーなど)からの管理者アクセスではなく、エンドユーザー アクセスのクライアントとして Node.js SDK を使用することを検討している場合(Node.js デスクトップ、IoT アプリケーションなど)、このドキュメントではなく、クライアント JavaScript SDK の設定に関する手順をご覧ください。
引用元: https://firebase.google.com/docs/admin/setup?hl=ja
ということで、クライアントサイドでfirebaseを使う場合は、firebase SDK、サーバーサイドでfirebaseを使う場合は、firebase-admin SDKを利用すれば良さそうです。
firebase SDKでfirestoreを呼び出す
firebase SDKでfirestoreを呼び出すには、以下のようにします。
データの呼び出し
import { initializeApp } from 'firebase/app';
import { getFirestore, collection, getDocs } from 'firebase/firestore/lite';
// Follow this pattern to import other Firebase services
// import { } from 'firebase/<service>';
// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
//...
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
// Get a list of cities from your database
async function getCities(db) {
const citiesCol = collection(db, 'cities');
const citySnapshot = await getDocs(citiesCol);
const cityList = citySnapshot.docs.map(doc => doc.data());
return cityList;
}
データの追加
import { initializeApp } from 'firebase/app';
import { getFirestore, collection, addDoc } from 'firebase/firestore/lite';
// Follow this pattern to import other Firebase services
// import { } from 'firebase/<service>';
// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
//...
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
try {
const docRef = await addDoc(collection(db, "users"), {
first: "Ada",
last: "Lovelace",
born: 1815
});
console.log("Document written with ID: ", docRef.id);
} catch (e) {
console.error("Error adding document: ", e);
}
データの更新
import { initializeApp } from 'firebase/app';
import { doc, updateDoc } from "firebase/firestore";
// Follow this pattern to import other Firebase services
// import { } from 'firebase/<service>';
// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
//...
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
const washingtonRef = doc(db, "cities", "DC");
// Set the "capital" field of the city 'DC'
await updateDoc(washingtonRef, {
capital: true
});
データの削除
import { initializeApp } from 'firebase/app';
import { doc, deleteDoc } from "firebase/firestore";
// Follow this pattern to import other Firebase services
// import { } from 'firebase/<service>';
// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
//...
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
await deleteDoc(doc(db, "cities", "DC"));
firebase-admin SDKでfirestoreを呼び出す
firebase-admin SDKでfirestoreを呼び出すには、以下のようにします。
データの呼び出し
import { initializeApp, cert } from 'firebase-admin/app'
import { getFirestore } from 'firebase-admin/firestore'
const serviceAccountKey = require('../serviceAccountKey.json')
const app = initializeApp({
credential: cert(serviceAccountKey)),
databaseURL: '指定されたURL',
})
const db = getFirestore(app)
const getUsers = async () => {
const usersSnapshot = await db.collection('cities').get()
usersSnapshot.forEach((doc) => {
console.log(doc.id, ' => ', doc.data())
})
}
データの追加
import { initializeApp, cert } from 'firebase-admin/app'
import { getFirestore } from 'firebase-admin/firestore'
const serviceAccountKey = require('../serviceAccountKey.json')
const app = initializeApp({
credential: cert(serviceAccountKey)),
databaseURL: '指定されたURL',
})
const db = getFirestore(app)
const addUsers = async (id) => {
const userRef = await db.collection('users').doc(id)
userRef.set({
first: 'Ada',
last: 'Lovelace',
born: 1815
})
}
データの更新
import { initializeApp, cert } from 'firebase-admin/app'
import { getFirestore } from 'firebase-admin/firestore'
const serviceAccountKey = require('../serviceAccountKey.json')
const app = initializeApp({
credential: cert(serviceAccountKey)),
databaseURL: '指定されたURL',
})
const db = getFirestore(app)
const updateUsers = async (id) => {
const userRef = await db.collection('users').doc(id)
userRef.update({
first: 'Ada',
last: 'Lovelace',
born: 1815
})
}
データの削除
import { initializeApp, cert } from 'firebase-admin/app'
import { getFirestore } from 'firebase-admin/firestore'
const serviceAccountKey = require('../serviceAccountKey.json')
const app = initializeApp({
credential: cert(serviceAccountKey)),
databaseURL: '指定されたURL',
})
const db = getFirestore(app)
const deleteUsers = async (id) => {
const userRef = await db.collection('users').doc(id).delete()
}
今回はこのあたりで。