micomia株式会社のエンジニア 西村です。
今回は、FlutterFlowで簡単なSNSアプリを作るための、Firestoreでのデータベース設計について解説します。
以下の機能を備えたSNSアプリを実装するためのデータベースを設計していきます。
・ユーザー登録
・投稿(タイトル、詳細、画像2枚、日付)
・投稿への「いいね」
・投稿へのコメント
1.作成するコレクション
機能を実現するために、
・usersコレクション(ユーザーの情報を保存)
・postsコレクション(投稿の情報を保存)
・favorite_postsコレクション(「いいね」の情報を保存)
・commentsコレクション(コメントの情報を保存)
の4つのコレクションを作成します。
2.usersコレクション

FlutterFlowのプロジェクトを開いて、左のメニューからFirestoreをクリックします。
ここから、「Create Collection」、もしくは左上のプラスマークをクリックしましょう。

この画面では、コレクション名を入力して、コレクションを作成します。
まずは、ユーザーの情報を保存するコレクション、「users」を作ります。

usersという名前のコレクションを作ろうとすると、この画面が出てきます。
Flutterflowでは、デフォルトのユーザーコレクションがあり、ここで「Yes」を選択するとそれを自動的に入力してくれます。

これで、usersコレクションが作成できます。
3.postsコレクション

次に、投稿の情報を保存するコレクション、「posts」を作ります。

コレクション作成では、用意されたテンプレートから選んで作成する方法もありますが、今回は自分で入力して作成していくので、「Start from scratch」をクリックします。

この画面から、フィールドの名前とデータ型を決めていきます。Field Nameにフィールド名を入力し、Data Typeからデータの型を選択します。複数のデータを保存したい場合はis Listをオンにしましょう。
入力し終えたら、右端の緑色のチェックマークをクリックして、そのフィールドを追加できます。

postsのフィールドは、画像のように作成しました。
・user_ref — 投稿者のユーザー情報を参照するための情報を保存します。これがあることで、投稿から投稿者の情報が取得できます。
・title — 投稿のタイトルを保存します。
・detail — 投稿の詳細文を保存します。
・images — 画像の保存されたURLを保存します。今回は、画像を2枚投稿できるようにしたいので、Listにしています。
・created_time — データが作成された時間、つまり投稿された時間を保存します。
4.favorite_postsコレクション

次に、投稿の「いいね」情報を保存するコレクション、「favorite_posts」を作ります。
同じように「Start from scratch」で作成していきましょう。

favorite_postsのフィールドは、画像のように作成しました。
・user_ref — いいねしたユーザーのユーザー情報を参照するための情報を保存します。
・post_ref — いいねされた投稿の情報を参照するための情報を保存します。
・created_time — いいねした時間を保存します。
「いいね」をする→favorite_postsのドキュメントを作る、「いいね」を解除する→favorite_postsのドキュメントを削除するという風に使うことで、誰がどの投稿に「いいね」をしているかの管理ができます。
5.commentsコレクション

最後に、投稿へのコメント情報を保存するコレクション、「comments」を作ります。

commentsのフィールドは、画像のように作成しました。
・user_ref — コメントしたユーザーのユーザー情報を参照するための情報を保存します。・post_ref — コメントされた投稿の情報を参照するための情報を保存します。
・content — コメント内容を保存します。
・created_time — コメントした時間を保存します。
これで、必要な4つのコレクションが作成できました。
6.まとめ
今回はFlutterFlowで簡単なSNSアプリを作るための、Firestoreでのデータベース設計について解説しました。
micomia株式会社では他にもFlutterFlowの解説を行なっていますのでぜひ他の記事もご覧ください。


.webp%3Falt%3Dmedia%26token%3D0ddf6c29-973e-41f2-886a-606c367f16a9&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8e869338-c619-4b77-bda6-6a3fff356887&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D44d272c7-1e7a-46d7-86de-dc2bec67a3e4&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbc168691-5281-4eab-8c08-ed7fe5624582&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8f9453ad-d017-4640-8b7b-4c5d55391f46&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D904686c4-e792-4c6a-b5ce-e7648fd53404&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8db330f1-3fab-48b7-8dcf-dd8c6f47836a&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Ddef3da75-721c-4e42-8cd8-f06795bb771f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8fec979d-a6dc-4d03-960f-330f997108a7&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D6bddee16-071d-41fd-8a4b-f2026bcff617&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D9ba70870-6b39-4eab-b9c2-e126ef08cb09&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8a795f56-e8a9-4be1-937b-65c1a89922b3&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbe65d589-2f4c-4ad8-82a1-7ddb73af2620&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0aa104f5-928b-4ddf-a535-d8574b7667a8&w=3840&q=75)

.webp%3Falt%3Dmedia%26token%3D45131e3d-4777-421a-a556-bcc8d462dfe1&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D09daf923-4a62-4c31-af6f-f3d99a9f635b&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0e63e93b-1558-48a5-8b24-d1ae7cfa487f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D240fcc34-b7e7-4c86-b294-fdfc2a66db21&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Db288c602-2902-4f93-8eca-903ec8f86440&w=3840&q=75)