ドキュメント概要

エラーの調査とスタックトレースの復元

失敗した更新とイベントを特定し、同じビルドで生成したソースマップからエラーの発生箇所を調べます。

更新日 2026-09-14

目次

この順序で診断します

  1. 影響を受けるデバイスで getUpdateMetadata().currentVersion を使用して アップデートを特定します。記録時間とネイティブバージョン。

  2. 単なるスクリーンショットではなく、キャプチャされた JS エラーまたは既存のクラッシュ レポーターから スタックを収集します。

  3. 正確な .ppk ビルドから 一致するマップを見つけます。新しく再構築されたマップは代わりにはなりません。

  4. ソースの場所をシンボル化して検証し、新しいリリースを修正してテストします。

なぜそれが重要なのか

最も恐ろしい OTA シナリオ: アップデートはすでにユーザーのデバイスにあり、一部のモデルでは画面が真っ白になり、「ユーザーは開かないと言う」だけです。 Pakta は、JS エラー報告パイプラインを SDK に構築します。エラーが発生すると、アクティブな更新 ID (appKey、ネイティブ パッケージ バージョン、アクティブな更新ハッシュ) とともに報告されるため、「どのバージョンが失敗しているか」が 1 つのクエリ可能なフィールドになります。

自動レポート

初期化後、SDK は React Native のグローバル ErrorUtils にチェーンします。これは既存のハンドラーを置き換えるのではなく、その後に実行されます。

  • キャッチされなかった JS 例外は自動的に報告されます。

  • 報告されたペイロード: エラー メッセージ、JS スタック、更新 ID および基本的なデバイス情報。

  • レポートは、テレメトリの更新と同じサービス構成を共有します。

JS エラー報告のみをオプトアウトするには:

tsx
const updateClient = new Pakta({
  appKey,
  disableErrorReporting: true, // disable JS error reporting only
  // disableTelemetry: true,   // also disable update lifecycle telemetry
});

手動キャプチャ

キャッチされた例外 (API レイヤーで試行/キャッチしたものなど) はデフォルトでは報告されません。重要な場合は明示的に送信してください。

tsx
// Reuse the existing client created outside the root component.

try {
  await riskyCheckout();
} catch (error) {
  client.captureException(error, { context: 'checkout' });
}

コンテキスト オブジェクトはエラーと一緒に保存されます。デバッグ中に必要なビジネス識別子を入れます。

クラッシュ プラットフォームの相関関係

ネイティブ クラッシュと ANR は JS パイプラインの外に存在します。それらを Sentry / Crashlytics に渡し、Pakta が アクティブな更新 ID をこれらのレポートに挿入します。

tsx
import * as Sentry from '@sentry/react-native';
import { attachToSentry } from 'rn-update';

// Call after existing Sentry initialization, passing the reporter.
attachToSentry(Sentry);

Sentry ボードを pakta.currentVersion でフィルターすると、「これらのクラッシュがクラスターに発生するホット アップデートのバージョン」に答えることができます。

記号

bundle はデフォルトでソースマップを生成します。 publish --sourcemap を使用してアーカイブし、CLI を使用して実稼働スタックをソース位置に戻します。

bash
pakta symbolicate stack.txt --platform android --hash <UPDATE_HASH>

getUpdateMetadata().currentVersion から hash を取得します。Hermesのソースマップはバンドル時に生成されます。設定方法はCLIの診断オプションを参照してください。

ソースの場所が見つからない場合

publish --sourcemap が正常にアーカイブされたこと、ハッシュが失敗した更新に属していること、およびプラットフォームが一致していることを確認してください。埋め込みバンドルには空の currentVersion があり、ネイティブ ビルド マッピング ワークフローが必要です。元のマップがないと、正確なソースの回復は保証されません。