初めに
あまりに久しぶりなので、アカウントがどこいったか状態でした
Unityでライトゲームを作ってたらデータを保存やらなんやらが必要になったのでFirebaseをいじった
最初はUnityからFireStoreを操作してたんだけど、サーバ側処理がどうしても必要だったのでfunctionsでやったのだけど
Firestoreは自分が知ってるRDBMSの世界とちょっと違ったので整理してみた
環境
Mac上にVSCode入れてFirebaseEmulatorを入れ、Firestoreとfunctionsで色々実装している
NodeJSの上のJavascript
多分、どの開発環境でもクラスの構成やらメソッドは同じ。
(ただし、環境によってはメソッドが実装されていないものがある模様。Unity版とか特に・・・)
大体の掴み
Database⇨Collection⇨Document⇨Dataという階層構造の模様
実装自身は○○Referenceというものと、◯◯Snapshotというのでできている
大事なこと
本来はこちらを参照するべき
https://firebase.google.com/docs/reference
助けになりそうなクラス達
自分でごっちゃになったのでまとめてみた
実装例は気が向いたら別文章にする、、、かな?
※メソッドは全部網羅はしておりません
Firestore
ここで使うのは、collectionとバッチ、トランザクションくらいか。
Return | Property | 説明 |
---|---|---|
App | app | サーバインスタンス |
Return | Method | arg | 説明 |
---|---|---|---|
WriteBatch | batch | バッチの準備 | |
CollectionReference | collection | path | コレクションリファレンスを返す |
Query | collectionGroup | id | コレクションIDが含まれるコレクショングループを作るqueryを返す |
DocumentReference | doc | pathToDoc | パスに示されたドキュメントリファレンスを返す |
Promise | runTransaction | トランザクションの準備 |
CollectionReference
Queryとして使うことの方が多いかもしれない
Queryの派生クラスなのでQueryも同じメソッド、プロパティがある
Return | Property | 説明 |
---|---|---|
string | id | コレクションのID |
Return | Method | arg | 説明 |
---|---|---|---|
DocumentReference | add | DataObject | ドキュメントの追加、IDは自動生成 |
DocumentReference | doc | path | ドキュメントリファレンスの取得 |
Query | endAt | docShot | そのドキュメントが最後になるQueryを返す |
Query | endAt | FieldValue | 指定されたフィールドが最後になるqueryを返す |
Query | endBefore | endAtと同じ | endAtの一つ前 |
Query | startAt | endAtと同じ | endAtのStart版 |
Query | startAfter | endAtと同じ | StartAtの一つ後ろ |
Query | where | fieldName,,option,value | where節。条件フィールド、条件、条件データ |
Query | orderby | fieldName,option | ordeeby節。ソートフィールド、オプション(asc,desc) |
Query | limit | number | 取得数を制限する |
Query | limitToLast | number | 最後に一致した結果を指定数返すクエリーを返す |
Promise QuerySnapshot | get | 多分、Collectionでは使わぬ(全件取得) |
DocumentReference
Return | Property | 説明 |
---|---|---|
string | id | DocumentのID |
string | path | Documentへのpath |
Return | Method | arg | 説明 |
---|---|---|---|
CollectionReference | collection | path | サブコレクションの取得など |
Promise | update | Object | ドキュメントを更新(ドキュメントがなければ失敗) |
Promise | set | Object | ドキュメントを更新(なければ追加) |
Promise | delete | ドキュメントを削除 | |
Promise DocumentSnapshot | get | ドキュメントの実態を取得 |
QuerySnapshot
Query実行⇨結果をForEachで回しながら何かをする、とか。
Return | Property | 説明 |
---|---|---|
Array | docs | QueryDocumentSnapshotの配列を返す |
number | size | docsのサイズ |
boolean | empty | 空かどうか |
Query | query | このSnapshotを作成したQueryを返す |
Return | Method | arg | 説明 |
---|---|---|---|
Array | docChanges | Snapshotを取得してから変更されたDocumentChangeの配列を返す | |
forEach | 説明不要? |
DocumentSnapshot/QueryDocumentSnapshot
基本的には同じ。
QueryDocumentSnapshotはQuerySnapshotのForEachで使うのでExistsは常にTrueでUndefinedはない
Return | Property | 説明 |
---|---|---|
boolean | exists | そのドキュメントがあるか |
string | id | ドキュメントのID |
DocumentReference | ref | そのドキュメントのReference |
Return | Method | arg | 説明 |
---|---|---|---|
Object | data | ドキュメントデータが入ったオブジェクト。ドキュメントがないとundefined | |
Any | get | fieldName | フィールドデータ |
boolean | isEqual | DocumentSnapshot | 引数と同じかどうか |
FieldValue
更新時にフィールドデータに特定の値を入れたい時に使う。すべてStaticメソッド
Return | Method | arg | 説明 |
---|---|---|---|
FieldValue | arrayRemove | array | 更新時に配列フィールドから削除する要素を準備する |
FieldValue | arrayUnion | array | 更新時に配列フィールドに追加する要素を準備する |
FieldValue | delete | 更新時にそのフィールドを削除するようマークする | |
FieldValue | increment | num | 更新時に数字をインクリメントする |
FieldValue | serverTimestamp | 更新時にサーバ側のタイムスタンプを使う |
TransactionとWriteBatch
トランザクションは読み込みが先でないと失敗する
データを取得し、それに加工して更新する時など。
Return | Method | arg | 説明 |
---|---|---|---|
Transaction | delete | Documentreference | ドキュメントを削除する |
Promise DocumentSnapshot | get | DocumentReference | ドキュメントを取得する |
Transaction | set | DocumentReerence,Object | ドキュメントの更新(ドキュメントがない場合追加) |
Transaction | update | DocumentReference,Object | ドキュメントの更新(ドキュメントがないと失敗)、ネストのデータも更新可能 |
WriteBatch
複数の更新を一気にやりたいとき
commit以外はTransactionと同じメソッド。戻りがWriteBatchになる
Return | Method | arg | 説明 |
---|---|---|---|
WriteBatch | delete | Documentreference | ドキュメントを削除する |
Promise DocumentSnapshot | get | DocumentReference | ドキュメントを取得する |
WriteBatch | set | DocumentReerence,Object | ドキュメントの更新(ドキュメントがない場合追加) |
WriteBatch | update | DocumentReference,Object | ドキュメントの更新(ドキュメントがないと失敗)、ネストのデータも更新可能 |
Promise | commit | バッチ処理の実行 |
続く
かな?