RORK LABEN
FUNDING — Rorkが$15Mのシード資金調達を完了。Left Lane Capitalが主導し、Peak XV・True Ventures・Goodwater・a16z Speedrunが参加しましたUSERS — 利用者は200万人に達し、月間74.3万訪問・成長率85%と伸び続けていますMAX — Rork MaxはネイティブSwiftアプリを生成し、iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますSTACK — 通常のRorkはReact Native(Expo)でiOSとAndroidを同時に生成し、非エンジニアでも実機アプリを作れますPRICE — 料金は無料から用意され、有料プランは月$25から、Rork Maxは月$200ですMARKET — Gartnerは2026年末までに新規アプリの75%が低コード/ノーコード製になると予測していますFUNDING — Rorkが$15Mのシード資金調達を完了。Left Lane Capitalが主導し、Peak XV・True Ventures・Goodwater・a16z Speedrunが参加しましたUSERS — 利用者は200万人に達し、月間74.3万訪問・成長率85%と伸び続けていますMAX — Rork MaxはネイティブSwiftアプリを生成し、iPhone・iPad・Watch・TV・Vision Pro・iMessageに対応しますSTACK — 通常のRorkはReact Native(Expo)でiOSとAndroidを同時に生成し、非エンジニアでも実機アプリを作れますPRICE — 料金は無料から用意され、有料プランは月$25から、Rork Maxは月$200ですMARKET — Gartnerは2026年末までに新規アプリの75%が低コード/ノーコード製になると予測しています
記事一覧/開発ツール
開発ツール/2026-07-05上級

Rork 製アプリの expo-sqlite で、テーブル構造を変えてもデータを消さない — PRAGMA user_version で作る順次マイグレーション

「no such column」で起動直後に落ちる。テーブル構造を変えた新バージョンを既存ユーザーに配ると起きる事故です。expo-sqlite の PRAGMA user_version を使い、カラム追加・テーブル再構築・外部キーを含むスキーマ変更をユーザーデータを守りながら順に適用する設計を、実装の全文と運用ルールとしてまとめました。

Rork485expo-sqliteデータ移行2SQLite3長期運用6

プレミアム記事

新しいバージョンを配信した直後、Crashlytics に見覚えのないクラッシュが並びました。文面は no such column: added_at。手元のシミュレータでは一度も出ていません。落ちているのは、前のバージョンからアップデートしてきた既存ユーザーの端末だけでした。

原因はすぐに分かりました。新しいコードは SELECT id, wallpaper_id, added_at FROM favorites を実行します。ところが既存ユーザーの端末にある SQLite ファイルには、added_at という列がまだありません。新規インストールのユーザーは、アプリが最初に CREATE TABLE を流すので新しい列を持っています。だからストア審査も、私自身のテストも通ってしまう。差が出るのは「前のスキーマのファイルを持ったまま更新した人」だけなのです。

サーバーのデータベースなら、スキーマを変えるときにマイグレーションを書き、デプロイの一部として流します。端末の中の SQLite にも、同じ規律が要ります。キーバリューの移行についてはアップデートでお気に入りを消さないために — ローカルデータ・マイグレーション設計で書きましたが、リレーショナルな SQLite はテーブル構造そのものを変えるぶん、扱いがもう一段やっかいです。ここでは Rork で作るアプリに入れている、expo-sqlite 向けの順次マイグレーション層を実装の全文とともに整理します。

SQLite のマイグレーションが AsyncStorage より厄介な理由

AsyncStorage なら、保存した JSON を読み込んだ直後にコードで形を整えれば済みます。読み書きの境界が1箇所だからです。SQLite はそうはいきません。スキーマ(テーブルの定義)そのものが端末のファイルに焼き付いていて、コード側の期待とファイル側の実体がずれた瞬間に、クエリが実行時エラーで落ちます。

しかも SQLite の ALTER TABLE は限定的です。列の追加はできますが、列の削除や改名、制約(UNIQUENOT NULL)の変更は、素直な一文では書けません。テーブルをまるごと作り直す手続きが必要になります。この非対称性を知らずに「とりあえず ALTER TABLE で」と考えると、途中で手が止まります。

もう一つの落とし穴が、同じアプリでもユーザーごとにスキーマのバージョンがバラバラだという事実です。v1 のまま眠っていた端末が半年後に起動して、いきなり v4 のコードに出会うこともあります。だからマイグレーションは「1個ずつ順に適用でき、どのバージョンから始めても最新までたどり着ける」形でなければなりません。

設計の起点は PRAGMA user_version という整数1つ

SQLite には、データベースファイルのヘッダーに書き込める整数フィールドが最初から用意されています。PRAGMA user_version です。アプリはこの値を「このファイルのスキーマは今どこまで進んでいるか」を表す目盛りとして使えます。新規作成直後の DB では 0 です。

やることは単純です。アプリが知っている最新バージョン(マイグレーションの本数)と、ファイルの user_version を比べ、足りないぶんだけ順に流し、流すたびに user_version を1つ進める。これだけで、どの世代の端末も同じゴールに収束します。テーブルの中に自前のバージョン管理テーブルを作る方法もありますが、user_version はファイルに内蔵されていて追加のクエリが要らないぶん、私はこちらを好みます。

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

この記事の続きを読む

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

この記事で得られること
expo-sqlite の PRAGMA user_version を軸に、複数バージョンを順に埋めるマイグレーションランナーの完全な TypeScript 実装を手に入れられる
ALTER TABLE で足りるカラム追加と、12ステップのテーブル再構築が要る変更を見分けられるようになり、カラム削除・改名・制約変更を安全に流せる
外部キーとトランザクションが噛み合わずデータが欠ける事故を、foreign_keys を切る順番と foreign_key_check で未然に防げる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-12
アップデートでお気に入りを消さないために — Rork 製アプリのローカルデータ・マイグレーション設計
「アップデートしたらお気に入りが消えた」という星1レビューを受け取らないための設計です。封筒形式とスキーマバージョン、マイグレーションランナーの実装、EAS Update をスキーマ中立に保つ運用ルールまでを実体験から整理しました。
開発ツール2026-06-17
Rork が生成したアプリの依存関係を棚卸しする — 供給網リスクを増やさない監査の習慣
画面四枚の小さな Rork アプリでも、間接依存は 900 を超えます。脆弱性が出たときどのアプリが影響するか分からなくなる前に、npm ls・npm audit・overrides・depcheck を使った棚卸しの習慣を、複数アプリ運用の視点で整理します。
開発ツール2026-06-12
Rork の再生成と手動修正を共存させる — 上書きされない境界の引き方
設定画面の文言を直しただけの再生成で、前週に手で入れた広告まわりの修正が消えていました。AI が書く土地と人が守る土地を分けるディレクトリ境界、1行アダプタ、パッチ資産化、プロンプトの絞り方までを実測値とともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →