RORK LABEN
SDK57 — Expo SDK 57 が公開され、React Native が 0.85 から 0.86 に上がりました。React 19.2 は据え置きで、破壊的変更はない想定ですCADENCE — 大きな更新の合間に、壊れない小さな更新を挟む新しいリリース間隔への移行がうかがえます。追従の負担が読みやすくなりますRN086 — React Native 0.86 では Android の edge-to-edge 対応の修正、DevTools のライト/ダーク切り替え、描画・レイアウト・アニメーションの改善が入りましたPREBUILD — expo prebuild にネイティブディレクトリの消去と再生成の改善が入り、expo-dev-client も iOS 側が強化されていますIOS27 — iOS 27 は 7月20日に beta 4、7月22日からパブリックベータが配信されています。秋の正式版に向けて生成したアプリの動作確認を進める時期ですAND17 — Android 17 から従来の Developer Preview が廃止され、継続更新される Canary ビルドに一本化されましたSDK57 — Expo SDK 57 が公開され、React Native が 0.85 から 0.86 に上がりました。React 19.2 は据え置きで、破壊的変更はない想定ですCADENCE — 大きな更新の合間に、壊れない小さな更新を挟む新しいリリース間隔への移行がうかがえます。追従の負担が読みやすくなりますRN086 — React Native 0.86 では Android の edge-to-edge 対応の修正、DevTools のライト/ダーク切り替え、描画・レイアウト・アニメーションの改善が入りましたPREBUILD — expo prebuild にネイティブディレクトリの消去と再生成の改善が入り、expo-dev-client も iOS 側が強化されていますIOS27 — iOS 27 は 7月20日に beta 4、7月22日からパブリックベータが配信されています。秋の正式版に向けて生成したアプリの動作確認を進める時期ですAND17 — Android 17 から従来の Developer Preview が廃止され、継続更新される Canary ビルドに一本化されました
記事一覧/開発ツール
開発ツール/2026-07-28上級

prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し

Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。

Rork522Expo152prebuild2config plugin2Expo SDK 57アップグレード2ネイティブコードReact Native214

プレミアム記事

Expo SDK 57 が公開され、React Native が 0.86 へ上がりました。破壊的変更がない想定と告知されているので、追従そのものは軽く済みそうです。

それでも、個人開発で運用している Rork 生成アプリのひとつに expo prebuild --clean を打つ前、ひとつ確かめておきたいことがありました。

ios/ に自分で入れた手入れが、いくつあるのか。

Rork が吐くのはコード所有型のプロジェクトです。生成された ios/ を Xcode で開き、リンカフラグを1つ足し、AppDelegate に SDK の初期化を1行差し込む。そういう小さな手入れは、入れた瞬間には覚えていても、三ヶ月経つと忘れます。そして --clean はそれを問答無用で消します。

そこで、消えるものだけを数える仕組みを作りました。作ってみると、事前の見立てとはかなり違う数字が出てきました。

「差分が多いから危ない」は成り立たない

検証用に、prebuild が2回吐いた ios/ ツリーを模したフィクスチャを組みました。ソース320本相当、project.pbxproj は331行。片方(baseline)は素の生成物、もう片方(current)には現実によくある手入れを3つだけ入れてあります。

手入れの場所内容
MyApp/AppDelegate.mm[FIRApp configure]; を1行挿入
MyApp/Info.plistNSCameraUsageDescription を追加
MyApp.xcodeproj/project.pbxprojOTHER_LDFLAGS = "-ObjC" を追加

実質的な変更は3行。これに素の diff をかけると、こうなりました。

$ diff -rq ./baseline ./current | wc -l
6

$ diff -r ./baseline ./current | grep -c '^[<>]'
653

$ wc -l < ./baseline/MyApp.xcodeproj/project.pbxproj
331

$ diff ./baseline/.../project.pbxproj ./current/.../project.pbxproj | grep -c '^[<>]'
641

331行のファイルに、641行の差分。両側のほぼ全行が「変わった」と報告されています。

原因は pbxproj の objectID です。Xcode のプロジェクトファイルは各オブジェクトを24桁の16進数で識別しており、この値は再生成のたびに総入れ替えになります。内容が1文字も変わっていなくても、全行が別物として並びます。

つまり差分の量は、危険度を何ひとつ表していません。653行の海の中に、本当に守るべき3行が沈んでいる。走査対象に絞った649行で見ても、意味を持つのは 0.46% です。この比率を先に知らないまま --clean を打つと、消えたことにすら気づけません。

除外するもの、正規化するもの

数える前に、対象を絞ります。判断は2段階です。

そもそも見ない(差分を見る価値がないディレクトリ)

  • Pods/pod install の産物です。守るべき情報は Podfile 側にあります
  • build/ DerivedData/ .gradle/ app/build/ — ビルド中間物
  • xcuserdata/ — Xcode の UI 状態。開いた人ごとに毎回変わります

見るが、揺れを潰す(意味を持たない表現の正規化)

正規化ルール対象置換後
pbxproj objectID24桁の16進数<OBJID>
CocoaPods チェックサム40桁の16進数<SHA1>
生成時刻ISO 8601 形式の日時<TIME>
絶対パス/Users/… /home/…<PATH>

絶対パスを入れているのは、マシンを移ったときやチームで共有したときに効くためです。CI のコンテナと手元の Mac ではホームディレクトリが違い、それだけで xcconfig が全面的に「変わった」ことになります。

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

この記事の続きを読む

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

この記事で得られること
ios/ の差分649行のうち実質的な手入れは3行だけでした。何を除外し何を正規化すれば残り646行のノイズが消えるのかを、ルールを1つずつ外したアブレーション実測で示します
再生成で失われる変更だけを数え、1件でもあれば exit 1 を返すスクリプト全文を掲載しました。320ソース規模のツリーで0.04秒。アップグレード前のゲートとしてそのまま置けます
数え上げた手入れを config plugin へ移し替える実装まで通します。冪等性の担保と、アンカーが消えたときに警告ではなく停止させる理由を、実際の検証出力とともに説明します
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-05-30
Rork で書き出したアプリの native 設定を Expo config plugin で一元管理する
prebuild のたびに消える AdMob ID や ATT 文言を手で書き直していませんか。Rork で書き出したアプリの native 設定を、自作の Expo config plugin で再現可能にし、6本の壁紙アプリで共有した実装記録です。
開発ツール2026-07-27
最低サポート iOS をいつ上げるか — 利用率ではなく、コードに残った分岐の数で決める
最低サポート OS の引き上げを利用率で判断すると、毎年同じ結論になって先送りが続きます。OS 分岐に注記を付けて棚卸しし、引き上げ先ごとに消せる分岐を数えるスクリプトと、引き上げ後に見る指標をまとめました。
開発ツール2026-07-26
iOS プレリリース版の端末を計測から外して失敗した記録 — 除外ではなく分離するトラック設計
OS のプレリリース版を使う端末を計測から除外した結果、正式リリース当日に手掛かりを失いました。除外ではなく os_track で分離し、閾値とリリースゲートを分ける設計を実装コードとともにまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →