New Relic Mobile: ネイティブアプリのパフォーマンスも管理できるよ New Relic。スタックトレースからクラッシュレポート。バージョン比較も簡単。

Advent Calendar 24日目。デジカの宮澤です。クリスマスなのに必死にこの記事を書いていた。後残り一日だ。

ということで。本日は、ネイティブアプリ向けパフォーマンス計測製品である New Relic Mobile を紹介したいと思います。この製品は実際に使ったことがないので、本当に紹介程度になります。是非、使っている人が記事をアップしてくれるといいなーと思ってます。

# New Relic Mobile とは

New Relic Mobile は、Apple App Store や Google Play ストアにリリースしているネイティブアプリのパフォーマンスを計測する製品です。

専用のエージェントをデプロイして、ストアにリリースすることで、各機能のパフォーマンスやネットワーク状況を把握できます。また、クラッシュした際の状況や使われている地域、デバイスの種類なども見ることができます。さらに、リリースした各バージョンを比較したデータさえもみることができます。

## 対象

現在 New Relic Mobile が対応しているプラットフォームは以下です。

- iOS (iOS 6 以上)
- Android (Android 2.3 以上)
- Titanium

対応している各プラットフォームのOSのバージョンなどについての情報は、[互換性と要件](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-installation/getting-started/compatibility-requirements)ページに載っていますので、導入前に一度確認ください。

# 機能

他にもいろいろありますが、主要と思われるものをざっと。

- モバイルの全体のパフォーマンス計測
- ユーザーインタラクションのトレース
- クラッシュレポート
- ネットワークと HTTP メトリクス及びエラー
- 地域やデバイス別パフォーマンスデータ
- キャリア別
- コネクション種類別
- バージョン別の分析

# 無料と有料の違い

データ保持期間

- 無料(Lite) : 1日
- 有料(Enterprise) : 90日

有料は、10万月間アクティブユーザーまで、999ドル/月 (年契約）、1499ドル/月（月契約）だそうです。値段等は、変わる可能性がありますので、利用を検討される方は、実際のHPの[価格ページ](http://newrelic.com/mobile-monitoring/pricing#)をご覧ください。

上で書いた価格表ページに無料と有料の機能比較リストがありますので、そちらも参考にしてください。

# インストール

インストール手順は、Mobile にアクセスすれば詳細に手順が載っているので、あまりまよわないはず（実際に試してないでなんといえないけど）。APM と一緒で特に細かい設定はなしで、自動でデータを収集し、New Relic サーバーに送信すると思います。

メインの２種類のインストール手順のスクリーンショットをこの記事の最後に貼っておきます。

# 画面

基本的に公式ドキュメントベースで紹介します。時々ドキュメントのスクリーンショットとか古かったりすることがあるので、最新と違っている可能性があることもあります。ご了承の上ご覧ください。

## 概要ページ

対象アプリのパフォーマンスデータをざっくり確認できます。画面上のプルダウンから、時間帯とアプリのリリースバージョンを変更することができます。

![mobile_overview_1.png](https://qiita-image-store.s3.amazonaws.com/0/46003/18c3aac5-8f0b-1553-fa5e-7f0d27a00127.png)


- Crash rate グラフ: クラッシュしたセッションの割合を表示します。平均クラッシュセッション率、全クラッシュ数、クラッシュの影響を受けたユニークユーザー数も（グラフの右上）に表示されています。
- App launches グラフ: 起動しているアプリのセッション数を表示します。New Relicでは、モバイルセッションの定義を、アプリがスクリーンに表示されるのが開始で、バックグラウンドに引っ込むんだときを終了とみなしているようです。
- HTTP erros/network failures: HTTPエラーは、HTTP のステータスコードが400番以上のものを失敗とみなし、そのリクエストの割合を表示します。network failures は、コネクション失敗などの接続絡みのエラーの割合となります。
- HTTP response time: アプリがアクセスするホストTOP5の平均レスポンスタイムを表示します。TOP5は、完了したリクエスト数が多いホスト順らしいです。
- Most frequent interactions: よく使われるインタラクション一覧: 実行される回数の多いインタラクションTop5を表示します。任意のインタラクションを選択すると、インタラクション画面へ遷移します。


## インタラクションページ

インタラクションページでは、最もよく使われているインタラクションTOP5を表示しています。さらに、遅いトレースリストも画面右下に表示しています。

![mobile_interaction_1.png](https://qiita-image-store.s3.amazonaws.com/0/46003/8958d6b6-d13a-b217-291a-ff26e6ba8d54.png)

左のリストのインタラクションをクリックするとさらに詳細を確認できます。

![mobile_interaction_2.png](https://qiita-image-store.s3.amazonaws.com/0/46003/06915d09-71e6-b656-2456-b5f1bbdde439.png)

UI スレッドと Worker スレッドの処理の内訳を時系列のグラフで表示します。また、該当メソッド内で呼び出された処理のリストが Breakdown table として表示されます。ここでは、各処理が、Foreground/Backgroundか、メソッド名、平均呼び出し回数、平均処理時間など細かい情報がみれます。

### インタラクションタイムライン（有料機能）

これは、各インタラクションを次のインタラクションが始まるまで、その間の処理を時系列で処理の内訳をみることができます。これは、インタラクションページ（一覧、詳細）に表示されている "Slowest traces" に表示されているトレースを選択すると表示されるようです。

![screen_mobile_interactions_timeline.png](https://qiita-image-store.s3.amazonaws.com/0/46003/10ca04c4-dc9d-b938-e413-db81e04eb1d9.png)


ここでは、CPU 使用率、アクティブなネットワーク、どのスレッドで、どのタイミングでどんな処理が実行されたのか見ることができるようです。

## その他のパフォーマンス関連のページ (有料）

ここからはさらにざっと説明していきます。詳しく知りたい方は、公式ドキュメントをご覧ください。

### デバイス別パフォーマンスページ

その名のとおりデバイス別に様々なデータみれます。

![screen_mobile_devices_0.png](https://qiita-image-store.s3.amazonaws.com/0/46003/0001de5b-67a9-8b6a-d76c-e1b722060c6c.png)

割愛しますが、各デバイスをクリックするとデバイスごとの詳細データもみれます。詳しくは、公式の[デバイス別ページ](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/mobile-app-pages/devices-page)をご覧ください。

あと、[OS バージョン別パフォーマンスページ](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/mobile-app-pages/os-versions-page)もありますが、グラフ内容などほぼデバイス別と同じっぽいので、割愛します。

## ネットワーク関連ページ

ネットワーク関連のパフォーマンスを確認するページとして、以下のページが用意されています。

- Map : ここでは、アプリと関連するサービスをみることできます。そして、その関連するサービスがアプリにどのような影響を与えているのかもパッと見で把握できるようになっています。これは、APM の Service Map に近い感じかな。
- HTTP requests: 発生した HTTP リクエストをパフォーマンス（レスポンスタイム）順にみることができます。また、スループット、ネットワーク障害、エラーが発生したとかもみることできるようです。
- Errors: HTTP のステータスコード(400番台、500番台）とネットワーク障害のデータをホスト別に見ることができるっぽい。
- Geography: ユーザーの使用地域(国）別に、ヒートマップでどの地域のレスポンスタイムが遅いなどわかります。これは、New Relic Browser の Geo 機能と同じ感じかな。
- Carriers: キャリア(日本だとDocomoとかになるのかな）別にレスポンスタイムやエラー率、トラフィックなどを比較してみることができる
- Connection types: コネクション種別(wifi,3G,4Gとか）別にレスポンスタイムやエラー率、トラフィックなどを比較してみることができる

上記の詳細が気になる方は、[ネットワークページ](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/network-pages)から各説明ページをご覧ください。


## クラッシュレポート (有料）

クラッシュページでは、指定したアプリにおけるクラッシュに関数するデータを見ることができます。クラッシュ状況を時系列で、クラッシュ率、影響したユーザー数、エラーの一覧など。

![mobile_crash_1.png](https://qiita-image-store.s3.amazonaws.com/0/46003/844af0c6-ae5f-493d-46e2-46ad74377ddf.png)

エラー一覧から、任意のエラーをクリックすることで詳細を見ることができます。

![Mobile-UI-Crash-Report-Dashboard_0.png](https://qiita-image-store.s3.amazonaws.com/0/46003/bc047932-da58-0e2f-59ba-f44f435b428e.png)

ここでは、例外名、クラッシュしたファイル、関数がわかります。発生回数やアプリのバージョン、影響を与えたユーザー（上のスクリーンショットからはわかないけど。あるのかな。）もわかります。デバイスとOS は、クラッシュば発生した種別の内訳を棒グラフで表示します。

スタックフレームで赤くなっているフレームは、エラーとして検知したものだそうです。

クラッシュレポートは、設定をしておけばメールでも通知を受けることができるっぽいです。

また、クラッシュレポートについては、公式の [クラシュページに説明動画](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/crashes/mobile-apps-crashes-page) (9分くらい）があるので、そちらも見てみるとイメージしやすいと思います。

## バージョン別分析 (有料)

New Relic Mobile では、アプリのリリースバージョンで各種データを比較できます。これにより、どのバージョンがクラッシュが多い（バグが多い？）とか検討することができます。

ここでは、各バージョンごとのインタラクションタイム（使われている時間？）、アクティブセッション、エラー率などを比較してみれます。また、バージョン毎の平均CPU使用率、メモリ量、トラフィック等もみることができます。

![screen_versions_0.png](https://qiita-image-store.s3.amazonaws.com/0/46003/1b93a57e-84c9-0da4-5306-e4c0fcf1f4e7.png)

左のリストから特定のバージョンをクリックすると、そのバージョンにおける詳細なグラフをみることができます。詳しくは、ドキュメントの [バージョン別分析](https://docs.newrelic.com/docs/mobile-monitoring/mobile-monitoring-ui/usage-pages/versions-analysis) をご覧ください。

おそらく、この機能に絡む（このページの置き換えになるのか別メニューかは不明だけど）と思うんだけど、11月に行われた Future Stack 15 (詳しくは、[カンファレンスレポート参照](http://tech.degica.com/ja/2015/11/18/future-stack-15-day1/))で発表があった バージョントレンド機能というが、いずれ加わると思います。この機能は、バージョンの一覧があり、リリース一週間(この期間は変更可能）で、更新率はどれくらい？新規インストール率は？エラー率は？など時間帯を指定して、アプリをリリースしてからどのようにアプリが利用されているかを簡単に把握できる機能のようです。


# さいごに

かなりざっくり New Relic Mobile を紹介してみました。なんとなく雰囲気は分かって頂けたと思います。

この製品も、30日間有料機能を使えるトライアルがありますので、まずはそれで試してみてはいかがでしょうか。

また、公式ドキュメントに [2分くらいで全体の機能をざっと説明してくれる動画](https://docs.newrelic.com/docs/mobile-monitoring/new-relic-mobile/getting-started/new-relic-mobile#videos) がありますので、そちらをみると動きも併せてイメージがもっとわくと思います。是非、観てみてください。（画面が古いけど）

# インストール手順のスクリーンショット

何のコメントもいれてないけど、雰囲気だけ掴んでください。

## iOS で Xcode を使う場合

![mobile_iso_install.png](https://qiita-image-store.s3.amazonaws.com/0/46003/e5829436-b1a4-ba8a-39bf-8b2b0aa0e872.png)

## Android で Android Studio を使う場合

![mobile_android_install.png](https://qiita-image-store.s3.amazonaws.com/0/46003/dda64216-560c-22f6-cbff-d26487214eb2.png)