Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
おわり