Slide 1

Slide 1 text

Firebase & BigQuery で Android アプリの成⻑を⽀える 2020/06/20(⼟) Sansan Android Engineer's Talk Kenichi Tatsuhama

Slide 2

Slide 2 text

About me ⾠濱健⼀(Kenichi Tatsuhama) • @tatsuhama50 • Sansan, Inc. Android developer • GDG Shikoku Organizer • 徳島県神⼭町在住

Slide 3

Slide 3 text

About me • Sansan が3社⽬(3社とも徳島県内) • リモートワーク6年⽬ • Sansan 事業部 (2014/03 〜) • 海外事業、アプリ内製化 • Eight 事業部(2016/03 〜) • 国内事業、海外事業(インド) • グローバル戦略統括部(2020/01 〜) • 海外向け新規事業展開 地⽅からグローバル市場に挑戦中 iOSDC Japan 2018 にて Eight の海外展開の話をしてきました。 https://buildersbox.corp-sansan.com/entry/iosdcjp2018_tatsuhama

Slide 4

Slide 4 text

本⽇お話しすること • リリースしたアプリが、どのように使われているか分析するた めのツール、使い⽅を知る • Firebase • BigQuery • Data Portal • 分析結果から、アプリの成⻑のためのアプローチを取る → アプリやビジネスの成功につなげる

Slide 5

Slide 5 text

【告知】Android の話はこちらをチェック!

Slide 6

Slide 6 text

Agenda • Firebase とは • BigQuery とは • Firebase を BigQuery にリンクする • Firebase が BigQuery に出⼒するデータ • BigQuery からデータを引いてみる • Data Portal を使う • ユーザにアプローチする

Slide 7

Slide 7 text

Firebase とは

Slide 8

Slide 8 text

Firebase とは • Google が提供するアプリケーションのバックエンド • 開発⽤ツールだけでなく、品質・分析・拡⼤もサポート https://firebase.google.com/

Slide 9

Slide 9 text

Firebase とは • 【品質】クラッシュの発⽣状況や詳細を確認できる

Slide 10

Slide 10 text

その他の機能も活⽤していますか?

Slide 11

Slide 11 text

Firebase とは • 【分析】Firebase だけでも様々な情報が確認できる • アクティブユーザ • 過去30分のユーザ • 上位のコンバージョン イベント • 1⽇のユーザー エンゲージメント • アプリでの収益源 • アプリの安定性

Slide 12

Slide 12 text

Firebase とは • 【分析】Firebase だけでも様々な情報が確認できる • 最新リリースの 導⼊状況 • 新規ユーザの 獲得⽅法 • ユーザ維持率 • ユーザの 詳細データ • プラットフォーム の内訳

Slide 13

Slide 13 text

Firebase とは • 【分析】Funnels で離脱ポイントを可視化 ここでの離脱が⼤きい

Slide 14

Slide 14 text

Firebase とは • 【分析】ユーザセグメントを定義でき、変化率を確認できる ←レベル1をクリアしたユーザ

Slide 15

Slide 15 text

Firebase とは • 【拡⼤】いわゆるプッシュ通知 • 前述のセグメントに絞って送ることもできる

Slide 16

Slide 16 text

Firebase とは • 【拡⼤】アプリ内にポップアップを表⽰ • 前述のセグメントに絞って送ることもできる

Slide 17

Slide 17 text

Firebase とは • これらの分析・拡⼤機能を有効活⽤するために、Firebase に可能な 限り様々な情報を送っておくことをオススメします。 • 例) • User property • サービス上の UserId (必要に応じて、組織 Id なども) • 有償ユーザかどうか • アプリ上の設定値(暗号化機能の on / off 値、… • Event • ボタンのタップ • ゲームのクリア • プロパティ • テキストメッセージを送信したイベント:⽂字数 • ゲームをクリアしたときのイベント:かかった時間、スコア

Slide 18

Slide 18 text

BigQuery とは

Slide 19

Slide 19 text

BigQuery とは • Google が提供するペタバイト規模の低料⾦フルマネージド ア ナリティクス データ ウェアハウス • NoOps(管理するインフラストラクチャが存在せず、データ ベース管理者が必要ない) • 使い慣れた SQL を使⽤してデータから有⽤な情報を⾒つけ出 す作業に集中できる https://cloud.google.com/bigquery/docs

Slide 20

Slide 20 text

BigQuery とは • 料⾦体系 • ストレージや操作により細か く設定されている • ⼀定の無料枠がある • 定額プランも⽤意されている https://cloud.google.com/bigquery/pricing - pricing_summary

Slide 21

Slide 21 text

Firebase を BigQuery に リンクする

Slide 22

Slide 22 text

Firebase を BigQuery にリンクする • リンクをすると以下のデータにアクセスできるようになる • Google アナリティクス アプリとアプリ + ウェブ プロパティのデータ • Firebase 向け Google アナリティクスのデータ • Crashlytics の致命的なクラッシュ イベントと致命的でないクラッ シュ イベント、およびスタック トレースからの詳細 • Predictions の⽣データ • Cloud Messaging の詳細なデータ • キャプチャされた各パフォーマンス モニタリング イベントの詳細 https://support.google.com/firebase/answer/6318765 ※前述の通り、Firebase だけでも様々な分析は可能です。

Slide 23

Slide 23 text

Firebase を BigQuery にリンクする • リンクの⼿順 • プロジェクトの設定>統合> BigQuery のカードの「リンク」

Slide 24

Slide 24 text

Firebase を BigQuery にリンクする 有効にしたいサービスをチェック プロジェクトに複数の アプリがある場合は、 絞り込みが可能

Slide 25

Slide 25 text

Firebase が BigQuery に 出⼒するデータ

Slide 26

Slide 26 text

Firebase が BigQuery に出⼒するデータ • Firebase プロジェクトごとに分かれ ている • プロジェクト内は、Firebase の各 サービスごと • Analytics • Crashlytics • … にテーブルが分かれている 1つの Firebase プロジェクト 別プロジェクト→

Slide 27

Slide 27 text

Firebase が BigQuery に出⼒するデータ • テーブルをクリックするとスキーマが確認できる

Slide 28

Slide 28 text

Firebase が BigQuery に出⼒するデータ • パーティション分割テーブル • クエリの⾼速化やコスト削減につながる • ⽇付等でテーブルが分割されている(横断検索も可能) https://cloud.google.com/bigquery/docs/partitioned-tables

Slide 29

Slide 29 text

Firebase が BigQuery に出⼒するデータ • プレビューをクリックすると実際のデータの⼀部を確認できる

Slide 30

Slide 30 text

Firebase が BigQuery に出⼒するデータ • RDB のように単純な正規化されたテーブルではない • 各⾏に配列、構造体、構造体の配列なども保持している 正規化されたテーブル BigQuery のテーブル https://developers-jp.googleblog.com/2017/04/bigquery-tip-unnest-function.html

Slide 31

Slide 31 text

Firebase が BigQuery に出⼒するデータ • タイプ • プリミティブな STRING, INTEGER, BOOLEAN, TIMESTAMP, … に加 え、構造体の RECORD がある • モード • NULLABLE:null 許容型 • REPEATED:繰り返し https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types

Slide 32

Slide 32 text

Firebase が BigQuery に出⼒するデータ • REPEATED • いわゆる配列 • 各要素は全て同じ型である必要がある • ⾮正規化しているが、データウェアハウジングでよく⾏われる • テーブルの結合を⾏わない分、⾼速に検索できる • クエリ実⾏時には UNNEST() 関数を使ってアクセスする

Slide 33

Slide 33 text

Firebase が BigQuery に出⼒するデータ • UNNEST() 関数 • 繰り返しを全て展開して、別々の⾏にする • 展開したテーブルを作成するイメージ UNNEST

Slide 34

Slide 34 text

Firebase が BigQuery に出⼒するデータ • RECORD • いわゆる構造体 • 1つ以上のフィールドを含めることができる • フィールドのデータ型は同じでなくてもよい

Slide 35

Slide 35 text

Firebase が BigQuery に出⼒するデータ • RECORD x REPEATED で記録される例 • Firebase に記録するイベントログ • logEvent() 関数で イベント名 と プロパティ を渡す • プロパティは詳細な情報を key, value の集合で渡す(Android : Bundle) ※プロパティを渡さなくても、⾃動的に付与される情報があります イベント名 プロパティ

Slide 36

Slide 36 text

Firebase が BigQuery に出⼒するデータ • event_params は RECORD x REPEATED で記録されている key string_value int_value 繰り返し

Slide 37

Slide 37 text

BigQuery からデータを 引いてみる

Slide 38

Slide 38 text

BigQuery からデータを引いてみる • テーブルを選んで「テーブルをクエリ」をクリックすると、 SELECT ⽂が挿⼊される

Slide 39

Slide 39 text

BigQuery からデータを引いてみる • フィールド名をクリックするとカーソル位置にフィールド名が 挿⼊される ←クリック カーソル位置にフィールド名が挿⼊される

Slide 40

Slide 40 text

BigQuery からデータを引いてみる • 実⾏をクリックすると結果が表⽰される

Slide 41

Slide 41 text

BigQuery からデータを引いてみる • 「結果の保存」をクリックすると CSV 等で保存できる

Slide 42

Slide 42 text

BigQuery からデータを引いてみる

Slide 43

Slide 43 text

BigQuery からデータを引いてみる • いくつかの SQL ⽂の紹介 • とあるクラッシュをユーザが⼀定期間に何度経験したか? • 背景:⼀定回数経験したユーザには、個別対応を⾏うためユーザを抽出したい • そのユーザはクラッシュが起きる前にどういう⾏動をしていたか? • 背景:再現⼿順、条件の確認をしたい • UNNEST() を使った検索 • 背景:イベントやユーザのプロパティを抽出や検索条件にする場合は UNNEST() を使う必要がある

Slide 44

Slide 44 text

BigQuery からデータを引いてみる • とあるクラッシュをユーザが⼀定期間に何度経験したか? • クラッシュの issue_id は Firebase Crashlytics で確認する Your firebase_crashlytics table Firebase ダッシュ ボードだけではわから ない情報が得られる

Slide 45

Slide 45 text

BigQuery からデータを引いてみる • とあるユーザがクラッシュ前に⾏っていた⾏動を⾒る Your Firebase Analytics table User Id Firebase ダッシュ ボードだけではわから ない情報が得られる

Slide 46

Slide 46 text

BigQuery からデータを引いてみる • UNNEST() を使った検索 UNNEST() を使って、 user_property から user_id を引いてみる Your Firebase Analytics table User Id User Id ↑ UNNEST(user_properties) は FROM と⼀緒に使う (繰り返し要素を展開したテーブルになる)

Slide 47

Slide 47 text

BigQuery からデータを引いてみる • 実際にやってみて… • Firebase ダッシュボードからでは⾒えない情報が取得できる • → 不具合改修やユーザサポートの効率改善 • ある程度の SQL の知識が必須 • UNNEST() など、BigQuery ならではの知識も必要 • ⾮効率なクエリの実⾏で多額の費⽤が掛からないかちょっと⼼配 • WHERE や LIMIT をかけても安くならない(結果ではなく⾛査対象で課⾦) • 必要な列だけ取得するようにする • SELECT * しなくても、プレビューで具体的なデータはわかる • (効率の良いクエリを考えている時間コストの⽅が⾼いかも?)

Slide 48

Slide 48 text

Data Portal を使う

Slide 49

Slide 49 text

Data Portal を使う • Data Portal とは、Google が提供する無料の BI ツール • BigQuery 等をデータソースにして、さまざまな⾓度でデータ の分析、レポートを作成できる • SQL の知識は不要 https://marketingplatform.google.com/intl/ja/about/data-studio/

Slide 50

Slide 50 text

Data Portal を使う • 検索結果のテーブルをデータポータルで調べて可視化 ここでは、Event のクエリ結果で「データを探索」してみます。

Slide 51

Slide 51 text

Data Portal を使う • 検索結果のテーブルをデータソースにした、Data Portal ド キュメントが作成される ↓イベント名 ↓回数

Slide 52

Slide 52 text

Data Portal を使う • ディメンションを変更すると、集計⽅法が変わる event_date event_name

Slide 53

Slide 53 text

Data Portal を使う • ディメンジョンは複数指定が可能 ※event_date と event_name が同じ値でないと、同⼀⾏にならない

Slide 54

Slide 54 text

Data Portal を使う • さまざまなグラフを追加可能 • 表 • スコアカード • 期間 • 棒 • 円 • 地図 • Google マップ • 折れ線 • ⾯ • …

Slide 55

Slide 55 text

Data Portal を使う • ピボットテーブルも作成可能

Slide 56

Slide 56 text

Data Portal を使う • 他にも… • Query を定期実⾏すれば、⾃動で更新されるレポートが作成できる • BigQuery でなくとも、様々なサービスをデータソースにできる

Slide 57

Slide 57 text

Data Portal を使う • 弊社で分析した例 • 企業ごとの⽉次のアクティブユーザの推移 • アプリバージョンごとのエラー発⽣率 • インストール初⽉のアクティビティ数 • → 少なければ CS コミュニケーション • など… • 弊社の KPI ダッシュボード • ⽇次の主要イベント実⾏数の推移 • ユーザの利⽤国分布 • など…

Slide 58

Slide 58 text

Data Portal を使う • テンプレートも⽤意されています Data Portal の学習や、 KPI ダッシュボードの雛形に使えます

Slide 59

Slide 59 text

Data Portal を使う ↓[Sample] Crashlytics Sample Data まずはこれで練習!

Slide 60

Slide 60 text

Data Portal を使う • 実際にやってみて… • SQL の知識がなくても、アプリの傾向を容易に掴むことができる • 開発者が環境を⽤意すれば、分析は他のメンバーに依頼できる • 様々な⾓度から、アプリのログを分析することができる • アプリの KPI レポートも作成できる → アプリの利⽤状況の変化や問題を容易に⾒つけることができる

Slide 61

Slide 61 text

Data Portal を使う(余談) • 個⼈の Eight の データを CSV 出⼒ して、Data Portal で可視化してみた

Slide 62

Slide 62 text

ユーザにアプローチする

Slide 63

Slide 63 text

ユーザにアプローチする • Firebase, BigQuery, Data Portal を⽤いて、特定のユーザセグ メントがあまりコンバージョンしてないことがわかったとする • 例) • 古いアプリを使っているユーザ → アップデートのお知らせ • 特定のキャンペーンから流⼊した Android ユーザ → アプリのユースケースを紹介 • ゲームのレベルが1のまま、3⽇間で10回起動しているユーザ → 攻略のヒントを案内 • そのセグメントに特化した内容でアプローチして、アプリの利 ⽤を促進していく

Slide 64

Slide 64 text

ユーザにアプローチする • セグメントの定義⽅法 • 条件が簡単であれば、Cloud Messaging 等の「ターゲット」で指定 • 複雑であれば Audiences を定義する

Slide 65

Slide 65 text

ユーザにアプローチする • Cloud Messaging 等の「ターゲット」で指定

Slide 66

Slide 66 text

ユーザにアプローチする • Audiences を定義 • ユーザ⾏動に基づいて定義ができる • 定義後のユーザ⾏動からセグメントに紐付いていく • 過去の⾏動に遡って紐付けられないので注意 Smarter Segmentation with Audiences and Predictions https://www.youtube.com/watch?v=VPLkd_aqKwU

Slide 67

Slide 67 text

ユーザにアプローチする • Cloud Messaging と In-App Messaging の違い Cloud Messaging In-App Messaging • アプリを起動していなくても端末に届く • アプリが通知許可をしていないと届かない • ⾔語ごとにメッセージを作成する必要があ る • アプリを起動しないと表⽰されない • アプリ内にダイアログを表⽰させる • Cloud Messaging より表現⼒はある • 表⽰のタイミングの制御ができる • 多⾔語対応 (1キャンペーンで複数⾔語を扱える)

Slide 68

Slide 68 text

ユーザにアプローチする • Cloud Messaging でアプローチする

Slide 69

Slide 69 text

ユーザにアプローチする • Cloud Messaging でアプローチする • 通知の本⽂やターゲットを設定

Slide 70

Slide 70 text

ユーザにアプローチする • Cloud Messaging でアプローチする • 配信スケジュールを設定 • 海外展開しているなら「受信者のタイムゾーン」での時刻指定がオススメ • 繰り返し設定も可能(1回だけ受け取る設定も可能)

Slide 71

Slide 71 text

ユーザにアプローチする • Cloud Messaging でアプローチする • コンバージョンイベントを設定する(任意) • Cloud Messaging によってコンバージョンに⾄ったかが計測可能

Slide 72

Slide 72 text

ユーザにアプローチする • Cloud Messaging でアプローチする • 必要に応じて細かな設定もできる

Slide 73

Slide 73 text

ユーザにアプローチする • Cloud Messaging でアプローチする • 配信数・開封率等の確認ができる • アプリごとのフィルタも可能

Slide 74

Slide 74 text

ユーザにアプローチする • In-App Messaging を使う

Slide 75

Slide 75 text

ユーザにアプローチする • In-App Messaging を使う • スタイルと内容(カード、モーダル、画像のみ、トップバナー) カード モーダル 画像のみ トップバナー

Slide 76

Slide 76 text

ユーザにアプローチする • In-App Messaging を使う • 宛先選択(Audiences も選択可能) • ローカライズ

Slide 77

Slide 77 text

ユーザにアプローチする • In-App Messaging を使う • スケジュール設定 • ⽇時だけでなく、どのイベントをトリガーに表⽰するかも設定 例: 「初めてゲームをクリアした」 ときに表⽰させる

Slide 78

Slide 78 text

ユーザにアプローチする • In-App Messaging を使う • コンバージョンイベントも設定可能

Slide 79

Slide 79 text

ユーザにアプローチする • In-App Messaging を使う • その他のオプション

Slide 80

Slide 80 text

ユーザにアプローチする • In-App Messaging を使う • インプレッション数、クリック数が確認できる

Slide 81

Slide 81 text

ユーザにアプローチする • アプローチ後は数値が改善されているか確認する • 改善できていた • • 改善されていない • 新たな仮説を⽴て、検証、実施、計測を繰り返す

Slide 82

Slide 82 text

ユーザにアプローチする • 実際にやってみて • 開発⼯数が少なくて済む • 開発作業は、Firebase SDK の導⼊&イベント埋め込みだけ • Firebase ダッシュボードの操作だけで運⽤できるので、運⽤チームにバトンタッチ できる • Cloud Messaging の開封率はそこまで⾼くない… • 通知許可を外されたら届くことはない • 通知は⽬にはしているが、タップして開封していないケースもあるだろう • In-App Messaging は Activity の構造によってはすぐ消える場合がある • Android で Firebase In-App Messaging が表⽰されない問題の workaround https://qiita.com/tatsuhama/items/d9ed9dc4622169d2e105 • Authentication を使っているなら、メール等でのアプローチも検討を

Slide 83

Slide 83 text

まとめ

Slide 84

Slide 84 text

まとめ • Firebase を使うと、ダッシュボードでさまざまなアプリの情報 を得ることができる • Firebase の情報は BigQuery に出⼒できる • BigQuery でより詳細な分析ができる • Data Portal を使うと、SQL の知識がなくても分析ができる • Firebase にはユーザにアプローチする⽅法も⽤意されている • アプローチしたら効果測定 → データを活⽤して、アプリやビジネスの成功へ! 今回のお話が、みなさんの参考になれば幸いです!