Realtime Config with Firestore@Firebase Meetup #8

Ef78563ffcf1b94c2fdfc78728be3434?s=47 pochi-sato
December 10, 2018

Realtime Config with Firestore@Firebase Meetup #8

Ef78563ffcf1b94c2fdfc78728be3434?s=128

pochi-sato

December 10, 2018
Tweet

Transcript

  1. リアルタイムコンフィグを Firestoreで

  2. 自己紹介 • さとう たくと(ぽち) • 営業→エンジニア→人事→いま!! @pitown

  3. 自己紹介 • さいきんは、この記事にいました。。

  4. None
  5. None
  6. None
  7. 自己紹介 今はHotspringでおしごとしてま す。 2人目のエンジニアとしてやって ます。 3人目ぜひ!! しごとは、「ズボラ旅」というもの をつくっています。

  8. 自己紹介 ーズボラ旅ー LINEで旅行の相談ができるサー ビスです。 おすすめの提案をもらって、 そのまま予約まで。 ズボラな人程キモチいいです よかったら使ってね!

  9. 自己紹介 そんなことより、みんなスマブラがアツいので、ただふつうにあそ びにきてください ぼくのガノンドロフが火を吹きます ここにがのんどろふの絵を描きたい なぁ

  10. では本題

  11. リアルタイムコンフィグを Firestoreで

  12. まじめそうなタイトルですが、 かなり変態的なtipsになります

  13. リアルタイムコンフィグを Firestoreで • リアルタイムに書き換わるコンフィグ • Firestoreの管理画面からも書き換えられちゃう、型のミスもな い • 1分でバリューがでる!!

  14. こんなシーンありませんか • 定数なんだけれど、時期的要因やタイミングで変わってしまう データを扱う • →定数にしたらビルドしないといけないし、DBに入れるにし たらちょっと重い • 本当は管理画面に入れて、Bizに調整して欲しい •

    でも管理画面にする余裕もない • →まずはDBオペで繋ぐか、、、の流れ
  15. こんなシーンありませんか わりと、キャンペーンの文言やパラメータなどで よくあるきがします

  16. これをFirestoreをつかって かんたんに解決します

  17. しかも、1分でバリュー!!

  18. 1分でバリューをだしている ようす

  19. 1分でバリューをだしている ようす

  20. 裏では何をやっていたか

  21. Firestore console(スマホ)

  22. バリュー発揮していたときはこんなかん じでした

  23. バリューはっき中!! _人人人人人人_ > バリュー <  ̄Y^Y^Y^Y^Y ̄ _人人人人人人_ > バリュー <  ̄Y^Y^Y^Y^Y ̄ _人人人人人人_ > バリュー <  ̄Y^Y^Y^Y^Y ̄

  24. 寝っ転がっててもバリュー

  25. ではちゃんと説明していきます

  26. 背景 • 定数なんだけれど、時期的要因やタイミングで変わってしまう データを扱う • →定数にしたらビルドしないといけないし、DBに入れるにし たらちょっと重い • 本当は管理画面に入れて、Bizに調整して欲しい •

    でも管理画面にする余裕もない • →まずはDBオペで繋ぐか、、、の流れ
  27. 背景 DBオペもしたくない!でもハードコー ディングしたらもっと辛い! 開発工数もない!! でもリアルタイムで書き換わって欲し い! できるだけ安全に更新したい!

  28. しかたないので考えた

  29. おもいついたもの • 案1: スプレッドシート x Google App Script • 案2:

    ファイルにデータおいて数秒ごとにキャッシュ取得 • 案3: DBにデータおいて数秒ごとにキャッシュ取得 • 案4: Firestore + Cloud Function + PubSub • 案5: Firestoreだけ
  30. 案1: スプレッドシート x Google App Script カジュアルすぎてこわい。

  31. 案1: スプレッドシート x Google App Script まだまだカジュアルすぎるなぁ..

  32. 案2: ファイルから取得してキャッシュ わりと賢明。このリクエスト回数要らんけれども

  33. 案3: DBから取得してキャッシュ これもわりと賢明。アレっコンソールつかえるかも、、?

  34. 案4: Firestore + Cloud Function + PubSub まさに求めるものなんだけど、ちょっと設計がデカイ

  35. None
  36. 案5: Firestoreだけ あれ??いける、、?いけるのでは、、、???

  37. 使用した環境 • Firestore • GAE x Node.js x Firebase Admin

    Node.js SDK • →リアルタイムアップデートを取得
  38. データを入れる 1個それ用のコレクションつくって、1つドキュメントをつくればok

  39. 実装する ドキュメントを直指定して、onSnapshot、おわり!

  40. かんたんでしょ??

  41. 必要なところに全力投球できるように、 略せるものは略していけたらいいですね!

  42. なお、いちおう注意事項 (変態的なので用法はきをつけよう)

  43. 気をつけること1 • このコンフィグで1コレクションに複数のドキュメントをつくった ら、BigQueryに一括エクスポートしたときに『スキーマがありま せん』と怒られました • スキーマ無視してたので正論すぎる • 1コレクション1ドキュメントだけだったら大丈夫そう(ためして ない)

    • 一括エクスポートではなく、コレクションごとにエクスポートし たらできるけど、一括エクスポートできるようにしておいた方 がいいよ
  44. 気をつけること2 • リアルタイムアップデート、いつまでコネクション張りっぱなしで いけるかな?とやっていたけれども、24時間やってると、しくっ たりします。 • なので、本番で使うのであれば、cronなりなんなり、定期的に つなぎ直しにいくようにしたら良いです ←でunsubscribeした後、またonSnapshotでつなぎ直す

  45. 最後に、Remote Configとの違い

  46. 注:今日はめちゃくちゃトリッキーな 発表しましたが、 普段は実直にやっています

  47. おわり