# \[共通] WebAgent設定

{% hint style="warning" %}
IMQA Web Agentはサービスごとにオプションを異なるように与え、動作させることができます。
{% endhint %}

## 1. 必須設定

### IMQA 使用設定

IMQA Web Agentはスクリプトをhtmlの\<head>内部の最上段に挿入してください。以下の必須オプションを含めて正常に動作します。

<table><thead><tr><th width="148" align="center">Option Name</th><th width="105" align="center">Type</th><th width="144" align="center">Default Value</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">imqaAgentUse</td><td align="center">boolean</td><td align="center">true</td><td align="center"><p>true :  IMQA WebAgentを使用します。</p><p>false : IMQA Web Agentを使用していません。</p></td></tr><tr><td align="center">projectKey</td><td align="center">string</td><td align="center">“PROJECT_KEY”</td><td align="center">IMQAで生成したWPMプロジェクトのキーを入力します。</td></tr></tbody></table>

必須設定のみ適用したスクリプトは以下のとおりです。

{% code title="Web-agent.jsをリンクする html <head>" %}

```html
// Connect IMQA web-agent.js
<script src="https://cdn.imqa.io/agent/web-agent-1.1.11.js"></script>
<script>
((w, c, _wv, _w, _wk, _mh, _b) => {
    w[c] = w[c] || {};
    function imqaConf(key, value){w[c][key]=value};

    imqaConf("imqaAgentUse", true); // Whether IMQA Agent is enabled
    imqaConf("projectKey", "PROJECT_KEY"); // User Project Key

    w[_w](w);
})(window, 'imqaClientConfig', 'IMQAWebviewMain', 'IMQAWebMain', 'webkit', 'messageHandlers', 'ImqaBridge')
</script>   
```

{% endcode %}

### クロスドメイン設定

IMQAにおいて分析するメインドメインの他にクロスドメインを設定することができます。サブドメイン(例：m.imqa.io)別途構成されている場合やCORS(オリジン間リソース共有)へのアクセスが必要な場合、許可するオリジンを指定することができます。

① IMQA WPMプロジェクトの \[···] アイコンをクリックすると、プロジェクト管理メニューを表示します。

<figure><img src="https://lh7-us.googleusercontent.com/rlvnfROiSbY306DZ2UlaOML4_CTb08BuJknuVvDN3W_T12fTA0linL6FIs4ZKJzhkguBSmUJMuqZhaOAoYquIPiF4Omv3BiWSxV8ILbVKlzsJEGH8CgVc1AmpHBwx4qii3hKXftEQlxBoS7_0F-4ur8" alt=""><figcaption></figcaption></figure>

② \[クロスドメイン設定]をクリックします。

<figure><img src="https://lh7-us.googleusercontent.com/B99ei1JZZ4ljf2m9V3GSnZK5XYbwQAz2E5GV2KhAOp_ciCXB3PoZxoSxU2aglyHE8Rc7pvW6WCPCKN5eT9tG1Spc72m4zod8J7kojv5I9vBgp9bAU6z_jvpGIym51zcmKZqWIdNXG48UltKZiyDdXaU" alt=""><figcaption></figcaption></figure>

③ 基本プロジェクトを作成するときに入力したメインドメインのURLが設定されており、Webサイトの構成により、サブドメインまたはオリジン間リソース共有へのアクセスを許可するオリジンを入力します。

* **許可ドメインの設定例)**&#x20;

<figure><img src="https://lh7-us.googleusercontent.com/kYmq2WOVxnzfNIujh4guCPflIdVDfC1JL_NLIEillfZsM_UJ71pvAa_0G5R0cdg9PZyIKKAgrdpvFWHnBMu0Y_NwCdkfd-YaA9e2QbnA_YWo3dO1G5bEne06jmdhOYxr-CiO90RGotM6ZnWJ9Fp-c4I" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
許可ドメインのURLへのアクセスを許可するドメイン一覧を指定します。(例： <http://localhost:8080>)

1行で区切って入力することができ、プロトコルおよびポート番号、大文字と小文字を区別し、\*文字を含めることはできません。
{% endhint %}

④ 許可されたドメイン一覧を入力し、\[保存]をクリックします。

⑤ 入力した許可されたドメイン一覧からデータをリアルタイムで収集するように設定されており、IMQAにおいて確認することができます。

{% hint style="info" %}
IMQA WebAgentは基本的にユーザーのWebブラウザアプリケーションの構成において重要な単位でのみデータが収集できるようにサポートし、インストール用のコードの複製によるライセンス保護などのため、許可されたドメインでのみデータを収集します。メインドメインURLの他に、性能データを収集したいドメインがあれば、クロスドメイン設定機能により許可されたドメイン一覧を設定する必要があります。
{% endhint %}

### URLパターン設定

WebサイトのURLのパターンを探し、好きな形に置き換えてIMQAで収集することができます。URLの数字、識別子(例：流入ID、ユーザーID、検索クエリなど)の置き換え、類似したページを意味のある集計単位にグループ化することができます。

{% hint style="warning" %}
IMQA WPMは基本的にユーザーが接続した原始URLデータを収集します。ユーザーがWebサイトを利用するとき、複数の識別子、検索クエリなどでURLが断片化される可能性が高いページの場合、URLパターン設定により有意義な集計/分析の単位を定義することを推奨します。
{% endhint %}

<figure><img src="https://lh7-us.googleusercontent.com/Jzqe0MlNMKvcYASYwUj6qH_hXdyu9A2zmHBy8JPZfyLJvtMOKjw7E9ZI8e1eKEdqwntoVabfE75ymVj5gw5YW4127k97bvb1ujKyEr-s1xdUMI4lzTmOtQABkyQHldNhCIsWMgzhYCL9xRnkptw9jFc" alt=""><figcaption></figcaption></figure>

**❶ URLパターン**

WebサイトのURLのパスまたはクエリパラメータにおいて、任意の形に置き換えるパターンを入力します。パスとクエリパラメータの単位を入力することができます。優先順位が高いURLパターンから適用され、クエリパラメータは「key=value」の形で入力する必要があります。

① WebサイトのURLの構成により、パスまたはクエリパラメータにおいて束ねたい単位に変数{group}を含めて入力します。\
② WebサイトのURLの構成により、パスまたはクエリパラメータにおいて解きたい単位に変数{value}を含めて入力します。\
③ URLパターンを入力し、\[+]アイコンをクリックします。

* **URLパターン設定例 1)**

  「商品詳細ページのURLである「products」パスの後の数字を束ねて一つのページで集計/分析したいです。クエリパラメータは詳しく区別しなくても大丈夫です。」

<figure><img src="https://lh7-us.googleusercontent.com/Rc4lVY7HvfWoWWE9MWLuXiiAl3bMeyFiAXsxMU3v5yemllJuxE8ufe2UR4dIqjt0FF5d6BZHs-R-Azo2EMvveh5788ALcENyj3hmdmpZjTbCrqzPr59Bu-At-KoI5t8RJtulWS5TDBxHBZPUQNmKDKU" alt=""><figcaption></figcaption></figure>

① 特定の「パス」に適用するURLパターンを変数{group}を含めて入力します。\
② 設定時点から収集されるURLをご希望の形に置き換えてIMQAにおいて「ページ」単位で確認することができます。<br>

<figure><img src="https://lh7-us.googleusercontent.com/05rk7hBaXv1We2HLLjlsFfFrZm9wDv6gUYVdlon2up47BDokE7_pPMq_wqYi3t0XuLKoR_ipQ3TssgIjoyztSQeAWTsU6y-KEThd3smDzo4aLXoyiRjkMWJTCV3ep0_DjIwED1-WMRZbkUAN9A2Ra9c" alt=""><figcaption></figcaption></figure>

* **URLパターン設定例 2)**

  「メインページに流入されるタイプを区別したいです。URLのクエリパラメータに付く外部からの流入ID「fbclid」、「NaPm」、「gclid」は表示し、値は詳しく区別しなくても大丈夫です。」

<figure><img src="https://lh7-us.googleusercontent.com/AS677UpW4X5Q9MIbOj3L3yUQJ3MXsd0x4VFFZkBIv5TCY1bq2j_4VxRz3qK8rCPnYSfIE66yuajRIBDlrEd9pCFUFUYZ2CfzhWkWhkFi7ruIKTsCnsoi30V3IWi6lzFfhHYekBzzZIbuhpt-PlVMQZw" alt=""><figcaption></figcaption></figure>

① 特定の「パス」と「クエリパラメータ」に適用するURLパターンを変数{group}を含めて入力します。\
② 設定時点から収集されるURLをご希望の形に置き換えてIMQAにおいて「ページ」単位で確認することができます。

<figure><img src="https://lh7-us.googleusercontent.com/0YjUNlzYzmn7kTHTVUnbhsu3ps9-EnFwZaLqarz5ApTmO2dWo5eTKjDsfXFoOGd0GeTYFPAW_h0tdquciY-9c-dXdNV1vvwEpqBRXhJUe3Dd2nAE3kXN4wtJX0SAYhqx-zxE8QLy-F_-DoWOcWCmPJE" alt=""><figcaption></figcaption></figure>

* **URLパターン設定例 3)**

  「ベスト商品の一覧ページから各カテゴリータイプを区別したいです。「best」パスのURLクエリパラメータに付くカテゴリーID「category\_id」と値を区別し、他のクエリパラメータは詳しく区別しなくても大丈夫です。」

<figure><img src="https://lh7-us.googleusercontent.com/9hhjQ4MuX_r8uuP0CN3c_fpspg-q_Cr4dDZI89dgdXhoeF6TCgiMoeepEa_FcUJdcOLuZrpGsKvYl7xDn9cGoIReoIJ8I4rBL2ipvhIwp_DSOrP2joIrrLN6fgWQcJm5qzfIiIDJvfWJZPwCbYx2p8w" alt=""><figcaption></figcaption></figure>

① 特定の「パス」と「クエリパラメータ」に適用するURLのパターンを、変数{value}を含めて入力します。\
② 設定時点から収集されるURLをご希望の形に置き換えてIMQAにおいて「ページ」単位で確認することができます。

<figure><img src="https://lh7-us.googleusercontent.com/V9EcRpAVM-kRpEqDXbz4vRhu-INtykWuOrcKAlP8ngh1WCHX0oGpUkJR34joSYUmVQrnUu4_Gsn6wJf68yf9NXXq9pA_KtFcLg6dsjEMfumKrt0K0Zjb7CsJUjSaFWB_0lk20R7v5yFpQuf7s0pSUIU" alt=""><figcaption></figcaption></figure>

**❷ 優先順位**

URLパターンを適用する順番を表示します。優先順位の高いURLパターンから適用され、順番を変更することができます。

* **優先順位の設定例)**\
  「商品詳細ページのURLである「products」パスの次の数字を束ねるパターンを適用していますが、メイン～商品詳細ページに移動するタイプの内部からの流入ID「flow」と外部からの流入ID「fbclid」でアクセスする場合を追加で区別したいです。」

<figure><img src="https://lh7-us.googleusercontent.com/nGharXAYtx375itJQL4N-p-mlJR_ApikTGO8K_32EB-gXyKw3_PhobO-IPJR45eDdzdDfnSpIMmVMA8OVBmuccSdnCGddM8UAiq1zikoRbJyN9X0yrjWhRnSO4MKHDpd1rmF3sc_vkpG45j5YeFUYmc" alt=""><figcaption></figcaption></figure>

① 優先順位が高い「パス」に適用されるURLパターンが優先的に適用されます。\
② 特定の「パス」と「クエリパラメータ」に適用するURLパターンの優先順位を高く変更します。<br>

<figure><img src="https://lh7-us.googleusercontent.com/npb0fKDij3fi053-tckKTac3K9F421b4qEyA2m3pj2Ww9izfryeQSLYQz8f1jnhiRz8qG3bJdrQRCJMGWn8Ds3cDIvdUB_mXZhX2YgY1g3ni_gts9nryCO1yx2beeWwZtpuASMYID-be8-WWHqhOoxM" alt=""><figcaption></figcaption></figure>

③ 設定した後、「クエリパラメータ」に適用されるURLパターンが優先的に適用され、ご希望の形に置き換えられます。

<figure><img src="https://lh7-us.googleusercontent.com/f4oFnEYy8LvDCbeYC4IFBAglgJYIYorNdqveE9d1_ISxzANpjEyLqScLEBy-U0P167PgnEDP3IPYqEs2DCPyCCDfBf5p10xIBhdbAEU0BYRyAWpPCe8ZPvB9zZUmGJ42DtFPGs58JqdPTSPWjFXnMeU" alt=""><figcaption></figcaption></figure>

\
**❸ URLパターン**\
プロジェクトに設定されたすべてのURLパターンを一覧で表示します。

**❹ 優先順位の変更**\
マウスドラッグでURLパターンを適用する順を設定することができます。

**❺ 削除**\
追加したURLパターンを削除します。削除した場合、そのURLパターン項目が削除され、その後はURLパターンが適用されません。

適用するURLパターンと優先順位の設定が終わると、\[保存]をクリックします。設定時点から収集されるURLをご希望の形に置き換えてIMQAにおいて「ページ」単位で確認することができます。

## 2. \[WPM] SPA専用オプション

SPAでは1つのindex.htmlを基準に収集されるため、ページ変更に対するイベントはありません。 SPA専用オプションを設定して、pathが変更されたときの基準で一定時間までを収集することができます。 SPAでは、path変更時に特定のDOMが交換されるので、この特定のDOMをAgentオプションにターゲットに設定すると、正常にSPAでもページロード時間を収集することができます。

<table><thead><tr><th width="158" align="center">Option Name</th><th width="111" align="center">Type</th><th width="142" align="center">Default Value</th><th>Description</th></tr></thead><tbody><tr><td align="center">SPACollectInitTime</td><td align="center">number</td><td align="center">3000</td><td><p>デフォルト:3000 (3秒)</p><p>SPA 性能データ収集間隔をms（ミリ秒）単位で設定します。 パスが変更されると、設定された収集時間中にデータを収集します。</p></td></tr><tr><td align="center">SPARootDom</td><td align="center">string</td><td align="center">“#app”</td><td><p>CSSセレクタスタイルでターゲットとなるDOMを設定します。 ターゲットとなったDOM基準でDOM変更を検知します。</p><p> (ID : #app, Class : .app)</p><p>重複するセレクタをターゲットに設定すると、正常に収集されません。</p></td></tr></tbody></table>

必須設定とSPA専用オプションを適用したスクリプトは以下の通りです。

{% code title="Web-agent.jsをリンクする html \<head" %}

```html
// Connect IMQA web-agent.js
<script src="https://cdn.imqa.io/agent/web-agent-1.1.11.js"></script>
<script>
((w, c, _wv, _w, _wk, _mh, _b) => {
    w[c] = w[c] || {};
    function imqaConf(key, value){w[c][key]=value};

    // Required Settings
    imqaConf("imqaAgentUse", true); // Whether IMQA Agent is enabled
    imqaConf("projectKey", "PROJECT_KEY"); // User Project Key

    // SPA-only option
    imqaConf("SPACollectInitTime", 5000); // SPA CollectInitTime
    imqaConf("SPARootDom", "#container"); // SPA ROOT DOM

    w[_w](w);
})(window, 'imqaClientConfig', 'IMQAWebviewMain', 'IMQAWebMain', 'webkit', 'messageHandlers', 'ImqaBridge')
</script> 
```

{% endcode %}

###

## 3. \[WPM] 行動分析の維持時間オプション

IMQAの行動分析で確認できるユーザー行動セッションの維持時間を設定できます。 セッションはデフォルトの 30 分間保持され、ユーザーが 30 分間ページ移動がない場合は終了します。&#x20;

コンテンツ中心のウェブサイトのように、平均的にユーザーがウェブサイトからページ移動せずに長時間利用する場合、セッションが終了しないように設定できます。

<table><thead><tr><th width="158" align="center">Option Name</th><th width="111" align="center">Type</th><th width="142" align="center">Default Value</th><th>Description</th></tr></thead><tbody><tr><td align="center">browserTxIdIntervalTime</td><td align="center">number</td><td align="center">800000</td><td><p>デフォルト: 1800000 (30分) </p><p>セッション保持時間をms（ミリ秒）単位で設定します。 ユーザーの行動プロセスを維持するID値保持時間を設定します。</p></td></tr></tbody></table>

必須設定と行動分析の維持時間オプションを適用したスクリプトは以下の通りです。

{% code title="Web-agent.jsをリンクする html <head>" %}

```html
// Connect IMQA web-agent.js
<script src="https://cdn.imqa.io/agent/web-agent-1.1.11.js"></script>
<script>
((w, c, _wv, _w, _wk, _mh, _b) => {
    w[c] = w[c] || {};
    function imqaConf(key, value){w[c][key]=value};

    // Required Settings
    imqaConf("imqaAgentUse", true); // Whether IMQA Agent is enabled
    imqaConf("projectKey", "PROJECT_KEY"); // User Project Key

    // Behavior Analysis Interval Time Options
    imqaConf("browserTxIdIntervalTime", 3600000); // Behavior Analysis Interval Time (1h)

    w[_w](w);
})(window, 'imqaClientConfig', 'IMQAWebviewMain', 'IMQAWebMain', 'webkit', 'messageHandlers', 'ImqaBridge')
</script>   
```

{% endcode %}

## 4. \[WPM] スクリプトの実行時間の測定

IMQAタイムラインでjavascriptで特定ロジックの作業時間をチェックすることが。 Performance標準のmark、measureを使えば簡単に追跡できます。 各markとmeasureの中に入るテキストは重複しない固有のテキストとして定義してください。

{% hint style="warning" %}
フレームワークのコアに適用する際、追跡されるコードが異常に増え、メモリ漏れが発生する可能性がありますので、ご注意ください。
{% endhint %}

① 実行時間測定を希望するスクリプトの上段と下段にPerformance.markとmeasureを定義します。

{% code title="Performance.mark, measure 예시코드" %}

```

<script>
  function fun1(){
    performance.mark("fun1-start")

   // Code to measure performance...

    performance.mark("fun1-end")
    performance.measure("fun1-measure", "fun1-start", "fun1-end")
  }
</script>  

```

{% endcode %}

② ‘ページロード時間詳細’ポップアップのスクリプト実行セクションでマーキングしたスクリプトを確認でき、そのスクリプト実行時間が表示されます。

<figure><img src="https://lh7-us.googleusercontent.com/zYuv6WbW7WRJkT45dkDMQ4eYnPGNwFbntlaiNtRBYpIpti0fy1_ZcyMVXlBa_rViD9sodzssgpF_9YgapbKWxHTnrSVOpXI6dFy9VdRBIQDFq7LFRqWOm0H8Mz8ADtY09_4mSo7YFRFXfm7BsM_IeWk" alt=""><figcaption></figcaption></figure>

以下のように、特定のスクリプトの実行時間も測定できます。

<figure><img src="https://lh7-us.googleusercontent.com/W-vna4n5PEJEjF1ngy5wb0hO3NMvJ44rFbDT1mZBRgUNNPgcoPYbTtInsU-lUI5EcJKKUJfMk82jGMU9JK9aL_e0EXhxBrtYu5AcwRiUOnNHCERd3M7gN_L8rCUpACd263-30zKqej4Hkf9w_iXdrec" alt=""><figcaption></figcaption></figure>

## 5. \[WCrash] Custom Web Crash 発生

IMQA WebAgentでは、詳細なウェブエラー分析のために必要なエラーメッセージを指定してユーザー定義エラーを収集することができます。

### ユーザー定義エラーを生成

IMQA WCrashはユーザーが定義したエラーを感知して収集します。

{% hint style="warning" %}
他のエラーでも同じエラータイプの場合、同一エラーと認識してエラーが累積する場合があります。
{% endhint %}

### ユーザー定義エラーメッセージ指定

WebAgentで収集する基本エラーメッセージを希望するエラーメッセージに変更して収集することができます。 詳細なウェブエラー分析のためにエラーメッセージを指定することをお勧めします。

{% hint style="warning" %}
エラー メッセージを指定する場合、同じエラー タイプでも別のエラーで収集されます。
{% endhint %}

{% code title="ユーザー定義エラーを収集するjsファイル" %}

```javascript
...
// If you use try catch
try {
	...
}
catch(e){
	throw new Error("User-specified error message");
}

// If you create a default error
new Error("User-specified error message");
```

{% endcode %}

### Webクラッシュ分析

以下のようにIMQA WCrashサービスでWebクラッシュを詳細な情報とともに確認することができます。

<figure><img src="https://lh7-us.googleusercontent.com/Ng-b4VoTRU2a75CV48EugYMoopGoRWJBl1So2-gqxEZ-5S_C850ys9JF4DkIWtyJjzmTsTzNaq-ZmwyPLRKd9SU9xmLIf0DzZOujyLE1Rg0YaPbvRyR1RoSyZqswodekVkgQ9yOpgmfGLqN_np63cDI" alt=""><figcaption></figcaption></figure>

**❶ キャッチされたエラー インスタンス タイプ**\
Webページでエラーが生成された場合、そのエラーのキャッチされたエラー インスタンス名を表示します。

<table><thead><tr><th width="232" align="center">Error Type</th><th align="center">Description</th></tr></thead><tbody><tr><td align="center">Error</td><td align="center">ユーザーが設定したエラータイプです。</td></tr><tr><td align="center">EvalError</td><td align="center"><mark style="color:red;">eval()</mark> で発生するエラーです。</td></tr><tr><td align="center">RangeError</td><td align="center">変数の有効な範囲を超えた場合に生成されるエラーです。</td></tr><tr><td align="center">ReferenceError</td><td align="center">誤った参照をした場合に生成されるエラーです。</td></tr><tr><td align="center">SyntaxError</td><td align="center">無効な構文が存在する場合のエラーです。</td></tr><tr><td align="center">TypeError</td><td align="center">有効な資料型でない場合は、そのタイプのエラーです。</td></tr><tr><td align="center">URIError</td><td align="center"><mark style="color:red;">encodeURI()</mark>や <mark style="color:red;">decodeURI()</mark> 関数に不適切なパラメータを渡した場合に生成されるエラーです。</td></tr><tr><td align="center">AggregateError</td><td align="center">複数のエラーを 1 つのエラーで包み込むエラー形式です。</td></tr></tbody></table>

**❷ ユーザー定義エラーメッセージ**\
特定のエラー タイプ エラーが生成されるときに、ユーザーが指定したメッセージを表示します。

```
throw new Error("User-specified error message");
```
