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

112 Views

August 02, 17

スライド概要

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

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ヤフーのロギングSDKの挑戦 〜データドリブン企業を目指して〜 2017年8月2日 松本 誠義 1 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

2.

自己紹介 データ&サイエンスソリューション統括本部 データプラットフォーム本部 開発4部 データセンサー1 入社:2016年 新卒 担当:iOS 趣味:海釣り 松本 誠義 2 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

3.

アジェンダ テーマ「データ収集」 背景:ロギングSDKのこれまで 課題:ロギングSDKの課題 展望:自動ロギングの実現に向けて 3 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

4.

背景 ロギングSDKのこれまで Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

5.

トップメッセージより ヤフーは世界でもユニークな マルチビッグデータカンパニーです トップメッセージ https://about.yahoo.co.jp/info/message/ Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

6.

ユーザー規模 1日 9,000万 ユニーク ブラウザ ※出所:Yahoo! JAPAN社内データ(2016年4月-6月の平均) 6 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

7.

提供サービス Media Search Video Answer Mail C2C EC B2C EC Local US JP Membership C2C Payment US JP 7 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

8.

様々なデータセット 検索 興味のある言葉 買ったもの EC 金融 8 ユーザーの資産 メッセージングサービス 自然言語 地図、カーナビ 位置情報 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

9.

データ利活用のサイクルを回したい データから 気づきを得る インサイト ユーザー データ データがたまる 9 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . サービスや 機能を提供

10.

ロギングSDK Key-ValueのシンプルI/F • • ヘルスチェック サービス改善 iOS, Android, Webに対応 ほぼ全てのサービスに導入完了 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

11.

全社のデータ利活用 各サービス毎にデータを利活用できている でも、まだまだ課題が…。 11 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

12.

課題 ロギングSDKの課題 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

13.

データ利活用のボトルネック SDKの課題 • • 13 サービスの実装が大変 集めたデータの整合性がとれない Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

14.

サービスの実装が大変 SDKで提供している機能 Key-Valueのログ送信I/F セッション管理 その結果。。。 ラッパーライブラリが必須 SDK • インスタンス管理 • ログ送信の最適化 送りたいログは大量 ロギングのための実装が多い 14 Co p yrig ht © 2 0 1 7 Wrapper Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

15.

集めたデータの整合性がとれない ログ取得のタイミング 例. 要素の表示 Button1 サービスA Button 1 Button 1 Button 2 画面に入った時 Button1, 2 サービスB 画面外含む サービスごとにログの意味合いが異なる 15 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

16.

原因 • サービス側の実装が大変 • 集めたデータの整合性がとれない ログ取得のI/Fだけを提供 共通のパラメータは自動化すべき 16 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

17.

展望 自動ロギングの実現に向けて Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

18.

自動化の対象 サービス独自のイベントロギング サービス共通のロギング項目 • 要素の表示 • 要素に対するClick 18 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

19.

自動ロギングとロギング実装の工数 Before: After: 画面の表示 パラメータの指定 送信処理 要素の追加 パラメータの指定 送信処理 Clickイベント パラメータの指定 送信処理 要素生成時 パラメータの指定 サービスのロギングに割く工数が激減! 19 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

20.

自動ロギングとデータの整合性 サービスA SDK Button 1 Button 1 Button 2 サービスB SDK Button1 自動ロギング Button1 自動ロギング データの整合性が取れるようになる 20 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

21.

データ利活用のボトルネック解消へ SDKの課題 • 実装が大変 • 集めたデータの整合性がとれない 自動ロギング導入 • サービスのロギングに割く工数が激減 • データの整合性が取れるようになる 21 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

22.

要素の表示とClickの自動化処理 どのように実現したか Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

23.

自動化後のサービス側のロギング実装 ロギング対象の指定 自動ロギング 対象: YES 対象: YES 対象: YES Button 1 Button 2 ロギング対象指定のI/F 23 Co p yrig ht © 2 0 1 7 Button 1 要素が画面に表示された 要素が非表示になった ButtonがClickされた Button 2 ロギング対象の監視・判定処理 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

24.

どのように実現したか(1/2) ロギング対象指定のI/F Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

25.

ロギング対象指定のI/F 目指す形:ロギング対象の各要素にフラグをセット image1.isTarget = YES; button1.isTarget = YES; 要素のsuperクラスを拡張してプロパティを追加する UIView UIButton 25 UIView+Sample.h/m @property (nonatomic) BOOL isTarget; UIImage Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

26.
[beta]
iOS: カテゴリで値を保持する
AssociatedObjectの利用
#import <objc/runtime.h>
id objc_getAssociatedObject(id object, const void *key);
void objc_setAssociatedObject(id object, const void *key, id value, policy);

@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);
}
26

Co p yrig ht © 2 0 1 7

Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

27.

ロギング対象を指定できるようになった 対象: YES 対象: YES 対象: YES id: img1 Button 1 id: btn1 Button 2 id: btn2 同様に任意のパラメータの設定も可能 27 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

28.

どのように実現したか(2/2) ロギング対象の監視・判定処理 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

29.

ロギング対象の監視・判定 判定結果 不可視 可視 可視 Button 1 不可視 スクロール 監視 Button 2 Button 2 29 可視 可視 Button 1 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . View-out View-in

30.

ロギング対象の監視 ↓ ロギング実施の判定処理 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

31.

監視に利用できそうな技術 ポーリング 一定時間ごとに処理を実行 イベントのフック イベント発生ごとに処理を実行 31 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

32.

アプリの状態遷移に関わるイベント 32 イベント iOSの場合 画面の描画が完了 viewDidAppear 現在の画面が非表示になった viewDidDisappear スクロールされた scrollViewDidScroll アクションの送信(click等) sendAction Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

33.

なぜフックするのか イベント実装メソッド サービス側の実装 画面の遷移など サービス側で ロギング実装の必要あり ロギング処理 33 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

34.

イベントハンドラのフック イベント実装メソッド サービス側の実装 画面の遷移など ロギング処理を 差し込みたい ロギング処理 34 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

35.

Method Swizzling(iOS) メソッドの処理を入れ替える仕組み scrollViewDidScroll サービスの実装 scrollWithLogging scrollWithLogging ロギング処理 35 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

36.

Method Swizzling(iOS) IMP class_replaceMethod( Class cls, SEL name, IMP imp, const char *types ); scrollViewDidScroll 元scrollWithLogging scrollWithLogging 元scrollViewDidScroll scrollWithLogging サービスの実装 ロギング処理 36 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

37.

状態変化の監視 可視状態を要素に保持し、判定の度に比較 例:スクロールの監視時 View-out Button 1 Button 1 Button 1 Button 2 Button 1 Button 2 Button 2 37 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved . View-in

38.

ロギング対象の監視 ↓ ロギング実施の判定処理 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

39.

可視状態の判定 Button 1 Button 2 39 1. ロギング対象の探索 2. 座標の変換 3. 領域の判定 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

40.

1. ロギング対象の探索 rootview起点にsubviewを走査 for (UIView *subView in rootView.subviews) { if (subView.isTarget) { ... YES Button 1 Button 2 YES YES scroll view root view window&screen ※前提:windowとscreenが同サイズ 40 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

41.

2. 座標の変換 対象viewの座標をWindow座標系に変換 CGRect rectInWindow = [subview convertRect:subview.bounds toView:nil]; YES Button 1 Button 2 41 YES YES scroll view root view window&screen Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

42.

3. 領域の判定 対象viewの座標がwindow内に含まれるか判定 CGRectIntersectsRect(window.bounds, rectInWindow) 可視 可視 YES Button 1 Button 2 42 YES 不可視 YES scroll view root view window&screen Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

43.

実装完了 自動ロギング実現に必要な実装 ロギング対象指定のI/F ロギング対象の監視・判定処理 43 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

44.

組込みテストの結果 この間、サービス側の実装はゼロ View-out Button 1 Button 1 View-in Button 1 Button 2 Button 1 Button 2 Button 2 Button 2 44 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

45.

組込みテストの結果 この間、サービス側の実装はゼロ Click View-out View-in Button 1 Text 1 View-out Button 2 View-in Button 1 Button 2 45 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

46.

まとめ Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

47.

まとめ データドリブン実現に向けたSDKの課題 • • 実装が大変 データの整合性がとれない 自動ロギングでボトルネックの解消 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .

48.

まだtrial&error。 挑戦は続きます。 Co p yrig ht © 2 0 1 7 Yaho o Jap an Co rp o ratio n. All Rig hts Reserved .