💭

StudyArena 部門機能デバッグ録 – Firestore ルールでハマった点と解決までの流れ

に公開

はじめに

StudyArena の「部門」機能で、

  • 部門が保存されないように見える
  • 参加ボタンが押せない/状態が反映されない
  • ランキングが表示されない
    といった症状に直面しました。本記事では、実際のログ・コード・Firestore セキュリティルールをもとに、原因の切り分けから最小修正、設計の整理案までをまとめます。

事前情報(環境)

  • 認証: Firebase Auth 匿名認証(signInAnonymously
  • DB: Cloud Firestore
  • クライアント: Swift / SwiftUI
  • 該当コード: MainViewModel.swift

症状の概要と再現手順

  • 症状
    • 起動時に Missing or insufficient permissions.(Code=7)が発生
    • department_memberships の読み取りで失敗
    • 参加状態が UI に反映されない/復元されない
    • ランキングが常に空
  • 再現手順(例)
    1. アプリ起動(匿名認証)
    2. loadUserDataloadDepartmentsfetchUserMemberships が走る
    3. fetchUserMemberships のクエリで Code=7

解決手段

今回のエラー(Code=7)は、department_memberships へのアクセスルール未定義が原因でした。トップレベルに以下のルールを追加して解消しました。

match /department_memberships/{docId} {
  allow read: if request.auth != null && resource.data.userId == request.auth.uid;
  allow write: if request.auth != null && request.resource.data.userId == request.auth.uid;
}

そもそもルールの方で、コレクション作成についてのルールが制定されていなかった感じです。

Discussion