2026-02-11 bouzuya/serde-firestore-value 0.26.1 を公開した
bouzuya/serde-firestore-value を 0.26.1 にアップデートした。
serde-firestore-value は crates:serde のデータフォーマットのひとつで、 crates:googleapis-tonic-google-firestore-v1 の Value をデータフォーマットにするもの。 crates:googleapis-tonic-google-firestore-v1 は crates:tonic (内部的には crates:prost を使用) で googleapis/googleapis の proto を Rust にしたもののうち、 Firestore V1 API を対象にしたもの。
簡単に言うと serde-firestore-value は Firestore V1 API で使用するデータ型に serde での変換を提供する crate 。
今回の 0.26 での変更点は FieldReferenceValue, FunctionValue, PipelineValue への対応。これは Firestore の実験的な機能に使われるもの。
Firestore は Enterprise edition かつ native mode のデータベースに対しての pipeline という新しいクエリインタフェースを追加している。公式のドキュメントは https://firebase.google.com/docs/firestore/pipelines/get-started-with-pipelines にある。
パイプラインクエリを実行する API が追加されていて、パイプラインは複数のステージを持つ。ステージにはクエリの対象となるデータソースを表す入力ステージや、それらを条件で絞り込んだり集計したりする変換ステージがある。変換ステージには関数を指定したり、関数の対象としてフィールドの参照を指定できる。
……とまあこんな感じで FieldReference, Function, Pipeline (あとは Stage) が追加されている。
Enterprise edition にしておかないといけないので、検証にもひとてまかかった (bouzuya/bouzuya-firestore-client で検証した) 。 Enterprise edition だと Firebase コンソールの見え方もすこし違っていて、 Query Explain なども表示されていて、なかなか良さそうだった。
proto から生成した Function や Pipeline や Stage を使用してしまうと serde::Serialize / serde::Deserialize できない Value を含んでいるので、そこを避けるために serde-firestore-value から独自の型を追加で定義することになった。今回の実装が大げさになってしまった要因のひとつである。
軽く検証したものの、細かく使えていないので何か問題があるかもしれない。今回のリリースはリファクタリングもそれなりに含んでいるので、そこでの問題もあるかもしれない。
くたびれた。
今日のコミット。
- bouzuya-firestore-client 8 commits
- serde-firestore-value 4 commits
- tsukota-web 3 commits
- googleapis-tonic 1 commit