FirestoreでのcreateAtやupdateAtなど時刻系を文字列で管理する

0

2022年04月03日 8:57

firestoreでcreateAtやupdateAtを管理する際はtimestampで管理されることが多いと思います。
この時刻系の管理をstringで管理する方法を今回はご紹介したいと思います。

イメージとしてはfitestoreが以下のようになります。
文字列で管理した場合

timestampで管理した場合

時刻系を文字列で管理するメリット

  • 言語組み込みの時刻オブジェクトへの変換が少なくて楽
  • 異なる言語でも時刻系の管理が楽になる

言語組み込みの時刻オブジェクトへの変換が少なくて楽

Goで構築されたバックエンドでフロントからリクエストを受け取るケースを想定します。
例えば、usersコレクションのcreateAtで範囲検索をしたい場合

文字列管理の場合

createAtパラメータをクエリストリングから受け取ります。

GET http://localhost:8080/v1/users?createAt=2022-01-11 20:45
img

createAtを取得したら、あとはバックエンドからそのまま文字列検索でcreateAtで検索するだけです。下記の例ではcreateAtが「2022-01-11 20:45」以降のusersを取得します。
img

time.Time管理の場合

Goの組み込み時刻オブジェクトtime.Timeusers.createAtを管理している場合。リクエストで受け取った文字列を一度time.Timeに変換する必要があります。

GET http://localhost:8080/v1/users?createAt=2020-05-03T12:04:05.000000Z
img
上記のようなtime.Timeへの変換処理が必要になります。文字列→time.Timeへの変換はフォマットを合わせたりと何かと面倒なことが多いので不要なら避けたいところだと思います。

異なる言語でも時刻系の管理が楽になる

フロントとバックエンドが異なるというのは開発現場では良くあることだと思います。フロントはReact.js、TypeScriptを使い、バックエンドは並行性やシンプルな特徴を活かしたGoにするなど。その場合各言語での日付系の処理は把握するのが面倒なところだったりします。そこを文字列で統一することで可読性の向上やフロント、バックエンド間でのコミュニケーションを減らすこともできるので、今後firestoreを導入する際は検討してみてはいかがでしょうか。

メモ

文字列でもWhere, StartAfterなどfirestoreのクエリは問題なく動作しました。

# Go
# Firestore
0

診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。

目次を見る