すべてのプロダクト
Search
ドキュメントセンター

Application Real-Time Monitoring Service:HarmonyOS アプリケーションの統合

最終更新日:Mar 06, 2026

Real User Monitoring (RUM) は、モバイルアプリケーション向けの包括的なモニタリング機能を提供します。RUM を使用して、アプリケーションのパフォーマンス、クラッシュ、カクつきなどの主要なメトリックをリアルタイムで監視・分析できます。このトピックでは、HarmonyOS 向けソフトウェア開発キット (SDK) をご利用のアプリケーションに統合する方法について説明します。

バージョン要件

  • Stage アプリケーションの compatibleSdkVersion は 5.0.0 (12) 以降である必要があります。

  • バージョン 2.0.0 から SDK 統合パラメーターが変更され、それ以前のバージョンとの互換性がありません。バージョン 2.0.0 以降にスペックアップする場合は、最新の統合ドキュメントに従って SDK をスペックアップしてください。これにより、SDK が正しく初期化されます。

ステップ 1:SDK の統合

  1. HarmonyOS RUM SDK はサードパーティリポジトリに公開されています。プロジェクト内の `oh-package.json5` ファイルの `dependencies` セクションに、SDK HAR パッケージの依存関係を追加します。設定は以下のとおりです。

    "dependencies": {
      "@alibabacloud_rum/harmony_sdk": "2.0.2"
    }

    依存関係を設定した後、`ohpm install` コマンドを実行してパッケージをインストールします。パッケージはプロジェクトの `oh_modules` ディレクトリにインストールされます。

    ohpm clean
    ohpm install
  2. 設定が有効になるよう、プロジェクトを再ビルドします。

ステップ 3: SDK の構成

1. 権限の構成

ご利用のアプリケーションの `module.json5` 構成ファイルを確認し、以下の権限が含まれていることを保証します。

ohos.permission.INTERNET            // ネットワークデータを送信
ohos.permission.GET_NETWORK_INFO    // ネットワークステータス情報を取得

2. ohmurl ルールの構成

プロジェクトレベルまたはモジュールレベルの `build-profile.json5` ファイル内で、`useNormalizedOHMUrl` を `true` に設定します。この設定項目が存在しない場合は、手動で追加してください。

{
  "app" : {
    "products": [{
      "buildOption": {
          "strictMode": {
            "useNormalizedOHMUrl": true
          }
        }
    }]
  }
}

3. hvigor プラグインの構成

Hvigor プラグインは SDK と連携し、コンパイル時に HarmonyOS アプリケーションにプローブコードを挿入します。

重要

このプラグインはネットワークデータ収集に使用されます。現在、以下のネットワークフレームワークをサポートしています。

  • hms.collaboration.rcp

  • ohos.net.http

  • ohos.net.webSocket

  • ohos.net.socket.TCPSocket

プロジェクトでこれらのネットワークライブラリを使用していない場合、プラグインをインストールする必要はありません。

  1. 依存関係の宣言を追加します。

    プロジェクトの `hvigor/hvigor-config.json5` ファイルにプラグインの依存関係を追加します。

    {
      "dependencies": {
        "@arms/rum-harmonyos-plugin": "^1.0.3"
      }
    }
  2. 依存関係をインストールします。

    • 方法 1:エディターの右上隅にある Sync Now をクリックするか、メニューから File > Sync and Refresh Project を選択します。DevEco Studio は `hvigor-config.json5` の構成に基づき、自動的に依存関係をインストールします。

    • 方法 2:`hvigorw` コマンドラインインターフェイス (CLI) を使用して任意のコマンドを実行します。CLI は自動的にビルド依存関係をインストールします。

      hvigorw --sync
  3. (必須) 構成ファイルを作成します。

    プロジェクトのルートディレクトリに、構成ファイル alibabaCloudRumConfig.txt を作成します。このファイルは、プラグインが処理および無視するソースコードの範囲を指定します。ファイルには、次の構成を含める必要があります:

    -hook:処理対象のディレクトリまたはファイルを指定します。プラグインは、これらのパス内のソースファイルをスキャンおよび処理します。

    -keep:処理から除外するディレクトリまたはファイルを指定します。`keep` で指定されたパスは、`hook` パスに含まれていてもスキップされます。

    ネットワークデータ収集は、`hook` で構成されたパスに対してのみ有効です。

    例:

    # 処理対象の ets ソースコードのルートディレクトリを指定。
    -hook ./src/main/ets/
    
    # hook ディレクトリ内のすべてのファイルを処理しないように指定。
    -keep ./src/main/ets/hook/
  4. モジュールのビルド構成ファイル `hvigorfile.ts` にプラグインを追加します。

    import { hapTasks } from '@ohos/hvigor-ohos-plugin';
    // プラグインをインポート。
    import { AlibabaCloudRumPlugin } from '@arms/rum-harmonyos-plugin';
    
    // ビルド構成内
    export default {
      system: hapTasks,
      plugins: [
        // プラグインインスタンスを追加。ここでは関数を呼び出す必要があります。
        AlibabaCloudRumPlugin() 
      ]
    };

4. SDK の初期化

  • 方法 1 (推奨)

    エントリーモジュールのカスタム AbilityStage の `onCreate` 関数内に、以下のコードを追加します。

    AlibabaCloudRum.withServiceId("${your_serviceId}") // RUM アプリケーション作成時に ServiceId を取得します。
          .withEndpoint("${your_endpoint}") // RUM アプリケーション作成時に Endpoint を取得します。
          .withWorkspace("${your_workspace}")// RUM アプリケーション作成時に Workspace を取得します。
          .start(this.context.getApplicationContext()); // アプリケーションコンテキストを取得します。
  • 方法 2

    ご利用のアプリケーションのビジネスロジックにより、カスタム AbilityStage の `onCreate` ライフサイクルでの SDK 初期化が困難な場合は、最初のページ読み込みライフサイクル中に SDK を初期化できます。この場合、最初のページ読み込み前に発生したアプリケーション動作は収集されません。最初のページ読み込みライフサイクル中に、以下のコードを追加します。

    AlibabaCloudRum.withServiceId("${your_serviceId}") // RUM アプリケーション作成時に ServiceId を取得します。
          .withEndpoint("${your_endpoint}") // RUM アプリケーション作成時に Endpoint を取得します。
          .withWorkspace("${your_workspace}")// RUM アプリケーション作成時に Workspace を取得します。
          .withUiContext(this.getUIContext()) // uiContext を取得します。
          .start(getContext(this).getApplicationContext()) // アプリケーションコンテキストを取得します。

5. データ収集

HarmonyOS SDK は、一部のデータタイプについて自動データ収集をサポートしています。axios や webview などのサードパーティネットワークライブラリについては、手動でイベントトラッキングを追加する必要があります。手順は以下のとおりです。

Axios ネットワークデータ収集

  1. (任意) エンドツーエンド分散トレーシングを有効にするには、リクエストに Alibaba Cloud のカスタムビジネスリクエストヘッダーを挿入する必要があります。分散トレーシングが不要な場合は、この手順をスキップできます。エンドツーエンド分散トレーシングを使用する場合は、事前にコンソールでホストホワイトリストを構成する必要があります。詳細については、「Application Monitoring におけるフロントエンドとバックエンドのトレースの関連付け」をご参照ください。

    重要

    各ネットワークリクエストごとに新しいカスタムヘッダーを取得および割り当てる必要があります。異なるリクエスト URL に対して API 呼び出し結果を再利用しないでください。

    function getInsertHeaderMap(requestUrl: string): Map<string, string> | undefined

    パラメーター

    必須

    説明

    パラメーター制約

    失敗時の結果

    requestUrl

    必須

    リクエスト URL

    文字列。有効なリクエスト URL であること。

    取得に失敗しました。

    // この例では、`AxiosRequestConfig` を使用してリクエストヘッダーを挿入する方法を示します。リクエストインターセプタを実装し、`InternalAxiosRequestConfig.headers` を処理してヘッダーを挿入することも可能です。
    import axios, {
      AxiosError,
      AxiosHeaders,
      AxiosResponse,
      AxiosRequestConfig,
      InternalAxiosRequestConfig
    } from '@ohos/axios'
    import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk'
    
    let customHeaders: AxiosHeaders = new AxiosHeaders()
    let traceHeader = AlibabaCloudRumTrace.axios.getInsertHeaderMap("https://www.example.com");
    if (traceHeader) {
      traceHeader.forEach((value: string, key: string) => {
        customHeaders.set(key, value);
      })
    }
    // AxiosRequestConfig を使用して実際のリクエストヘッダーに挿入。
    let requestConfig: AxiosRequestConfig = {
      method: this.currMethod,
      headers: customHeaders,
      params: this.currRequestParam
    }
    axios.get("https://www.example.com", requestConfig);
  2. (必須) 正常および異常なネットワークリクエストのデータを収集します。

    function handleSuccess(requestUrl: string, method: string, responseCode: number,
        requestDataSizeByte?: number, downloadSizeByte?: number,
        timingParam?: object, remoteAddressIP?: string, requestHeader?: Record<string, Object>,
        responseHeader?: Record<string, Object>, resourceType?: string, requestBody?: string)

    メトリックの説明:

    パラメーター

    必須

    説明

    パラメーター制約

    失敗時の結果

    requestUrl

    必須

    リクエスト URL

    文字列。有効なリクエスト URL であること。

    ネットワークイベントは収集されません。

    method

    必須

    リクエストメソッド

    文字列。HTTP 以外のリクエストメソッドの場合は空文字列を渡します。

    ネットワークイベントは収集されません。

    responseCode

    必須

    応答コード

    数値。

    ネットワークイベントは収集されません。

    requestDataSizeByte

    任意

    アップロードされたリクエストデータのサイズ

    数値。単位:バイト。

    ネットワークイベントは収集されません。

    downloadSizeByte

    任意

    ダウンロードサイズ

    数値。単位:バイト。

    ネットワークイベントは収集されません。

    timingParam

    任意

    axios リクエストの各フェーズにかかった時間

    http.PerformanceTiming

    ネットワークイベントは収集されません。

    remoteAddressIP

    任意

    宛先 IP アドレス

    文字列

    ネットワークイベントの関連フィールドが欠落します。

    requestHeader

    任意

    リクエストヘッダー。分散トレーシング機能を使用するには、このパラメーターが必要です。

    Record 型

    ネットワークイベントの関連フィールドが欠落します。

    responseHeader

    任意

    応答ヘッダー

    Record 型

    ネットワークイベントの関連フィールドが欠落します。

    resourceType

    任意

    リソースタイプ

    文字列。Multipurpose Internet Mail Extensions (MIME) タイプの Content-Type フィールドに従います。

    ネットワークイベントの関連フィールドが欠落します。

    requestBody

    任意

    リクエスト内容

    文字列データ型

    ネットワークイベントの関連フィールドが欠落します。

    異常なネットワークリクエストのデータを収集します。

    function handleError(requestUrl: string, method: string, requestDataSizeByte: number, errorParam: Error,requestHeader?: Record<string, Object>)

    パラメーター

    必須

    説明

    パラメーター制約

    失敗時の結果

    requestUrl

    必須

    リクエスト URL

    文字列。有効なリクエスト URL であること。

    ネットワークイベントは収集されません。

    method

    必須

    リクエストメソッド

    文字列。HTTP 以外のリクエストメソッドの場合は空文字列を渡します。

    ネットワークイベントは収集されません。

    requestDataSizeByte

    必須

    アップロードされたリクエストデータのサイズ

    数値。単位:バイト。

    ネットワークイベントは収集されません。

    errorParam

    必須

    ネットワークエラー

    ビジネスエラー型

    ネットワークイベントは収集されません。

    requestHeader

    任意

    リクエストヘッダー

    Record 型

    ネットワークイベントの関連フィールドが欠落します。

    以下に例を示します。

    axios.get("http://www.example.com",requestConfig).then((responseData: AxiosResponse) => {
      AlibabaCloudRumTrace.axios.handleSuccess("http://www.example.com", "GET", responseData.status, requestDataSize, downloadSize, responseData.performanceTiming);
    }).catch((err: BusinessError) => {
      AlibabaCloudRumTrace.axios.handleError("http://www.example.com", "GET", 0, err);
    });

Webview データ収集

Web コンポーネントのライフサイクルコールバックに SDK 収集ロジックを追加します。手順は以下のとおりです。

  1. JS スクリプトを挿入します。

    javaScriptOnDocumentStart のパラメーターに、AlibabaCloudRumTrace.Web.getScriptItem() を追加します。

  2. `onPageEnd` ライフサイクルにイベントトラッキングを追加します。

    onPageEnd 内に、AlibabaCloudRumTrace.Web.onPageEndHilt(this.controller) を追加します。

  3. コンポーネントがアンインストールされる際に、SDK 収集リソースを破棄します。

    onDisAppear 内に、AlibabaCloudRumTrace.Web.onDisAppearHilt(this.controller) を追加します。

コード例:

import { AlibabaCloudRumTrace } from '@alibabacloud_rum/harmony_sdk';

Web()
  .javaScriptOnDocumentStart([AlibabaCloudRumTrace.Web.getScriptItem()])
  .onPageEnd(() => {
    AlibabaCloudRumTrace.Web.onPageEndHilt(this.controller); 
    // this.controller: 現在の Web コンポーネントにバインドされている WebviewController である必要があります。
  })
  .onDisAppear(() => {
    AlibabaCloudRumTrace.Web.onDisAppearHilt(this.controller);
    // this.controller: 現在の Web コンポーネントにバインドされている WebviewController である必要があります。
  })