3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cloud FirestoreでUniqueを実現する2手法とその使い分け

Last updated at Posted at 2020-09-08

Cloud FirestoreでUniqueを実現する方法は2種類あるように思います。

ユーザ権限

これはクライアント側、つまりWebやアプリのユーザ側に公開されている権限で処理を行う場合です。
この場合はDocument IDを、Unique Keyにするしか無いでしょう。
ドキュメントを読んでもフィールドを基準にUniqueにする方法は用意されていないように思います。

Firestoreのruleでcreateのみを許可するようにしておけばUniqueとなります。
UniqueKeyとした同じDocumentIDで書き込みを行った場合にupdateとなりFirestore Ruleに違反するので上書きが行われなくなりUniqueであることを担保できます。

ただし、updateが起きた際にエラーになってしまうので
後述するTransactionを使った手法を使ってエラーが出ないようにすることを推奨します。

サービスアカウント権限

Admin SDKを使う場合の手法です。
Admin SDKは、Firebase Ruleを無視してしまうので前述のcreateのみを許可する方法は使えません。

こちらの場合は、単純にTransactionを使うと良さそうです。
(実際にUniqueが担保されるかは、この記事を書いてる時点では筆者は未検証です)
https://cloud.google.com/firestore/docs/manage-data/transactions?hl=ja

2手法の比較

ユーザ権限でもTransactionだけを使えば良さそうですが、問題があります。

ユーザ側の権限での実行については、自由に処理を作ることが出来るので、updateやdeleteを行われる可能性があるのでcreateのみを許可しておくと良さそうです。

ネットワークに接続されたシステムでは、このようなケースもカバーしておくことが求められます。

対して、サービスアカウント権限はこのような悪さをしない事が分かっているので、Transactionだけで対応する事ができています。

3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?