RORK LABEN
ACQUISITION — Rorkが初の買収を実施。macOSでネイティブSwiftアプリを生成するPaperlineを取得しましたFUNDING — Left Lane Capital主導の$15Mシードは、AI時代のモバイルアプリの作り方と収益化の再定義に充てられますGROWTH — Rork Maxはローンチから3日でARR $1.5Mに到達し、2週間で年間売上を倍増させたとされますENGINE — Rork MaxはClaude Code+Claude Opus 4.6駆動。Web初のSwiftビルダーとしてXcodeを置き換えますSPLIT — 通常RorkはReact Native(Expo)、Rork MaxはネイティブSwiftでAppleエコシステム全域が対象ですPRICING — 無料で開始でき、有料は月25ドル〜、Rork Maxは月200ドルですACQUISITION — Rorkが初の買収を実施。macOSでネイティブSwiftアプリを生成するPaperlineを取得しましたFUNDING — Left Lane Capital主導の$15Mシードは、AI時代のモバイルアプリの作り方と収益化の再定義に充てられますGROWTH — Rork Maxはローンチから3日でARR $1.5Mに到達し、2週間で年間売上を倍増させたとされますENGINE — Rork MaxはClaude Code+Claude Opus 4.6駆動。Web初のSwiftビルダーとしてXcodeを置き換えますSPLIT — 通常RorkはReact Native(Expo)、Rork MaxはネイティブSwiftでAppleエコシステム全域が対象ですPRICING — 無料で開始でき、有料は月25ドル〜、Rork Maxは月200ドルです
記事一覧/アプリ開発
アプリ開発/2026-06-25上級

再インストールしたユーザーが「初回」に戻らない — Rork(Expo) アプリの初回判定と状態永続の非対称設計

Rork で生成した Expo アプリで、再インストール時に初回判定やオンボーディング・無料トライアルの状態が崩れる問題を、ストレージの永続性の非対称として整理し、設計で解く方法を共有します。Keychain と AsyncStorage の生存差、インストールと更新の軸の分離、サーバ権威の権利判定まで実装込みで解説します。

Rork451Expo105初回判定再インストールKeychain3AsyncStorage10状態永続トライアル

プレミアム記事

再インストールしたユーザーが「初回」に戻らない

ある日、個人開発のアプリで「機種変更したらオンボーディングが出なかった」という問い合わせを受けました。普通は逆を心配します。再インストールでオンボーディングがまた出てしまうほうがよくある不満だからです。調べてみると、原因はストレージごとに「アンインストールで消えるか残るか」が違うことにありました。私が初回判定に使っていたフラグは、片方の端末では消え、もう片方では消えずに残っていたのです。

このとき腑に落ちたのは、再インストール周りの不具合はバグというより、ストレージの永続性の非対称を設計者が把握していないことから生まれるという点でした。その非対称を正面から扱い、初回判定・オンボーディング・無料トライアルを再インストールで崩さないための設計を、実装込みで共有します。

アンインストールで「消えるもの」と「残るもの」

まず事実を正確に押さえます。Expo/React Native アプリがアプリを削除したとき、何が消えて何が残るかはストレージと OS で異なります。とくに iOS の Keychain は、アプリを削除しても項目が残ることがある点が直感に反します。

保存先iOS でアンインストール後Android でアンインストール後
AsyncStorage / MMKV / ファイル消える消える
SecureStore (Keychain)残ることがある消える
SharedPreferences自動バックアップで復元され得る
iCloud Keychain 同期項目端末をまたいで残る
サーバ上のアカウント残る(端末非依存)残る(端末非依存)

この表が、再インストール周りの挙動のほぼすべてを説明します。AsyncStorage に初回フラグを置けば、再インストールでフラグが消えるのでオンボーディングがまた出ます。一方 SecureStore に「トライアル消化済み」を置けば、iOS では削除後も残るので再インストールしてもトライアルが戻りません(戻したい場合も戻したくない場合もあり、ここが設計判断です)。Android では SecureStore も消えますが、SharedPreferences は自動バックアップ設定次第で復元され得ます。

つまり「消えるか残るか」はストレージ選択で決まる仕様であって、偶然ではありません。設計の出発点は、各状態について『再インストールで消えてよいか/残ってほしいか』を先に決め、それに合うストレージに置くことです。

まず「どう振る舞ってほしいか」を決める

状態ごとに望ましい挙動は違います。私はこのアプリ群を運用する中で、状態を足すたびに次の3問を自分に投げます。

  1. この状態は再インストールでリセットされるべきか(例: ローカルの下書き、UI設定)
  2. この状態は再インストールでも残るべきか(例: 不正なトライアル再取得を防ぐ識別子)
  3. この状態は端末ではなくサーバが持つべきか(例: 購入・サブスク・アカウント)

下表は私の既定の割り当てです。

状態望ましい挙動置き場所
オンボーディング完了再インストールで再表示してよいAsyncStorage
UI 設定・テーマ消えてよいAsyncStorage
無料トライアル消化残ってほしい(再取得防止)サーバ(補助に SecureStore)
購入・サブスク権利端末非依存で残るサーバ / ストア(StoreKit/Play)
インストール識別子同一端末では残ってほしいSecureStore

要点は、お金と不正に関わる状態を端末ストレージだけで判定しないことです。AsyncStorage は再インストールで消えるので、ここに「トライアル済み」を置くと、削除→再インストールでトライアルが無限に取り直せます。逆に SecureStore だけに頼ると、iOS と Android で挙動が割れます。お金が絡む判定は最終的にサーバが持つべきで、端末ストレージは速度のためのキャッシュに留めます。

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

この記事の続きを読む

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

この記事で得られること
アンインストールで「消えるストレージ」と「残るストレージ」の非対称を iOS / Android 別に整理し、初回判定が再インストールで壊れる理由を構造から示します
初回・更新・再インストールを取り違えないための永続インストール識別子の実装と、トライアルや権利をサーバ権威で判定する設計を、私が個人開発のアプリで使っている形のまま共有します
「初回起動(インストール軸)」と「更新後の What's New(バージョン軸)」を別軸として扱う実装と、Android の自動バックアップ落とし穴・移行チェックリストまで1本にまとめました
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

アプリ開発2026-06-25
言語を増やすたびに未翻訳が本番へ漏れる — Rork(Expo) アプリの文言カタログ運用と抜け検出の設計
Rork で生成した Expo アプリを多言語化したあと、言語を足すたびに未翻訳が本番へ漏れる問題を仕組みで止めるための設計を共有します。文言カタログの一元化、CI でのキー抜け・余り検出、フォールバック連鎖、複数形、擬似ロケールでのレイアウト検証まで実装込みで解説します。
アプリ開発2026-06-25
dev・staging・本番を同じ iPhone に並べる — Rork(Expo) アプリの環境分離設計
Rork が生成した Expo アプリを dev / staging / 本番の3ビルドに分け、同じ端末に共存させる設計をまとめました。app.config.ts の動的切り替え、eas.json のプロファイル、通知・分析・課金の隔離まで具体的に解説します。
アプリ開発2026-06-03
壁紙アプリ 6 本のオンボーディングを共通化して、1 ヶ月の初日定着を見た所感
Rork で骨格を作った壁紙アプリ 6 本のオンボーディングを 1 つの設定駆動コンポーネントに統一し、1 ヶ月の初日継続率とプッシュ許諾率がどう動いたかを、個人開発の現場目線で淡々と記録した実運用メモです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →