アプリのKPIの測定
Vega App KPI Visualizerは、ユーザーエクスペリエンスに影響を与える重要な指標を測定することにより、アプリのパフォーマンスのモニタリングと最適化をサポートします。このツールは、アプリの起動時間、メモリ使用量、ユーザーインターフェイス(UI)の応答性に関するデータを提供します。これらのKPIを定期的にトラッキングすると、アプリはユーザーの期待に応えるスムーズで応答性の高いエクスペリエンスを提供できます。App Storeにアプリを公開する前に、リリースバリアントのパフォーマンスを測定して、ユーザーエクスペリエンスの応答性が高いことを確認してください。
このページでは、次の方法について説明します。
- KPI Visualizerの使用
- アプリの主要業績評価指標の測定と理解
- 測定のセットアップ
- 結果の解釈
前提条件
Vega App KPI Visualizerを使用する前に、次のことを確認してください。
-
VegaパフォーマンスAPIモジュールをインストールします。
npm install @amazon-devices/kepler-performance-api -
次のセクションに目を通してください。
- 各KPIが測定する内容とそのターゲットのガイドライン。アプリのKPI指標とガイドラインを参照してください。
- さまざまなシナリオでのアプリの起動方法。起動シナリオを参照してください。
- パフォーマンスマーカーを設定するタイミング。描画完了マーカーを参照してください。
-
フォアグラウンドメモリ、ビデオの滑らかさ、またはUIの滑らかさを測定するには、滑らかさとフォアグラウンドメモリの測定の手順に従ってください。
-
測定方法を選択します。
アプリのKPI指標とガイドライン
次の表は、主なKPIとそれに関連するマイクロKPIの両方を示しています。メインKPIは全体的なパフォーマンス指標を測定し、マイクロKPIはメインKPIに寄与する特定の測定可能なコンポーネントを表します。
たとえば、Application JavaScript bundle load timeは、最初に描画されるまでの時間(TTFD)のKPI全体に影響するマイクロKPIです。空のマイクロKPIセルは、そのメインKPIについて現在特定のサブコンポーネントが測定されていないことを示しています。
| KPI | マイクロKPI | 単位 | 起動シナリオ | 説明 | ガイドライン |
|---|---|---|---|---|---|
Time-to-first-frame (TTFF) |
秒(s) | クールスタートでのアプリの起動 | アプリ起動から最初のフレームレンダリングまでの時間を測定します。オペレーティングシステム(OS)は、アプリコードマーカーを使わずにクールスタートでのTTFFを計算します。 | 1.5秒未満 | |
TTFF |
秒(s) | ウォームスタートでのアプリの起動 | アプリがバックグラウンドからフォアグラウンドに移行するまでの時間を測定します。OSは、アプリコードマーカーを必要とせずにウォームスタートでのTTFFを計算します。 | 0.5秒未満 | |
TTFD |
秒(s) | クールスタートでのアプリの起動 | 起動してからアプリのユーザー操作が可能になるまでの時間を測定します。アプリが完全に描画され、ユーザーが操作できる状態になるタイミングを判断する必要があります。たとえば、アセットの非同期読み込みが完了するまで、ユーザーが操作できる状態にならない場合があります。描画完了マーカーを参照してください。 | 8.0秒未満 | |
TTFD |
Application JavaScript bundle load time |
秒(s) | クールスタートでのアプリの起動 | アプリの初期化中にJavaScriptバンドルの読み込みが完了するまでにかかる時間を測定します。測定は、バンドルの読み込みが始まったときに開始され、バンドルが完全に読み込まれて実行準備が整ったときに終了します。 | 該当なし |
TTFD |
Network calls time |
秒(s) | クールスタートでのアプリの起動 | アプリの初期化中にすべてのネットワーク呼び出しが完了するまでにかかる時間を測定します。ネットワーク呼び出しは非同期であるため、この測定値は並列リクエストを考慮し、すべての呼び出しが解決されるまでの合計時間を表します。 | 該当なし |
TTFD |
秒(s) | ウォームスタートでのアプリの起動 | アプリがバックグラウンドからフォアグラウンドに移行してから、対話操作を受け付ける状態になるまでにかかる時間を測定します。TTFDのクールスタートシナリオと同様に、アプリが完全に描画され、ユーザーが操作できる状態になるタイミングを判断する必要があります。ただし、アプリが完全に描画され、アプリの状態がフォアグラウンドに変わったら、コールバックを呼び出す必要があります。描画完了マーカーを参照してください。 | 1.5秒未満 | |
Foreground Memory |
メビバイト(MiB) | アプリがフォアグラウンドの状態 | アクティブなときのアプリの比例セットサイズ(PSS)を測定します。PSSには、プライベートメモリと、プロセスがRAMに効果的に保持している共有メモリの比例シェアが反映されます。Vega App KPI Visualizerは、起動時、フォアグラウンド遷移中、およびメモリを大量に消費するアクション中のパフォーマンスを測定します。 | 400MiB未満 | |
Background Memory |
メビバイト(MiB) | アプリがバックグラウンドの状態 | アプリが起動してバックグラウンドに移行したときのPSSを測定します。この指標は、アプリが非アクティブではあるもののすぐに再開できる状態になっているときのメモリ使用量をキャプチャします。 | 150MiB未満 | |
Video Fluidity |
パーセント(%) | ビデオの再生 | アプリが再生するビデオがどの程度スムーズにストリーミングされるかを測定します。ビデオの滑らかさは、意図したフレームレートでビデオが再生される時間の割合を表します。 | 99%超。 | |
Time-to-first-frame video fluidity (TTFVF) |
秒(s) | ビデオの再生 | ビデオ再生開始から最初のビデオフレームまでの時間を測定します。テストシナリオの準備メンバーでの最後のUI操作がビデオストリーミングをトリガーしていることを確認します。詳細については、滑らかさとフォアグラウンドメモリの測定を参照してください。 |
2.5秒未満 | |
3+ Video Consecutive Dropped Frames |
回数 | ビデオの再生 | 再生中にアプリでビデオフレームが3回以上連続してコマ落ちし、ビデオのストリーミング品質に著しい中断が発生した回数をカウントします。 | 該当なし | |
5+ Video Consecutive Dropped Frames |
回数 | ビデオの再生 | ビデオの再生中にアプリでフレームが5回以上連続してコマ落ちし、再生が著しく中断された回数をカウントします。 | 該当なし | |
UI Fluidity |
パーセント(%) | UIの操作(垂直スクロールと水平スクロールなど) | ユーザー操作が集中的に行われたときのUI表示の滑らかさを測定します。UIの滑らかさは、画面上のUI操作中にアプリが正常にレンダリングするフレームの割合を表します。 | 99%超。 | |
App Event Response Time - Focus |
ミリ秒(ms) | UIの操作(垂直スクロールと水平スクロールなど) | フォーカスイベント(onFocus/onBlur)について、ネイティブのUIスレッドとJavaScriptスレッド間のスケジュール遅延時間を測定します。スケジュール遅延時間が200ミリ秒を超える場合、JavaScriptスレッドの負荷が高くなっており、アプリの応答が遅くなります。 | 200ミリ秒未満。 | |
3+ Consecutive Dropped Frames |
回数 | UIの操作(垂直スクロールと水平スクロールなど) | スクロール操作中に3フレーム以上連続してコマ落ちし、ユーザーインターフェイスに顕著なカクつきが発生するインスタンスをカウントします。 | 該当なし | |
5+ Consecutive Dropped Frames |
回数 | UIの操作(垂直スクロールと水平スクロールなど) | スクロール操作中に5フレーム以上連続してコマ落ちし、ユーザーインターフェイスに顕著なカクつきが発生するインスタンスをカウントします。 | 該当なし | |
5+ Consecutive Delayed Events - Focus |
回数 | UIの操作(垂直スクロールと水平スクロールなど) | アプリで5回以上連続してフォーカスイベントの遅延が発生し、イベント処理とユーザー操作への応答が著しく遅れるインスタンスをカウントします。 | 該当なし |
起動シナリオ
KPI Visualizerは、TTFFとTTFDのパフォーマンスを評価するために、次の2種類のアプリ起動シナリオを測定します。
-
クールスタート - ユーザーが初めてアプリを起動し、システムがすべてのリソースと依存関係をメモリに読み込むとき。
-
ウォームスタート - 一部のリソースと依存関係がすでにメモリにある状態で、ユーザーがアプリをバックグラウンド(非アクティブ状態)からフォアグラウンド(アクティブ状態)に移行するとき。
描画完了マーカー
描画完了マーカーは、アプリがユーザー操作を受け付けられる状態になったことを知らせます。マーカーは以下の役割を果たします。
- アプリの必須コンポーネントの読み込みが完了したことを示す。
- ユーザーがアプリの操作を開始できるタイミングを示す。
- TTFDパフォーマンスの測定に役立つ。
描画完了マーカーをアプリに実装するには:
useReportFullyDrawnフックをアプリに追加します。- 次のキーポイントにマーカーを配置します。
- クールスタート - 初期データを読み込んでメイン画面をレンダリングした後。
- ウォームスタート - フォアグラウンド移行後にアプリが応答可能になったとき。
次のコードサンプルは、描画完了マーカーを追加する方法を示しています。
import { useReportFullyDrawn } from '@amazon-devices/kepler-performance-api';
import React, { useCallback, useEffect, useState } from 'react';
import { useKeplerAppStateManager } from '@amazon-devices/react-native-kepler';
...
...
export const App = () => {
const reportFullyDrawnCallback = useReportFullyDrawn();
const KeplerAppStateManager = useKeplerAppStateManager();
const [appState, setAppState] = useState(KeplerAppStateManager.getCurrentState());
// useEffectフックを使用して、クール起動後の初回レンダリングが完了した後に
// 描画が完了したことを報告します。
// アプリで追加の非同期処理を実行していて、
// その処理が完了するまで描画完了にならない場合は、
// 処理の完了状態を依存配列に渡し、フック内で
// 状態を確認します。
useEffect(() => {
reportFullyDrawnCallback();
}, [reportFullyDrawnCallback]);
// ウォーム起動後の最初の描画で描画完了マーカーを発行します。
const handleAppStateChange = useCallback((stateChange: any) => {
if (
appState.match(/^(inactive|background)$/) &&
stateChange === 'active'
) {
reportFullyDrawnCallback();
}
if (stateChange.match(/^(inactive|background|active|unknown)$/)) {
setAppState(stateChange)
}
}, [appState, reportFullyDrawnCallback]);
useEffect(() => {
const changeSubscription = keplerAppStateManager.addAppStateListener(
'change',
handleAppStateChange,
);
return () => {
changeSubscription.remove();
}
}, [handleAppStateChange]);
...
...
return (
<View style={styles.container}>
...
...
</View>
);
};
VS CodeでのKPIの測定
-
VS Codeでコマンドパレットを開きます。
- Macの場合:shift + command ⌘ + p
- Linuxの場合: Ctrl + Shift + P
コマンドパレットからのApp KPI Visualizerの起動 -
「Vega: Launch App KPI Visualizer」と入力し、Enterキーを押します。
[App Performance Tools] での [App KPI Visualizer] の選択 [Kepler Studio] パネルから [App KPI Visualizer] をクリックすることもできます。
-
ユースケースを選択します。
ユースケースを選択する 注: 複数のケースを選択して実行できます。フォアグラウンドメモリとビデオストリーミングの滑らかさを測定するには、ユーザーによるアプリの操作方法に合わせたカスタムテストシナリオを作成します。
以下に例を示します。
- メモリテスト用 - ビデオ再生または画像読み込みを含めます。
- ストリーミング用 - 一般的なビデオ視聴パターンを含めます。
UIの滑らかさを測定するには、アプリで特に多く実行されるユーザー操作を再現するテストシナリオを開発してください。カスタムシナリオがない場合、デフォルトのテストではアプリのフロントページを縦横にスクロールする操作が使用されますが、これはユーザーの行動を正確に反映していない可能性があります。
テストシナリオの生成に関するガイダンスについては、アプリのUIの滑らかさの測定を参照してください。
ユースケースを選択すると、Visualizerが起動し、次のKPI測定を3回繰り返します。
-
クールスタートKPI
- デバイス上でテストアプリを起動します。
- テストアプリが完全に読み込まれるまで10秒間待ちます。
- テストアプリを閉じます。
- KPIを処理します。
-
ウォームスタートKPI
- デバイス上でテストアプリを起動します。
- デバイス上で別のアプリを起動して、テストアプリをバックグラウンドに移行させます。
- テストアプリを起動して、フォアグラウンドに移動します。
- テストアプリが完全に読み込まれるまで15秒間待ちます。
- テストアプリを閉じます。
- KPIを処理します。
-
フォアグラウンドメモリKPI
- デバイス上でテストアプリを起動します。
- テストシナリオに指定されている手順を実行し、分析とレポートのためにKPIをキャプチャします。
- テストアプリを閉じます。
- KPIを処理します。
-
バックグラウンドメモリKPI
- デバイス上でテストアプリを起動します。
- デバイス上で別のアプリを起動して、テストアプリをバックグラウンドに移行させます。
- テストアプリのKPIが収集されるまで15秒間待ちます。
- テストアプリを閉じます。
- KPIを処理します。
-
UIの滑らかさKPI
- デバイス上でテストアプリを起動します。
- テスト方法を選択します。
- カスタムテスト - 独自のUI操作シナリオを使用する
- デフォルトテスト - 標準のスクロールパターンを使用する
- 横スクロール2セット(左5回、右5回)
- 縦スクロール2セット(下5回、上5回)
- アクション間隔900ミリ秒
- [Cancel] ボタンをクリック、またはEscキーを押してテストを終了します。
カスタムケースのシナリオを使用するには [Yes] を選択 - 分析とレポートのためにKPIをキャプチャします。
- テストアプリを閉じます。
- KPIを処理します。
重要: UIの滑らかさテストシナリオの考慮事項
事前定義されたテストではアプリのホームページがスクロールされますが、これはアプリの使用パターンと一致しない場合があります。アプリ固有のUI操作を反映したカスタムテストシナリオを作成してください。-
ビデオ再生の滑らかさKPI
- デバイス上でテストアプリを起動します。
- ビデオ再生テストシナリオに指定されている手順を実行し、分析とレポートのためにKPIをキャプチャします。
- テストアプリを閉じます。
- KPIを処理します。
視覚化プロセスを停止するには、[Cancel] をクリックします。
KPI Visualizer -
テスト中のトレースロスを無視するかどうかを選択します。
トレースロスを無視するオプション アプリにパフォーマンス上の問題があると、トレースが大幅に失われる可能性があります。Vega App KPI Visualizerはトレースを読み込まず、レポートにKPIを表示しなくなります(N/Aと表示)。
KPIレポートを生成して指標を表示するときに、トレースロスを無視するかどうかを選択できます。ただし、トレースロスを無視すると、実際のパフォーマンスよりも優れたKPI値が生成されます。
-
VisualizerウィンドウでKPIスコアを確認します。
ウィンドウには、3回のテストから計算されたp90(90パーセンタイル)値が表示されます。
-
結果を評価するには、パフォーマンスレポートの理解を参照してください。
CLIコマンドによるKPIの測定
-
コマンドプロンプトで
kepler exec perf doctorコマンドを実行して、ホストとターゲットデバイスの準備が整っているかどうかを確認します。kepler exec perf doctor [--app-name]--app-nameには、manifest.tomlファイルから取得したパッケージIDを指定します。例:
kepler exec perf doctor --app-name=com.amazondeveloper.keplervideoapp.main Firmware: Stable build (<device-user> OS 1.1 (TV Mainline/1387)). ✅ Network: Connected ✅ Free disk space: 43.31 GB available. ✅ Appium: Installed (version 2.2.2) ✅ Appium driver for Vega: Installed - kepler@3.18.0 [installed (linked from /Users/.../AppiumVegaDriver)] ✅ com.amazondeveloper.keplervideoapp.main is installed. Collecting CPU (4 cores) and Memory data... ❌ Max User CPU usage at 241.20%.Check for unwanted processes. ❌ Max System CPU usage at 222.80%.Check for unwanted processes. ✅ Average User CPU usage at 166.16% ✅ Average System CPU usage at 101.84% ✅ Min memory available at 30.80% ✅ Average memory available at 32.16% ! Device: Not ready for performance testing.Please review lines with X (error) and ! (warnings) symbols. -
Vega App KPI Visualizerを起動します。
kpi-visualizer --app-name=<アプリ名>kpi-visualizerでは、
app-nameが唯一の必須パラメーターです。<アプリ名>をmanifest.tomlファイルにあるデフォルトの対話型コンポーネントのIDに置き換えます。 -
(任意)デフォルトの反復回数を指定します。デフォルトの反復回数: –certificationを使用する場合は3または30。
--iteration <回数> -
(任意)測定するKPIを指定します。
--kpi <KPI名>このパラメーターがない場合、VisualizerはクールスタートのTTFFとTTFD KPIをデフォルトで測定します。
-
利用可能なすべてのオプションを表示します。
kpi-visualizer --help例(注:画面の出力に関する日本語表記は説明のために提供しています。実際には英語で表示されます。):
kepler exec perf kpi-visualizer --help 名前: KPI Visualizerツール 説明: アプリのユーザーエクスペリエンスを最適化するために、アプリの起動時間、メモリ使用量、UIの応答性などの主要業績評価指標を測定します。 書式: kepler exec perf kpi-visualizer [パラメーター] 特定のコマンドの情報を取得するには、'kepler exec perf command --help'を使用してください。 パラメーター: --iterations ITERATIONS テストの実行回数を設定します。.confの設定はオーバーライドされます。 --record-cpu-profiling テスト実行中のCPUプロファイルの記録を有効にします。 --sourcemap-file-path SOURCEMAP_FILE_PATH ソースマップファイルのパスを指定します。 --grpc-port port gRPCサーバーのポート番号を指定します。 --certification テストを認定モードで実行します。30回のイテレーションと90パーセンタイルの集計が使用されます。 --expected-video-fps EXPECTED_VIDEO_FPS テストするアプリのターゲットFPSを指定します。 --kpi KPI (任意)測定するパフォーマンス指標を指定します。 サポートされるシナリオ: 1. cool-start-latency - コールドスタートからのアプリの起動レイテンシを測定します。TTFFとTTFDの両方がデフォルトで含まれます。 2. ui-fluidity - UI操作の滑らかさを測定します。 3. warm-start-latency - アプリがバックグラウンドからフォアグラウンドに復帰するときの、最初のフレームの表示レイテンシを測定します。 4. foreground-memory - アプリがフォアグラウンド状態にあるときのメモリ使用量を測定します。 5. background-memory - アプリがバックグラウンド状態にあるときのメモリ使用量を測定します。 6. video-fluidity - ビデオ再生の滑らかさを測定します。ビデオ再生を開始するテストシナリオ(--test-scenario)が必要です。 --test-scenario TEST_SCENARIO UIのテストシナリオを定義するPythonスクリプトを指定します。テストシナリオのテンプレートを作成するには、generate-test-templateコマンドを使用します。 --monitor-processes MONITOR_PROCESSES [MONITOR_PROCESSES ...] テスト中にモニタリングする追加のサービスを指定します。 例: --monitor-processes webview.renderer_service --ignore-trace-loss テスト中にトレースデータの欠落の検証をスキップします。 --help このヘルプメッセージを表示します。 --version, -v このperfツールの現在のバージョンを表示します。 %
視覚化が完了すると、stdoutにレポートの概要が表示されます。
レポートの例:
Performance Analyzer KPI Report
Firmware version: Device OS 1.1 (VegaMainlineTvIntegration/XXXX), serial number: XXXXXXXXXXXXXXXX
Date: 01/09/2025, test: app-background, iterations requested: 3, iterations completed: 3, duration: 15 seconds
Memory Statistics
| n | min | mean | max | stdev | ci (+/-)
App Resident Memory (kB) | 104 | 131044 | 132139.0| 133136 | 865.2 | 140.8 √
KPIに-1と表示されている場合は、平均値、最小値、最大値のデータがないことを示しています。TTFDでは、描画完了を報告するAPIをアプリが呼び出さない場合に、この現象が発生することがあります。
KPIが表示されない場合、データ収集中にトレースが大幅に失われた可能性があります。KPI Visualizerはトレースを読み込まず、KPIも表示されません。トレースが失われた場合でもKPIを表示するには、以下を実行します。
--ignore-trace-loss <true/false>
パフォーマンスレポートの理解
Vega App KPI Visualizerには、以下を含むパフォーマンスレポートが表示されます。
-
Test information
- Date - システムがKPIデータをキャプチャした日付。
- Device Serial ID - アプリを実行しているデバイスの一意の識別子。
- App - KPIデータが表示されるアプリの名前。
- Number of iterations - KPI測定プロセスが実行された回数。
-
KPI Name - KPIの名前と単位。
-
Test Name - テストまたは実行されたユースケースの名前。
-
KPI Health - 各KPIの健全性を示す色分け表示。
- 🟢(緑)- 推奨ガイドラインを満たしている
- 🟡(黄色)- ガイドラインの10%以内
- 🔴(赤)- ガイドラインを10%超過
-
KPI Score - KPIの数値。KPI名に指定されている単位で表されます。VisualizerでKPIを計算できない場合、KPIスコアは「N/A」と表示され、KPIの健全性は「Unknown」と表示されます。
-
Guideline - 推奨されるKPIスコアの値または範囲。業界標準または業績目標に基づきます。
結果の例
以下の画像は、各ユースケースの結果のサンプルを示しています。ガイドラインに関連するKPIの健全性指標とスコアに注目してください。
ユースケース: クールスタート時のTTFFとTTFD
以下の結果は起動パフォーマンス指標を示しています。緑色のインジケーターは、アプリが起動時間のガイドラインを満たしていることを示します。
ユースケース: ウォームスタート時のTTFFとTTFD
以下の結果は、アプリがバックグラウンド状態から再開する際の状況を示しています。TTFFとTTFDの時間を比較して、最適化の必要性を評価してください。
ユースケース: フォアグラウンドメモリ
アクティブに使用中のアプリのメモリ使用量を表示します。この指標をモニタリングして、メモリを過剰に消費することによるパフォーマンスの問題を回避してください。
ユースケース: バックグラウンドメモリ
バックグラウンド状態でのアプリのメモリ使用量を表示します。非アクティブ状態のアプリがシステムリソースに与える影響を理解するうえで重要です。
ユースケース: UIの滑らかさ
アプリがユーザー操作をどの程度スムーズに処理できるかを示します。パーセンテージは、スクロールおよびナビゲーション中に正常にレンダリングされたフレームを示します。
ユースケース: ビデオ再生の滑らかさ
アプリがビデオコンテンツをどれだけスムーズに再生するかを示します。パーセンテージは、意図した再生レートでのフレーム配信が成功したことを示します。
KPIレポートを開く
Vega App KPI Visualizerがテストシナリオを完了すると、以下のレポートファイルが生成されます。
-
aggregated-kpi-report-<タイムスタンプ>.json - すべてのテストシナリオのKPIデータを統合する。
-
<テスト名>-kpi-report-<タイムスタンプ>.json - 個々のテストシナリオごとに1つのファイルを作成する。<テスト名> は特定のシナリオを表します。
<タイムスタンプ> は、Vega App KPI Visualizerがレポートを生成した日時を示します。
KPIレポートを開くには、以前の記録を開きます。次に、次のいずれかの方法を使用します。
オプション1(推奨): クイックオープンを使用するこの方法では、VS CodeのインターフェイスまたはCLIから記録にアクセスできます。
VS Codeから:
- KPIレポートファイル(例:
app-launch-kpi-report-[timestamp].json)を、VS Codeクイックオープンを使用して、またはプロジェクトのgeneratedディレクトリで見つけます。 - ファイルを1回クリックしてプレビューするか、2回クリックしてアクティブモードで開きます。
CLIから:
- ターミナルウィンドウを開き、次のように入力します。
code <<記録ファイルのパス>>
ターミナルがcodeコマンドを認識しない場合:
- VS Codeを開きます。
-
コマンドパレットを開きます。
- Mac: Cmd+Shift+P
- Linux: Ctrl+Shift+P
- 「Shell Command: Install code command in PATH」を実行します。
- コマンドを再試行します。
オプション2: VS Codeコマンドパレットを使用するこの方法では、VS Codeに組み込みのコマンドインターフェイスを使用して記録にアクセスできます。また、クイックオープンを利用できない場合にも使用できます。
- VS Codeを開きます。
-
コマンドパレットを開きます。
- Mac: Cmd+Shift+P
- Linux: Ctrl+Shift+P
- 「Vega: Open Recording View」と入力します。
app-launch-kpi-report-<タイムスタンプ>.jsonなど、開くファイルを選択します。
関連トピック
Last updated: 2025年10月13日

