以下の内容はhttps://tech.gamewith.co.jp/entry/2026/02/10/185125より取得しました。


Firestore Pipeline オペレーションで文字列検索ができるようになったので試してみた #GameWith #TechWith

はじめに

こんにちは! GameWith サービス開発部のスケールアーキテクトチームです。

スケールアーキテクトチームでは、技術調査会という取り組みを定期的に行っており、GameWithで活用されている技術を中心に最新情報を調査し、優先度が高いものは各組織や会議体への周知をしたり、実際に改善を行ったりしています。

今回は、技術調査会でキャッチアップした中から、Firestore の Enterprise エディションで新しく使えるようになった Pipelineオペレーションについて紹介します。

Get data with Firestore Pipeline operations  |  Firebase

Pipelineオペレーションとは

新しい Firestore Enterprise エディションには、大きく2種類のクエリ手段があります。

  • Coreオペレーション(従来のFirestoreのクエリ)
  • Pipelineオペレーション

Pipelineオペレーションでは従来のオペレーションではできなかった、複雑な条件によるデータの取得が可能になったり、インデックスの作成も任意になることでパフォーマンス最適化が容易になるなど様々な改善がされているようです。

Pipelineオペレーションは現在プレビュー (pre-GA) として公開されており、サポートが制限される可能性があるため、その点に注意が必要です。

Firestore Enterpriseの環境を作ってみる

Firebase Console から作る場合は概ねこんな流れです。

  1. Firestore Database を開く
  2. Add database / Create database
  3. Enterprise editionを選択
  4. Firestore in Native modeを選択
  5. Database ID を入力(例:defaultenterprise など)

Firestore Enterprise エディションのデータベース作成

試してみた

test用コレクションのデータ定義

{
  likeCount: number
  message: string
  createdAt: timestamp
  updatedAt: timestamp
}

FirebaseのUIから複数のデータ投入ができなかったので、今回はJavaScriptのFirestoreのSDKからテストデータの投入を行いましたが、本質的なところではないので割愛します。

1. select対象のフィールドを選択できるようになった

SELECTで必要なフィールドだけ指定して取得できるようになりました。

db.pipeline().collection('test')
  .where(field("message").like("%栃木県%"))
  .select(field("likeCount"), field("message"))
  .limit(101)

SELECTで必要なフィールドだけ取得

2. 文字列検索(LIKE検索/正規表現)ができるようになった

Pipelineの文字列関数に LIKE があり、%_ のワイルドカードでパターン検索できます。

db.pipeline().collection('test')
  .where(field("message").like("%栃木県%"))
  .limit(101)

LIKE検索

より複雑な文字列絞り込みを行いたい場合でも、正規表現による検索で対応できます。

3. 集計関数が便利になった

例えば、絞り込んだ上でユニークなものを集計することができます。

db.pipeline().collection('test')
  .where(field("message").like("%栃木県%"))
  .aggregate(field("message").countDistinct().as("unique_message"))

likeでの絞り込みむと以下のようになります。

LIKEでの絞り込み件数

countDistinctを使った場合、「栃木県栃木市」が重複しているため3件になります。

countDistinctを使った場合の件数結果

まとめ

  • Firestore の Enterprise エディションで新しく使えるようになった Pipelineオペレーションでは、次のようなクエリが書けるようになりました
    • LIKE(部分一致)/ 正規表現
    • select(投影)
    • countDistinct などの集計
    • 他にも多くの集計関数がありますので、詳しくはこちらのドキュメントを参照
  • インデックスの追加が必須ではなくなり、インデックスが存在しないエラーが起きなくなりますが、パフォーマンスチューニングにおいて注意が必要です。
  • プレビュー版ですので、随時機能の変更などが行われる可能性があります。

参考(公式)

おわりに

GameWithではFirestoreを使った小規模プロジェクトを立ち上げることが多いため、複雑なクエリを書くことができなかったりする部分で苦労したことがありました。 今回それを解決できるリリースが行われたことをとても嬉しく思っています!

また、GameWithではエンジニアを絶賛募集中です。ご興味ありましたら是非カジュアル面談をお申し込みください!

github.com




以上の内容はhttps://tech.gamewith.co.jp/entry/2026/02/10/185125より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14