blog.bouzuya.net

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-v1crates: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 から生成した FunctionPipelineStage を使用してしまうと serde::Serialize / serde::Deserialize できない Value を含んでいるので、そこを避けるために serde-firestore-value から独自の型を追加で定義することになった。今回の実装が大げさになってしまった要因のひとつである。

軽く検証したものの、細かく使えていないので何か問題があるかもしれない。今回のリリースはリファクタリングもそれなりに含んでいるので、そこでの問題もあるかもしれない。

くたびれた。


今日のコミット。