Firestoreのドキュメントを一括で処理するバッチ処理コード

Firestoreのドキュメントを一括で処理するバッチ処理コードを紹介。バッチ処理は一度に最大500件のドキュメント更新を許可します。

Share

フィールド created_at の順番に処理をしていきます。

const admin = require('firebase-admin');
 
const firebaseApp= initializeApp({
  credential: cert(serviceAccount),
  databaseURL: "https://foo.firebaseio.com"
}, "firebaseApp");
const db = getFirestore(firebaseApp)
 
/**
 * Firestore コレクションのドキュメントをバッチ処理で更新します。
 * Firestore のバッチ書き込みは一度に最大 500 件のドキュメント更新を許可します。この関数は、500 件を超えるドキュメントをシーケンシャルに処理することで対応します。
 *
 * @param {string} collectionName - 更新する Firestore コレクションの名前。
 * @param {Object} updatingFieldAndValue - 各ドキュメントで更新するフィールドについて、キーと値のペアのオブジェクトとして指定。
 * @param {number} [batchSize=500] - 各バッチで更新する最大ドキュメント数。デフォルトは 500。
 * @returns {Promise<void>} - すべてのバッチが処理されたときに解決する Promise。
 * @throws Firestore 操作に問題が発生した場合にエラーをスローします。
 */
async function updateDocumentsInBatches(collectionName, updatingFieldAndValue, batchSize = 500) {
  try {
    // コレクション参照を取得
    const collectionRef = db.collection(collectionName);
    
    // 並び替えに使うフィールド名
    const orderField= 'created_at';
    
    // 最初のバッチを取得するためのクエリを作成
    let query = collectionRef.orderBy(orderField).limit(batchSize);
    let documents = await query.get();
    
    // 更新された合計数
    let totalUpdatedCount = 0;
 
    // ドキュメントが存在する間ループを続ける
    while (documents.size > 0) {
      // バッチを作成
      let batch = firestore.batch();
      
      // 各ドキュメントを更新
      documents.forEach(document => {
        batch.update(document.ref, updatingFieldAndValue);
      });
 
      // バッチをコミット
      await batch.commit();
      
      // 更新された合計数を更新
      totalUpdatedCount += documents.size;
      console.log(`バッチ更新: ${documents.size} 件のドキュメントを更新しました。`);
 
      // 次のバッチのドキュメントを取得するためにクエリを更新
      query = collectionRef.orderBy(orderField)
        .startAfter(documents.docs[documents.docs.length - 1])
        .limit(batchSize);
      documents = await query.get();
    }
 
    // 更新成功のログメッセージ
    console.log(`コレクション ${collectionName} のドキュメントを正常に更新しました。合計: ${totalUpdatedCount} 件のドキュメントを更新しました。`);
  } catch (error) {
    throw error;
  }
}

下記のように使います。

// 使用例: todosというコレクションのドキュメントのstatusをdoneに更新する
updateDocumentsInBatches('todos', { status: 'done' });

Read more

サービス更新履歴

ここでは、LiveQのサービス・製品への変更を全て紹介しております。 このページは大きな変更があった場合に更新されます。 いつごろにどのような機能がリリースされたかが分かります。 2026年6月: 高速化・安定化 * 5月よりサーバーおよびアプリケーションの大型リニューアルに取り組み、6月に読み込み速度の向上や、大規模アクセス時にも安定して高速に動作するように変更をおこないました。 2026年4月: 画像スライド * 新たなスライドの種類として画像スライドを追加しました。 * PowerPoint, PDFファイルを一括インポートし、画像スライドとして追加する機能を追加しました * そのほか多数の細かな変更(操作性などのデザイン改善や、不具合)をおこないました 2026年3月: ワードクラウド、コメントのAIモデレーション(監視) * 新たなスライドの種類としてワードクラウドを追加しました * コメントをAIで自動監視する機能をリリースしました * そのほか細かな改善や不具合の修正をおこないました 2026年2月: 有料プランのデータエクスポート

By 阿部 隼也

チームメンバーを招待する方法

チームメンバーを追加するには、招待する必要があります。 その招待方法を紹介します。 招待可能なチームメンバーの数は、ご利用のプランによって異なるため、事前にご確認ください。 チームページの「新しいチームメンバーを招待」にて、招待するメンバーのメールアドレスを入力し、「招待を送信」をクリックします。 招待された側で招待を承認 次に、招待された側の方によって招待を承認する必要があります。 ※この承認にはLiveQのアカウントが必要となりますので、必ず事前にご登録ください。 下記のような招待メールが届きます。 件名:【LiveQ】チームへの招待が届いています 差出人:[email protected] 既にLiveQに登録済みの方はそのまま「招待を承認して参加する」ボタンをクリックします。 まだLiveQに登録していない方は、登録後、同様に承認ボタンをクリックします。 チームを切り替える 招待を承認すると、チームページに下記のように「チーム切り替え」ができるようになります。 招待したユーザーにもメールが届きます 招待が承認されると、招待したユーザーに

By 阿部 隼也