ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight

Information about ヤフーのロギングSDKの挑戦〜データドリブン企業を目指して〜 #yjdsnight

Published on August 2, 2017

Author: techblogyahoo

Source: slideshare.net

Content

1. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 2017年7月19日 1 松本 誠義 ヤフーのロギングSDKの挑戦 〜データドリブン企業を目指して〜

2. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データ&サイエンスソリューション統括本部 データプラットフォーム本部 開発4部 データセンサー1 入社:2016年 新卒 担当:iOS 趣味:海釣り 松本 誠義 自己紹介 2

3. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アジェンダ 背景:ロギングSDKのこれまで 課題:ロギングSDKの課題 展望:自動ロギングの実現に向けて 3 テーマ「データ収集」

4. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 背景 ロギングSDKのこれまで

5. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. トップメッセージより ヤフーは世界でもユニークな マルチビッグデータカンパニーです トップメッセージ https://about.yahoo.co.jp/info/message/

6. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ユーザー規模 6 9,000万1日 ユニーク ブラウザ ※出所:Yahoo! JAPAN社内データ(2016年4月-6月の平均)

7. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 提供サービス 7 Media US Search Video Answer Mail JP US JP Membership C2C Payment C2C EC B2C EC Local

8. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 様々なデータセット 8 検索 EC 金融 メッセージングサービス 地図、カーナビ 興味のある言葉 買ったもの ユーザーの資産 自然言語 位置情報

9. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データ利活用のサイクルを回したい 9 サービスや 機能を提供 データがたまる データから 気づきを得る インサイト ユーザー データ

10. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギングSDK Key-ValueのシンプルI/F • ヘルスチェック • サービス改善 ほぼ全てのサービスに導入完了 iOS, Android, Webに対応

11. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 全社のデータ利活用 各サービス毎にデータを利活用できている 11 でも、まだまだ課題が…。

12. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 課題 ロギングSDKの課題

13. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データ利活用のボトルネック SDKの課題 • サービスの実装が大変 • 集めたデータの整合性がとれない 13

14. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 14 サービスの実装が大変 SDKで提供している機能 その結果。。。 送りたいログは大量 セッション管理 Key-Valueのログ送信I/F ロギングのための実装が多い ラッパーライブラリが必須 SDK Wrapper • インスタンス管理 • ログ送信の最適化

15. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 集めたデータの整合性がとれない 15 Button1 Button1, 2 画面外含む ログ取得のタイミング 画面に入った時 例. 要素の表示 Button 1 Button 2 Button 1 サービスごとにログの意味合いが異なる サービスA サービスB

16. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 原因 • サービス側の実装が大変 • 集めたデータの整合性がとれない 16 ログ取得のI/Fだけを提供 共通のパラメータは自動化すべき

17. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 展望 自動ロギングの実現に向けて

18. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 自動化の対象 18 サービス独自のイベントロギング サービス共通のロギング項目 • 要素の表示 • 要素に対するClick

19. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 19 自動ロギングとロギング実装の工数 Before: After: サービスのロギングに割く工数が激減! 画面の表示 パラメータの指定 送信処理 要素の追加 パラメータの指定 送信処理 Clickイベント パラメータの指定 送信処理 パラメータの指定要素生成時

20. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 自動ロギングとデータの整合性 20 データの整合性が取れるようになる Button 1 Button 2 Button 1 サービスA サービスB SDK SDK Button1 Button1 自動ロギング 自動ロギング

21. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. データ利活用のボトルネック解消へ 21 SDKの課題 • 実装が大変 • 集めたデータの整合性がとれない 自動ロギング導入 • サービスのロギングに割く工数が激減 • データの整合性が取れるようになる

22. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 要素の表示とClickの自動化処理 どのように実現したか

23. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 自動化後のサービス側のロギング実装 23 Button 1 Button 2 Button 1 Button 2 対象: YES 対象: YES 対象: YES ロギング対象の指定 要素が画面に表示された 要素が非表示になった ButtonがClickされた ロギング対象指定のI/F ロギング対象の監視・判定処理 自動ロギング

24. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. どのように実現したか(1/2) ロギング対象指定のI/F

25. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギング対象指定のI/F 25 image1.isTarget = YES; button1.isTarget = YES; 目指す形:ロギング対象の各要素にフラグをセット 要素のsuperクラスを拡張してプロパティを追加する UIView UIButton UIImage UIView+Sample.h/m @property (nonatomic) BOOL isTarget;

26. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. iOS: カテゴリで値を保持する 26 @dynamicプロパティのアクセサでget/setする @dynamic isTarget; - (BOOL)isTarget { NSNumber *boolNumber = objc_getAssociatedObject(self, @selector(isTarget)); return [boolNumber boolValue]; } - (void)setIsTarget:(BOOL)isTarget { objc_setAssociatedObject(self, @selector(isTarget), [NSNumber numberWithBool:isTarget], OBJC_ASSOCIATION_RETAIN); } id objc_getAssociatedObject(id object, const void *key); void objc_setAssociatedObject(id object, const void *key, id value, policy); #import <objc/runtime.h> AssociatedObjectの利用

27. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギング対象を指定できるようになった 27 Button 1 Button 2 対象: YES 対象: YES 対象: YES id: img1 id: btn1 id: btn2 同様に任意のパラメータの設定も可能

28. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. どのように実現したか(2/2) ロギング対象の監視・判定処理

29. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギング対象の監視・判定 29 Button 1 Button 2 可視 可視 不可視 Button 1 Button 2 不可視 可視 可視 View-out View-in スクロール 判定結果 監視

30. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギング対象の監視 ↓ ロギング実施の判定処理

31. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 監視に利用できそうな技術 ポーリング 一定時間ごとに処理を実行 イベントのフック イベント発生ごとに処理を実行 31

32. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. アプリの状態遷移に関わるイベント 32 イベント iOSの場合 画面の描画が完了 viewDidAppear 現在の画面が非表示になった viewDidDisappear スクロールされた scrollViewDidScroll アクションの送信(click等) sendAction

33. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. なぜフックするのか 33 イベント実装メソッド サービス側の実装 画面の遷移など ロギング処理 サービス側で ロギング実装の必要あり

34. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. イベントハンドラのフック 34 ロギング処理 サービス側の実装 画面の遷移など イベント実装メソッド ロギング処理を 差し込みたい

35. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Method Swizzling(iOS) 35 ロギング処理 scrollViewDidScroll scrollWithLogging scrollWithLogging サービスの実装 メソッドの処理を入れ替える仕組み

36. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Method Swizzling(iOS) 36 scrollViewDidScroll scrollWithLogging ロギング処理 scrollWithLogging サービスの実装 IMP class_replaceMethod( Class cls, SEL name, IMP imp, const char *types ); 元scrollWithLogging 元scrollViewDidScroll

37. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 状態変化の監視 37 可視状態を要素に保持し、判定の度に比較 Button 1 Button 2 Button 1 Button 2 Button 1 Button 1 Button 2 View-in View-out 例:スクロールの監視時

38. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. ロギング対象の監視 ↓ ロギング実施の判定処理

39. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 可視状態の判定 1. ロギング対象の探索 2. 座標の変換 3. 領域の判定 39 Button 1 Button 2

40. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. window&screen 1. ロギング対象の探索 40 Button 1 Button 2 YES YES YES root view scroll view for (UIView *subView in rootView.subviews) { if (subView.isTarget) { ... rootview起点にsubviewを走査 ※前提:windowとscreenが同サイズ

41. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 2. 座標の変換 41 window&screen Button 1 Button 2 root view scroll view YES YES YES CGRect rectInWindow = [subview convertRect:subview.bounds toView:nil]; 対象viewの座標をWindow座標系に変換

42. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 3. 領域の判定 42 window&screen Button 1 Button 2 root view scroll view YES YES YES 可視 可視 不可視 CGRectIntersectsRect(window.bounds, rectInWindow) 対象viewの座標がwindow内に含まれるか判定

43. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 実装完了 43 ロギング対象指定のI/F ロギング対象の監視・判定処理 自動ロギング実現に必要な実装

44. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. Button 1 Button 2 組込みテストの結果 44 Button 1 Button 2 Button 1 Button 2 View-out View-inButton 1 Button 2 この間、サービス側の実装はゼロ

45. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. 組込みテストの結果 45 Button 1 Button 2 View-out Click Button 1 Button 2 Text 1 この間、サービス側の実装はゼロ View-out View-in View-in

46. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まとめ

47. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まとめ データドリブン実現に向けたSDKの課題 • 実装が大変 • データの整合性がとれない 自動ロギングでボトルネックの解消

48. Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved.Copyrig ht © 2017 Yahoo Japan Corporation. All Rig hts Reserved. まだtrial&error。 挑戦は続きます。

#import presentations

Introduction to ml
18. 06. 2020
0 views

Introduction to ml

Python OpenCV Real Time projects
31. 05. 2020
0 views

Python OpenCV Real Time projects

Related presentations


Other presentations created by techblogyahoo

HTTP/2 入門
23. 05. 2014
0 views

HTTP/2 入門

SpringBootTest入門
12. 05. 2017
0 views

SpringBootTest入門

decode17
01. 06. 2017
0 views

decode17

Cloud Foundry Summit 2017
21. 06. 2017
0 views

Cloud Foundry Summit 2017

AMPと広告とOpenRTBと #yjmu
15. 06. 2017
0 views

AMPと広告とOpenRTBと #yjmu

AR Designer Meetup #1
21. 11. 2018
0 views

AR Designer Meetup #1

Getting Started Algorithm
27. 12. 2018
0 views

Getting Started Algorithm