micomia株式会社の畑井です。
今回は、Firestoreを使う際に迷いがちな「サブコレクションにするか、独立コレクションにするか」について、判断基準をわかりやすく整理していきます。
FlutterFlowで開発している方にも役立つ内容です。
1.サブコレクションとは
Firestoreでは、ドキュメントの下にさらにコレクションを持つことができます。
これをサブコレクション(Subcollection)と呼びます。
例えばusersコレクションとサブコレクションにpostsを持っていた場合、構造のイメージは次のようになります。
/users/{userId}/posts/{postId}このように「ユーザーが複数の投稿を持つ」といった1対多の関係を表現する場合によく使われます。
2.サブコレクションを使うメリット
サブコレクションには以下のようなメリットがあります。
データを階層的に整理できる
クエリ範囲を絞れるため、読み取りコストを削減できる
親ドキュメント削除時の処理が明確
特に「ユーザーごとの投稿」「企業ごとの案件」など親コレクションと紐づいたデータを扱うときに非常に有効です。
3.独立コレクション(トップレベル)の方がよいケース
一方で、サブコレクションにせずトップレベルで管理した方が良いケースもあります。
/posts/{postId}主な理由は以下の通りです。
複数ユーザーや全体から横断的に検索・ランキング表示をしたい
データが膨大で、親単位に分けても意味が薄い
親と独立した存在として管理したい
つまり、「全ユーザー共通で扱うデータ」や「横断的な集計が必要なデータ」はトップレベルに置くのが基本です。
4.判定基準(チェックリスト)
質問 | サブコレクション | 独立コレクション |
|---|---|---|
データは特定の親に属する? | ◯ | |
親を削除したら一緒に消したい? | ◯ | |
親と一緒に表示・管理することが多い? | ◯ | |
複数の親をまたいで検索・ランキング表示したい? | ◯ | |
データが大量で横断処理が多い? | ◯ |
上記のように、「親と一緒に扱うかどうか」で判断するのがシンプルです。
5.まとめ
今回はFirestoreのサブコレクションについて解説しました。
中級者や上級者向けの内容となっているため使う場合は無理をしなくても大丈夫です。
判定表を掲載しているので、わかりにくい人はそれを見ながら判定していただければ良いと思います。
micomiaではFlutterFlowの相談・サポートもお受けしておりますのでお気軽にお問い合わせください。



.webp%3Falt%3Dmedia%26token%3Da7c14698-1b08-4fea-89c6-f77a9121f4c5&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D899eeefd-f4c9-44a6-9ec2-3ced0b223ffd&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dca25fa6b-e233-43f7-90c3-e68e4c5b0bc5&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D7f18e5f1-cfda-4148-ab86-b3d2e6547262&w=3840&q=75)




.webp%3Falt%3Dmedia%26token%3D6ca2c2ef-9413-4453-b992-55b66b11ed54&w=3840&q=75)



.webp%3Falt%3Dmedia%26token%3D900f385d-12a2-449b-8d1e-83a57cef0088&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0e802fb0-2dda-44a7-bf80-5d39019635ba&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D3fb3dc66-ecca-402e-8fb8-fbec9407f7f5&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Ddb21d760-e1ed-4ec2-af28-3462041e31b5&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dcce7bd72-f11e-4292-86bf-e6ccf3e7bf32&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D457ff920-e0df-4ff5-95eb-e29f74b73823&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dc21fcc77-7404-458d-9eb5-85b8d84ae1bc&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D92052f12-5280-49df-877a-b514582e95db&w=3840&q=75)