Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

では本題

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

こんなシーンありませんか わりと、キャンペーンの文言やパラメータなどで よくあるきがします

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

裏では何をやっていたか

Slide 21

Slide 21 text

Firestore console(スマホ)

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

背景 DBオペもしたくない!でもハードコー ディングしたらもっと辛い! 開発工数もない!! でもリアルタイムで書き換わって欲し い! できるだけ安全に更新したい!

Slide 28

Slide 28 text

しかたないので考えた

Slide 29

Slide 29 text

おもいついたもの • 案1: スプレッドシート x Google App Script • 案2: ファイルにデータおいて数秒ごとにキャッシュ取得 • 案3: DBにデータおいて数秒ごとにキャッシュ取得 • 案4: Firestore + Cloud Function + PubSub • 案5: Firestoreだけ

Slide 30

Slide 30 text

案1: スプレッドシート x Google App Script カジュアルすぎてこわい。

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

案5: Firestoreだけ あれ??いける、、?いけるのでは、、、???

Slide 37

Slide 37 text

使用した環境 • Firestore • GAE x Node.js x Firebase Admin Node.js SDK • →リアルタイムアップデートを取得

Slide 38

Slide 38 text

データを入れる 1個それ用のコレクションつくって、1つドキュメントをつくればok

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

かんたんでしょ??

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

最後に、Remote Configとの違い

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

おわり