初めに
あまりに久しぶりなので、アカウントがどこいったか状態でした
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 | バッチ処理の実行 |
続く
かな?