Webアプリ「出退勤管理アプリ」を作ってみた

Firestoreとは?

Firestore(Cloud Firestore)の仕組みを初心者でもわかるように、イメージと例を交えながら解説します。

🔷 1. Firestoreとは?

Firebaseが提供する リアルタイムのNoSQLデータベース です。

  • ✅ データを「コレクション」と「ドキュメント」で管理
  • ✅ JSONのような形式で保存
  • ✅ 自動でリアルタイム同期ができる(変更が即座に反映される)

🔶 2. Firestoreの基本構造

Firestoreは、次のような階層構造でデータを管理します:

📁 コレクション (例: users)
 ┗ 📄 ドキュメント (例: ユーザーID)
     ┣ 📄 フィールド (例: name, email)
     ┗ 📁 サブコレクション(例: attendance)

例:

users(コレクション)
 ┗ doc id(ドキュメント:ユーザーUID)
     ┣ name: "ユーザー①"
     ┗ email: "〇〇〇〇〇〇@〇〇〇〇.com"

attendance(コレクション)
 ┗ doc id(ドキュメント)
     ┣ uid: "〇〇〇〇〇〇"
     ┣ type: "出勤"
     ┗ timestamp: 2025/5/15 22:44

🔶 3. クエリとは?

クエリ(query) とは、データを検索・取得するための命令です。

たとえば、次のように書くと:

query(
  collection(db, "attendance"),
  where("uid", "==", userUid),
  orderBy("timestamp", "desc"),
  limit(1)
)

これは以下の意味です:

「attendanceの中から、uidが自分のUIDと一致していて、timestampの新しい順に1件だけ取得する」

🟥 4. なぜインデックスが必要?

Firestoreでは、特定のクエリを高速に処理するためにインデックスが必要になります。

🔹 インデックスとは?

インデックスは、**本の「さくいん」やExcelの「フィルタ」**のようなもの。

  • データが多くなっても、すぐに見つけられるようにする「目次」
  • 特に、複数条件(whereorderByなど)で検索するときに必要

🔸 5. インデックスが必要な場合の例

例えば、次のようなクエリ:

where("uid", "==", uid)
orderBy("timestamp", "desc")

これは「uidで絞って」「timestampで並び替え」なので、複合インデックスが必要になります。

Firestoreは、

  • 単一条件だけならインデックス不要なこともある
  • 複数条件があるとエラーとともに自動でインデックス作成URLを教えてくれる

🟢 6. インデックス作成はどうする?

インデックスエラーが出たら:

  • コンソールに表示されたURLを開く
  • 「作成」ボタンを押すだけ!
  • 数分待てば使えるようになります

🎯 まとめ:Firestoreの仕組みポイント

項目説明
コレクションデータのグループ(例: usersattendance
ドキュメント実際のデータ(例: ユーザー1人の情報)
フィールドドキュメントの中身(名前、メール、日付など)
クエリ条件でデータを検索する命令
インデックス検索を速く・効率的にするための「さくいん」
インデックスエラー「このクエリにはインデックスが必要」と教えてくれる