Slide 1

Slide 1 text

Firestoreを使ってメディアアプリを 作ってみた

Slide 2

Slide 2 text

Masahiro Higuchi / 樋口雅拓 ● グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 ● 機械学習のエンジニアですが、iOS, Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 ● https://limia.jp/ ● https://arine.jp/ ● https://aumo.jp/ ● https://www.mine-3m.com/mine/

Slide 3

Slide 3 text

LIMIAとは? ● メディアサービス ● 記事一覧を表示し、タップすると 記事詳細を閲覧できる。 ● 記事詳細の最下部に別の記事 への回遊導線が付いている

Slide 4

Slide 4 text

興味があること LIMIAに最も適したシステムは、何だろう? ● インフラ: Kubernetes/ECS/Lambda/CF/Firebase ● Backend FW: gin/Laravel/Django/Rails/protobuf/使わない ● アプリ: MVC/MVVM/VIPER/クリーンアーキテクチャ 選択肢が多すぎて、よくわからない! → とりあえず色々試してみよう。

Slide 5

Slide 5 text

今回試したこと ● インフラ: Kubernetes/ECS/Lambda/CF/Firebase ● Backend FW: gin/Laravel/Django/Rails/protobuf/使わない ● アプリ: MVC/MVVM/VIPER/クリーンアーキテクチャ Firebase/Firestoreを使って、メディアアプリを作ってみました。 インフラ構築面倒なので、まずはアプリだけでできるものを。w

Slide 6

Slide 6 text

Firestoreの説明

Slide 7

Slide 7 text

Firestoreとは? ● FirestoreはFirebaseの機能の一つ。Document Databaseと呼ばれるも の。2019年1月31日にGAになった。 ● SDKがあり、iOS/Androidから直接アクセス可能。 ● データの入力はFirebase管理画面から可能。 —> つまり、アプリ実装のみで、ClientServer型のシステムを構築できる!

Slide 8

Slide 8 text

Firestoreのモデル ● Document DatabaseとはNoSQLの一種。 ● OracleやMySQLといったRDBでは事前にSchemaを定義しておくが、Document Databaseで は後から自由に変更できる。 jsonをそのまま格納できるイメージ。 ● データはDocumentという場所に格納され、それが Collectionでまとめられている。 ● 分かりやすくMySQLで例えると、Collectionがテーブル、Documentがレコード。 —> 正直分かりづらいと思うので、画面とコードを見ながら説明していきます!

Slide 9

Slide 9 text

Firestoreへのデータ入力方法 ● 左: コレクション ● 中: ドキュメント ● 右: ドキュメントの中身 管理画面があるので、ここから 入力できる。

Slide 10

Slide 10 text

Firestoreからのデータ取得方法 Collectionと Documentを指 定することで取得 可能。

Slide 11

Slide 11 text

Firestoreから複数データ取得方法 SQLのように whereで絞り込み が可能

Slide 12

Slide 12 text

では本題

Slide 13

Slide 13 text

今回作った検証アプリについて 記事の一覧を表示したい。画面には、記事画像、記事タイトル、ユーザ名が表示され ている。Modelとしては、Firestoreで次のように持つ。 ● Article: id, title, image_url, user_id ● User: id, name つまり、ArticleとUserの両方のデータを使って一覧表示を作る。 普通はRDBでjoinするかBFF APIを作るが、Firestoreで実装するとどうなるか試して みた。

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

まとめ ● 体感速度は思ったより早い。 ● データ取得処理がかなり複雑になる。 ● 次は同じモデルをgolang+grpcのサーバと通信させて速度比較してみた い。 ご静聴、ありがとうございました!