Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Takao Sumitomo
28,788 views
アプリを成長させるためのログ取りとログ解析に必要なこと
DroidKaigi2018の講演の「アプリを成長させるためのログ取りとログ解析に必要なこと」の発表資料です。
Technology
◦
Read more
51
Save
Share
Embed
Embed presentation
Download
Downloaded 68 times
1
/ 120
2
/ 120
3
/ 120
4
/ 120
5
/ 120
6
/ 120
7
/ 120
8
/ 120
9
/ 120
10
/ 120
11
/ 120
12
/ 120
13
/ 120
14
/ 120
15
/ 120
16
/ 120
17
/ 120
18
/ 120
19
/ 120
20
/ 120
21
/ 120
22
/ 120
Most read
23
/ 120
24
/ 120
25
/ 120
26
/ 120
27
/ 120
28
/ 120
29
/ 120
30
/ 120
31
/ 120
32
/ 120
Most read
33
/ 120
34
/ 120
35
/ 120
36
/ 120
37
/ 120
38
/ 120
39
/ 120
40
/ 120
41
/ 120
42
/ 120
43
/ 120
44
/ 120
45
/ 120
46
/ 120
47
/ 120
48
/ 120
49
/ 120
50
/ 120
51
/ 120
52
/ 120
53
/ 120
54
/ 120
55
/ 120
56
/ 120
57
/ 120
58
/ 120
59
/ 120
60
/ 120
61
/ 120
62
/ 120
63
/ 120
64
/ 120
65
/ 120
66
/ 120
67
/ 120
68
/ 120
69
/ 120
70
/ 120
71
/ 120
72
/ 120
73
/ 120
74
/ 120
75
/ 120
76
/ 120
77
/ 120
78
/ 120
79
/ 120
80
/ 120
81
/ 120
82
/ 120
83
/ 120
84
/ 120
85
/ 120
86
/ 120
87
/ 120
88
/ 120
89
/ 120
90
/ 120
91
/ 120
92
/ 120
93
/ 120
94
/ 120
95
/ 120
96
/ 120
97
/ 120
98
/ 120
99
/ 120
100
/ 120
101
/ 120
102
/ 120
103
/ 120
104
/ 120
105
/ 120
106
/ 120
107
/ 120
108
/ 120
109
/ 120
110
/ 120
111
/ 120
112
/ 120
113
/ 120
114
/ 120
115
/ 120
116
/ 120
117
/ 120
118
/ 120
119
/ 120
120
/ 120
More Related Content
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
PDF
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
PDF
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
PPTX
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
PDF
例外設計における大罪
by
Takuto Wada
PDF
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
by
Takahiko Ito
PDF
型安全性入門
by
Akinori Abe
PPTX
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
by
SSII
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
テスト文字列に「うんこ」と入れるな
by
Kentaro Matsui
開発速度が速い #とは(LayerX社内資料)
by
mosa siru
世界一わかりやすいClean Architecture
by
Atsushi Nakamura
例外設計における大罪
by
Takuto Wada
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
by
Takahiko Ito
型安全性入門
by
Akinori Abe
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
by
SSII
What's hot
PDF
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
by
Ken'ichi Matsui
PDF
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
PDF
こわくない Git
by
Kota Saito
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
PPTX
イベント・ソーシングを知る
by
Shuhei Fujita
PDF
マッチングサービスにおけるKPIの話
by
cyberagent
PDF
リクルート式 自然言語処理技術の適応事例紹介
by
Recruit Technologies
PDF
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
by
Takayuki Shimizukawa
PDF
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
by
Yoshitaka Kawashima
PDF
Linked Open Data(LOD)の基本的な使い方
by
Kouji Kozaki
PPTX
WayOfNoTrouble.pptx
by
Daisuke Yamazaki
PDF
目grep入門 +解説
by
murachue
PDF
20230105_TITECH_lecture_ishizaki_public.pdf
by
Kazuaki Ishizaki
PDF
Python 3.9からの新定番zoneinfoを使いこなそう
by
Ryuji Tsutsui
PDF
レコメンドアルゴリズムの基本と周辺知識と実装方法
by
Takeshi Mikami
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
by
NTT DATA Technology & Innovation
PPTX
ゲームエンジニアのためのデータベース設計
by
sairoutine
PDF
Pythonによる黒魔術入門
by
大樹 小倉
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
by
Ken'ichi Matsui
ソーシャルゲームのためのデータベース設計
by
Yoshinori Matsunobu
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
by
Takuto Wada
こわくない Git
by
Kota Saito
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
GoによるWebアプリ開発のキホン
by
Akihiko Horiuchi
イベント・ソーシングを知る
by
Shuhei Fujita
マッチングサービスにおけるKPIの話
by
cyberagent
リクルート式 自然言語処理技術の適応事例紹介
by
Recruit Technologies
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
by
Takayuki Shimizukawa
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
by
Yoshitaka Kawashima
Linked Open Data(LOD)の基本的な使い方
by
Kouji Kozaki
WayOfNoTrouble.pptx
by
Daisuke Yamazaki
目grep入門 +解説
by
murachue
20230105_TITECH_lecture_ishizaki_public.pdf
by
Kazuaki Ishizaki
Python 3.9からの新定番zoneinfoを使いこなそう
by
Ryuji Tsutsui
レコメンドアルゴリズムの基本と周辺知識と実装方法
by
Takeshi Mikami
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
by
NTT DATA Technology & Innovation
ゲームエンジニアのためのデータベース設計
by
sairoutine
Pythonによる黒魔術入門
by
大樹 小倉
Similar to アプリを成長させるためのログ取りとログ解析に必要なこと
PDF
ログ管理でウキウキAndroid Life (Log Management in Android)
by
Tomoaki Imai
PDF
楽天トラベルとSpring(Spring Day 2016)
by
Rakuten Group, Inc.
PDF
Firebase & BigQuery で Android アプリの成⻑を支える
by
Kenichi Tatsuhama
PPTX
Androidアプリ解析の基礎 公開用
by
Lumin Hacker
PDF
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
by
Takahiro Inoue
PDF
Treasure Data Intro for Data Enthusiast!!
by
Takahiro Inoue
PPTX
DroidKaigi アプリの内部を見る
by
Kenichi Tatsuhama
ODP
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
by
Takao Sumitomo
PDF
20140708 オンラインゲームソリューション
by
Takahiro Inoue
PDF
GTMF 2015: ゲーム分析プラットフォームとしてのトレジャーデータサービス | トレジャーデータ株式会社
by
Game Tools & Middleware Forum
PPTX
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
by
Fujio Kojima
PPTX
日本Androidの会のハンズオンセミナー資料(20130315)
by
eijikushida
PPTX
Firebase hands on in Matsuyama
by
Kenichi Tatsuhama
PDF
Firebase analytics for_android _ i_os
by
baroqueworksdev
PDF
みゆっき☆Think#3 「androidに触ってみるよ!」
by
techtalkdwango
PDF
Android0422
by
takahiko_takahashi
PDF
【Techbuzz】titanium資料
by
洋平 前田
PPT
201211 LOIS koupe
by
kobeuniv_cs27
PPTX
Android 開発, 運用時に使いたいライブラリやサービスの紹介
by
Kenichi Tatsuhama
PDF
2012 6 6_ga_tracker_chinaminamoto_slideshare
by
China Minamoto
ログ管理でウキウキAndroid Life (Log Management in Android)
by
Tomoaki Imai
楽天トラベルとSpring(Spring Day 2016)
by
Rakuten Group, Inc.
Firebase & BigQuery で Android アプリの成⻑を支える
by
Kenichi Tatsuhama
Androidアプリ解析の基礎 公開用
by
Lumin Hacker
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
by
Takahiro Inoue
Treasure Data Intro for Data Enthusiast!!
by
Takahiro Inoue
DroidKaigi アプリの内部を見る
by
Kenichi Tatsuhama
(beta)アプリを成長させるためのログ取りとログ解析に必要なこと
by
Takao Sumitomo
20140708 オンラインゲームソリューション
by
Takahiro Inoue
GTMF 2015: ゲーム分析プラットフォームとしてのトレジャーデータサービス | トレジャーデータ株式会社
by
Game Tools & Middleware Forum
「Windows 8 ストア アプリ開発 tips」 hokuriku.net vol.11 (2013年1月26日)
by
Fujio Kojima
日本Androidの会のハンズオンセミナー資料(20130315)
by
eijikushida
Firebase hands on in Matsuyama
by
Kenichi Tatsuhama
Firebase analytics for_android _ i_os
by
baroqueworksdev
みゆっき☆Think#3 「androidに触ってみるよ!」
by
techtalkdwango
Android0422
by
takahiko_takahashi
【Techbuzz】titanium資料
by
洋平 前田
201211 LOIS koupe
by
kobeuniv_cs27
Android 開発, 運用時に使いたいライブラリやサービスの紹介
by
Kenichi Tatsuhama
2012 6 6_ga_tracker_chinaminamoto_slideshare
by
China Minamoto
More from Takao Sumitomo
PDF
僕は上スワイプでBottomSheetを出したかっただけなんだ
by
Takao Sumitomo
PDF
勉強会資料 Uml概要
by
Takao Sumitomo
PDF
Viewを動的に変化させるアプローチ
by
Takao Sumitomo
PDF
sharedUserIdを使った俺得開発ツールの作り方
by
Takao Sumitomo
PDF
用途に合わせたアニメーションの実装方法
by
Takao Sumitomo
PPTX
エンジニアがプロダクト育成を始めるまでにやったこと
by
Takao Sumitomo
PDF
開発を効率的に進めるられるまでの道程
by
Takao Sumitomo
PDF
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
by
Takao Sumitomo
PDF
高速でトライ&エラーを するために気をつけてること
by
Takao Sumitomo
PDF
Firefox OSの何が嬉しいか
by
Takao Sumitomo
PDF
勉強会資料 データ構造とアルゴリズム
by
Takao Sumitomo
PDF
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
by
Takao Sumitomo
PDF
AdapterToolboxでRecyclerViewを楽にする
by
Takao Sumitomo
PPTX
Wantedlyのテスト事情
by
Takao Sumitomo
PDF
SQLiteDatabaseを無理矢理覗く
by
Takao Sumitomo
PDF
テストがあればなんとかなる〜効率化までの道程〜
by
Takao Sumitomo
PDF
プロダクトを育てるのにGoogleのサービスが助けてくれること
by
Takao Sumitomo
PDF
potatotips (iOS/Android開発Tips共有会) 第19回 資料
by
Takao Sumitomo
PDF
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
by
Takao Sumitomo
PPTX
Uml速習会
by
Takao Sumitomo
僕は上スワイプでBottomSheetを出したかっただけなんだ
by
Takao Sumitomo
勉強会資料 Uml概要
by
Takao Sumitomo
Viewを動的に変化させるアプローチ
by
Takao Sumitomo
sharedUserIdを使った俺得開発ツールの作り方
by
Takao Sumitomo
用途に合わせたアニメーションの実装方法
by
Takao Sumitomo
エンジニアがプロダクト育成を始めるまでにやったこと
by
Takao Sumitomo
開発を効率的に進めるられるまでの道程
by
Takao Sumitomo
Camera API 1と2が混在するプロダクトの開発で 泣いたこととそのワークアラウンド
by
Takao Sumitomo
高速でトライ&エラーを するために気をつけてること
by
Takao Sumitomo
Firefox OSの何が嬉しいか
by
Takao Sumitomo
勉強会資料 データ構造とアルゴリズム
by
Takao Sumitomo
CIのビルドを通知する仕組みをAndroidとFirestoreで作った話
by
Takao Sumitomo
AdapterToolboxでRecyclerViewを楽にする
by
Takao Sumitomo
Wantedlyのテスト事情
by
Takao Sumitomo
SQLiteDatabaseを無理矢理覗く
by
Takao Sumitomo
テストがあればなんとかなる〜効率化までの道程〜
by
Takao Sumitomo
プロダクトを育てるのにGoogleのサービスが助けてくれること
by
Takao Sumitomo
potatotips (iOS/Android開発Tips共有会) 第19回 資料
by
Takao Sumitomo
Maker Faire Bay Areaに行きたかったのでGoogle I/Oに行ってきた
by
Takao Sumitomo
Uml速習会
by
Takao Sumitomo
Recently uploaded
PDF
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
PDF
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
PDF
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
PDF
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
PDF
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
PPTX
ddevについて .
by
iPride Co., Ltd.
PDF
Drupal Recipes 解説 .
by
iPride Co., Ltd.
PDF
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
第21回 Gen AI 勉強会「NotebookLMで60ページ超の スライドを作成してみた」
by
嶋 是一 (Yoshikazu SHIMA)
100年後の知財業界-生成AIスライドアドリブプレゼン イーパテントYouTube配信
by
e-Patent Co., Ltd.
Starlink Direct-to-Cell (D2C) 技術の概要と将来の展望
by
CRI Japan, Inc.
Reiwa 7 IT Strategist Afternoon I Question-1 3C Analysis
by
akipii ogaoga
Reiwa 7 IT Strategist Afternoon I Question-1 Ansoff's Growth Vector
by
akipii ogaoga
さくらインターネットの今 法林リージョン:さくらのAIとか GPUとかイベントとか 〜2026年もバク進します!〜
by
法林浩之
ddevについて .
by
iPride Co., Ltd.
Drupal Recipes 解説 .
by
iPride Co., Ltd.
2025→2026宙畑ゆく年くる年レポート_100社を超える企業アンケート総まとめ!!_企業まとめ_1229_3版
by
sorabatake
アプリを成長させるためのログ取りとログ解析に必要なこと
1.
DroidKaigi 2018 @cattaka_net アプリを成長させるための ログ取りとログ解析に必要なこと Takao
Sumitomo
2.
DroidKaigi 2018 @cattaka_net2 自己紹介
3.
DroidKaigi 2018 @cattaka_net3 自己紹介 ● 住友
孝郎(Takao Sumitomo) ● たぶんAndroidアプリ開発者 ● 職歴的なもの – SIer的なこと – メーカー的なこと ● – 2014年12月〜 所属
4.
DroidKaigi 2018 @cattaka_net4 Wantedlyプロフィール
5.
DroidKaigi 2018 @cattaka_net5 触ったことあるもの プログラム Java,
C++, Ruby, PHP, Python データベース Oracle, Sqlite3, PostgreSQL, MySQL, Realm プラットフォーム等 Android, Linux(Debian), MFC, Struts 設計 UML, Excel方眼紙
6.
DroidKaigi 2018 @cattaka_net6 Javaが好き
7.
DroidKaigi 2018 @cattaka_net7 今日のお話に至った経緯
8.
DroidKaigi 2018 @cattaka_net8 Wantedlyにジョインする前 ● いっぱいいろんなものを作った ● 作るだけならどうにかできる
9.
DroidKaigi 2018 @cattaka_net9 不思議なことをいう人達がいた ● 良いものを作れば自然とユーザーは増える ● 面白いものを作ればバイラルで広がる 本当にそうなのか?
10.
DroidKaigi 2018 @cattaka_net10 そんな中でWantedlyにジョインした
11.
DroidKaigi 2018 @cattaka_net11 ジョイン直後 アプリを良くしていきましょう! (どうやったらいいんだろう...)
12.
DroidKaigi 2018 @cattaka_net12 最初にやったこと ● Google
Analyticsを見た – 当時はまだFirebase Analyticsはなかった ● TreasureData(ログ収集サービス)を見た ほとんどWebのログ 体系化されてなくて読み取れない わかるのはせいぜいインストール数とアクティブユーザー数
13.
DroidKaigi 2018 @cattaka_net13 そもそも何をもって良くなったいう? ● 指標は? ● その指標の数字を出すためには? うん、さっぱりわからん
14.
DroidKaigi 2018 @cattaka_net14 Wantedly
Visitの例を考える
15.
DroidKaigi 2018 @cattaka_net15 最も簡単な指標 ● マッチングアプリ –
応募ボタンを押す
16.
DroidKaigi 2018 @cattaka_net16 1
2 3 4 5 0.00% 10.00% 20.00% 30.00% 40.00% 50.00% 60.00% 70.00% 80.00% 90.00% 100.00% 応募にたどり着くまでのファネル それまでの過程は? ● 1: インストール ● 2: ユーザー登録 ● 3: 探す操作をする ● 4: 詳細画面を開く ● 5: 応募を押す こんな感じ??
17.
DroidKaigi 2018 @cattaka_net17 その過程を追うには? ● インストール –
ユーザーIDごとの最初のイベントを探す ● ユーザー登録 – Web側かアプリ側のログ ● 探す操作をする – アプリ側のログ
18.
DroidKaigi 2018 @cattaka_net18 その過程を追うには? ● 詳細画面を開く –
アプリ側のログ – キャッシュされるとWeb側のログじゃわからない ● 応募を押す – Web側のログ ログがWeb側とアプリ側に散らばってる、、、
19.
DroidKaigi 2018 @cattaka_net19 あ、、、これ闇雲にやっても無理だ、、、
20.
DroidKaigi 2018 @cattaka_net20 そのためにやったことのお話です
21.
DroidKaigi 2018 @cattaka_net21 どんな指標があるのか?
22.
DroidKaigi 2018 @cattaka_net22 エンジニアリング的な指標 ● クラッシュ率 ● ANR発生率 ● レンダリング時間 ● APIのレスポンス時間 Android
Vitals で確認できる
23.
DroidKaigi 2018 @cattaka_net23 非エンジニアリング的な指標 Google
Play Console, Firebase Analytics で確認できる
24.
DroidKaigi 2018 @cattaka_net24 インストール数 ● 単純にインストール数
25.
DroidKaigi 2018 @cattaka_net25 アクティブユーザー数 ● DAU
: Daily Active User – 1日のユニークユーザー数 ● WAU : Weekly Active User – 7日間のユニークユーザー数 ● MAU : Monthly Active User – 1ヶ月のユニークユーザー数 – 流派によって28日だったり31日だったりする 単純に掛け算ではないので注意
26.
DroidKaigi 2018 @cattaka_net26 リテンション率 ● 継続率とも呼ばれる ● コホート分析とも呼ばれる –
(厳密には違うけど) ● 期間ごとにユーザーを分けて見る
27.
DroidKaigi 2018 @cattaka_net27 リテンション率 Firebase
Analyics – demo projectより
28.
DroidKaigi 2018 @cattaka_net28 リテンション率 ● 多機能なアプリの場合 –
機能ごとのリテンション率が無いと どの機能がユーザーを繋ぎ止めてるか追えない
29.
DroidKaigi 2018 @cattaka_net29 コンバージョン率 ● ユーザーの中でコンバージョンした率 ● コンバージョン –
そのプロダクトの成果 – たとえば ● ECサービスなら何かが売れた ● マッチングサービスならマッチングが成立した プロダクトによって異なる
30.
DroidKaigi 2018 @cattaka_net30 必要なインフラ
31.
DroidKaigi 2018 @cattaka_net31 簡単な構成 ● ログ収集サービス ● データストア ● 抽出環境 ● 可視化
32.
DroidKaigi 2018 @cattaka_net32 具体的なサービスやプロダクト ログ収集系 データストア 抽出環境 可視化 Firebase Analytics ※1 Google BigQuery Google
Data Studio(β) ExcelR Domo Fluentd 普通の RDBMS Treasure Data Hadoop ※1:Firebase Analyticsは一部可視化機能がある
33.
DroidKaigi 2018 @cattaka_net33 ログ収集系 Treasure Data Google BigQuery 最近のWantedlyの構成の紹介 データストア 抽出環境 可視化 Firebase Analytics Excel Domo 普通の RDBMS アプリ
34.
DroidKaigi 2018 @cattaka_net34 ここまでで、お気づきの方も いらっしゃるかも知れませんが...
35.
DroidKaigi 2018 @cattaka_net35 アプリの実装の話が1つも出てません
36.
DroidKaigi 2018 @cattaka_net36 最近のWantedlyの構成の紹介 ログ収集系 Treasure Data Google BigQuery データストア 抽出環境 可視化 Firebase Analytics Excel Domo 普通の RDBMS アプリ この2つを考えるのに、 中間層の理解が必要だった
37.
DroidKaigi 2018 @cattaka_net37 初めてやるなら ● Firebase
Analytics ● Google BigQuery ● Excel の組み合わせから始めると無難
38.
DroidKaigi 2018 @cattaka_net38 アプリで取るログの種類
39.
DroidKaigi 2018 @cattaka_net39 アプリで取るログの種類 ● イベントログ –
Viewの操作 ● タップやスワイプ – 直接的なコンバージョン ● スクリーンログ – 画面名 – 遷移先の画面名 – 滞在時間
40.
DroidKaigi 2018 @cattaka_net40 イベントログ
41.
DroidKaigi 2018 @cattaka_net41 イベントログの項目 ● ユーザー識別子 ● 画面名 –
アプリによってはActivity + Fragment ● イベント名 – タップ / ロングタップ / スワイプなど ● イベントの追加属性 – View ID / アイテムのIDなど – 内部実装はJSONが良いかも(?)
42.
DroidKaigi 2018 @cattaka_net42 イベントログの例 ユーザー 識別子 画面名 イベント名 イベントの 追加属性画面の 追加属性 time
user_id screen screen_params event event_params 1234 ListActivity click {"view_id": "title", "item_id": 432} 1234 DetailActivity {"item_id": 432} press_back 1234 ListActivity click {"view_id": "title", "item_id": 234} 1234 DetailActivity {"item_id": 234} click {"view_id": "apply"} 1234 DetailActivity {"item_id": 234} cvt_apply {"item_id": 234} 2018/02/09 12:30 2018/02/09 12:31 2018/02/09 12:32 2018/02/09 12:33 2018/02/09 12:33
43.
DroidKaigi 2018 @cattaka_net43 イベントログのアプローチ ● 自動的にできれば理想だけど、、、 –
touchイベントをフックすればできなくはない – 付加情報を追加せざるを得ないケースが多い – 過度に冗長になることがある – デザイン的な事情の独自実装に対応できない 要所要所に丹精込めて埋める
44.
DroidKaigi 2018 @cattaka_net44 Viewの操作
vs コンバージョン ● どっちが解析しやすいか? – Viewの操作として記録 – コンバージョンとして記録 ● ツールに寄る – FAはコンバージョンが扱いやすい time user_id screen screen_params event event_params 1234 DetailActivity {"item_id": 234} click {"view_id": "apply"} 1234 DetailActivity {"item_id": 234} cvt_apply {"item_id": 234} 2018/02/09 12:33 2018/02/09 12:33 ※:2つはユーザーの操作としては同じ 重要な指標だから両方取る
45.
DroidKaigi 2018 @cattaka_net45 ライブラリごとの実装の違い
46.
DroidKaigi 2018 @cattaka_net46 イベントログの実装:Treasure
Data Map<String, Object> event = new HashMap<>(); event.put("user_id", userId); event.put("activity", activityName); event.put("fragment", fragmentName); event.put("event", "select_cotent"); event.put("item_id", itemId); event.put("name", name); TreasureData.sharedInstance() .addEvent("event_log", event); ユーザー識別子 画面 イベント名 追加属性 全部自分でやる!
47.
DroidKaigi 2018 @cattaka_net47 イベントログの実装:Firebase
Analytics Bundle bundle = new Bundle(); bundle.putLong (FirebaseAnalytics.Param.ITEM_ID, itemId); bundle.putString (FirebaseAnalytics.Param.ITEM_NAME, name); bundle.putString (FirebaseAnalytics.Param.CONTENT_TYPE, "image"); mFirebaseAnalytics.logEvent( FirebaseAnalytics.Event.SELECT_CONTENT, bundle); ↓追加属性 ↑イベント名 画面やユーザー識別子はやってくれる
48.
DroidKaigi 2018 @cattaka_net48 イベントログの実装:Google
Analytics mTracker.send(new HitBuilders.EventBuilder() .setCategory(category.category) .setAction("select_content") .setNonInteraction(false) .build()); ↑イベント名 画面やユーザー識別子はやってくれる
49.
DroidKaigi 2018 @cattaka_net49 ライブラリごとの実装の違い ● TD,
FA, GAでそれぞれ微妙に違う ● 特に画面とイベントの紐付けが異なる
50.
DroidKaigi 2018 @cattaka_net50 スクリーンログ
51.
DroidKaigi 2018 @cattaka_net51 スクリーンログの項目 ● 画面遷移が追えるくらい取る ● アプリからの離脱もわかるようにする リスト画面 商品画面 item_id=3 関連商品 item_id=3 商品画面 item_id=7 アプリを起動 アプリから離脱
52.
DroidKaigi 2018 @cattaka_net52 スクリーンログの項目 ● ユーザー識別子 ● 画面名 –
アプリによっては Activity + Fragment – 追加の属性 ● 次の画面名 ● 滞在時間 – ミリ秒やナノ秒
53.
DroidKaigi 2018 @cattaka_net53 スクリーンログの例 画面名 画面の 追加属性 次の画面の 追加属性 次の画面名
滞在時間 time user_id screen screen_params next_screen next_params duration 1234 ListActivity DetailActivity {"item_id": 432} 46231 1234 DetailActivity {"item_id": 432} ListActivity 82323 1234 ListActivity DetailActivity {"item_id": 234} 53341 1234 DetailActivity {"item_id": 234} 72652 2018/02/09 12:30 2018/02/09 12:31 2018/02/09 12:32 2018/02/09 12:33
54.
DroidKaigi 2018 @cattaka_net54 スクリーンログのアプローチ ● ActivityやFragment単位で取る ● トラッカーを埋める場所 –
onStart / onResume – onStop / onPause ● onStart 〜 onStop で滞在時間が出せる – FAは滞在時間は自動でやってくれる
55.
DroidKaigi 2018 @cattaka_net55 ライブラリごとの実装の違い
56.
DroidKaigi 2018 @cattaka_net56 スクリーンログの実装:Treasure
Data Map<String, Object> event = new HashMap<>(); event.put("user_id", userId); event.put("activity", activity); event.put("fragment", fragment); event.put("params", params); event.put("next_activity", nextActivityName); event.put("next_fragment", nextFragmentName); event.put("next_params", nextParams); event.put("duration", duration); TreasureData.sharedInstance() .addEvent("screen_log", event); 全部自分でやる! ユーザー識別子 画面 次の画面 滞在時間 ※:onStopなどに書く
57.
DroidKaigi 2018 @cattaka_net57 スクリーンログの実装:Firebase Analytics mFirebaseAnalytics.setCurrentScreen( activity,
// Activity "DetailActivity", // screenName null // screenClassOverride ); 滞在時間や次の画面の遷移、 ユーザー識別子はやってくれる ←画面名 ※:onStartなどに書く
58.
DroidKaigi 2018 @cattaka_net58 スクリーンログの実装:Google
Analytics mTracker.setScreenName("DetailActivity"); mTracker.send( new HitBuilders.ScreenViewBuilder().build()); ←画面名 ※:onStartなどに書く
59.
DroidKaigi 2018 @cattaka_net59 トラッカーの実装Tips
60.
DroidKaigi 2018 @cattaka_net60 トラッカーのコードは簡潔安全にしたい
61.
DroidKaigi 2018 @cattaka_net61 WHY ● 機能の実装者の負荷を減らしたい ● トラッカー起因のクラッシュは0にしたい ● トラッカーはミスなく動いてほしい
62.
DroidKaigi 2018 @cattaka_net62 FAでベタで書いたときの問題 Bundle
bundle = new Bundle(); bundle.putLong ( "item_id", id ); bundle.putString( "item_name", name ); mFirebaseAnalytics.logEvent("select_content", bundle); イベント名を定数にしたい 属性名を定数にしたい 値を型安全にしたい これらは一度コードに散らばると回収不可能になる
63.
DroidKaigi 2018 @cattaka_net63 アプローチ ● トラッカー用の便利メソッドを作る –
イベントをenum化する – 属性をGenericsで型のある定数にする – Generics芸を使った便利メソッドを作る
64.
DroidKaigi 2018 @cattaka_net64 イベントをenum化する public
enum Event { SELECT_CONTENT("select_content"), CLICK("click"), // TODO: イベントはここに追加していく ; public final String key; Event(String key) { this.key = key; } }
65.
DroidKaigi 2018 @cattaka_net65 属性をGenericsで型のある定数にする public
class Param<T> { public static final Param<Long> ITEM_ID = new Param<>("item_id", BaseBundle::putLong); public static final Param<String> ITEM_NAME = new Param<>("item_name", BaseBundle::putString); String key; IFunc<T> putFunc; private Param(String key, IFunc<T> putFunc) { this.key = key; this.putFunc = putFunc; } public interface IFunc<V> { void put(Bundle dest, String key, V value); } }
66.
DroidKaigi 2018 @cattaka_net66 Generics芸を使った便利メソッドを作る public
<V1, V2> void logEvent( Event event, Param<V1> k1, V1 v1, Param<V2> k2, V2 v2 ) { Bundle bundle = new Bundle(); k1.putFunc.put(bundle, k1.key, v1); k2.putFunc.put(bundle, k2.key, v2); mFirebaseAnalytics.logEvent(event.key, bundle); } // イベント名 // 属性1 // 値1 // 属性2 // 値2 型安全が守られる 型安全が守られる
67.
DroidKaigi 2018 @cattaka_net67 便利メソッドを使った場合 MyTracker.getInstance().logEvent( Event.SELECT_CONTENT, Param.ITEM_ID,
id, Param.ITEM_NAME, name); ● だいぶ短くなった ● イベント名と属性名が定数化された ● 属性の値が型安全になった
68.
DroidKaigi 2018 @cattaka_net68 このアプローチの課題の考察 ● メソッドチェーンの方が良くない? ● 属性の個数は可変だよね?
69.
DroidKaigi 2018 @cattaka_net69 メソッドチェーンの方が良くない? MyTracker.getInstance() .logEvent(Event.SELECT_CONTENT) .put(
Param.ITEM_ID, id ) .put( Param.ITEM_NAME, name ) .send(); たしかに、いいかもしれない、、、けど、、、 これを忘れる事故が起こる
70.
DroidKaigi 2018 @cattaka_net70 属性の個数は可変だよね? ● 諦めて属性の 数ごとに作る ● RxJavaも 似たことをしてる ● 0〜7個あれば 実用十分 public
<V1, V2, V3, V4, V5, V6> void logEvent( Event event, Param<V1> k1, V1 v1, Param<V2> k2, V2 v2, Param<V3> k3, V3 v3, Param<V4> k4, V4 v4, Param<V5> k5, V5 v5, Param<V6> k6, V6 v6 ) { Bundle bundle = new Bundle(); k1.putFunc.put(bundle, k1.key, v1); k2.putFunc.put(bundle, k2.key, v2); k3.putFunc.put(bundle, k3.key, v3); k4.putFunc.put(bundle, k4.key, v4); k5.putFunc.put(bundle, k5.key, v5); k6.putFunc.put(bundle, k6.key, v6); mFirebaseAnalytics.logEvent(event.key, bundle); } 例:属性が6つの場合
71.
DroidKaigi 2018 @cattaka_net71 僕の結論 ● 便利メソッドが泥臭くなるのは諦める ● 機能の実装者の負担を下げることを最優先
72.
DroidKaigi 2018 @cattaka_net72 複数のライブラリを使うときのアプローチ
73.
DroidKaigi 2018 @cattaka_net73 ログ収集サービスは何個入れる? ● 本発表でも既に複数が出ている –
Firebase Analytics – Google Analytics – Treasure Data ● 他にも広告用のものも使うことがある ● 理想は1つに絞るべきだが、そうも行かない
74.
DroidKaigi 2018 @cattaka_net74 複数のログ収集サービスへの送り分けは? ● 専用の便利クラスを作る Firebase Analytics Treasure Data Google Analytics 便利クラスイベント 個別にコードを書くと長くなるので 送り分けのコードはここにまとめる 後々、どんな計測系サービスを使うかわからないので、 1つしか使わない場合も作っておいたほうが良い
75.
DroidKaigi 2018 @cattaka_net75 スクリーンログのトラッカー
76.
DroidKaigi 2018 @cattaka_net76 個別にコードを入れるのは大変 ● 対策1 –
BaseActivity や BaseFragment を作る ● onStart や onStop などに仕込む public class BaseFragment extends Fragment { @Override public void onStart() { super.onStart(); MyTracker.getInstance().logScreen(this); } } ↑画面用のメソッド
77.
DroidKaigi 2018 @cattaka_net77 個別にコードを入れるのは大変 ● 対策2 –
LifeCycleCallbacks を使う ● ActivityLifecycleCallbacks ● FragmentLifecycleCallbacks
78.
DroidKaigi 2018 @cattaka_net78 FragmentLifecycleCallbacks public
class TrackFragmentLifecycleCallbacks extends FragmentManager.FragmentLifecycleCallbacks { @Override public void onFragmentStarted( FragmentManager fm, Fragment f) { super.onFragmentStarted(fm, f); MyTracker.getInstance().logScreen(f); } } ↑画面用のメソッド
79.
DroidKaigi 2018 @cattaka_net79 FragmentLifecycleCallbacks
の問題 ● 1つの画面に2つFragmentがあると衝突する ● 対策 – マーカーインターフェースを計測の要否に使う
80.
DroidKaigi 2018 @cattaka_net80 マーカーインターフェースを使う @Override public
void onFragmentStarted( FragmentManager fm, Fragment f) { super.onFragmentStarted(fm, f); if (f instanceof ITrackScreen) { MyTracker.getInstance().logScreen(f); } } public interface ITrackScreen {}
81.
DroidKaigi 2018 @cattaka_net81 ViewPagerの問題 ● 左右のFragmentがstart状態になる ● 対策 –
中のFragmentのonResumeでは計測しなくする – 親側で泥臭くハンドリングする ● onStartで最初のFragmentを記録 ● onPageSelectedで切り替わりを記録
82.
DroidKaigi 2018 @cattaka_net82 パッと確認できるようにしておく
83.
DroidKaigi 2018 @cattaka_net83 logcatに出しておく ● トラッカーの確認を検証作業に含めるのは酷 ● 実装者がチラ見でもチェックできるようにする
84.
DroidKaigi 2018 @cattaka_net84 Firebase
AnalyticsのDebugViewを使う ● デバッグを有効にしたデバイスの操作が Webブラウザ上でリアルタイムに確認できる
85.
DroidKaigi 2018 @cattaka_net85 通信についての気遣い
86.
DroidKaigi 2018 @cattaka_net86 実装上の気をつけないといけないこと ● 再送制御 –
雑に独自実装するとエラーが出たときに欠損する ● 送信タイミング – 都度通信するとバッテリーに優しくない – 適当なタイミングでまとめてやって欲しい FA, GA, TDは全部やってくれる
87.
DroidKaigi 2018 @cattaka_net87 Firebase
Analyticsへの気遣い
88.
DroidKaigi 2018 @cattaka_net88 Firebase
Analyticsへの気遣い ● Firebase Analyticsには地味に制約が多い – 制約を守らないとエラーになってログが送れない ● 主な制約 – イベント名の種類は500個まで – イベント名と属性名 ● 英数とアンダースコアで40文字まで – 属性の値は100文字まで – 同一属性名の型は揃えること
89.
DroidKaigi 2018 @cattaka_net89 銀の弾丸は無い、筋肉でカバー
90.
DroidKaigi 2018 @cattaka_net90 ログ取りで気をつけてること
91.
DroidKaigi 2018 @cattaka_net91 1つの指標は最低3系統で確認できること ● おかしな値は割と出る ● 最低3つあれば多数決ができる ● よく使う系統 –
アクションログ – コンバージョンログ – Web側のログやDB
92.
DroidKaigi 2018 @cattaka_net92 ログだけでユーザーの操作を 把握できるようにする ● おかしな数字がでたときは生ログを見る ● 計測がおかしいユーザーを探し、 その行動ログから異常を探る
93.
DroidKaigi 2018 @cattaka_net93 機密情報は入れないこと ● 取扱に困るものはログにいれないこと –
パスワード – メッセージ – 利用規約やプライバシーポリシーに反するもの
94.
DroidKaigi 2018 @cattaka_net94 定量的な数字も必要ならとる ● RecyclerView –
何処までスクロールしたか – どのViewが何秒表示されたか – getGlobalVisibleRectで頑張って実装
95.
DroidKaigi 2018 @cattaka_net96 可視化する
96.
DroidKaigi 2018 @cattaka_net97 最初はExcelとSQL ● Google
BigQueryからSQLでデータを取り出す ● ピボットテーブルでパッと項目別に集計する
97.
DroidKaigi 2018 @cattaka_net98 Excelは強い ● 数十MB、数十万レコードのCSVを開ける ● そのサイズでもピボットテーブルが動く
98.
DroidKaigi 2018 @cattaka_net99 Google
Data Studio(beta) ● データをダッシュボードやレポートにできる ● BigQueryやRDBMSからデータを引っ張れる
99.
DroidKaigi 2018 @cattaka_net100 Domo ● ビジネス管理プラットフォーム ● データの可視化や集約、共有できるサービス ● RDBMSやBigQueryに繋いでグラフが作れる
100.
DroidKaigi 2018 @cattaka_net101 その他 ● Jupyter
notebook ● R ● Tableau ● Metabase ● re:dash ● Chartio 他にもたくさんあるのでググってください
101.
DroidKaigi 2018 @cattaka_net102 過去に起こった失敗
102.
DroidKaigi 2018 @cattaka_net103 Notificationでスパイク ● アクティブユーザーに誤検知されていた ● 操作ではないイベントはNonInteractiveにする –
Receive, Open, Cancel など
103.
DroidKaigi 2018 @cattaka_net105 0 50 100 150 200 250 300 350 400 count 荒ぶるグラフ ● いろんな要因でグラフは壊れる –
アプリの改修時の実装ミス – Web側のDBの構成変更 – APIの改修時の構成変更 壊れたら直す リリース日
104.
DroidKaigi 2018 @cattaka_net106 ProGuard先生ェ... ● ログ上の画面名が
a とか b になっていた – 雑にclass.getSimpleName()でログを取っていた – 何かの弾みで除外指定が外れて難読化されていた
105.
DroidKaigi 2018 @cattaka_net108 onClickイベントが他所から叩かれていた ● トラッカーは暗黙的にonClickに埋めていた ● 一部の実装がonClickを直接叩いていた ● 画面を開いただけでトラッカーが発火していた
106.
DroidKaigi 2018 @cattaka_net109 広告媒体の違いは怖い ● 広告媒体ごとにユーザーの質が異なる –
CPI(Cost Per Install)と継続率は別 ● 対策 – インストール時のリファラーを記録する ● com.android.vending.INSTALL_REFERRER – 広告の計測ライブラリを使う
107.
DroidKaigi 2018 @cattaka_net110 A/Bテストは同時期にやる ● 時間で分けたA/Bテストは恐ろしい –
「先週と今週で比較」は良くない – 広告を使っていると顕著 ● 同じ期間じゃないと徒労に終わる – Firebase Remote Config的なもので サクッと切り替えられるようにする
108.
DroidKaigi 2018 @cattaka_net112 Next
Action
109.
DroidKaigi 2018 @cattaka_net113 ディープラーニングで!
110.
DroidKaigi 2018 @cattaka_net114 ごめんなさいよくわかりません
111.
DroidKaigi 2018 @cattaka_net115 アプリエンジニア的アプローチ ● 改善したい数字を決める ● 仮設を立てる ● 効果を見積もる ● 施策を実装してリリースする ● 結果を確認する
112.
DroidKaigi 2018 @cattaka_net116 べき論では良くならない ● 「ガイドラインではこう言われています」 ● 「デザインパターンではこう言われています」 ● 本当にそれが人を幸せにするのか?
113.
DroidKaigi 2018 @cattaka_net117 まとめ
114.
DroidKaigi 2018 @cattaka_net118 アプリにはたくさんの人が関わる ● エンジニア ● デザイナー ● ディレクター ● マーケター ● ビジネス ● カスタマーサポート ● etc
115.
DroidKaigi 2018 @cattaka_net119 それぞれの意図が 正しく成功したか失敗したかを 指し示せるかはログに掛かっている
116.
DroidKaigi 2018 @cattaka_net120 アプリエンジニアが ログをちゃんと取れば メンバーが動きやすくなり プロダクトの成長に繋がる
117.
DroidKaigi 2018 @cattaka_net121 皆さんのプロダクトの成長が 人類のQoLを上げると信じてます
118.
DroidKaigi 2018 @cattaka_net122 ログを取ろう
119.
DroidKaigi 2018 @cattaka_net123 WANTEDLY
TECH BOOK 配布中 ● 技術書典1〜3で 頒布した記事の中から アプリ向けのものを激選
120.
DroidKaigi 2018 @cattaka_net124 ご清聴ありがとうございました Takao
Sumitomo
Download