【SwiftUI】Firebase Authenticationを導入して匿名認証ができるようにする

## はじめに
アプリ開発を行なっていく中で、FirebaseのAuthenticationを使用して匿名認証を実装する方法を学んだので、備忘録として内容をまとめます。
この記事では、アプリを起動すると画面にUIDが表示されるサンプルアプリを元に解説します。

## 環境
【Xcode】16.2
【iOS】18.2
【macOS】Sequoia 15.3.1
【Firebase iOS SDK】 11.11.0

## 匿名認証とは
Firebase Authenticationが提供するログイン方法の1つで、メールアドレスやSNS連携などを使わず、ユーザーがアプリを起動した時点で自動的に一意のID（UID）を付与する仕組み。

ログイン処理は不要で、ゲストユーザーとしてすぐにアプリを使ってもらえるため、ユーザー登録のハードルを下げたい場合や、まずは匿名状態で使ってもらい、後で本登録（メール・Google認証など）につなげたいときに便利。

## 1. Firebaseプロジェクトを作成する
- [Firebase Console](https://console.firebase.google.com/) にアクセス
- 「プロジェクトを作成」をクリック
- プロジェクト名を入力、Google AnalyticsはオフでもOK
- 「アプリを追加」でiOSアプリを選択
- Bundle IDを入力 (Xcodeの `Signing & Capabilities` で確認)
- `GoogleService-Info.plist`をダウンロード、Xcodeプロジェクトに追加

## 2. Firebase SDK をXcodeに導入する

- Xcodeメニューから「File > Add Package Dependencies...」を選択
- パッケージURLに以下を入力

   ```
   https://github.com/firebase/firebase-ios-sdk
   ```

- バージョンは「Up to Next Major」でOK
- 必要なライブラリを追加（今回は下記の2つ）
   - FirebaseCore
   - FirebaseAuth

## 3. Firebase Consoleで匿名認証を有効化する
- Firebase ConsoleのAuthenticationで、ログイン方法タブを選択し、「匿名」を選択
![スクリーンショット 2025-05-04 8.29.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/0802eb10-a80b-4e55-9152-919a455a335b.png)
- 匿名を有効にした状態で「保存」を選択
![スクリーンショット 2025-05-04 8.29.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/50c079ce-1c93-41a7-bdd5-dc9d74fd278b.png)

## 4. Firebaseをアプリ起動時に初期化する
- App構造体（App.swift）に下記を追加して、アプリ起動時にFirebaseを初期化するようにする

```swift
import SwiftUI
import Firebase

@main
struct FirebaseAuthTestApp: App {
    init() {
        FirebaseApp.configure()
    }

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

## 5. 匿名ログインの処理を実装
```swift
import SwiftUI
import FirebaseAuth

struct ContentView: View {
    @State private var userID: String = "ログイン中..."

    var body: some View {
        VStack(spacing: 20) {
            Text("匿名ログインユーザーのUID:")
                .font(.headline)
            Text(userID)
                .font(.footnote)
                .foregroundColor(.gray)
        }
        .padding()
        .onAppear {
            signInAnonymously()
        }
    }

    func signInAnonymously() {
        Auth.auth().signInAnonymously { authResult, error in
            if let error = error {
                print("エラー: \(error.localizedDescription)")
                userID = "ログイン失敗"
                return
            }

            if let user = authResult?.user {
                userID = user.uid
                print("ログイン成功: \(user.uid)")
            }
        }
    }
}
```

## 6. アプリをビルドして動作確認
- 実際にアプリを起動すると、以下のように画面にUIDが表示される

<img width=30%><img width=40% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/86b55efe-c9e4-42c2-91cc-151743ff86d1.png">


- Firebase Consoleのユーザータブでも、ログイン状況が確認できる
![スクリーンショット 2025-05-04 8.31.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4004493/e6afd564-08f5-479d-91b5-7bed20d70cf5.png)

## まとめ
今回は、Firebase Authenticationの「匿名認証」を使って、ログイン不要でUIDを取得・表示する簡単なiOSアプリを作成しました。

匿名認証は、ユーザー登録の手間を省きながらも、ユーザーごとのデータを管理できる便利な仕組みです。たとえば「ゲストとして体験 → 気に入ったら会員登録」といったステップにも活用できます。

自分が開発したアプリでは、アプリ内でユーザーごとのデータを分離して保存する必要があったため、匿名認証を導入しました。これにより、個人情報を取得せずにユーザー単位でデータ管理ができるようになりました。