Person shopping online with mobile phone and holding credit card

スマートフォンのアプリがApple App StoreやGoogle Playに登場して10年以上が経ちますが、サービス提供者として見るべき指標というのは大きく変わっていません。ビジネスに直結するダウンロード数やMAU、離脱を防ぐためのクラッシュ率や通信におけるサーバー側のエラーレートがわかりやすい例です。
New Relic Mobileを導入すると全てのユーザーから起動回数、クラッシュ情報をはじめ通信レスポンスやエラーなど様々な情報を多角的に観測できます。個別のユーザー識別情報を送るsetUserId APIを使えばさらに多角的に分析できますが、時にはよりビジネスやユーザー体験に直結するアプリ内のデータを合わせて分析したい場合もあるでしょう。
この記事ではそのようなアプリ内で保持しているデータをNew Relicに送る方法と、解析に必要な最初の一歩をご紹介します。

New Relic MobileのEvent情報
New Relic Mobileのエージェントを導入すると様々なEventが作成されます。通信結果を確認できるMobileRequestやMobileRequestError、クラッシュ情報を確認するMobileCrashなどです。
例えばMobile RequestのEventの中身を覗いてみましょう。

画面上部にあるアイコンからData explorerを起動しEvents - MobileRequestを選択します。

画面右側の </> アイコンを選択するとEventsの内容をJSON形式で確認できます。

アプリ名や通信キャリア、デバイス情報をはじめ下の方にはrequestPathなど通信(MobileRequest)にまつわる情報が確認できます。
このようにMobileに限らずEventsはJSON形式で一連の "Attribute": "value"を保持しています。

New Relic Mobileから独自のEvent情報を登録する
さて皆さんが独自の電子書籍アプリを配信しており、リーダーの描画パフォーマンスが気になると想定してください。 Mobile EventsのMobileRequest Eventを見れば通信パフォーマンスが、APM EventsのTransaction Eventを見ればサーバーサイドのパフォーマンスが見られますが、コンテンツがダウンロードされてから独自ロジックで画面描画するまでのパフォーマンスを測定するのは困難です。 そこでコンテンツの取得時からタイマーを張り、描画完了までの時間を測定した変数を用意、New Relicに送信することで可視化してみましょう。 以下の例ではswiftで書かれたiOSアプリを想定しています。

// New Relic Mobile SDKに用意されているNRTimerを利用
let LoadTimer = NRTimer()
LoadTimer.startTimeInMillis()
//ダウンロードと描画処理開始
(略)
//ダウンロードと描画処理終了
LoadTimer.stop()

// booknameは事前に文字列として代入
// New Relic に 'BookPageLoadEvent' イベントとして処理時間と書籍名を送信
let eventRecorded = NewRelic.recordCustomEvent("BookPageLoadEvent", attributes: ["custom_time_to_load_ms" : LoadTimer.timeElapsedInMilliSeconds(), "custom_view_book_title": bookname])

この例ではNew Relic Mobile SDKにあるNRTimerが利用できます。 計測したい描画処理のスコープ内でNRTimerを生成し、取得した時間を独自の「BookPageLoadEvent」イベントとして登録しています。

New Relic上で情報を確認する
New Relic上にイベントが登録されているか確認してみましょう。
Data explorerのEvents に先ほど登録したBookPageLoadEventがあるのが確認できます。
この中には先ほど定義したcustom_time_to_load_msとcustom_view_book_titleがあるはずです。イベントを選択しJSONを見てみましょう。

ページデータをロードし描画にかかった時間(ミリ秒)と書籍名が入っています。
クエリを実行し一覧化すると以下のようになります。

Mobile Custom Eventsの活用
さてこれでネイティブアプリから自在にカスタム情報を登録できることができるようになりました。
もちろんこの情報にもセッションごとに付与されるsessionIdが紐づいています。 したがって以下のようなWidgetをDashboard上に登録すれば書籍における平均描画時間をセッションごとに出すことができ、著しく遅いセッションがある場合New Relicのその他情報(通信履歴やBreadcrumbsなど)をフィルタリングしてより詳細なユーザー動向を追うことができるようになります。

処理にかかった時間を単純なメトリクスで取得も可能ですが、そのメトリクスにさらに情報を付与しイベントとして扱うことでよりみなさまのビジネスに応じたユーザー体験のデータを収集するできます。
New Relic MobileのCustom Eventsを是非ご活用ください。