Skip to content

機能追加: スナップショットリスナーに差分更新機能を追加 - #68

Merged
fummicc1 merged 1 commit into
mainfrom
feature/firestore-document-changes
Feb 11, 2026
Merged

機能追加: スナップショットリスナーに差分更新機能を追加#68
fummicc1 merged 1 commit into
mainfrom
feature/firestore-document-changes

Conversation

@fummicc1

Copy link
Copy Markdown
Owner

概要

Firestoreのスナップショットリスナーで、コレクション全体ではなく変更されたドキュメントのみを受け取れる新しいAPIを追加しました。

背景

現在のlisten()メソッドはsnapshots.documentsを使用して全ドキュメントを返却しており、1件の変更でもコレクション全体の処理が走る非効率な実装になっていました。

Firebase SDKのdocumentChangesAPIを活用することで、差分のみを返却できるようになります。

主な変更内容

追加した型

  • FirestoreDocumentChangeType: 変更タイプを表すenum (added/modified/removed)
  • FirestoreDocumentChange<Model>: 変更情報を格納するstruct

追加したメソッド

メソッド 用途
listenChanges(filter:includeCache:order:limit:) Collection用差分リスナー
listenChanges(parent:superParent:filter:includeCache:order:limit:) SubCollection用差分リスナー
listenCollectionGroupChanges(collectionName:filter:includeCache:order:limit:) CollectionGroup用差分リスナー

使用例

for try await changes in client.listenChanges() as AsyncThrowingStream<[FirestoreDocumentChange<MyModel>], Error> {
    for change in changes {
        switch change.type {
        case .added:
            print("追加: \(change.document)")
        case .modified:
            print("変更: \(change.document)")
        case .removed:
            print("削除: \(change.document)")
        }
    }
}

後方互換性

既存のlisten()メソッドは変更なく、後方互換性を維持しています。

テスト

  • xcrun swift build でビルド成功を確認

レビューポイント

  • 型定義(FirestoreDocumentChangeType, FirestoreDocumentChange)の設計
  • mapDocumentChangesヘルパーメソッドの実装
  • 各リスナーメソッドの実装パターンの一貫性

Firestoreのスナップショットリスナーで、コレクション全体ではなく
変更されたドキュメントのみを受け取れる新しいAPIを追加しました。

追加した型:
- FirestoreDocumentChangeType: 変更タイプ (added/modified/removed)
- FirestoreDocumentChange<Model>: 変更情報を格納するstruct

追加したメソッド:
- listenChanges(): Collection用差分リスナー
- listenChanges(parent:superParent:...): SubCollection用差分リスナー
- listenCollectionGroupChanges(): CollectionGroup用差分リスナー

既存のlisten()メソッドは変更なく、後方互換性を維持しています。
@fummicc1
fummicc1 merged commit b6f64ef into main Feb 11, 2026
4 checks passed
@fummicc1
fummicc1 deleted the feature/firestore-document-changes branch February 11, 2026 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant