RORK LABEN
DEADLINE — Google Play は2026年8月31日以降、新規アプリと既存アプリの更新の双方に対象 API レベル36(Android 16)以上を要求します。残り12日ですEXTENSION — 期限に間に合わない場合は Play Console の期限延長フォームから申請することで11月1日まで配信を継続できます。延長は自動ではなく、申請自体を期限内に行う必要がありますTARGET SDK — Rork が出力する Expo / React Native アプリでも targetSdkVersion は自分で確認が必要です。テンプレートが古い SDK に固定されていると、生成しただけでは要件を満たしませんRORK MAX — 従来の Rork が React Native / Expo を出力するのに対し、Rork Max はネイティブ Swift を生成します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessage に対応しますFUNDING — Left Lane Capital 主導の1,500万ドルのシードラウンドが4月9日に発表されました。あわせてアプリビルダーの Paperline を買収し、エンジニアリング人材の獲得を進めていますiOS — iOS 27 は開発者向けベータ6が8月17日に配布され、秋の正式リリースが近づいています。ネイティブ Swift 出力を使うなら、新 OS への対応時期が配布計画に直接効いてきますDEADLINE — Google Play は2026年8月31日以降、新規アプリと既存アプリの更新の双方に対象 API レベル36(Android 16)以上を要求します。残り12日ですEXTENSION — 期限に間に合わない場合は Play Console の期限延長フォームから申請することで11月1日まで配信を継続できます。延長は自動ではなく、申請自体を期限内に行う必要がありますTARGET SDK — Rork が出力する Expo / React Native アプリでも targetSdkVersion は自分で確認が必要です。テンプレートが古い SDK に固定されていると、生成しただけでは要件を満たしませんRORK MAX — 従来の Rork が React Native / Expo を出力するのに対し、Rork Max はネイティブ Swift を生成します。iPhone・iPad・Apple Watch・Apple TV・Vision Pro・iMessage に対応しますFUNDING — Left Lane Capital 主導の1,500万ドルのシードラウンドが4月9日に発表されました。あわせてアプリビルダーの Paperline を買収し、エンジニアリング人材の獲得を進めていますiOS — iOS 27 は開発者向けベータ6が8月17日に配布され、秋の正式リリースが近づいています。ネイティブ Swift 出力を使うなら、新 OS への対応時期が配布計画に直接効いてきます
記事一覧/開発ツール
開発ツール/2026-04-25上級

RevenueCat の固定費が気になり始めた人のための、App Store Server Notifications V2 自前運用ガイド

Rork アプリで RevenueCat を経由せず、App Store Server Notifications V2 を Cloudflare Workers で受信する構成を、JWS 検証・冪等処理・テスト戦略まで含めて実装する完全ガイド。

StoreKit 216App Store Server API4Cloudflare Workers24サブスクリプション63JWS3

プレミアム記事

RevenueCat を 1 年ほど運用していて、ふと「このまま MRR が伸びると固定費が無視できなくなるな」と感じたことはないでしょうか。私自身、3 つほど Rork で出したアプリの売上が積み上がってきた頃に、同じ違和感を持ちました。RevenueCat 自体はとても優秀なサービスですし、立ち上げ期に使う価値は十分あります。一方で、ある程度規模が読めてきた段階で「この検証ロジックは自分のコードベースに置いておきたい」と思うのも、個人開発者として自然な感情だと思います。

このガイドは、その「卒業」を実装レベルで現実的に進めるためのものです。具体的には、Rork で書いた iOS アプリから StoreKit 2 で購入を完了させ、Apple から飛んでくる App Store Server Notifications V2(以下 ASSN V2)を Cloudflare Workers で受け取り、JWS を検証して KV に購読状態を保存する、という最小だけれど本番運用できる構成を作ります。執筆時点で実際に動かしている構成を元に、踏みやすい落とし穴も含めて書いていきます。

なぜ自前運用に踏み切るのか — RevenueCat を否定したいわけではない

最初にはっきり書いておきますと、私は RevenueCat を否定するつもりはありません。むしろ、最初の 1 本目のサブスクリプションアプリでは積極的に使うことをおすすめします。立ち上げ期の検証フローを内製すると、それだけで 1〜2 週間はかかりますし、サーバー通知のテストは想像以上に泥臭い作業です。

ただし、次のような状況になったら、自前運用への移行を検討する価値が出てきます。

  • 月額の MTR(Monthly Tracked Revenue)が一定額を超え、RevenueCat の課金プランがビジネス全体の利益率に影響し始めた
  • ユーザーごとに細かい課金ロジック(地域別の価格・社内向けクーポン・特定ユーザーへの個別オファー)を実装したくなったが、RevenueCat のダッシュボード経由ではフィットしない
  • 監査要件や個人情報の流通範囲を理由に、決済ステータスを自分のサーバー以外に置きたくない事情が出てきた

このいずれかが当てはまるなら、自前運用は十分に検討に値します。一方で、まだ MRR が立ち上がっていない段階で「コストが気になる」だけで自前化するのは、おすすめしません。検証バグの 1 件で 1 日売上を止めるリスクがあり、その 1 日のロスのほうが RevenueCat の月額より遥かに高くつくからです。

全体像:StoreKit 2 → ASSN V2 → Cloudflare Workers → KV のデータフロー

具体的な実装に入る前に、構成の全体像を頭に入れておきましょう。データの流れは次のようになります。

  1. ユーザーが Rork アプリ内でサブスクリプションを購入(StoreKit 2 が処理)
  2. 購入完了後、Apple のサーバーが指定の URL に JWS 署名付き の通知を送ってくる(ASSN V2)
  3. Cloudflare Workers で通知を受け取り、JWS の署名を Apple のルート証明書チェーンで検証
  4. 検証済みのペイロードから originalTransactionIdnotificationType を取り出し、Cloudflare KV に冪等に書き込む
  5. アプリ起動時にユーザーが KV を参照し、現在の購読状態を取得する

ポイントは、購読状態の「真実」を Apple → Workers → KV のラインに置くことです。クライアントだけで Transaction.currentEntitlements に頼ると、レシート改ざんや時計操作で誤判定する可能性があり、また「サーバー側で誰が有効購読者か」を把握できないため、メール配信などの後続施策にも使えません。

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

この記事の続きを読む

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

この記事で得られること
RevenueCat の月額費用が事業規模に対して重く感じ始めた個人開発者が、App Store Server Notifications V2 を Cloudflare Workers で自前受信する構成に切り替えられる
JWS 署名検証・ステータス遷移のリプレイ対策・購読状態の冪等更新を、Rork から呼び出せる完全なコード付きで習得できる
自前運用に切り替えることで月額固定費を限りなくゼロに近づけ、検証ロジックを自分で完全にコントロールできる構成に到達できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

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

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

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

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

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

関連記事

開発ツール2026-06-30
返金申請に12時間以内で応答する — CONSUMPTION_REQUEST を Cloudflare Workers で受け止める
Rork で作ったサブスクアプリに届く App Store の CONSUMPTION_REQUEST 通知を、Cloudflare Workers で受信して Send Consumption Information API に12時間以内で応答する実装を、フィールドの意味づけと運用判断まで含めて解説します。
開発ツール2026-05-20
Rork × StoreKit 2 × App Store Server API — 個人開発アプリのサブスク基盤を3層で守る実装設計
Rork製iOSアプリのサブスク収益を、StoreKit 2のクライアント検証、App Store Server APIによるサーバー側JWS検証、Server Notifications V2の監視という3層で守る実装設計です。権利テーブルの設計、定期再同期、サンドボックスの罠、障害時の運用まで公開します。
開発ツール2026-07-11
StoreKit 2 の署名付きトランザクションを Cloudflare Worker で検証する
端末が申告した課金状態をそのまま信じると、改ざんされたエンタイトルメントを通してしまいます。StoreKit 2 の署名付きトランザクション(JWS)を Cloudflare Worker 側で検証し、端末を信用せずに権利を付与する設計と実装を、動くコードとともに整理します。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →