機能概要
ユーザー体験への要求が高まり、市場競争が激化しています。ビジネスチームは、ページデザイン、コンテンツレイアウト、インタラクションフローを最適化するために、ユーザーがアプリケーションとどのようにインタラクションしているかを理解する必要があります。目標は、プロダクト体験とユーザーコンバージョン率を向上させることです。セッションリプレイとヒートマップ機能は、視覚的かつ集計されたユーザー行動分析を提供します。これにより、実際のユーザーデータに基づいて、インタラクションの障壁を迅速に特定し、ページレイアウトを最適化し、ユーザー体験を向上させることができます。
セッションリプレイ
セッションリプレイは、ページ上でのすべてのユーザー操作を録画します。これには以下が含まれます:
-
DOM の変更
-
クリック、入力、スクロールなどのユーザーインタラクション
-
ネットワークリクエスト
-
ページパフォーマンスメトリクス
セッションが録画された後、モニタリングプラットフォームで完全なユーザーセッションを再生できます。これにより、以下のことが可能になります:
-
問題の迅速な特定:ユーザーの操作を再生してエラーシナリオを再現します。
-
ユーザー体験の最適化:実際のユーザーパスを観察してインタラクションの問題を特定します。
-
コンバージョン率の向上:ユーザーの行動を分析して主要なフローを最適化します。
ヒートマップ
ヒートマップ機能は、ユーザーのクリックデータを収集し、視覚的なヒートマップを生成します。これにより、以下のことが可能になります:
-
ユーザーのフォーカスの理解:ユーザーが最も頻繁にクリックするエリアを確認します。
-
デッドクリックの特定:ユーザーがクリックしても応答がないエリアを見つけます。
-
ページレイアウトの最適化:クリックヒートマップに基づいてページ要素の位置を調整します。
-
ユーザー体験の向上:誤クリックを減らし、操作効率を向上させます。
クイックスタート
前提条件
Real User Monitoring (RUM) の software development kit (SDK) を統合済みであること。SDK のバージョンは 0.1.5 以降である必要があります。詳細については、「Web & H5 アプリケーションの統合」をご参照ください。
セッションリプレイの有効化
この機能を有効化する最も簡単な方法は次のとおりです:
armsRum.init({
endpoint: "your endpoint",
replay: true, // セッションリプレイを有効化
});
ヒートマップの有効化
ヒートマップ機能はセッションリプレイに依存しており、セッションリプレイがヒートマップのバックグラウンドページを提供します。セッションリプレイを有効にする必要がありますが、特定のサンプルレートは必要ありません。また、action データコレクターの trackUserInteractions オプションを設定する必要があります:
armsRum.init({
endpoint: "your endpoint",
replay: true, // セッションリプレイを有効化
collectors: {
action: {
enable: true,
trackUserInteractions: true, // ヒートマップデータ収集を有効化
}
}
});
完全な設定例
セッションリプレイとヒートマップの両方を有効にできます:
armsRum.init({
endpoint: "https://your-endpoint.com/rum/web/v2",
// セッションリプレイの設定
replay: {
enable: true,
sampling: 20, // セッションリプレイのサンプルレート。20 はセッションの 20% が録画されることを意味します。
privacy: {
level: 'user-input', // ユーザー入力のみをマスクします。
}
},
// ヒートマップの設定
collectors: {
action: {
enable: true,
trackUserInteractions: true, // ヒートマップ分析を有効化
sampling: 100, // 100% のサンプルレート
}
},
// セッションの設定
sessionConfig: {
sampleRate: 1, // セッションサンプリングの設定。デフォルトのサンプルレートは 100% です。
storage: 'localStorage',
}
});
セッションリプレイの設定
設定項目
この機能は replay 設定項目を使用して設定できます。この項目は、単純な有効化と詳細な設定の両方をサポートしています。
|
パラメーター |
タイプ |
説明 |
必須 |
デフォルト |
|
|
boolean |
セッションリプレイ機能を有効にするかどうかを指定します。 |
いいえ |
|
|
|
number |
サンプルレート。有効な値:0 から 100。この値はパーセンテージです。例えば、20 はセッションの 20% が録画されることを意味します。 |
いいえ |
|
|
|
string |
リプレイデータの保存場所。録画データを保存する API を指定します。 |
いいえ |
|
|
|
object |
プライバシー保護の設定。 |
いいえ |
|
プライバシー設定
セッションリプレイを有効にする前に、正式なプライバシー影響評価を実施する必要があります。プライバシー保護設定を計画して、録画内で機密情報がどのようにマスクされるかを制御します。RUM はいくつかのプライバシー保護レベルを提供します。
|
パラメーター |
タイプ |
説明 |
必須 |
デフォルト |
|
|
string |
プライバシー保護レベル。有効な値: - - - - |
いいえ |
|
allowlistedパラメーターは、ホワイトリスト設定を指定する配列です。このパラメーターは、levelが'allowlisted'に設定されている場合に有効になります。録画する要素セレクターまたは要素のリストを指定します。
特定の CSS クラスを追加することで、録画の動作を制御できます:
-
rum-block:要素とその子要素が録画されないようにします。再生中には同じサイズのプレースホルダー要素が表示されます。 -
rum-ignore:要素の入力イベントが録画されないようにします。 -
rum-mask:要素とその子要素のテキストコンテンツをマスクします。
<!-- このエリアは録画されません -->
<div class="rum-block">
This content will not be recorded
</div>
<!-- この要素の入力イベントの録画を防ぎます -->
<input class="rum-ignore" />
<!-- 機密情報をマスクします -->
<div class="rum-mask">
Sensitive information will be masked
</div>
設定例
例 1:単純な有効化 (デフォルト設定)
armsRum.init({
endpoint: "your endpoint",
replay: true
});
例 2:サンプルレートの設定
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
sampling: 20, // 20% のセッションが録画され、ストレージコストを削減します。
}
});
例 3:プライバシー保護 - すべてのテキストをマスク
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'mask' // すべてのテキストコンテンツと入力フィールドをマスクします。
}
}
});
例 4:プライバシー保護 - ユーザー入力のみをマスク
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'user-input' // パスワードや入力フィールドなど、ユーザー入力のみをマスクします。
}
}
});
例 5:プライバシー保護 - ホワイトリストモード
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
privacy: {
level: 'allowlisted',
allowlisted: ['.main-content', '#app', '.product-card'] // これらの要素のみを録画します。
}
}
});
仕組み
-
録画開始時:セッションリプレイは以下のタイミングで録画を開始します:
-
セッションが初期化されたとき
-
ページの読み込みが完了した後 (
DOMContentLoaded)
-
-
データアップロード:録画されたデータは以下のようにアップロードされます:
-
ページが非表示になったとき (
visibilitychange) -
ページがフリーズしたとき (
freeze) -
ページがアンロードされる前 (
beforeunload) -
ルートが変更されたとき (
pv)
-
-
録画制限:
-
単一セッションの最大録画時間は 1 時間 (3600 秒) です。
-
最大時間に達すると、録画は自動的に停止します。
-
-
サンプリング制御:
-
サンプルレートはセッションレベルで制御されます。リプレイは、対応するセッションがサンプリングされた場合にのみサンプリングされます。
-
これは
replay.samplingを使用して設定できます。 -
サンプリングの決定はセッションが初期化されるときに行われ、セッション全体で変更されません。
-
ヒートマップの設定
設定項目
ヒートマップ機能は collectors.action データコレクターを使用して設定できます。trackUserInteractions オプションを有効にする必要があります。
|
パラメーター |
タイプ |
説明 |
必須 |
デフォルト |
|
|
boolean |
クリックイベントの収集を有効にするかどうかを指定します。 |
いいえ |
|
|
|
boolean |
ヒートマップ分析のためにユーザーインタラクションを追跡するかどうかを指定します。 |
いいえ |
|
|
|
number |
サンプルレート。有効な値:0 から 100。この値はパーセンテージです。 |
いいえ |
|
設定の詳細
-
trackUserInteractions: false(デフォルト):-
`button`、`a`、`input`、`select`、`option`、`textarea` などのインタラクティブな要素のクリックイベントのみを収集します。
-
収集されるデータには、要素名、XPath、持続時間などの基本情報が含まれます。
-
これは、基本的なクリック統計のみが必要なシナリオに適しています。
-
-
trackUserInteractions: true:-
非インタラクティブな要素を含む、すべての要素のクリックイベントを収集します。
-
収集されるデータには以下が含まれます:
-
位置情報:ドキュメントおよび要素に対するクリックの X および Y 座標。
-
ターゲット要素情報:要素セレクター、幅、高さ、インタラクティブな要素であるかどうか、およびインタラクションが信頼できるかどうか。
-
ビューポート情報:ページビューポートの幅と高さ。
-
-
これは、ヒートマップ生成が必要なシナリオに適しています。
-
設定例
例 1:ヒートマップの有効化 (推奨設定)
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: true, // ヒートマップ分析を有効化
sampling: 100, // 100% のサンプルレート
}
}
});
例 2:基本的なクリックイベントのみを収集 (ヒートマップ無効)
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: false, // ヒートマップを無効化
sampling: 100,
}
}
});
収集されるデータフィールド
trackUserInteractions: true の場合、収集されるクリックイベントには以下のフィールドが含まれます:
position (位置情報)
{
x: 123, // クリックの X 座標 (ドキュメント相対)
y: 456, // クリックの Y 座標 (ドキュメント相対)
ex: 50, // 要素内の相対 X 座標
ey: 30 // 要素内の相対 Y 座標
}
target (ターゲット要素情報)
{
selector: "#root > div > button:nth-child(15)", // 要素セレクター
width: 120, // 要素の幅 (ピクセル単位)
height: 40, // 要素の高さ (ピクセル単位)
reaction: 1, // 要素がインタラクティブかどうかを指定します (0 = 非インタラクティブ, 1 = インタラクティブ)
trust: 1 // インタラクションが信頼できるかどうかを指定します (0 = 信頼できない, 1 = 信頼できる)
}
viewport (ビューポート情報)
{
width: 1920, // ビューポートの幅 (ピクセル単位)
height: 1080 // ビューポートの高さ (ピクセル単位)
}
仕組み
-
イベントリスナー:SDK は、キャプチャフェーズ中にページ上の
clickイベントをリッスンします。 -
要素の検出:
-
trackUserInteractions: falseの場合、インタラクティブな要素上のクリックのみが収集されます。 -
trackUserInteractions: trueの場合、すべての要素上のクリックが収集されます。
-
-
データ収集:
-
ドキュメントと要素に対するクリック位置を計算します。
-
セレクター、サイズ、インタラクティブ性などの要素情報を取得します。
-
要素のサイズ、可視性、その他の要因に基づいて、インタラクションの信頼性を判断します。
-
-
データレポート:収集されたデータは、他の RUM イベントとともにモニタリングプラットフォームにレポートされます。
利用シーン
セッションリプレイの一般的な利用シーン
1. エラーの再現とデバッグ
シナリオ:ユーザーがエラーを報告したが、再現手順を説明できない。
ソリューション:
-
セッションリプレイを有効にし、20% などの適切なサンプルレートを設定します。
-
エラーが発生した場合、セッション ID を使用して対応するセッションリプレイを見つけることができます。
-
ユーザーの操作を再生して、問題の原因を迅速に特定します。
2. ユーザー体験の最適化
シナリオ:主要なフローにおけるユーザーパスを分析して、コンバージョン率を最適化したい。
ソリューション:
-
購入フローなど、主要なページのサンプルレートを上げます。
-
ユーザーセッションを再生して、ユーザーの習慣を観察します。
-
インタラクションの障壁を見つけ、ページレイアウトとインタラクションを最適化します。
3. カスタマーサービスのサポート
シナリオ:カスタマーサービスが、ユーザーが直面している特定の問題を理解する必要がある。
ソリューション:
-
ユーザー ID またはセッション ID を使用して、対応するセッションリプレイを見つけます。
-
ユーザーの操作を再生して、問題のコンテキストを迅速に理解します。
-
より正確なソリューションを提供します。
ヒートマップの利用シーン
1. ページレイアウトの最適化
シナリオ:最も頻繁にクリックされるエリアを理解して、ページレイアウトを最適化したい。
ソリューション:
-
ヒートマップデータ収集を有効にします。
-
モニタリングプラットフォームでクリックヒートマップを表示します。
-
ヒートマップに基づいて重要な要素の位置を調整します。
2. デッドクリックの分析
シナリオ:ユーザーがクリックしても応答がないエリア (デッドクリック) を見つけたい。
ソリューション:
-
target.reactionフィールドを使用して、非インタラクティブな要素へのクリックを特定します。 -
デッドクリックの分布と頻度を分析します。
-
ページを最適化してデッドクリックを減らします。
3. モバイルデバイスの最適化
シナリオ:モバイルユーザーの誤クリック率が高く、クリックエリアを最適化する必要がある。
ソリューション:
-
ヒートマップを使用して、モバイルデバイスでのクリック分布を表示します。
-
誤クリックのホットスポットエリアを特定します。
-
要素のサイズと位置を調整して、誤クリックを減らします。
ベストプラクティス
セッションリプレイのベストプラクティス
1. サンプルレートの設定
-
本番環境:サンプルレートを 10% から 20% に設定して、コストとカバー率のバランスを取ります。
-
ステージング環境:サンプルレートを 100% に設定して、トラブルシューティングを支援します。
-
主要なページ:コンバージョン率にとって重要なページのサンプルレートを上げます。
const isProduction = process.env.NODE_ENV === 'production';
armsRum.init({
endpoint: "your endpoint",
replay: {
enable: true,
sampling: isProduction ? 20 : 100, // 本番環境では 20%、ステージング環境では 100%
}
});
2. プライバシー保護
-
機密情報:機密情報を含むページでは、
'mask'または'user-input'レベルを使用します。 -
公開ページ:公開ページでは、
'allow'レベルを使用して、より完全なリプレイを取得できます。 -
コンプライアンス要件:コンプライアンス要件に基づいてプライバシーレベルを設定します。
3. ストレージコストの最適化
-
ニーズに基づいて適切なサンプルレートを設定します。
-
重要でないページでは、サンプルレートを下げるか、録画を無効にすることができます。
-
期限切れの録画データを定期的にクリアします。デフォルトの保持期間は 30 日です。
4. パフォーマンスに関する考慮事項
-
セッションリプレイはページのパフォーマンスに影響を与える可能性があります。主要なページでのみ使用することを推奨します。
-
レポートのパフォーマンスに影響を与えないように、録画データの量を監視します。
ヒートマップのベストプラクティス
1. サンプルレートの設定
-
分析フェーズ:100% のサンプルレートを使用して完全なデータを取得します。
-
安定運用:データ量を減らすために、レートを 50% から 80% に下げることができます。
-
高トラフィックページ:必要に応じてサンプルレートを下げることができます。
armsRum.init({
endpoint: "your endpoint",
collectors: {
action: {
enable: true,
trackUserInteractions: true,
sampling: 80, // 80% のサンプルレート
}
}
});
2. ビジネス分析との組み合わせ
-
ページパスやユーザープロパティなど、他のディメンションとヒートマップを分析します。
-
主要なコンバージョンパスのクリックヒートマップに焦点を当てます。
-
ヒートマップの変化を定期的に分析して、ページレイアウトを最適化します。
3. モバイルの最適化
-
モバイルデバイスでは誤クリック率が高いため、デッドクリックに焦点を当てる必要があります。
-
target.trustフィールドを使用して、信頼できるクリックを特定します。 -
モバイル要素のクリックエリアのサイズを最適化します。
よくある質問
セッションリプレイに関するよくある質問
セッションリプレイを有効にすると、ページのパフォーマンスに影響しますか?
SessionReplay は主に以下の点でページのパフォーマンスに影響します:
-
メモリ使用量:録画データは一部のメモリを消費します。
-
CPU 使用量:DOM の変更をリッスンすると CPU リソースを消費します。
-
ネットワーク転送:録画データをアップロードすると、ネットワークパフォーマンスに影響を与える可能性があります。
推奨事項:
-
すべてのセッションを録画しないように、適切なサンプルレートを設定します。
-
重要でないページでは録画を無効にすることができます。
-
ページパフォーマンスメトリクスを監視して、影響が許容範囲内であることを確認します。
記録データのボリュームをコントロールするにはどうすればよいですか?
記録されたデータのボリュームは、以下の方法で制御できます。
-
サンプルレートを下げる:録画されるセッションの数を減らします。
-
プライバシーレベルを設定する:
'mask'または'user-input'レベルを使用して、録画されるコンテンツの量を減らします。 -
録画時間を制限する:単一セッションは最大 1 時間まで録画できます。
-
不要な要素をフィルタリングする:
allowlistedモードを使用して、主要なエリアのみを録画します。
Q3:Canvas および IFrame 要素の録画はサポートされていますか?
A:いいえ、サポートされていません。コンプライアンスとパフォーマンス上の理由から、Canvas および IFrame 要素の録画は現在サポートされていません。これらのエリアは、再生中に空白として表示されます。
Q4:サンプルレートはどのように機能しますか?
A:サンプリングの決定はセッションが初期化されるときに行われ、セッション全体で変更されません。例:
-
メインの RUM セッションのサンプルレートが 20% で、リプレイのサンプルレートが 20% の場合、セッションリプレイの実効サンプルレートは 4% (20% × 20%) です。
-
リプレイのサンプルレートが 20% に設定されている場合、セッションの 20% が録画されます。
-
サンプリングの決定はセッション ID のハッシュに基づいています。これにより、同じセッションに対して決定が一貫していることが保証されます。
-
セッションが録画対象として選択されると、そのセッションは全期間にわたって録画されます。
ヒートマップに関するよくある質問
Q1:ヒートマップデータはいつレポートされますか?
A:ヒートマップデータは、他の RUM イベントとともにレポートされます。データは以下のタイミングでレポートされます:
-
reportConfig.maxEventCountに達すると、データはバッチでレポートされます。 -
reportConfig.flushTimeの間隔に達したとき。 -
ページがアンロードされる前。
Q2:ヒートマップデータにはどのような情報が含まれますか?
A:trackUserInteractions: true の場合、ヒートマップデータには以下が含まれます:
-
位置情報:クリックの X および Y 座標 (ドキュメント座標および要素内の座標)。
-
要素情報:セレクター、サイズ、および要素がインタラクティブであるかどうか。
-
インタラクション情報:インタラクションが信頼できるかどうか。
-
ビューポート情報:ページビューポートの幅と高さ。
Q3:クリックが有効かどうかを判断するにはどうすればよいですか?
A:以下のフィールドを使用できます:
-
target.reaction:1はインタラクティブな要素を示し、0は非インタラクティブな要素を示します。 -
target.trust:1は信頼できるインタラクションを示し、0は誤クリックの可能性を示します。
デッドクリックは通常、reaction: 0 または trust: 0 で示されます。