RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-05-29上級

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

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

Rork515EAS Update6Runtime VersionExpo SDK2OTA6本番運用10個人開発186

プレミアム記事

廣川政樹です。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.jsonversion を上げるたびに 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.jsonversion と一体運用されるため、設定ミスは起きません。ただし 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-06-28
EAS Update を少人数から配り、クラッシュ率で自動的に止める
OTA 更新は一瞬で全員に届くからこそ、悪い更新も一瞬で全員に届きます。EAS Update を少人数(カナリア)から配り、クラッシュ率を見て広げるか止めるかを自動で判断し、最後は端末側で安全網を張る設計を、動くコードでまとめます。
開発ツール2026-06-24
EAS Update を入れたのに『直したはずのバグ』が消えないとき — OTA が静かに届かない原因と運用メモ
EAS Update を導入しても OTA が一部のユーザーに届かないことがあります。runtimeVersion のドリフト、配信したのに採用されない更新、安全なロールバックの選び方を、Rork アプリの運用で実際に効いた計装とともに整理します。
開発ツール2026-05-08
Rork アプリの段階的リリース戦略 — Phased Release・Staged Rollout・Hotfix を組み合わせて『壊さない本番運用』を作る
Rork で出したアプリの本番運用を、iOS Phased Release・Android Staged Rollout・OTA ホットフィックスの三層で守る方法を、判断基準と監視自動化のコード付きで解説します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →