
バックエンドを簡単に実装できるFirebaseですが、この記事ではその中でもデータベースの機能を持つFirestoreの使い方をまとめておきます。
Firebaseでのアプリそのもののプロジェクトの作成や、開発環境(Podfileへポッドの追加)がまだの方は公式サイトを参考に済ませておきましょう。
目次
Firestoreの初期化
では早速iOSアプリにFirestoreを導入していきます。
まずはAppDelegate.swiftにFirestoreのインスタンスを生成します。
追記するのは以下のコードです。
1 2 3 4 5 6 |
import Firebase FirebaseApp.configure() let db = Firestore.firestore() |
Firestoreにデータを保存(=コレクションとドキュメントの作成)
上記を済ませると早速Firestoreが使えるようになります。
まずは、保存したいデータをドキュメントに保存します。
Firestoreの構造(コレクション/ドキュメント/フィールド等)
まずはFirestoreの中身がどういう作りになっているのか説明します。
保存したいデータはドキュメントに保存されますが、ドキュメントはコレクションの中にまとめられています。上の画像のようなイメージです。
データを初めてドキュメントに追加すると、自動(暗黙)的にコレクションとドキュメントが作成されます。
Firebaseのコンソール画面(↑画像)で確認すると、
- コレクション:users
- ドキュメント:oNsR6mGgYVYpi0YrzXi7rUvIO0Y2
が作成されているのがわかります。
また、画面右側の「emailAdress」、「userName」などはキー値と呼ばれ、キー値が示す「"1"」などはvalueと言います。
キー値とvalueのセットはフィールドと呼ばれます。
Firestoreにデータを保存するコード
以下のコードで保存したいデータをFirestoreに収めることができます。同時に、コレクションとドキュメントを作ることにもなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//見本(必須)のコード var ref: DocumentReference? = nil ref = db.collection("users").addDocument(data: [ "XXX": "xxx", "YYY": "yyy", ]) { err in if let err = err { print("Error adding document: \(err)") } else { print("Document added with ID: \(ref!.documentID)") } } |
例えば私の場合は、
このように定数userIDにAuthの.uidを代入し、それ(userID)をドキュメント名にしています。(画像90行目)。
こうすることで上のFirebaseのコンソール画面の画像のようにドキュメント名がAuthの.uidと同じになります。
新しいドキュメントを既存コレクションに追加する
1 2 3 4 5 6 7 8 9 10 11 12 |
////見本(必須)のコード ref = db.collection("users").addDocument(data: [ "XXX": "xx", "YYY": "yy", "ZZZ": "zz", ]) { err in if let err = err { print("Error adding document: \(err)") } else { print("Document added with ID: \(ref!.documentID)") } } |
先ほどはなかったフィールド「"ZZZ": "zz"」を含めたデータを別のドキュメントを作って保存できます。
Firestoreのデータを取得
様々なデータの取得方がありますが、一つずつ見ていきます。
コレクション全体を取得
データをfirestoreに保存したら、そのデータをアプリ側で取得できます。以下は、コレクション全体を取得する際のコードです。
1 2 3 4 5 6 7 8 9 10 11 12 |
//見本(必須)のコード db.collection("users").getDocuments() { (querySnapshot, err) in if let err = err { print("Error getting documents: \(err)") } else { for document in querySnapshot!.documents { print("\(document.documentID) => \(document.data())") } } } |
特定のドキュメント/フィールドを取得する
コレクション全体ではなく、コレクションの中から特定のドキュメントあるいは特定のフィールドを取得することもできます。(公式サイト)
例えば私の場合は、
111行目db.corection("users")
でコレクションを指定し、.whereField("emailAddress", isEqualTo: emailText2).getDocuments()
で、キー値"emailAddress"に対応するValueが、ユーザーの入力したアドレス(変数emailText2に代入されている)と等しいドキュメントを指定できます。
さらに、その下で
let data = document.data()
let value = data["emailAddress"]
これにより、指定したドキュメント内でキー値"emailAddress"で保存されている値を取得(定数valueに代入)できます。