◉RORK LABEN
●GPT6.1 — Rork のモデルメニューに GPT-6.1 Sol が加わりました(9月29日)。changelog の最新エントリです●10/12 — React Native 0.88.x の正式リリース予定まで残り7日。Expo SDK 58 の安定版は、10月上旬としか示されていません●NEW — すでに「有効」になっている複数シート購入を、10月22日の前に残すか外すか決める●SDK 58 — 新規プロジェクトで npm install が通らない問題の修正 PR(#50998)が審査中です。安定版の日付はまだ示されていません●SONNET — Rork に Claude Sonnet 5.5 が入りました(9月28日)。Sonnet 5 より出力が30%超速いと説明されています●iOS 27 — 2027年4月から、App Store へのアップロードは iOS 27 SDK が必須になります。ビルド環境の更新は余裕を持って進められます●GPT6.1 — Rork のモデルメニューに GPT-6.1 Sol が加わりました(9月29日)。changelog の最新エントリです●10/12 — React Native 0.88.x の正式リリース予定まで残り7日。Expo SDK 58 の安定版は、10月上旬としか示されていません●NEW — すでに「有効」になっている複数シート購入を、10月22日の前に残すか外すか決める●SDK 58 — 新規プロジェクトで npm install が通らない問題の修正 PR(#50998)が審査中です。安定版の日付はまだ示されていません●SONNET — Rork に Claude Sonnet 5.5 が入りました(9月28日)。Sonnet 5 より出力が30%超速いと説明されています●iOS 27 — 2027年4月から、App Store へのアップロードは iOS 27 SDK が必須になります。ビルド環境の更新は余裕を持って進められます
記事一覧/開発ツール
⬡ 開発ツール/2026-06-28上級

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

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

Rork575Expo212Sentry6Hermes8ソースマップクラッシュ解析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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

⬡ 開発ツール2026-09-21
exit code 0 で止まるビルド — ログを黙らせていた設定と、空ファイルを通した存在チェック
eas build --local が exit code 0 but produced no further output で止まる件と、0 バイトのスタブが埋め込まれず dyld で落ちる件。どちらも原因は出力を減らす設定でした。自分のスクリプトを棚卸しする手順まで書き残します。
⬡ 開発ツール2026-09-07
.easignore を置くと .gitignore は読まれなくなります — EAS Build に上がるファイルを手元で数える
EAS Build がアップロードする範囲は .gitignore で決まり、.easignore を置いた時点で入れ替わります。同梱ファイルを送信前に数える手順と、親ディレクトリを除外すると感嘆符では戻せないという実測結果をまとめました。
⬡ 開発ツール2026-09-05
Widget Extension でも BGTaskScheduler.submit は成功します。走らないのは register が親アプリだけのものだからです
Widget Extension から BGTaskScheduler に依頼を出すとビルドも submit も通るのに、翌朝ウィジェットは変わりません。register がホストアプリ専用である事実から、更新の主語を親アプリへ戻す設計まで、壁紙アプリの運用で詰めた手順を残します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます