Firebase Meetup #10
https://gyazo.com/f54ca59ae46d04c5c74e3f744ee40640
https://firebase-community.connpass.com/event/115709/
コミュニティの紹介
FJUGとは
日本のFirebase Usser Group
勉強会の開催
Slack
https://firebase.asia/join
What's new in Cloud Firestore and MLKit
https://speakerdeck.com/d_date/whats-new-in-cloud-firestore-and-mlkit
d_date
GDE
https://developers.google.com/experts/people/daiki-matsudate
株式会社FOLIO
iOSエンジニア
ポッドキャストやってる
https://cast.firebase.asia
try! Swift
Google、「Cloud Firestore」を正式提供 モバイルBaaS向けのNoSQLデータベース - ITmedia NEWS
東京リージョン誕生
Uptime SLA Table
SLA ≒ Uptime = (t - Downtime ) / t
SLAは稼働時間
Multi-region
いろんなデータをコピーする
データセンターが破壊されても他にもあるよ!
ニーズに合わせて変更する
料金
まだComming Soon
3/3くらいに確定?
Stack Driver
GCP側のリンクに飛ばされる
ML Kit for Firebase
Vision API
画像からどのランドマークかを検索できる
画像に入っている以下のを検知
文字
顔
顔の輪郭点がとれる
バーコード
観光名所
なにが写ってるかをラベリング
オンデバイスの学習モデル
無料
テキスト認識はLatin文字のみ
API通信が挟まるモデル
$1.50 /K(Blazeのみ)
より詳細な画像ラベリングができる
ランドマーク検出
Custom Model
TensorFlow Liteのモデルが使える
自然言語処理できるように
iOS
FirebaseMLNatualLanguage
FirebaseMLNLLanguageID
TensorFlow LiteがGPUに依存している
最近のFirebase
https://speakerdeck.com/k2wanko/recent-firebase
コキチーズ@k2wanko
LINE株式会社
セキュリティエンジニア
FJUGのオーガナイザー
GCPUG TokyoのStaff
Firebaseとは?
helps mobile app teams success
モバイルアプリ作成のプラットフォーム
クライアントアプリだけでの開発が可能
サーバーのメンテが不要
対応プラットフォーム
Android
iOS
Web
C++
Unity
サーバーも動かしたいとき
Admin SDK
対応言語
C#
Node.js
Python
Django
Go
GitHub.icon https://github.com/firebase
クライアントコードやSDKがOSSで提供されている
プロダクト
18個(2019/02現在)
はじめるならここから
Analytics
モバイル向けのアナリティクスサービス
イベントをベースに分析ができる
BigQueryにエクスポートできる
予め用意されているイベント以外にも独自にイベント定義
特定のグループに通知できる
What's New
Audience Exlusions
Membership Duration
Google アナリティクス SDK終了
2019/10にモバイル版のSDKが終了
移行先はFirebase
有料版は影響なし
Cloud Functions
イベント駆動で独自の関数実行
PubSubやHTTPやFirebaseサービスのほとんどのイベントを取れる
標準サポートはNode.js
GCPからgcloud functions event-types listでイベントを確認できる
What's New
Firebase Management API
Go サポート
GitHub.icon https://github.com/firebase/functions-samples
実践的なサンプルがいっぱいあってオススメ
Authentication
パスワード認証からプロバイダ認証にSMS認証をサポート
対応していない認証もカスタム認証で対応できる
What's New
Cloud Identity for Customers and Partners
SAML認証とかOIDCもサポート
Hosting
静的ファイルの配信するホスティングサービス
標準でHTTPS / HTTP/2配信
独自証明書は対応していない
Cloud Functionsとの接続で動的コンテンツ配信もできる
SSR
OGP設定
What's New
複数サイトを1つのプロジェクトで管理できる
Cloud Messaging
Push通知を送れるサービス
モバイルだけじゃなくWebも対応
トピック昨日
subscribeしているユーザーだけに配信
What's New
スケジューリングをpush通知が設定できるようになった
2019/4にGCMが終了するので古いものはFCMに移行が必要
Cloud FireStore
リアルタイムにデータを同期
分散NoSQLデータベース
クエリの全ては強い整合性
クライアントから直接書き込める
オフラインでも書き込みができる
書き込み、読み込みの制限はセキュリティルールで担保
基本概念
Collection(モデル)
Document(ユーザー)
Data(フィールド)
What's New
GA SLA 99.999%
東京リージョンが安い
Stackdriverでメトリックを見えるようになった
ローカルエミュレータ
Firestore ローカルエミュレーターを試してみた。 – google-cloud-jp – Medium
セキュリティルール
データの保護はセキュリティルールでおこなう
JavaScriptっぽい独自構文
テストモードとか使わず最初から書きながらつくるべき
テストのままだと変なデータ混入やtoken取られるかもしれないため
Firebaseはロックに使おう / Netadashi Meetup#8 Firebase - Speaker Deck
read
get
list
write
create
update
delete
検証順
Authorization → Scheme Validation → Business Logic
https://github.com/k2wanko/fire-timeline
Realtime DBとの使い分け
殆どの場合はFirestoreでOK
少ないデータを頻繁にアプデするならRealtime DBのが安いこともある
前まではRealtime DBはGAで安定しているとあったがFirestoreもGAになって優位性もなくなった
Firestoreにできないこと
ユーザがオフラインになったことを検知したい場合
より深く利用するためには
公式ドキュメントを一通り見ておく
https://firebase.google.com/docs/
わからないことはサポートに問い合わせしてみる
https://firebase.google.com/support/contact/
より具体的な場合は有料のサポートもある
FJUGコミュニティに入ってキャッチアップしてみる
Firebaseでつくるグループチェックリスト管理サービス
https://speakerdeck.com/mogaming/check-list-apps-on-firebase
mogaming
iOS, Androidエンジニア
Trelloのようなサービスをつくった
checka!
https://itunes.apple.com/jp/app/checka-チェッカ/id1451433619
Firebaseでつかっているサービス
Cloud Functions
Node.js / TypeScript
イベントに応じて処理を実行
rulesで表現しきれない部分を補う使い方
Firestore
rulesで権限を管理する
データ構造の工夫が必要
Authentication
Analytics
Crashlytics
Firebase Cloud Messaging
データ構造
https://gyazo.com/113d83f2e5a4a5bd437620859688c268
Group
Board
Task
Comment
User
グループに所属しているユーザ
User(全ユーザ)
Group
どこに所属しているかのグループ一覧
設計するときに考えた大事なこと
create権限は重要な箇所には与えない
Board, Task, Commentであればグループメンバーは作れる
どのようなグループに参加しているか?を判定する
グループに参加しているかどうかで権限を管理したい
exists(path)
指定したパスにデータが存在しているか
exists(/../gruops/$(groupID)/users/$(requestUserID))
リクエストユーザがグループに属しているか
Namespace: firestore  |  Firebase
重要なデータはCloud Funtionsで作成
グループ参加用のCFsで作成
アプリからCallableで呼び出し
Gruopも同時作成
工夫したこと
グループの名前を変えたい
User - Role
adminとか
Update権限は渡したくない
Nameはここで読みたい
Group
UserNameを更新させる
CFsで動作
名前を反映
SnapshotListenerの活用
データ更新通知が来るのでリアルタイムにUIを更新できる
Userデータはアプリ内で別途キャッシュ機構を作っている
無限スクロールの解説
https://slides.com/kahirokunn/deck-9#/
kahirokunn
株式会社scouty
GitHub.icon https://github.com/k-okina/book-management
使用ライブラリ
pring
rxfire
queryをつくる
ほしいデータ形式がとれる
rxjs
Vue.js + Vuex
FireStore
順不指定
new itemは一番上に来る
UpdateAtで降順
更新されたのも一番上にくる
フロントで {id: data}形式で流れたデータをもってgetterでそれらを降順に並び替え
Firestore導入前に検討したかったベスト5
https://speakerdeck.com/pochisato/firestoredao-ru-qian-nijian-tao-sitakatutabesuto5-at-firebase-meetup-number-10
さとう たくと
営業→エンジニア→人事
株式会社Hotspring
2人目のエンジニア
年始で副業6人増えた
ズボラ旅
注意
FirestoreをメインDBとして使っている話
第5位
お金どれぐらいかかってるのよ?
1万円くらい
第4位
うちに合うか?
第3位
アーキテクチャを晒してほしい
https://gyazo.com/f91d0c4407d48b8cf2f7497a6a767ab2
https://gyazo.com/83dc61008471e6382c460df28a81634c
LINEからwebhookでAPIを受け取る
GCP
Node.js
今はGoも使用している
FireStoreで出たCFsを受け取ってまた入れる
2箇所にデータをおくとスキーマを変えるのが大変
ジョインすると1万件くらいになるとパフォーマンスがつらくなる
CQRS (読み込みと書き込み用のテーブルを用意)の考えを導入
書き込みは正規化
読み込みはクライアントが読みたい形にCloud Functionsで整形
チャット画面(スタッフ側)
フロント側
React.js
MobX
めちゃくちゃシンプルにしたかった
第2位
バグ
UTF-8とUTF-16の実装がミスると管理画面が開けないバグに遭遇
第1位
メインDBとして本番運用するとどうなるかわからない
とりあえずオススメだからやっとけ