Article by:
Expo アプリからのイベントは、React Native アプリ全体のイベント量の約 75% を占めています。この数値を受けて、Expo アプリのデバッグとパフォーマンスのワークフローを改善するために、Sentry React Native SDK への投資を行うことは自然な判断でした。
このアップデートにより、以下が可能になります。
- OTA アップデートのチャンネルやバージョンでイシューをフィルタリングし、特定のアップデートに起因する問題かどうかを即座に絞り込む
- 緊急リリースに対するアラートを受け取り、ユーザーから報告される前に OTA パイプラインの障害を検知
- EAS Build の健全性を Sentry 上で追跡できるため、ビルドログを辿ることなく問題の発生箇所を特定
- ナビゲーションパフォーマンス全体を可視化し、プリフェッチのタイミングやアセット読み込みまで含めて確認
自動 OTA 更新コンテキストの付与
Expo Updates を使った OTA 配信では、適切なコンテキストがないと問題の原因が見えづらくなります。どの update channel だったのか、どの runtime version だったのか、埋め込みバンドルだったのか、それともダウンロードされた更新だったのか、といった情報です。
今回のアップデートでは、すべての Sentry イベントに ota_updates コンテキストが自動で付与されます。追加設定は不要です。update ID、channel、runtime version、起動時間、埋め込みアセットの使用有無などが取得できます。これらは Expo プロジェクトで標準で収集されます。
さらに、すべてのイベントには検索可能なタグ(expo.updates.channel、expo.updates.runtime_version、expo.updates.update_id)も付与されるため、特定のチャンネルやアップデートに絞ったフィルタリングを簡単に行えます。

緊急起動の検知
Expo Updates は最新の OTA アップデートの読み込みに失敗した際にエマージェンシー起動を行い、埋め込みバンドルへフォールバックします。この状態では、ユーザーは古いバージョンのアプリを静かに使い続けている可能性があり、開発側もそれに気づけない場合があります。
今回の SDK では、起動時にエマージェンシー起動を検知し、その理由とともに warning レベルのイベントを自動的に Sentry へ送信します。これにより、expo.updates.emergency_launch タグを使ってアラートを設定でき、プロダクション環境でアップデートパイプラインが壊れた瞬間に即座に把握できます。

EAS Build フック: Sentry でビルド失敗を追跡
EAS Build のビルド失敗はリモートインフラ上で発生するため、ローカル環境やアプリ内部からは見えません。これまでは、EAS のビルドログを手動で確認する必要がありました。
新しい EAS Build Hooks を使うと、ビルドのライフサイクルイベントを直接 Sentry に送信できます。package.json に3つのスクリプトエントリを追加するか、on-complete フックを使えば1つの設定でも構いません。これにより、すべての失敗したビルドは EASBuildError イベントとして送信され、ビルドプラットフォーム、プロファイル、ビルド ID、Git コミットハッシュ、CI ステータスなどが含まれます。
成功したビルドも送信できるため、ビルドパイプライン全体の健全性を Sentry 上で一貫して把握できます。すべてのイベントには eas.* タグが付与され、フィルタリングやアラート設定も容易です。
セットアップは最小限です。SDK が提供するスクリプトをフックに指定し、DSN を EAS シークレットとして設定するだけで完了します。詳細は EAS Build Hooks のドキュメントを参照してください。
Expo Router のプリフェッチに対するパフォーマンススパン
Expo Router v5 では router.prefetch() により、ユーザーの画面遷移前にルートをプリロードできるようになりました。体感速度の向上には有効ですが、これまでプリフェッチのタイミングはトレース上で可視化されていませんでした。
Sentry.wrapExpoRouter(useRouter()) でルーターをラップすると、navigation.prefetch スパンが生成され、プリフェッチごとの実行時間を他のナビゲーションスパンと並べて確認できます。これにより、プリフェッチが遅いルートや不要なプリフェッチを特定できます。
Expo constants と環境コンテキスト
Expo アプリから送信されるすべてのイベントには、自動で expo_constants コンテキストが付与されます。ここには実行環境のメタデータが含まれます。例えば、Expo Go か standalone か bare かといった実行形態、app.json 由来のアプリ名とバージョン、Expo SDK バージョン、EAS project ID、デバッグモードの状態などです。
OTA update のコンテキストと組み合わせることで、追加設定なしで各イベントの実行環境を完全に把握できます。
画像とアセット読み込みのインストルメンテーション
画像やアセットの読み込みは、アプリ体験の速度に大きく影響する要素です。Expo の主要パッケージに対して、自動パフォーマンススパンを追加しました。
- expo-image: Sentry.wrapExpoImage(Image) を起動時に一度だけ適用すると、Image.prefetch() と Image.loadAsync() に対してスパンが生成されます。
- expo-asset: Sentry.wrapExpoAsset(Asset) を適用すると Asset.loadAsync() に対してスパンが記録されます。
どちらのラッパーも複数回呼び出しても安全で、トレースが存在する場合のみスパンを生成するためオーバーヘッドはありません。また expo-image や expo-asset が未インストールでも動作します(peer dependency)。
セットアップ
OTA update と constants コンテキストはデフォルトで有効です。追加設定や依存関係は不要です。ビルドフックやパフォーマンス計測については数行のコードでセットアップできます。最新の改善と修正を利用するにはバージョン 8.10 にアップデートしてください。
Expo では、EAS デプロイメントで発生したエラーについて、Sentry のイシュー詳細やリプレイを参照することも可能です。
まだ Sentry アカウントを持っていない場合は無料でサインアップできます。デベロッパープランには Expo アプリのエンドツーエンド計測に必要な機能がすべて含まれています。今回の統合に関するフィードバックや次に追加してほしい機能があれば、getsentry/sentry-react-native に issue を作成するか、Discord に参加してください。
Original Page: Improved debugging for Expo apps with the React Native SDK
IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談は「お問い合わせ」からお気軽にお問い合わせください。

