Firebase Admin SDKをインストールする方法 & FirestoreでCRUD操作

Firebase Admin SDKのインストールから実装まで、完全ガイド!サーバーサイドからFirebaseを自在に操る方法を解説。セキュリティルールを超えた管理者権限でのDB操作や、環境変数を使った安全な実装方法まで、実践的なサンプルコード付きで紹介します。

Firebase Admin SDKをインストールする方法を紹介します。

環境

  • Express, Node.js v20
  • Render.com

Firebase Admin SDKとは

Firebase Admin SDKとは、Firebaseの主要な機能をサーバーサイドから利用するためのSDK(Software Development Kit)です。

これにより、バックエンドからFirebase Authentication, Firestore, Cloud Storageなどの機能を使うことが可能になります。

また、もう1つの特徴として、セキュリティルールを無視して(=完全な管理者権限で)Firestore操作することができます。どうしてもセキュリティルールの初期設計上操作できないものがある場合にはAdmin SDKを利用してバックエンドでDB操作を実行するといったこともできます。

インストール

サービスアカウントJSONを取得する

サービスアカウントの秘密鍵をダウンロードする必要があります。

  1. Firebaseコンソールにアクセスし、作成したプロジェクトに移動する
  2. 「プロジェクトの設定」をクリックし、「サービスアカウント」タブへ移動
  3. 「新しい秘密鍵の生成」ボタンをクリックする
  4. 表示内容を確認し、「キーを生成」ボタンをクリックする
  5. 自動でJSONファイル(秘密鍵)がダウンロードされる

npm install

npm i firebase-admin

Node.jsで初期化する

Node.jsで初期化する際、JSONファイルをそのまま読み込むのでも良いのですが、私の環境では面倒だったので、環境変数を使うように以下のように実装しました。

const serviceAccount = {
  "type": "service_account",
  "project_id": "your-project-id",
  "private_key_id": process.env.THE_FIREBASE_PRIVATE_KEY_ID,
  "private_key": process.env.THE_FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'),
  "client_email": process.env.THE_FIREBASE_CLIENT_EMAIL,
  "client_id": process.env.THE_FIREBASE_CLIENT_ID,
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": process.env.THE_FIREBASE_CLIENT_X509_CERT_URL,
  "universe_domain": "googleapis.com"
}
const { initializeApp, cert } = require('firebase-admin/app')
 
const firebaseApp = initializeApp({
  credential: cert(serviceAccount),
  databaseURL: process.env.THE_FIREBASE_DATABASE_URL
});

この実装方法の注意点:

  • 環境変数の管理を厳重にすること(.env)
  • “FIREBASE”は予約語だそうで、前にTHEと付与すること(もちろん何でもよいです)
  • “private_key”は改行の文字の事情で、最後に.replace(/\\n/g, '\n')を付与すること

これで、FireabseプロジェクトをNode.jsで操作することができます。

ちなみに、AuthやFirestoreを操作するには、以下のようなコードを追加します。

const { getFirestore } = require('firebase-admin/firestore')
const { getAuth } = require('firebase-admin/auth');
 
const db = getFirestore(firebaseApp)
const auth = getAuth(firebaseApp);

変数のfirebaseAppにはもう1つ前のコードのinitializeAppの返り値を代入しておく必要があります。

FirestoreでドキュメントのCRUD操作をする

CRUD操作のサンプルコードを紹介します。

どの例もコレクションcitiesに都市のドキュメントが複数保存されているような場合を想定しています。

ドキュメントの作成、更新の操作

参考ページ:https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja

ドキュメントを作成する

set() を利用すれば新たにドキュメントを作成できます。この際、IDを自ら指定する必要があります。

const docId = "foooo";
 
const data = {
  id: docId,// フィールドにドキュメントIDを入れておかないと非常に不便なため挿入
  name: 'Taro Yamada',
  country: 'Japan'
};
 
const res = await db.collection('users').doc(docId).set(data);

ドキュメントを作成する(IDは自動生成させる場合):

IDを自動生成させる場合には add() を使います。

// IDを指定せずに、自動生成させて新たなドキュメントを作成する
const res = await db.collection('users').add({
  name: 'Taro Yamada',
  country: 'Japan'
});
 
console.log('Added document with ID: ', res.id);

ドキュメントを更新する

update()を利用するとドキュメントを更新できます。

// usersコレクションのIDがfoooのドキュメント
const userRef = db.collection('users').doc('fooo');
 
// 新たにemailを付与して更新する
const res = await userRef.update({email: '[email protected]'});

ドキュメントの取得の操作

1つのドキュメントを取得する

get()を利用してドキュメントを取得できます。

// usersから、uidがfooooのドキュメントを取得する
const userRef = db.collection('users').doc('foooo');
const doc = await userRef.get();
if (!doc.exists) {
  console.log('ドキュメントが存在しません。');
} else {
  // ドキュメントデータはdoc.data()で取得する
  const user = doc.data();
  console.log('usersドキュメントが見つかりました:', user);
}

docを取得した際、 doc.exists() を使うとどのドキュメントが存在しているかどうかをbooleanでチェックできます。

複数のドキュメントを取得する

where()で条件を指定して get() を利用することで条件に一致する複数のドキュメントを取得できます。 where() を使わない場合には全てのドキュメントを取得できます。

const usersRef = db.collection('users');
 
// 'is_verified'フィールドがtrueであるドキュメントを検索
const usersSnapshot= await usersRef.where('is_verified', '==', true).get();
 
if (usersSnapshot.empty) {
  // 一致するドキュメントがない場合のログ
  console.log('一致するドキュメントがありません。');
  return;
}
 
// 一致するドキュメントがある場合、各ドキュメントのデータをverifiedUsersに格納する
const verifiedUsers = [];
usersSnapshot.forEach(doc => {
  const id = doc.id;
  const data = doc.data();
  verifiedUsers.push(data);
});

Read more

リアルタイム投票アプリ5選【ライブ配信やイベントで】

リアルタイム投票アプリ5選【ライブ配信やイベントで】

ウェビナーやセミナー、社内研修を実施する際、「参加者が受け身になってしまう」「質問がなかなか出てこない」といった課題を感じたことはないでしょうか。 オンラインでの情報発信が当たり前になった今、一方的な配信だけでは参加者の満足度を高めることが難しくなっています。そこで注目されているのが、リアルタイムで参加者の意見を集約し、その場で結果を共有できる投票・質問ツールです。 本記事では、ライブ配信やイベント、研修などで活用できるリアルタイム投票アプリを5つ厳選してご紹介します。 リアルタイム投票でつながる参加者とイベント リアルタイム投票やQ&A機能を使うと、視聴者や参加者の意見を即座に集計・表示できます。講義や会議の進行を妨げず、参加者全員が自分の意見を簡単に表明できる仕組みです。 従来の挙手による質疑応答では、発言しづらいと感じる参加者も少なくありません。特にオンラインイベントでは、カメラがオンになっていることへの抵抗感や、大人数の前で質問することへのハードルが存在します。 しかし、スマートフォンから匿名で投票やコメントができる仕組みがあれば、参加者は気軽に自分の意見を伝えら

By 阿部 隼也
質問受付ツールの選び方とおすすめ5選を紹介

質問受付ツールの選び方とおすすめ5選を紹介

セミナーや講演会、社内研修などで「質問はありませんか?」と投げかけても、なかなか手が挙がらない経験はないでしょうか。参加者に有益な情報を提供しても、疑問や意見が共有されないまま終わってしまうのは、主催者にとっても参加者にとっても大きな機会損失です。 こうした課題を解決するために注目されているのが「質問受付ツール」です。参加者がスマートフォンから匿名で質問を投稿できるため、発言への抵抗感が下がり、活発なコミュニケーションが生まれます。 本記事では、質問受付ツールの基本機能から、実際に役立つおすすめツール5選、そして選定時に押さえておきたいポイントまで、実務に活かせる情報をまとめて解説します。 質問受付の現場課題 イベントやセミナーの運営で最も頭を悩ませる問題の一つが、参加者からの質問をいかに引き出すかという点です。質問タイムを設けても、会場がシーンと静まり返ってしまい、仕方なく「それでは時間になりましたので」と締めくくる光景は珍しくありません。 この背景には、日本特有の文化的要因も関係しています。大勢の前で発言することへの恥ずかしさ、自分の質問が的外れではないかという不安、他

By 阿部 隼也
オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

近年、オンラインセミナーの活用が急速に広がっています。会場のコストや移動時間を気にすることなく、全国・世界中から参加者を集められる点は大きな魅力です。 しかし、せっかく開催しても 「参加者が途中で離脱してしまう」 「ただ見ているだけで反応が薄い」 といった課題を抱えている企業も少なくありません。 本記事では、参加者のエンゲージメントを高め、成果につながるオンラインセミナーアプリの選び方と、実務に役立つ具体的なポイントを解説します。 参加者とのつながりを生むオンライン環境の設計 オンラインセミナーにおける最大の課題は、画面越しの距離感です。会場で直接顔を合わせる機会がないからこそ、参加者が「ただ見ているだけ」にならないような仕組みが求められます。適切なツールと機能選びが、参加者のエンゲージメントを左右します。 従来のオフラインセミナーでは、会場の雰囲気や参加者同士の反応が自然と生まれましたが、オンラインではそうした「空気感」が伝わりにくくなります。だからこそ、双方向のコミュニケーション機能や、参加者の行動データを活用した設計が重要になるのです。 エンゲージメントを高

By 阿部 隼也
参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

オンラインでのセミナーやイベントが日常化する中で、Zoomウェビナーを活用している企業が増えています。しかし、ウェビナーの開催で意外と頭を悩ませるのが「参加者からの質問をどう管理するか」という点ではないでしょうか。 セミナーが盛り上がり、次々と質問が寄せられるのは嬉しいことです。一方で、質問が多すぎて整理しきれない、どの質問に優先的に答えるべきか判断に迷う、といった課題も生じます。こうした問題を解決するために役立つのが、ZoomウェビナーのQ&A機能です。 本記事では、ZoomウェビナーのQ&A機能の基本的な使い方から、参加者の質問を効率的に管理する実践的なテクニックまで、詳しく解説していきます。 ZoomウェビナーのQ&A機能とは ZoomウェビナーのQ&A機能は、ウェビナー開催中に参加者が質問を投稿し、主催者側が回答を行うための専用機能です。この機能を使うことで、質問と回答がスレッド形式で整理され、効率的なコミュニケーションが可能になります。 チャット機能との違い Zoomには「チャット機能」もあるため、「Q&A機能とチャット機能の違いは何か」と疑問に思う方も多いで

By 阿部 隼也