RORK LABEN
PLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっていますPLAY — Google Play の target API level 36 要件が昨日8月31日に発効しました。今日以降、新規アプリと既存アプリの更新は Android 16 対応が必須ですVISIBILITY — API 35 のままのアプリは掲載こそ続きますが、新しい Android 版のユーザーには表示されなくなります。エラーが出ないまま新規インストールだけが減る点に注意が要りますEXTENSION — 間に合わなかった場合は、Play Console から2026年11月1日までの延長申請が出せます。恒久対応の計画とセットで進めるのが実務的ですAPPLE — Apple 側は9月9日にイベント、iOS 27 の正式リリースは9月14日と報じられています。生成したアプリの iOS 27 実機確認はリリース週の前に済ませておきたいところですEXPO — Expo が expo-paste-input を公開しました(8月28日)。React Native の TextInput に画像・GIF・ステッカーの貼り付けを追加するネイティブモジュールですEAS — EAS Observe が8月20日に GA になりました。クラッシュや性能の観測を、ビルドや配信と同じ EAS 上で持てるようになっています
記事一覧/開発ツール
開発ツール/2026-05-27上級

Rork × StoreKit 2 で会員資格の同期を三層化する — 起動時・バックグラウンド・復元購入の役割分担

Rork で生成したアプリに StoreKit 2 のサブスクリプションを組み込むとき、Transaction.updates だけでは届かない領域があります。起動時・Background Refresh・Restore Purchase の三層で状態を回復する具体的な実装と、壁紙アプリ6本で実装してみての所感をまとめました。

Rork547StoreKit 216サブスクリプション64Background RefreshRestore PurchaseiOS109Expo192

プレミアム記事

アーティスト・クリエイターの廣川政樹です。Dolice Labs では Rork で生成した壁紙アプリを 6 本ほど並行運用していて、そのうち 4 本に StoreKit 2 のサブスクリプションを乗せています。Transaction.updates の AsyncStream を一本だけ走らせれば会員資格の同期は終わる、と最初は思っていました。実際にやってみると、ユーザがアプリを長く閉じていたケース・iCloud 同期前にサブスクが切れたケース・端末を移行したケースなど、updates ストリームでは拾えない盲点がいくつもあります。

この記事は、私が個人開発で 2014 年からアプリを作り続けてきて、累計 5,000 万ダウンロードを超えた中で、特にここ 2 年ほどで「会員資格の同期だけは三層構造にしないと取りこぼす」と確信した実装メモです。Rork の生成物に最小差分で乗せられる前提で書いています。

まず一本のアプリで起きた取りこぼし

最初に明確に「これはまずい」と感じたのは、壁紙アプリのうち最も DAU が大きい一本で、サブスク継続率が想定より約 7% 低く出たときでした。Crashlytics には何も上がっておらず、エラーログもきれいです。それでも RevenueCat の Customer Center で個別アカウントを開くと、「サブスクは有効なのにアプリ内では非会員扱い」のセッションが断続的に発生していました。

調査して分かったのは、Transaction.updates を購読しているのは "アプリがフォアグラウンドにいる間" だけだということです。ユーザが土日にアプリを起動せず、その間に更新請求が発生し、月曜にアプリを開いた瞬間に updates イベントは飛んでくる、はずなのですが、@MainActor で囲った購読開始タイミングと、ストアが更新を確定する時刻のミスマッチで、初回 onAppear より遅れて届くケースがありました。会員ユーザに広告が表示され、AdMob の eCPM が想定外に伸びてしまい、課金率の母集団分析を毎月狂わせていました。

この問題は、updates ストリーム一本では構造的に解けません。役割を整理したうえで三層にする必要があります。

なぜ三層化するのか — updates が取りこぼす 3 つの状況

私が運用していて updates が遅延・欠落する状況は、次の 3 つに分類できます。

  1. アプリが完全終了している間に発生した更新請求の確定: iOS は再起動から数秒〜数十秒で updates を補填してきますが、その間に currentEntitlements を読まれると非会員と判定されます。
  2. ネットワーク不調・機内モード解除直後の数十秒: ストアキットは内部リトライを行いますが、エンタイトルメントが回復する前に画面遷移が走ると、UI 側の状態が古いままになります。
  3. 端末移行・iCloud 引き継ぎ後の初回起動: Apple ID は同じでも、レシート同期が完了するまでに数秒〜数分のラグがあり、その間に有料機能を見せようとすると「購入済みなのに使えない」体験になります。

この 3 つに対して、私は次のように層を割り当てています。

取りこぼし状況担当する層
アプリ完全終了中の更新請求第一層: 起動時の currentEntitlements 再評価
ネットワーク不調・バックグラウンド長時間第二層: Background App Refresh による定期照合
端末移行・iCloud 同期遅延第三層: Restore Purchase の手動トリガ

Transaction.updates の購読はあくまで「フォアグラウンドにいる間の即時反映」のための層で、上記 3 つには別の層が必要、という設計です。これを意識しておかないと、updates をいくら丁寧に書いても穴が残ります。

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

この記事の続きを読む

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

この記事で得られること
Transaction.updates が取りこぼす 3 つの状況と、それぞれをどの層で回復するかの設計表
壁紙アプリ6本の並行運用で実測した、Background Refresh の発火率(24時間あたり 1.8〜3.4 回)と eCPM への影響
Restore Purchase をユーザに 1 タップで案内するための UI 配置と、AdMob 月収を約 12% 取り戻したログ分析の手順
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-04-28
Family Sharing で IAP が消える4つのトリガー — Rork で子ども向けアプリの課金を安全に設計する
Family Sharing 経由の購入で IAP 収益が突然消える原因と、Rork で実装する StoreKit 2・Server Notifications V2 を組み合わせた安全な課金設計を、実コードとテスト手順まで網羅的に解説します。
開発ツール2026-07-27
最低サポート iOS をいつ上げるか — 利用率ではなく、コードに残った分岐の数で決める
最低サポート OS の引き上げを利用率で判断すると、毎年同じ結論になって先送りが続きます。OS 分岐に注記を付けて棚卸しし、引き上げ先ごとに消せる分岐を数えるスクリプトと、引き上げ後に見る指標をまとめました。
開発ツール2026-06-29
写真の「選択した項目だけ許可」に正しく向き合う設計
iOS の写真ライブラリ限定アクセス(選択した項目だけ許可)に Rork(Expo)アプリで正しく対応します。フルアクセス・限定・拒否の3状態の判定、選んだ写真だけを扱う前提の画面設計、追加選択を促す導線までを実装コードとともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →