◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-05-29上級

Rork × EAS Update の Runtime Version 戦略 — 6 アプリ並行運用で既存ユーザーを壊さない SDK アップグレード設計

Rork で作った 6 つのアプリを並行運用しながら Expo SDK 50→51 を段階的に上げた実装を、runtimeVersion ポリシー比較・eas.json 完全版・配信スクリプト・本番事故からの復旧手順まで一気通貫で残します。

Rork585EAS Update7Runtime VersionExpo SDKOTA7本番運用10個人開発218

✦ プレミアム記事

廣川政樹です。Dolice Labs として個人で 6 本のアプリを並行運用していますが、いちばん理解されにくく、いちばん事故に直結しているのが Expo の runtimeVersion 設定だと感じています。

きっかけは 2026 年 4 月、Rork で作った壁紙アプリのひとつを Expo SDK 50 から 51 へ上げた翌日でした。手元のシミュレータでも、本番ビルドの TestFlight でも問題なく動いていたのに、App Store で配信中の旧バージョン(SDK 50)を入れているユーザーから「アイコンの並びが昨日と変わって、お気に入りが消えた」という問い合わせが連続で 3 件届きました。原因は単純です。SDK 51 用に最適化した JS バンドルを、eas update --branch production で旧バージョンの runtimeVersion にも配信してしまっていたのです。

公式ドキュメントは「runtimeVersion を合わせる必要がある」と書いてはいますが、その「合っていない」状態がどう壊れるか、どう自動で防ぐかまでは踏み込んで書かれていません。累計 5,000 万ダウンロードを支えてきた 1 個人開発者として、6 アプリを抱えたまま SDK を上げ続けるための実装一式を、ここに置いておきます。

なぜ Runtime Version が「沈黙の地雷」になるのか

EAS Update は、JS バンドルとアセットを App Store / Google Play の審査を経ずに端末へ届けてくれます。ただし配信先は「ブランチ」ではなく「同じ runtimeVersion を持つビルド済みバイナリ」です。ここに 3 つの事実が重なります。

  1. runtimeVersion: "appVersion" を採用すると、app.json の version を上げるたびに runtimeVersion も自動で上がります。旧バージョンを保有しているユーザーは新しい OTA を受け取れません。逆もまた然りで、SDK だけ上げて version を据え置くと、Native と JS のバージョンがずれた OTA が古いネイティブに配信されます。
  2. SDK のアップグレードは React Native の Hermes バイトコードや内部ブリッジを差し替えます。SDK 51 でビルドした JS を SDK 50 のネイティブが読むと、Hermes のバージョンミスマッチで JSI 呼び出しが落ちます。シミュレータと TestFlight では再現しません。
  3. EAS Update は配信に失敗してもユーザーに通知しません。eas update 側は緑色で Published と出るのに、端末側は静かに古い JS を使い続けます。Sentry にも何も来ません。

この 3 つを抑えないまま SDK を上げると、「自分の端末では直っているのに、ユーザーからの『壊れた』報告が止まらない」という地獄が起きます。

3 つのポリシーをどう使い分けるか

runtimeVersion には大きく 3 つの設定値があります。Dolice Labs では、運用フェーズと SDK 移行の頻度に応じてアプリごとに使い分けています。

"appVersion" — リリース頻度が低いアプリ向け

app.json の version と一体運用されるため、設定ミスは起きません。ただし version を上げない限り OTA も別ランタイムにならないので、メジャーリリースの間隔が短いと「同じ version の中に複数の SDK を混ぜる」ことができず柔軟性は落ちます。私の 6 アプリのうち、月 1 本ペースでストア更新する 2 本はこれを採用しています。

sdkVersion 直接指定 — SDK 1 つを長く使い倒すアプリ向け

"runtimeVersion": "50.0.0" のように Expo SDK バージョンを書きます。SDK を上げない限り runtimeVersion はそのままなので、OTA を頻繁に出してもネイティブとずれることはありません。AdMob の収益化チューニングを月 30 回 OTA で配信している 2 本はこれを採用しています。

明示的セマンティックバージョン — 共通コードベースを 2 系統に分けるとき向け

"runtimeVersion": "2026.5.1" のような独自の番号体系で、ストアバージョンとは独立に管理します。私が iPad 専用 UI を別ランタイムで配信した時に使ったやり方です。新旧 UI を併存させ、Native 変更を伴う差分だけ別系統で動かせます。

公式は新規アプリで "appVersion" を推奨していますが、Rork で生成したコードのように JS 側の差分が頻繁に出る案件では sdkVersion 固定の方が事故率が下がる、というのが私の判断です。

✦

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

この記事の続きを読む

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

この記事で得られること
✦runtimeVersion: "appVersion" の自動採用が、SDK アップグレード時に旧バージョン保有ユーザーへの OTA 配信を静かに止める仕組みを、具体例で理解できます
✦Rork で生成した 6 つのアプリを抱えたまま Expo SDK 50→51 へ移行するための、eas.json + チャンネル命名規約 + 配信スクリプトの実装一式を持ち帰れます
✦Sentry の crash-free 率と EAS Update Webhook を連動させて 1 端末でも壊れたら配信を止める仕組みと、Native 変更を OTA に乗せてしまった本番事故からの 30 分復旧手順が手に入ります
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⬡ 開発ツール2026-05-08
Rork アプリの段階的リリース戦略 — 壊さない本番運用を作る
Rork で出したアプリの本番運用を、iOS Phased Release・Android Staged Rollout・OTA ホットフィックスの三層で守る手順です。停止の判断に使っている数値ライン、Sentry と GitHub Actions による監視、App Store Connect API から一時停止を叩く実装までをまとめました。
⬡ 開発ツール2026-04-29
Rork × MetricKit でアプリの本番品質を計測する実装ガイド
Rorkで作ったアプリの本番品質を、Apple純正のMetricKitだけで継続的に計測する設計を解説します。クラッシュ・ハング・スクロール品質・電池消費を、サードパーティSDKなしで見える化する実装パターンです。
⬡ 開発ツール2026-09-19
Rork が書き換えた箇所だけを読む — 再エクスポートのたびに回している差分確認の手順
再エクスポートしたコードを前回との差分として読むための手順です。追跡ファイルを一度消してから重ねる、雑音を外して数える、合流の前に一度止める——この3つで上書き事故を止めています。