中野智文のブログ

データ・マエショリストのメモ

Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。

background

firestore からデータを取得する良い方法を探して公式ドキュメントを眺める。

firebase.google.com

すると、

一部の言語では、カスタムのオブジェクト タイプを使用する方が便利な場合が多くあります。

と書いてあるではないか?

doc_ref = db.collection(u'cities').document(u'BJ')

doc = doc_ref.get()
city = City.from_dict(doc.to_dict())
print(city)

Cityというカスタムのオブジェクトタイプに戻すのか。pythonはどうやらfrom_dict関数によってサポートされているらしい。

カスタムのオブジェクトタイプとは?

どうやらデータの追加のセクションにあるらしい。

firebase.google.com

つぎのような心強いお言葉が。

Cloud Firestore では、カスタムクラスを使ったドキュメント作成をサポートしています。
Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。

Webのサンプルコードは次の様。

class City(object):
    def __init__(self, name, state, country, capital=False, population=0,
                 regions=[]):
        self.name = name
        self.state = state
        self.country = country
        self.capital = capital
        self.population = population
        self.regions = regions

    @staticmethod
    def from_dict(source):
        # ...

    def to_dict(self):
        # ...

    def __repr__(self):
        return(
            f'City(\
                name={self.name}, \
                country={self.country}, \
                population={self.population}, \
                capital={self.capital}, \
                regions={self.regions}\
            )'
        )

肝心な from_dict クラスは省略されている。このカスタムオブジェクトクラスも、単なる objectクラスから作られていない?

Cloud Firestore は、オブジェクトをサポートされているデータ型に変換します。

ってどういう意味だろう。日本語の翻訳誤りかな。英語で見てみると、

Cloud Firestore converts the objects to supported data types.

誤りはなさそうだ。。。だが、何もサポートされていないじゃないかな…。一応コードを見てみる。

github.com

全部自前でやってるじゃないか。どこにもライブラリでなんとかしている箇所がない。

まとめ

Cloud Firestore は、オブジェクトをサポートされているデータ型に変換しません。 ご自分で頑張って下さい。