フロントエンドの JavaScript (JS) エラーを追跡する際、エラー箇所の特定にはスタックトレースを使用します。リアルユーザーモニタリング (RUM) は JS エラーのスタックトレースを収集し、アップロードされたソースマップファイルを使用して解析します。ただし、RUM は複数バージョンのソースマップファイルの管理をサポートしているため、例外のスタックトレース内にある JS ファイルを、ファイル名だけで対応するソースマップファイルに正確に関連付けることが難しい場合があります。RUM ビルドツールプラグインを使用すると、バンドル済みの JS ファイルとソースマップファイルに UUID を注入して双方向リンクを確立できます。これにより、ソースマップファイルを手動で選択しなくても、例外の詳細ページを開いた際に RUM がスタックトレースを自動的に解析して表示します。
前提条件
プラグインを使用する前に、次の準備を完了してください:
Cloud Monitor 2.0 でワークスペースと Web または H5 のリアルユーザーモニタリング (RUM) アプリケーションを作成し、
workspaceとserviceIdを取得していること。詳細については、「Integrate a web or H5 application」をご参照ください。ビルド環境が Node.js 20 LTS または Node.js 22 以降であること。
AccessKey ID と AccessKey secret を取得していること。アカウントには CMS 権限が必要です。以下は最小限の許可ポリシーの例です:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "cms:GetRumSymbolFileParams", "Resource": "*" } ] }
RUM ビルドツールプラグインの使用
Webpack
RUM Webpack ビルドツールプラグインの npm パッケージをインストールします。
npm install -D @arms/rum-webpack-pluginWebpack プラグインを組み込み、設定します。
プロダクションビルドでは、JavaScript 出力にソースマップ URL を公開しないように
hidden-source-mapを使用してください。const { rumWebpackPlugin } = require('@arms/rum-webpack-plugin'); module.exports = { mode: 'production', devtool: 'hidden-source-map', plugins: [ rumWebpackPlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], };Webpack は、
mode === 'development'またはNODE_ENV === 'development'の場合、ソースマップの処理とアップロードをスキップします。プロダクション用ソースマップをアップロードするには、development 以外のビルドを使用してください。
Vite
RUM Vite ビルドツールプラグインの npm パッケージをインストールします。
npm install -D @arms/rum-vite-pluginVite プラグインを組み込み、設定します。
import { defineConfig } from 'vite'; import { rumVitePlugin } from '@arms/rum-vite-plugin'; export default defineConfig({ build: { sourcemap: true, }, plugins: [ rumVitePlugin({ workspace: 'your-workspace', serviceId: 'your-rum-service-id', version: 'your-release-version', region: 'cn-hangzhou', accessKeyId: process.env.ALIBABA_CLOUD_ACCESS_KEY_ID, accessKeySecret: process.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET, stsToken: process.env.ALIBABA_CLOUD_SECURITY_TOKEN, clearSourceMap: true, }), ], });build.sourcemapはtrueまたは'hidden'に設定できます。'inline'には設定しないでください。
設定リファレンス
フィールド | 自動アップロードに必須 | デフォルト | 説明 |
| はい | なし | Cloud Monitor 2.0 のワークスペース名。 |
| はい | なし | RUM アプリケーションの Service ID。 |
| はい | なし | アプリケーションのリリースバージョン。異なるビルド間でソースマップを分離するために使います。実際のリリースバージョンまたはビルド番号を使用してください。 |
| はい | なし | RUM サービスのリージョン。 |
| はい | なし | アップロードポリシー OpenAPI を呼び出すための AccessKey ID。 |
| はい | なし | アップロードポリシー OpenAPI を呼び出すための AccessKey secret。 |
| いいえ | なし | STS の一時的な認証情報を使用する際に渡す Security Token Service (STS) トークン。 |
| いいえ |
| アップロードが成功した後にローカルの |
注入の検証
ソースマップファイルの確認
clearSourceMap: false の場合は、ビルド出力ディレクトリ内の .map ファイルを開きます。トップレベルに正しい形式の debugId が存在すれば、注入は成功です。例:
{
"version": 3,
"file": "index.js",
"sources": ["webpack://app/src/index.ts"],
"sourcesContent": ["throw new Error('test');"],
"mappings": "AAAA",
"debugId": "e4f083d6-b8d8-4cae-a0ea-16f2e83a6be1"
}sourcesContent は存在し、かつ空でない必要があります。ない場合や空の場合、RUM はファイル位置の復元しかできず、ソースコードのコンテキストを表示できないことがあります。
ブラウザーランタイムの確認
デプロイ済みのページを開き、ブラウザーのコンソールで次を実行します:
window._armsRumDebugIds;返されたオブジェクトに UUID のマッピングが含まれている場合、現在のページ上の JavaScript ファイルが debugId を登録したことになります。プラグインは、iframe およびマイクロフロントエンドのシナリオをサポートするために、debugId を globalThis、self、global、document.defaultView、およびアクセス可能な親ウィンドウやトップウィンドウにも登録します。
アップロード結果の確認
RUM アプリケーションの [ファイル管理] ページで、以下を確認します:
ソースマップファイルが表示されていること。
ファイルのバージョンは、プラグインで設定された
versionと一致します。UUID は、ビルド出力内の
debugIdと一致します。
よくある質問
ビルドログでソースマップファイルが見つからないと報告される
ビルドツールが個別の .map ファイルを生成しているかどうかを確認してください。インラインまたは eval ソースマップを使用せず、JavaScript ファイルと .map ファイルのファイル名とパスが後処理スクリプトによって変更されていないことを確認してください。
アップロードは成功したが、例外の詳細ページにソースコードが表示されない
次の順に確認してください:
.mapファイルには、空ではないsourcesContentが含まれていますか?ソースマップの
debugIdは、例外スタックトレースで報告される UUID と一致しますか?workspace、serviceId、version、およびregionは、ターゲットの RUM アプリケーションと一致していますか?アップロードしたファイルは、対象のアプリケーションの[ファイル管理]ページに表示されますか?
Webpack がファイルをアップロードしない
mode も NODE_ENV も development に設定されていないこと、および外部ソースマップファイルが生成されていることを確認してください。
カスタム OSS バケットを使用できますか?
いいえ。アップロードエンドポイントとフォームパラメータは OpenAPI によって返されます。プラグインではバケット設定を公開していません。
ソースマップがインターネット上で公開されるのを防ぐにはどうすればよいですか?
Webpack では、hidden-source-map を使用します。また、clearSourceMap: true に設定します。アップロードが成功するたびに、プラグインは対応するローカルの .map ファイルを削除します。
現在の Node.js バージョンが特定の機能をサポートしていないというエラーが表示される
ビルド環境を Node.js 20 LTS または Node.js 22 以降にアップグレードしてください。このプラグインが使用する依存関係は、Node.js 18 や 21 などの古いバージョンをサポートしていません。
ソースマップファイルがサイズ制限を超える
1つのソースマップファイルのサイズは 50 MiB を超えることはできません。コード分割、インラインソースコンテンツの削減、またはビルド設定の調整によって、ファイルサイズを削減できます。ソースコードのコンテキストを表示するには、十分な sourcesContent を保持する必要があります。
チャンク URL に括弧が含まれると、ソースマップの自動マッチングに失敗する
webpack チャンク URL に、Next.js App Router で使用されるルートグループ形式 (/app/(groupName)/page/) のような、丸括弧などの特殊文字が含まれている場合、ARMS は報告された JS エラーの binary_images フィールドから UUID を正しく解析できません。その結果、ソースマップの自動照合が失敗します。同じ例外内の、丸括弧を含まないチャンク URL は正常に解析されます。
これは ARMS の既知の解析上の制限です。この問題を回避するには、webpack を設定してチャンクの命名パスから括弧を除外します。たとえば、Next.js のルートグループディレクトリの名前を変更して、(groupName) 形式にならないようにします。
リリースノート
新規ユーザーまたはアップグレードを行うユーザーには、最新バージョン 1.1.0 のご使用を推奨します。バージョン 0.0.x は従来のアップロードパイプラインを使用しており、現在は推奨されていません。
バージョン | ステータス | 説明 |
| 現在推奨 | プラグイン設定オブジェクトを明示的に渡す必要があります。 |
| アップグレード推奨 | アップロードパイプラインを CMS の |
| 推奨されません | レガシーアップロードパイプラインを使用します。 |
| 推奨されません | レガシーアップロードパイプラインを使用しています。リージョン選択と STS トークンサポートを追加しました。 |
| 推奨されません | レガシーアップロードパイプラインを使用しています。プロジェクトのビルド後にソースマップを自動アップロードする機能を追加しました。 |
| 推奨されません | レガシーアップロードパイプラインを使用しています。Webpack と Vite をサポートしました。UUID を注入し、JavaScript ファイルと対応するソースマップファイルの間に双方向リンクを作成します。 |
0.0.x から 1.1.0 にアップグレードする場合:
Webpack または Vite プラグインに設定オブジェクトを明示的に渡し、必須フィールドをすべて設定する必要があります。
既存の設定で
pidを使用している場合は、serviceIdに置き換えてください。プラグインではデフォルト値が提供されなくなったため、
versionとregionを明示的に設定する必要があります。0.0.xからアップグレードすると、CMS OpenAPI アップロードパイプラインが使用されます。このドキュメントの説明に従って、workspace、serviceId、および AccessKey 認証を設定してください。