【サンプルコードあり】Firebase Cloud FireStoreをSwiftUIで使ってみた

Swift

はじめに

SwiftUIでFirebaseCloud FireStrore(以降FireStore)を利用したので、備忘録として残します。

本記事では、Firebase側の初期設定、iOSアプリ(SwiftUI)からFireStoreへデータを登録するまでの手順を知ることができます。

対象者

対象者は以下になります。

  • SwiftUIからFireStoreを利用使用と考えている方
  • SwiftUIからFireStoreの使い方がわからない方

利用手順の説明

それではこれからFireBase Cloud Firestoreの利用手順を説明していきます。基本的には以下の公式サイトの手順をベースに実施しました。公式の資料を利用したい方は以下を参照ください。

Cloud Firestore を使ってみる  |  Firebase

それでははじめていきます。

前提

本記事を読むにあたり以下の項目が完了していることを前提として話していきます

  • SwiftUIでiOSプロジェクトを作成して、Xcodeで起動できる
  • FireBaseにログインしていいること

それでは実際にFirebaseの初期設定から始めていきます。

Firebaseの初期設定

Firebaseのサイトにアクセスする

以下のFirebaseのサイトにアクセスします。

Firebase | Google's Mobile and Web App Development Platform
Discover Firebase, Google’s mobile and web app development platform that helps developers build apps and games that user...

以下のサイトにアクセスします。右上の「Go to console」をクリックします。

「Firebaseプロジェクトを作成」でプロジェクトを作成します。

プロジェクトとの名前を付けて続行

FirebaseプロジェクトのAIアシスタンスはそのままで続行

GoogleアナリティクスOFFで続行

以下の画面になれば完了

そのまま「続行」を押して次に進みます。

Firebase側でiOSアプリの追加

次に、Firebase側に今回利用するiOSアプリを追加していきます。以下のような画面に遷移していると思います。以下の「iOS+」をクリックする。

バンドルIDを追加する。アプリのニックネームとApple Store IDは省略してOKです。

BunndleIDは、自身のプロジェクト名.xcodeproj の、TARGETを自身のプロジェクト名、Signing&Capabilitiesで確認できます。

アプリを登録を押下

以下の画面に遷移するので、「GoogleService-info.plisのダウンロード」をクリックしダウンロードする。

GoogleService-info.plisは以下に格納する

ここまででFirebase側の初期設定は完了です。Firebaseのサイトは開いたままにしてください。

iOSプロジェクト側の設定

次にiOSプロジェクト側の設定を追加していきます。

Xcodeで[File] > [Add Packagers]を開きます。

右上の検索欄にFirebase SDKのURLを入れて検索をします。「firebase-ios-sdk」を選択する。

SDKのURLは、Firebaseの先ほどの続きにあります。

以下のように選択画面が出てくるので、「Add Package」でfirebase-ios-sdkを追加。

以下のように左に「Package Dependencies」が出てくれば成功

iOSプロジェクトの、.xcodeprojを開く

Targert > 自身のプロジェクト名 > を開く

Framework、Librarys、and Embedded Contentの+をクリックする

以下のような画面がでてくるので検索欄で「Firebase Firestore」を選択する。

以下のように「Firebase Firestore」が追加されていればOK

次にソースでFirebase Cloud Firestoreを追加していきます。

まず、「プロジェクト名App.swift」に以下のように設定する。

プロジェクト名App.swift

import SwiftUI
import SwiftData
import FirebaseCore

//ここを追加
//firebaaseの初期化設定
class AppDelegate: NSObject, UIApplicationDelegate {
  func application(_ application: UIApplication,
                   didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()
    return true
  }
}


@main
struct TestApp: App {
  //ここを追加
	@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate
	
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

次に、データを追加する画面を作成します。基本的には公式のサンプルコードを利用して作成しています。

ContentView.swift


import FirebaseCore
import FirebaseFirestore
import SwiftUICore
import SwiftUI

struct ContentView: View {
    @State private var users: [User] = []
    
    var body: some View {
        List(users) { user in
            Text("\(user.name) - \(user.age)")
        }
        .onAppear {
            let db = Firestore.firestore()
            db.collection("users").getDocuments { (querySnapshot, error) in
                if let error = error {
                    print("Error getting documents: \(error)")
                } else {
                    for document in querySnapshot!.documents {
                        let data = document.data()
                        let name = data["name"] as? String ?? ""
                        let age = data["age"] as? Int ?? 0
                        let user = User(id: document.documentID, name: name, age: age)
                        users.append(user)
                    }
                }
            }
        }
        
        Button("Add Data") {
            let db = Firestore.firestore()
            db.collection("users").addDocument(data: [
                "name": "Taro",
                "age": 30
            ]) { error in
                if let error = error {
                    print("Error writing document: \(error)")
                } else {
                    print("Document successfully written!")
                }
            }
        }
        
    }
}

struct User: Identifiable {
    let id: String
    let name: String
    let age: Int
}

これでiOS側の設定が終わりです。

次にFirebase側で、FireStoreの設定をしていきます。

Firebase Cloud FireStoreの設定

Firebaseを開き自身のプロジェクトを開いてください。

Firebase Databasesを選択する。その後、「データベースを作成」を選択する。

以下のような画面となるので、データベースIDをdefault、ロケーションをasia-northeast1(Tokyo)を選択し「次へ」押下。

セキュリティのルールでは、「テストモードで開始」を選択する

以下のような画面に遷移できれば完了です!

実行

それでは、最後に実行します。

実行すると以下のような画面が出てくるので、「Add Data」を押下

Firebase側を確認してみるて以下のようになれば完成です!!

最後に

ここまで読んでいただきありがとうございました。今後Firestoreの使い方も解説していければと思います。

プロフィール

SIer勤めのエンジニア
アプリケーションエンジニアとして、WebやiOSなどのアプリ開発をメインにしてます

tomaをフォローする
Swift