RORK LABEN
ENGINE — Rork Maxのコード生成はClaude CodeとClaude Opus 4.6を土台にしています。プロンプトの粒度を考えるうえで押さえておきたい前提ですSPLIT — Rork MaxはAppleプラットフォーム専用です。Androidも必要なら、React Nativeでクロスプラットフォームを生成する従来のRorkを選ぶことになりますDEVICE — Rork MaxはiPhone・iPad・Apple Watch・Vision Proを対象にできます。React Nativeからは届きにくかった領域まで生成対象に入りますCREDIT — 課金はクレジット制で、AIとのやり取り1回につき1クレジットを消費します。毎月1日にリセットされ、繰り越しはできませんPLAN — 無料は月35クレジット(1日5)、Juniorは月$25、Seniorは月$100、Rork Maxは月$200です。MVPの作り込みはSeniorが目安とされていますFUND — Rorkはa16zから280万ドルを調達し、月間743,000件を超える訪問を集めていますENGINE — Rork Maxのコード生成はClaude CodeとClaude Opus 4.6を土台にしています。プロンプトの粒度を考えるうえで押さえておきたい前提ですSPLIT — Rork MaxはAppleプラットフォーム専用です。Androidも必要なら、React Nativeでクロスプラットフォームを生成する従来のRorkを選ぶことになりますDEVICE — Rork MaxはiPhone・iPad・Apple Watch・Vision Proを対象にできます。React Nativeからは届きにくかった領域まで生成対象に入りますCREDIT — 課金はクレジット制で、AIとのやり取り1回につき1クレジットを消費します。毎月1日にリセットされ、繰り越しはできませんPLAN — 無料は月35クレジット(1日5)、Juniorは月$25、Seniorは月$100、Rork Maxは月$200です。MVPの作り込みはSeniorが目安とされていますFUND — Rorkはa16zから280万ドルを調達し、月間743,000件を超える訪問を集めています
記事一覧/開発ツール
開発ツール/2026-06-12上級

アップデートでお気に入りを消さないために — Rork 製アプリのローカルデータ・マイグレーション設計

「アップデートしたらお気に入りが消えた」という星1レビューを受け取らないための設計です。封筒形式とスキーマバージョン、マイグレーションランナーの実装、EAS Update をスキーマ中立に保つ運用ルールまでを実体験から整理しました。

Rork521AsyncStorage10データ移行2EAS Update6長期運用11

プレミアム記事

去年の冬、運用中の壁紙アプリをアップデートした翌朝、星1のレビューが2件届いていました。文面はどちらもほぼ同じです。「お気に入りが全部消えた」。

原因は、保存形式の変更でした。お気に入りを AsyncStorage に壁紙 ID の配列(string[])として保存していたものを、追加日時を持たせたオブジェクトの配列に変えたのです。新しいコードは新しい形しか読めず、旧形式のデータを初期値で上書きしました。ユーザーが何ヶ月もかけて集めたお気に入りは、私が書いた10行ほどの変更で消えたことになります。

サーバーのデータベースなら、こうはなりません。マイグレーションを書き、デプロイ前に流し、失敗したらロールバックする。その規律が当たり前のものとして共有されています。ところが端末の中のローカルデータには、同じ規律を持ち込まないまま運用してしまっているアプリが意外なほど多いのです。私自身のアプリも、そうでした。

この出来事のあと、私は Rork で作るアプリすべてに共通のマイグレーション層を入れる設計へ切り替えました。ここに書くのは、その実装の全文と、複数アプリを長く運用する中で固まった運用ルールです。

ローカルデータがサーバー DB より壊れやすい理由

サーバー DB のマイグレーションは「1つのデータベース」に「1回」適用すれば終わります。ローカルデータは違います。ユーザーの端末の数だけデータベースがあり、それぞれが別々のタイミングで、別々のバージョンから移行してきます。3世代前のバージョンから一気に最新へ上げる端末も、珍しくありません。

しかも、こちらからは触れません。SSH できる本番サーバーは存在せず、壊れたデータを直す手段は「次のアップデートに修復コードを同梱する」ことだけです。修復コードが届く頃には、ユーザーはとっくにアプリを消しているかもしれません。個人開発では、その問い合わせを受ける窓口も自分です。

Expo 基盤の Rork 製アプリには、もう1つ固有の事情があります。EAS Update による OTA 配信です。ストア審査を通さずに JS だけを差し替えられるのは大きな利点ですが、「コードは新しく、データは古い」という状態が発生する頻度も上がります。さらに OTA はロールバックも一瞬なので、「コードは古く、データは新しい」という逆向きの不整合まで起こり得ます。

そして Rork のような AI ビルダーで開発していると、状態の形そのものが頻繁に変わります。「お気に入りに追加日時を持たせてください」と一言頼めば、Rork は型も UI も一気に書き換えてくれます。ただし、端末に既に保存されている旧形式のデータのことは、こちらが言わなければ考慮してくれません。コードを変える速度が上がるほど、データとコードの形がずれる機会は増えます。ローカルデータの規律を最初に整えておくべき理由は、ここにあります。

設計の核は整数1つ — 封筒形式とスキーマバージョン

私が全アプリで採用しているのは、保存する JSON を必ず「封筒」に入れるという単純な決まりです。

{ "v": 3, "data": [{ "id": "w_201", "addedAt": 1749690000000 }] }

中身(data)の形は何度でも変わって構いません。その代わり、形を変えるときは封筒のバージョン番号 v を1つ上げ、「v2 の data を v3 の data に変換する関数」を必ず1本書きます。読み込み時は、保存されていた v から現在の v まで変換関数を順番に適用する。設計はこれだけです。

ポイントは、バージョンをキー名に埋め込まないことです。favorites_v2 のようなキーを切り始めると、古いキーの掃除と移行の管理が二重になり、どのキーが正なのかを誰も言えなくなります。キーは1つに固定し、封筒の中の整数だけを進める。この形がいちばん事故が起きにくいと感じています。

なお、AsyncStorage・MMKV・SQLite のどれを選ぶかという手前の話はローカルストレージ3種の使い分けを整理した記事に書きましたので、ここでは「選んだ後」にデータをどう守るかに集中します。

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

この記事の続きを読む

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

この記事で得られること
AsyncStorage を封筒形式+整数バージョンで守るマイグレーションランナーの完全な TypeScript 実装
EAS Update(OTA)にスキーマ変更を載せない運用境界と、その根拠になったロールバック事故のシナリオ
退避データの保持期間・旧マイグレーション関数の削除時期をデータで決める計測手法
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-07-05
Rork 製アプリの expo-sqlite で、テーブル構造を変えてもデータを消さない — PRAGMA user_version で作る順次マイグレーション
「no such column」で起動直後に落ちる。テーブル構造を変えた新バージョンを既存ユーザーに配ると起きる事故です。expo-sqlite の PRAGMA user_version を使い、カラム追加・テーブル再構築・外部キーを含むスキーマ変更をユーザーデータを守りながら順に適用する設計を、実装の全文と運用ルールとしてまとめました。
開発ツール2026-07-27
最低サポート iOS をいつ上げるか — 利用率ではなく、コードに残った分岐の数で決める
最低サポート OS の引き上げを利用率で判断すると、毎年同じ結論になって先送りが続きます。OS 分岐に注記を付けて棚卸しし、引き上げ先ごとに消せる分岐を数えるスクリプトと、引き上げ後に見る指標をまとめました。
開発ツール2026-07-14
AI再生成に壊されない設計 — Rork の生成コードと手書きロジックを分ける境界の引き方
Rork へ追加指示を出すたびに手書きのロジックが消える。プロンプトで守るのは対症療法です。生成コードと自分の所有コードを層で分け、再生成が届かない境界を設計で引く方法を、Zustand と service 層の実装例つきでお伝えします。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →