[Xcode/Swift] GPT先生と学ぶFirebase(導入、概念編) No.0

  • Firebaseって名前は聞いたことあるけど、実際何ができるのか
  • CocoaPodsじゃなくてSwift Package Managerで入れたい
  • Dev環境と本番環境の切り替え方法は?

この章では「まずはFirebaseを使える状態にする」ところまで、ざっくりと学んでいく

そもそもFirebaseとは?

Firebase = Googleが提供してるモバイル向けバックエンドサービス群
iOSエンジニア的には、一旦これだけ覚えればOK:

機能できること
Authenticationユーザーログイン(メール/Apple/Google etc)
FirestoreクラウドNoSQLデータベース
Cloud Storage画像/動画などのファイル保存
Cloud Functionsバックエンドロジック実行(Node.js)
Crashlyticsクラッシュログ収集
Remote Configアプリの設定をリモートで変更
Messagingアプリの通知、InAppでポップアップモーダル表示

全部Swiftで使えるSDKが揃ってるし、無料枠でもかなり使える。

SPM(Swift Package Manager)でFirebaseをインストール

💡 手順:

Xcodeで、File > Add Package Dependencies…を選択
必要なモジュールだけ選択

FirebaseAuthFirebaseFirestoreとか、わからなければ一旦全部入れてOK

基本設定(GoogleService-Info.plist)

Firebase Consoleでプロジェクト作成して

  • iOSアプリ登録(Bundle IDはXcodeと同じに)
  • GoogleService-Info.plist をDLして、Xcodeプロジェクトにドラッグ&ドロップ

コンソール画面がこんな感じになっていればOK、左のリスト一覧でそれぞれのFirebase機能を設定できる。

⚠️ Git管理するならGoogleService-Info.plistはgitignoreに入れる

理由:

  • APIKeyやその他認証情報が含まれているので乗っ取られるととてもよろしくない
  • 誤って本番用を公開リポジトリにコミット→事故る可能性大

.gitignoreに↓を追加しておく

# Firebase
GoogleService-Info.plist

環境ごとの切り替え(Development / Staging / Production)

  1. Firebase Consoleでそれぞれの環境用にアプリを作る(3つのGoogleService-Info.plistをDL)
  2. ファイル名を分ける (GoogleService-Info-Development.plist, GoogleService-Info-Staging.plist, GoogleService-Info-Production.plist
  3. Build Configurationごとにロードする処理を書く ↓
import Firebase

@main
struct YourApp: App {
    init() {
        let fileName: String

        #if RELEASE
        fileName = "GoogleService-Info-Production"
        #elseif STAGING
        fileName = "GoogleService-Info-Staging"
        #else
        fileName = "GoogleService-Info-Development"
        #endif

        if let path = Bundle.main.path(forResource: fileName, ofType: "plist"),
           let options = FirebaseOptions(contentsOfFile: path) {
            FirebaseApp.configure(options: options)
        }
    }

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Development, Staging , Productionの環境設定自体はここで行う

.xcconfigを使って環境変数を定義しておくと、CIでもビルドしやすくなる。(これはまた別の機会に)

一旦これで初期設定はOK、Command + Bを実行してコンパイルエラーがでなければ使えるようになります。

まとめ

  • Firebaseは「AuthもDBも通知も全部できる」モバイル開発の味方
  • SwiftPMで楽に導入できる
  • GoogleService-Info.plistgitに含めず、環境ごとに切り替える

次回から、実際に各Firebaseの機能を触っていきましょう。