RORK LABEN
MAX — Rork MaxがネイティブSwiftアプリを生成。iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDARスキャン、Metalの3Dゲーム、ウィジェット、Live Activities、Core MLまで踏み込めますFUNDING — Rorkがa16zから$2.8Mを調達。月間74.3万訪問・成長率85%と勢いがありますPRICING — 無料で開始でき、有料プランは月額$25から利用できますFLOW — アイデアを英語で説明すると動くコードを生成。共有リンク発行やiOS/Androidビルドに対応しますCOMPARE — 従来のRorkはExpo/React Nativeでクロスプラットフォーム。用途で使い分けられますMAX — Rork MaxがネイティブSwiftアプリを生成。iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますNATIVE — AR/LiDARスキャン、Metalの3Dゲーム、ウィジェット、Live Activities、Core MLまで踏み込めますFUNDING — Rorkがa16zから$2.8Mを調達。月間74.3万訪問・成長率85%と勢いがありますPRICING — 無料で開始でき、有料プランは月額$25から利用できますFLOW — アイデアを英語で説明すると動くコードを生成。共有リンク発行やiOS/Androidビルドに対応しますCOMPARE — 従来のRorkはExpo/React Nativeでクロスプラットフォーム。用途で使い分けられます
記事一覧/開発ツール
開発ツール/2026-06-28上級

Rork で出したアプリの本番クラッシュが minified のまま届くとき — Hermes のソースマップと debug ID を Sentry に通す

Rork が生成した Expo アプリの本番クラッシュが index.bundle:1:284913 のような数字だけで届く問題を、Hermes のソースマップと debug ID を Sentry へ正しく通して解消する手順をまとめました。

Rork465Expo117Sentry5Hermes6ソースマップクラッシュ解析3

プレミアム記事

リリース直後の本番で、Sentry に届いた最初のクラッシュが index.android.bundle:1:284913 という一行だけだったとき、私は静かに肩を落としました。再現手順も、どの画面で落ちたのかも、その数字からは何もわかりません。Rork が出してくれた React Native(Expo)アプリは Hermes で動いていて、本番のバンドルは1行に minify されています。つまり「クラッシュは取れているのに、中身が読めない」という、いちばん歯がゆい状態でした。

個人開発でアプリを長く運用していると、この「読めないスタックトレース」は必ず一度はぶつかる壁だと思います。Dolice で運用しているアプリ群でも、ネイティブ側は Crashlytics の dSYM で symbolicate していますが、Rork 由来の Expo アプリは仕組みが別物でした。鍵になるのは Hermes の ソースマップ と、それをビルドと結びつける debug ID です。ここを通せば、同じクラッシュ画面に関数名と元のファイルの行番号が戻ってきます。

なぜ Hermes だと数字しか届かないのか

Hermes は JavaScript をそのまま実行するのではなく、ビルド時に Hermes バイトコード(.hbc)へ事前コンパイルします。さらに本番ビルドでは Metro が全モジュールを1ファイルに連結し、変数名を短縮します。手元の PaywallScreen.tsx の 42 行目は、本番では1行に潰れた巨大なバンドルの「列 284913」になります。

クラッシュ時に端末から送られてくるのは、この潰れた後の位置情報だけです。元のファイル名・行番号へ戻す対応表が ソースマップ で、Hermes を使う場合は通常のソースマップに加えて Hermes 専用の合成ステップが必要になります。ここを省くと、ソースマップを上げているつもりでも symbolicate が効かない、という落とし穴にはまります。

debug ID が「同じビルドだ」と保証する

ソースマップを上げても symbolicate が崩れる原因のほとんどは、クラッシュを起こしたバンドルと、アップロードしたソースマップが別ビルドだったことです。バージョン名(1.8.0 など)で紐づけようとすると、ホットフィックスを重ねた瞬間に取り違えが起きます。

これを根本的に解決するのが debug ID です。debug ID はビルドのたびに生成される一意の識別子で、バンドルとソースマップの両方に同じ値が焼き込まれます。Sentry はクラッシュに含まれる debug ID と、アップロード済みソースマップの debug ID を突き合わせるので、バージョン名のズレに依存しません。新しい @sentry/react-native はこの方式を標準にしています。私自身、バージョン照合からこの方式に切り替えてから、symbolicate の取りこぼしがほぼゼロになりました。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
本番のスタックが index.bundle:1:284913 のまま届いて手が出せなかった人が、関数名と行番号まで読めるクラッシュ画面を今日手に入れられる
Hermes の debug ID を EAS Build とソースマップに同時に焼き込み、バージョンが少しでもズレると symbolicate が崩れる事故を防げる
OTA(EAS Update)配信ぶんのクラッシュまで symbolicate できるようになり、月数千DL規模の本番運用でも障害の一次切り分けを5分以内に始められる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-05-07
Rork で作ったアプリの「原因不明クラッシュ」を撲滅する — Error Boundary と Unhandled Promise の実戦的な捕捉法
Rork が生成したコードに頻出する「await のエラー握り潰し」と「ErrorBoundary なし」の組み合わせが原因で、本番アプリが原因不明で落ちる問題。実装で解決する手順を解説します。
開発ツール2026-06-27
無料プレビューがスクショで丸ごと持ち出される前に — Rork/Expo でスクリーンショットと画面収録を検知して目隠しする設計
Rork/Expo アプリで有料プレビュー画像をスクリーンショットと画面収録から守る実装。expo-screen-capture の限界、isCaptured のネイティブ監視、iOS/Android の差を踏まえた目隠し設計を解説します。
開発ツール2026-06-27
Rork の共有リンクで配布前に実機差分を潰す手順 — プレビューで気づけない不具合の検証順
Rork のエディタプレビューは整った環境で動くため、実機でしか出ない不具合を見逃します。共有リンクで配布する前に潰すべき7つの実機差分と検証の順番、仕込んでおくコードを実体験からまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →