RORK LABEN
NATIVE — Rork Max は純粋な Swift と SwiftUI を生成するため、AR や LiDAR、Metal を使った 3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで手が届きますCHOICE — 逆にいえば、こうした Apple 固有の機能を使わないアプリならクロスプラットフォームの通常の Rork で足ります。Max を選ぶ理由はこの一点に集約されますPLAY — 8月31日から、Google Play の新規アプリと既存アプリの更新は対象 API レベル36(Android 16)が必要になります。残り9日ですPLAY — 更新を出さない既存アプリでも、より新しい Android を載せた端末の新規ユーザーへ配信を続けるには対象 API レベル35 以上が要ります。見落とすと新規インストールだけが止まりますGRACE — Play Console の延長フォームから申請すれば11月1日まで猶予されます。自動ではないため、8月31日までに申請そのものを済ませておく必要がありますEXPO — expo prebuild がネイティブディレクトリを破棄して再生成するのが既定になりました。手を入れている場合は no-clean を渡します。API 36 対応の最中は事故になりやすい箇所ですNATIVE — Rork Max は純粋な Swift と SwiftUI を生成するため、AR や LiDAR、Metal を使った 3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで手が届きますCHOICE — 逆にいえば、こうした Apple 固有の機能を使わないアプリならクロスプラットフォームの通常の Rork で足ります。Max を選ぶ理由はこの一点に集約されますPLAY — 8月31日から、Google Play の新規アプリと既存アプリの更新は対象 API レベル36(Android 16)が必要になります。残り9日ですPLAY — 更新を出さない既存アプリでも、より新しい Android を載せた端末の新規ユーザーへ配信を続けるには対象 API レベル35 以上が要ります。見落とすと新規インストールだけが止まりますGRACE — Play Console の延長フォームから申請すれば11月1日まで猶予されます。自動ではないため、8月31日までに申請そのものを済ませておく必要がありますEXPO — expo prebuild がネイティブディレクトリを破棄して再生成するのが既定になりました。手を入れている場合は no-clean を渡します。API 36 対応の最中は事故になりやすい箇所です
記事一覧/開発ツール
開発ツール/2026-07-08上級

端末の空き容量が尽きたとき、アプリは何を守るか

書き込み失敗を前提に設計するExpo/React Nativeアプリの耐性パターン。空き容量予算・LRU退避・データ保護優先度・無言失敗を防ぐテレメトリまで、6本の壁紙アプリの運用から得た実装をまとめました。

Expo178React Native228ストレージ3エラーハンドリング4アーキテクチャ21

プレミアム記事

ある壁紙アプリに、星ひとつのレビューが届いたことがあります。「お気に入りに登録しても、次に開くと消えている」。手元では再現しませんでした。何日か経って、同じ症状の問い合わせがもう一件。共通点は、どちらも端末の空き容量がほとんど残っていなかったことでした。

写真をたくさん撮る方の iPhone は、しばしば残り数百MBで動いています。そういう端末では、AsyncStorage への書き込みが静かに失敗します。例外は投げられるのに、こちらが握りつぶしていれば、ユーザーには「保存したはずのものが消える」という体験だけが残ります。

空き容量の枯渇を、めったに起きないエッジケースとして扱ってきたことを反省しました。実際には、無料の写真・壁紙・カメラ系アプリの利用者ほど、この状態に近いところで生活しています。書き込みが失敗することを前提に据えて、アプリが「何を犠牲にし、何を最後まで守るか」を設計する。その考え方と実装を、個人開発で6本のアプリを回してきた経験からまとめます。

空き容量の枯渇は、ロングテールではなく日常

手元の6本の壁紙アプリで、書き込み例外を Crashlytics の非致命ログとして計測し始めたところ、SQLITE_FULLENOSPC(No space left on device)に類する失敗が、月間アクティブの 0.6〜1.4% の端末で少なくとも一度は発生していました。クラッシュには至らないため、従来のクラッシュフリー率には現れていなかった数字です。

しかもこの層は、無料アプリにとって軽視できない存在です。端末を使い込み、写真を溜め込み、アプリを長く使ってくれている方ほど、空き容量が細っています。つまり書き込み失敗を放置することは、最もロイヤルな利用者から静かに信頼を失う行為でもありました。

数字にしてみて、ようやく胸に落ちました。これは「稀に起きる不具合」ではなく、「一定割合で必ず起きる運用条件」だったのです。

書き込みは、どこで失敗するのか

まず、失敗しうる面を洗い出します。Expo / React Native のアプリで、ディスクへの書き込みが関わる主な経路は次の通りです。

書き込み経路典型的な失敗失われるもの
AsyncStorage / MMKV書き込み例外・部分書き込み設定、お気に入り、進捗
SQLite(expo-sqlite)SQLITE_FULL、トランザクション巻き戻し構造化データ、キャッシュ行
expo-file-system の writeAsyncENOSPC、途中で切れたファイルダウンロード成果物
画像ディスクキャッシュ書き込み失敗の握りつぶし再取得可能な画像
ログ・分析イベントの永続化キューの書き込み失敗テレメトリ(皮肉にも失敗の記録自体)

重要なのは、これらが同じ「失敗」でも、失われるものの重みが違うという点です。再取得できる画像キャッシュと、二度と戻らない購入状態を、同じ扱いにしてはいけません。設計の出発点はここにあります。

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

この記事の続きを読む

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

この記事で得られること
書き込み失敗を分類し、退避してよいキャッシュと死守すべきデータを分ける優先度設計
空き容量予算とLRU退避を組み合わせた、SQLITE_FULL/ENOSPCに耐える実装パターン
無言失敗を防ぐテレメトリとUXを、個人開発でも回せる最小構成で用意する方法
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-02
壁紙アプリ6本を1つのコードベースから出し分ける — app.config.ts と EAS で組むホワイトラベル構成
似た構造の壁紙アプリを別々のリポジトリで保守していると、修正が6箇所に分散して破綻します。1つのコードベースから APP_VARIANT で6本のアプリを出し分けるホワイトラベル構成を、app.config.ts と eas.json の実コードと、設定ドリフトを防ぐ検証スクリプトまで含めてまとめました。
開発ツール2026-03-10
RorkのReact Native + Expoアーキテクチャを深掘り解説
RorkがReact NativeとExpoをどう組み合わせてクロスプラットフォーム開発を実現しているかを掘り下げます。マネージドワークフローとベアワークフローの違い、Expo Goでのテスト、EAS、状態管理、Expo Routerによるナビゲーションまでを解説します。
開発ツール2026-08-22
一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです
生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →