Slide 1

Slide 1 text

iOSエンジニアがいなくても泣かない! 配信サービスのiOSアプリにおける オブザーバビリティの実装と改善 株式会社 TVer / 加我 貴志 2023/09/02 iOSDC Japan 2023

Slide 2

Slide 2 text

iOSエンジニアがいなくても泣かない! 配信サービスのiOSアプリにおける オブザーバビリティの実装と改善 株式会社 TVer / 加我 貴志 2023/09/02 iOSDC Japan 2023

Slide 3

Slide 3 text

iOSエンジニア不在でもサービスを改善したい! 配信サービスのiOSアプリにおける オブザーバビリティの導入と改善 株式会社 TVer / 加我 貴志 2023/09/02 iOSDC Japan 2023

Slide 4

Slide 4 text

本セッションでお話すること ● TVerにおけるiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 お話しないこと ● TVerにおけるiOSアプリの具体的な設計や実装 まえがき

Slide 5

Slide 5 text

自己紹介 ・加我 貴志 (@TAKA_0411) ・株式会社TVer   サービス事業本部 SRE ・趣味はカメラとサウナとVTuber ・iOSDC Japan 2023 への参加   コアスタッフ, スピーカー,   企業スポンサー, 個人スポンサー

Slide 6

Slide 6 text

自己紹介

Slide 7

Slide 7 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 8

Slide 8 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 17

Slide 17 text

TVerのiOSアプリ開発の課題 iOS アプリ開発の課題 (リニューアル時) 1. 組織的な課題 2. 個人的な課題

Slide 18

Slide 18 text

TVerのiOSアプリ開発の課題 iOS アプリ開発の課題 (リニューアル時) 1. 組織的な課題 ○ アプリは協力会社との共同開発 ○ iOSの専任エンジニアが不在 ○ アプリの品質を計測するノウハウがなく、 ユーザーに発生している問題を認識できない

Slide 19

Slide 19 text

クライアントは全て 協力会社との共同開発

Slide 20

Slide 20 text

TVerのiOSアプリ開発の課題 iOS アプリ開発の課題 (リニューアル時) 2. 個人的な課題 ○ フロントエンドの知見が少ない ■ バックエンド ( インフラ + α) まで ○ New Relic (後述) に触れるのが初めて ■ 他社のモニタリングSaaSの利用経験はあり

Slide 21

Slide 21 text

TVerのiOSアプリ開発の課題 開発体制がどうであれ 事業者がサービスの品質に 責任を持つ必要がある

Slide 22

Slide 22 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 23

Slide 23 text

iOSアプリ開発の課題と今回のゴール ● 課題 ○ アプリの品質を計測できていない ○ ユーザーに発生している問題を認識できない ● ゴール ○ アプリの品質をデータとして計測する ○ ユーザーに発生した問題をデータで解決する iOSアプリへのオブザーバビリティ導入 読み込み が速い 再生が 途切れない クラッシュ しない

Slide 24

Slide 24 text

iOSアプリ開発の課題と今回のゴール ● 課題 ○ アプリの品質を計測できていない ○ ユーザーに発生している問題を認識できない ● ゴール ○ アプリの品質をデータとして計測する ○ ユーザーに発生した問題をデータで解決する iOSアプリへのオブザーバビリティ導入 読み込み が速い 再生が 途切れない クラッシュ しない

Slide 25

Slide 25 text

iOSアプリへのオブザーバビリティ導入 💡 オブザーバビリティ 💡

Slide 26

Slide 26 text

iOSアプリへのオブザーバビリティ導入 オブザーバビリティとは (1) ● システムの内部状態を把握するための尺度 ○ 普段得られているデータからシステムで 起きていることをどれだけ把握できるか ○ 把握するためにはテレメトリーデータが必要 ■ イベント ■ トレース ■ メトリクス ■ ログ ■ プロファイル

Slide 27

Slide 27 text

iOSアプリへのオブザーバビリティ導入 オブザーバビリティとは (2) ● 予期せぬ問題に対処するために必要 ○ “ ” 未知の未知 への対応 ○ “ ” モニタリングは 既知の未知 への対応 ● アプリのデータを収集・分析すれば ユーザーの問題も認識できるのでは? 【三石誠司・グローバルとローカル:世界は今】(146)「既知」と「未知」 https://www.jacom.or.jp/column/2019/09/190906-39038.php

Slide 28

Slide 28 text

問題を認識できていないケース iOSアプリへのオブザーバビリティ導入 サービスのユーザー サービスの開発者 アプリの クラッシュ 無限 ローディング 外部サービスと の通信エラー デバイスの発熱 でアプリが強制 終了 サービスが使えないん だけど!!! システムに問題は 出てないですね メモリリークで スローダウン

Slide 29

Slide 29 text

iOSアプリへのオブザーバビリティ導入 アプリの品質可視化に向けた3ステップ サービスの利用者 サービスの開発者 1.アプリで発生している     データの収集 2.収集したデータを   サーバーに集約 3.集約されたデータを   分析・可視化

Slide 30

Slide 30 text

iOSアプリへのオブザーバビリティ導入 アプリのデータを収集・分析するサービス ● Firebase ○ Crashlytics ○ Performance Monitoring ● Sentry ○ Error Monitoring ○ Performance Monitoring ● Datadog ○ Mobile Real User Monitoring

Slide 31

Slide 31 text

iOSアプリへのオブザーバビリティ導入 TVerではリニューアル時にNew Relic Mobileを導入 ● データの収集 ○ アプリのテレメトリーデータ ○ メモリ使用量やアプリの起動時間 ○ 独自のカスタムイベント ● データの分析 ○ ビルトインのダッシュボード ○ カスタムダッシュボード

Slide 32

Slide 32 text

iOSアプリへのオブザーバビリティ導入 Q. なぜNew Relic Mobileを導入したのか ● サービスを横断的に同一UIで観測できる ○ フロントエンドもバックエンドも ○ 少人数組織なのでツールのサイロ化を避けたい ● 動画プレイヤーも観測できる (後述)

Slide 33

Slide 33 text

iOSアプリへのオブザーバビリティ導入

Slide 34

Slide 34 text

iOSアプリへのオブザーバビリティ導入 New Relic Mobile Agentの導入 ● パッケージマネージャーで導入可能 ○ CocoaPods https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/installation/ cocoapods-installation/ ○ Swift Package Manager https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile-ios/installation/ spm-installation/

Slide 35

Slide 35 text

iOSアプリへのオブザーバビリティ導入 アプリの観測が 可能となった👏

Slide 36

Slide 36 text

改善👏 iOSアプリへのオブザーバビリティ導入 サービスのユーザー サービスの開発者 アプリの クラッシュ 番組を見てるとアプリ が落ちるんだけど!! ライブ配信の視聴中に◯◯ の処理が原因でアプリがク ラッシュしていますね。

Slide 37

Slide 37 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 38

Slide 38 text

視聴体験の可視化 当初の課題とゴール ● 課題 ○ アプリの品質を計測できていない ○ ユーザーに発生している問題を認識できない ● ゴール ○ アプリの品質をデータとして計測するした ○ データからアプリの問題を解決するした アプリに問題がない = 快適に番組を視聴できている?

Slide 39

Slide 39 text

視聴体験の可視化 “ ” 視聴体験 の可視化 ● ユーザーが快適に番組を視聴できているか ○ アプリの動作状況 ○ バックエンドの動作状況 ○ ユーザーの番組視聴状況 ※個人を特定できないようになっています ずっとバッファリング してるなぁ・・・

Slide 40

Slide 40 text

視聴体験の可視化 Q. なぜ視聴体験を可視化する 必要があるのか

Slide 41

Slide 41 text

視聴体験の可視化 A. 視聴体験を阻害する要因を 速やかに取り除きたい

Slide 42

Slide 42 text

視聴体験の可視化 New Relic Video Agent ● 動画プレイヤーのイベントを検知, 取得 ○ iOSだとAVPlayer, AndroidだとMedia3 ○ 動画広告のイベントにも対応 ● iOS, Android, JavaScriptに対応 ○ https://github.com/newrelic/video-agent-iOS ○ https://github.com/newrelic/video-agent-android ○ https://github.com/newrelic/video-videojs-js

Slide 43

Slide 43 text

視聴体験の可視化 # CocoaPodsによる導入 pod 'NewRelicVideoCore', :git => 'https://github.com/newrelic/video-agent-iOS' pod 'NRAVPlayerTracker', :git => 'https://github.com/newrelic/video-agent-iOS' pod 'NRIMATracker', :git => 'https://github.com/newrelic/video-agent-iOS' # AVPlayerのイベントをトラッキング let trackerId = NewRelicVideoAgent.sharedInstance().start( withContentTracker:NRTrackerAVPlayer.init(avPlayer: player) ) # AVPlayerとIMA3 trackerのイベントをトラッキング let trackerId = NewRelicVideoAgent.sharedInstance().start( withContentTracker:NRTrackerAVPlayer.init(avPlayer: player), adTracker: NRTrackerIMA.init() ) New Relic Video Agent の導入 (Swift) i

Slide 44

Slide 44 text

視聴体験の可視化 取得できるイベントと属性

Slide 45

Slide 45 text

動画再生時はデバイス に起因するエラーが 発生していそう 動画再生後は純粋な アプリ起因のエラーが 多そう

Slide 46

Slide 46 text

視聴体験の可視化 動画プレイヤーを観測してわかったこと ● デバイス起因の問題と傾向 ● ネットワーク起因の問題と傾向 ● 配信サーバーやコンテンツの問題

Slide 47

Slide 47 text

アジェンダ ● TVerについて ● TVerのiOSアプリ開発の課題 ● iOSアプリへのオブザーバビリティ導入 ● 視聴体験の可視化 ● まとめ

Slide 48

Slide 48 text

まとめ iOSエンジニア不在でも品質の改善は可能 ● 品質を可視化するための3ステップ ○ データの収集、集約、分析 ○ TVerではNew Relic Mobileを導入 ● 実際の改善 ○ 収集したテレメトリーデータを可視化・分析 ○ データを見て効率的にクラッシュ改善 ● 想定外に対応するためのオブザーバビリティ

Slide 49

Slide 49 text

まとめ 将来の展望 ● ユーザー体験のさらなる改善 ○ メモリ使用量の最適化 ○ MetricKitの導入・活用 ● オブザーバビリティの成熟度向上 ○ テレメトリーデータの拡充 ○ SLI / SLOの導入

Slide 50

Slide 50 text

iOSエンジニアと一緒に TVerをもっと改善したい

Slide 51

Slide 51 text

謝辞

Slide 52

Slide 52 text

モバイルアプリのオブザーバビリティを向上させるプラクティス https://fortee.jp/iosdc-japan-2022/proposal/6bafac07-06f1-4846-964e-78dccfb29185

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

おまけ: New Relic Mobile で見れるもの

Slide 55

Slide 55 text

サマリー

Slide 56

Slide 56 text

クラッシュ分析

Slide 57

Slide 57 text

バージョン毎のトレンドとバージョンの詳細