RORK LABEN
APPLE — Apple のイベントは9月9日、同日に iOS 27 の RC が公開されます。正式リリースは9月14日、予約は9月12日、店頭は9月18日の見込みですTESTING — 実質的な検証期間は RC 公開から正式リリースまでの5日間です。React Native / Expo 製アプリは、この間に Xcode 27 と iOS 27 SDK で一通り動かしておきたいところですSIRI — iOS 27 は Siri が全面刷新されます。Siri Intents や音声まわりを使っているアプリは、優先して確認する対象になりますPLAY — Google Play の target API level 36 要件は8月31日に発効済みです。間に合わなかった場合も、Play Console から11月1日までの延長申請がまだ出せますEXPO — expo@57.0.17 が React Native 0.86.3 へ更新し、react-native-worklets や reanimated を使うアプリで出ていた Hermes V1 のメモリ退行が解消されましたRORK — 同じ Rork でも成果物が違います。本家 Rork は React Native(Expo)を生成し、Rork Max は Swift を生成してクラウドの Mac ファームでコンパイルしますAPPLE — Apple のイベントは9月9日、同日に iOS 27 の RC が公開されます。正式リリースは9月14日、予約は9月12日、店頭は9月18日の見込みですTESTING — 実質的な検証期間は RC 公開から正式リリースまでの5日間です。React Native / Expo 製アプリは、この間に Xcode 27 と iOS 27 SDK で一通り動かしておきたいところですSIRI — iOS 27 は Siri が全面刷新されます。Siri Intents や音声まわりを使っているアプリは、優先して確認する対象になりますPLAY — Google Play の target API level 36 要件は8月31日に発効済みです。間に合わなかった場合も、Play Console から11月1日までの延長申請がまだ出せますEXPO — expo@57.0.17 が React Native 0.86.3 へ更新し、react-native-worklets や reanimated を使うアプリで出ていた Hermes V1 のメモリ退行が解消されましたRORK — 同じ Rork でも成果物が違います。本家 Rork は React Native(Expo)を生成し、Rork Max は Swift を生成してクラウドの Mac ファームでコンパイルします
記事一覧/開発ツール
開発ツール/2026-09-02中級

expo のパッチを1つ上げると、expo install の推奨が何個動くのかを数えました

expo install が推奨するバージョンは expo 本体のパッチ版に紐づいています。npm レジストリの実データで台帳の差分を数え、npm install が外す幅と、生成直後のプロジェクトに置く検査を示します。

Expo195Rork549依存管理2npm4CI6

プレミアム記事

生成されたプロジェクトにリスト表示を足したくて、FlashList を追加しました。手癖で npm install @shopify/flash-list と打ちました。ビルドは通り、リストも動きました。数日後に npx expo-doctor を回したら、そこだけ赤くなっていました。

入っていたのは 2.3.2 で、Expo が想定していたのは 2.0.2 でした。マイナーが 3 つ離れています。この差はエラーにならず、警告も出ません。検査を明示的に回した日にだけ見えます。

気になったのは「Expo は何を根拠に 2.0.2 と言っているのか」でした。調べてみると、その根拠は expo パッケージ本体の中に入っていて、しかもパッチ更新のたびに書き換わっていました

expo install が参照している台帳の場所

npx expo install <パッケージ> は npm の latest を取ってきません。インストール済みの expo パッケージに同梱された bundledNativeModules.json を読み、そこに書かれたバージョンを入れます。

# 台帳の実体はここにあります
cat node_modules/expo/bundledNativeModules.json | head -20

2026-09-02 時点の expo@57.0.19 では、この台帳に 123 エントリが載っていました。内訳は Expo 自前のモジュール(expo-*@expo/*)が 87 件、それ以外のサードパーティが 36 件です。

サードパーティ側には Sentry、Stripe、FlashList、Skia、Lottie、react-native-mapsreact-native-webview、AsyncStorage といった、実務でまず入れるものが並んでいます。つまり expo install は Expo 製モジュールだけを面倒見ているのではなく、主要なコミュニティ製ライブラリについても「この SDK ではこの版で検証しました」という表明を持っています

npm install はこの表明を一切見ません。同じ名前のパッケージを、レジストリの最新版で入れます。ここが最初の分岐点です。

パッチ2つ分、4日間で 30 エントリが動いていました

台帳が SDK ごとに固定されているなら話は簡単です。実際は違いました。expo のパッチ版ごとに中身が書き換わります。

npm レジストリから複数のパッチ版の tarball を取得し、台帳だけを取り出して差分を数える小さなスクリプトを書きました。

// drift.mjs — 2つの expo パッチ版の台帳を突き合わせ、動いたエントリ数を出す
import { readFileSync } from "node:fs";
 
const read = (v) =>
  JSON.parse(readFileSync(`x${v}/package/bundledNativeModules.json`, "utf8"));
 
const [from, to] = process.argv.slice(2);
const a = read(from), b = read(to);
 
const moved = Object.keys(a).filter((k) => k in b && a[k] !== b[k]);
const pinned = Object.entries(b).filter(([, r]) => /^\d/.test(r)); // ~ も ^ も付かない厳密固定
 
console.log(`台帳のエントリ数: ${Object.keys(b).length}`);
console.log(`${from} → ${to} で動いたエントリ: ${moved.length}`);
console.log(`厳密固定(範囲指定なし): ${pinned.length} 件`);

実行結果です。

$ node drift.mjs 57.0.17 57.0.19
台帳のエントリ数: 123
57.0.17 → 57.0.19 で動いたエントリ: 30
厳密固定(範囲指定なし): 22 件

57.0.17 の公開は 2026-08-26(UTC。JST では 8月27日)、57.0.19 は 2026-09-01 です。4日ほどの間隔で、123 件のうち 30 件の推奨バージョンが動いていました

範囲を広げるとさらに大きくなります。7月22日公開の 57.0.857.0.17 を比べると、動いたのは 54 件でした。同じ SDK 57 の中の話です。

参考までに、expo の 57 系パッチがどの間隔で出ているかも取っておきました。

バージョン公開日(UTC)
57.0.142026-08-17
57.0.152026-08-20
57.0.162026-08-24
57.0.172026-08-26
57.0.182026-08-28
57.0.192026-09-01

3〜4日おきです。package.json"expo": "~57.0.19" と書いてある以上、チルダは 57.0.x のパッチを許します。lock ファイルを作り直した日によって、expo install の答えが変わるということになります。

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

この記事の続きを読む

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

この記事で得られること
生成されたプロジェクトに後から足した依存が Expo の検証範囲に収まっているかを、自分の手で確かめられるようになる
手元と CI で依存が食い違ったときに、lock ファイルを疑って半日溶かす前に切り分けられるようになる
expo 本体のパッチ更新で推奨が 30 件動くという実測をもとに、パッチ上げを無害な小変更として扱うかどうかを自分で決められるようになる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-07-30
Renovate が触ってよい依存と、触ってはいけない依存 — Expo SDK 57 の123パッケージを機械的に切り分ける
Rork 生成アプリに依存の自動更新を入れると、Expo が版を管理している123パッケージまで巻き込まれます。2026年7月30日時点の実測では、うち6件が npm の最新版へメジャー更新される差でした。除外リストを手で書かず SDK から機械生成する手順をまとめます。
開発ツール2026-07-09
生成のたびに崩れるレイヤ境界を、CIで守る — Rork製Expoアプリの依存ルール機械化
Rorkが生成したExpoアプリを長く運用すると、画面から直接APIクライアントを叩くimportが静かに増えていきます。ESLintのゾーン制約とdependency-cruiserで依存の向きを機械化し、CIで落とすまでの実装を残します。
開発ツール2026-03-30
Rork アプリの Expo 依存関係エラー解決ガイド
Rorkで生成したアプリで起きるExpo依存関係エラーを症状別に解決します。package.jsonのバージョン固定、node_modulesのクリーンインストール、互換性チェックと自動修復、SDKアップグレード時の注意点、Fix Now機能の活用まで3つのStepで対処します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →