RORK LABEN
TOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しましたTOOLING — Rorkの開発者向けリポジトリが動き続けています。rork-xcodeが7月16日、rork-deviceが7月15日、rork-plistが7月13日に更新されましたOPUS46 — RorkでClaude Opus 4.6が稼働しています。Rork MaxはClaude Codeを土台にアプリを組み立てる設計ですSIM — ブラウザ上で動くクラウドのiOSシミュレータを備え、実機へのインストールは1クリック、App Storeへの提出は2クリックと案内されていますMAX — Rork MaxはReact Nativeではなく純粋なSwiftを出力します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro、そしてiMessageまでが射程ですNATIVE — HealthKit、ARKitとLiDAR、NFC、Dynamic Island、Live Activities、Metalによる3D、Core MLのオンデバイス推論まで扱えますSEED — RorkはLeft Lane Capitalが主導する1,500万ドルのシードラウンドを実施し、Peak XVとa16z Speedrunが参加しました
記事一覧/開発ツール
開発ツール/2026-04-28上級

Family Sharing で IAP が消える4つのトリガー — Rork で子ども向けアプリの課金を安全に設計する

Family Sharing 経由の購入で IAP 収益が突然消える原因と、Rork で実装する StoreKit 2・Server Notifications V2 を組み合わせた安全な課金設計を、実コードとテスト手順まで網羅的に解説します。

Family SharingAsk to BuyStoreKit 216IAP6Rork515サブスクリプション63iOS108App Store79

プレミアム記事

子ども向けの学習アプリで月額サブスクリプションを実装し、リリースして数週間が経ったある日、App Store Connect の売上ダッシュボードを開いて違和感を覚えたことがあります。前日に確かに発生していた数件の月額課金が、翌日には消えているのです。

最初は単純なキャンセルだろうと思いました。けれども RevenueCat のダッシュボードを開いてみると、「Refunded」のステータスで戻されているレコードが並んでいて、そのほとんどが Family Sharing 経由の購入でした。

子どもアカウントから購入リクエストが飛び、親が Ask to Buy(承認購入)で一度許可したものの、後から App Store のサポートに連絡して払い戻しを受けていたのです。アプリ側はすでに会員権限を付与してコンテンツを提供してしまっており、私が状況に気づいたのは翌週の集計を見たときでした。

このパターンは、Family Sharing と Ask to Buy の挙動を理解しないまま StoreKit を組むと、ほぼ必ずどこかで踏むことになります。ここではFamily Sharing が IAP 収益にもたらす4つのトリガーと、Rork で開発したアプリで安全に動かすための実装パターンを、実際のコードとともに整理します。

「子どもが買ったはずなのに翌日消えていた」— Family Sharing の返金が起きる場面

Family Sharing は親と最大5人の家族が、購入したアプリ内コンテンツを共有できる仕組みです。便利な機能ですが、開発者からすると次のような独特の挙動があります。

  • 子どもアカウントが購入した場合、支払いは親のクレジットカードで行われる
  • 親は購入後でも App Store サポートに連絡して、自分の知らない購入として払い戻しを請求できる
  • Family Sharing が有効な商品では、購入したユーザーだけでなく家族全員が利用できる
  • 家族のうち誰かが Family Sharing から離脱すると、その瞬間にエンタイトルメントが失効する

つまり「いったん購入が成立した売上」も、返金や離脱で後からひっくり返る可能性があるのです。これを前提に IAP を設計しないと、サーバー側でユーザーに付与した会員権限と、Apple 側の購入状態がずれていきます。ずれが蓄積すると、本来は会員ではないユーザーがプレミアム機能を使い続けてしまったり、逆にきちんと払い続けている家族メンバーが急に締め出されたりするのです。

私はこの問題を最初に踏んだとき、StoreKit のテストを Sandbox で1ユーザー分しかやっていませんでした。Family Sharing は Sandbox でも擬似的に再現できるのですが、その手順を知らないまま「決済画面が開いて、領収書が返ってきたから OK」と判断していたのです。

Family Sharing で IAP が消える4つのトリガー

実際にプロダクションで遭遇した「課金が消える」シーンは、大きく4つに分類できます。

第1のトリガーは「Ask to Buy 後の親による返金リクエスト」です。子どもアカウントから購入が要求され、親が一度承認したあと、App Store サポート経由で「子どもが勝手に買ったので返金してほしい」と連絡し、Apple が裁量で払い戻しを行うパターンです。アプリには事後的に REFUND 通知が届きます。

第2のトリガーは「Family Sharing からの脱退」です。家族メンバーが Family Sharing グループから抜けると、その瞬間に共有されていたサブスクリプションのエンタイトルメントが失効します。この場合、サブスクリプション自体は継続しているため EXPIRED ではなく REVOKE 系のイベントが飛んできます。

第3のトリガーは「Apple による自動返金(Auto-Refund)」です。新しい iOS バージョンや App Store ポリシー変更後に、不正検知ルールが厳しくなり、Apple がアプリへの確認なしに払い戻しを実行することがあります。これは Family Sharing に限らず発生しますが、家族向けのアプリでは特に発生率が高く感じます。

第4のトリガーは「親アカウントの請求トラブル」です。親のクレジットカードが期限切れや残高不足になった場合、Family Sharing 共有メンバー全員のエンタイトルメントが連動して停止します。この場合は DID_FAIL_TO_RENEW の通知が届くものの、エンドユーザーから見ると「家族の誰かのカードが原因で自分の課金が止まった」という分かりにくい状況が発生します。

これら4つを単独で扱うと実装が分散しがちなので、私は「Family Sharing に関する状態変更は、すべて Server Notifications V2 で集約して処理する」という方針を取っています。クライアント側の StoreKit 2 はあくまでユーザー体験のために使い、収益の信頼できる単一情報源(Single Source of Truth)はサーバー側に置くべきだ、という割り切りです。

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

この記事の続きを読む

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

この記事で得られること
Family Sharing 経由で消える IAP 収益の4つのパターンを把握し、設計段階で対策を組み込めるようになります
StoreKit 2 と Server Notifications V2 で Family Sharing・Ask to Buy のイベントを検知する実装パターンを習得できます
Sandbox で Family Sharing をシミュレートして、本番リリース前に課金フローを安全に検証できるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-05-27
Rork × StoreKit 2 で会員資格の同期を三層化する — 起動時・バックグラウンド・復元購入の役割分担
Rork で生成したアプリに StoreKit 2 のサブスクリプションを組み込むとき、Transaction.updates だけでは届かない領域があります。起動時・Background Refresh・Restore Purchase の三層で状態を回復する具体的な実装と、壁紙アプリ6本で実装してみての所感をまとめました。
開発ツール2026-05-20
Rork × StoreKit 2 × App Store Server API — 個人開発アプリのサブスク基盤を3層で守る実装設計
Rork製iOSアプリにStoreKit 2とApp Store Server APIを組み合わせ、クライアント検証・サーバ検証・通知監視の3層でサブスク収益を守る実装と運用ノウハウを公開します。
開発ツール2026-05-02
Rork のサブスクリプションを Sandbox でテストする実践 — Apple/Google で詰まる箇所と検証手順
Rork で実装したサブスクリプションを Sandbox 環境でテストする際の落とし穴を、Apple/Google の両側から実装コード付きでまとめました。本番ビルド前に必ず潰しておきたい検証ポイントを順序立てて確認できます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →