◉RORK LABEN
●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…●GPT-6.1 SOL — Rork のモデルメニューに追加(09-29)。Low/Medium/High を選べ、Pro・Max に含まれます●SONNET 5.5 — UI づくりが得意で、Sonnet 5 より出力が速いモデルが選べます(09-28)●SDK 58 — Beta が 09/15 から。stable の案内はまだなく、Expo Go でのプロジェクト実行は 09/03 からログインが必要です●WIDGET — iOS のウィジェットが本番ビルドだけ真っ黒になる原因を追った報告が出ています●OBSERVE — EAS Observe がネイティブクラッシュも記録します(SDK 57.0.21 以降・10/07)●NEW — 起動広告が、背面から戻った回にしか出ていませんでした。「前面に戻った」合図が、…
記事一覧/開発ツール
⬡ 開発ツール/2026-03-14上級

Rork Max × Stripe サブスクリプションを本番運用へ — Webhook冪等性・状態遷移・照合の実装

Rork Max と Stripe でサブスクリプションを構築する手順に加え、テストモードでは見えない本番の落とし穴(Webhookの二重配信・順序逆転・状態遷移・DBとStripeの照合)を実装コードとともに解説します。

rork-max41stripe3subscription10アプリ内課金9決済7

✦ プレミアム記事

テストモードで通ったのに、本番で二重課金の問い合わせが来た

サブスクリプションの実装で一番怖いのは、テストモードのチェックリストを全部通過して安心した数日後に届く「二重に請求されています」という一通のメールでした。個人開発でメンバーシップ課金を運用していて、私が最初に痛感したのはこの点です。決済フローを組むこと自体は難しくありません。難しいのは、Stripe から届くイベントが「必ず一度だけ、順番どおりに来る」という暗黙の前提を、コードが勝手に置いてしまうことでした。

Stripe の Webhook は、同じイベントを複数回送ることがあります。ネットワークの都合で subscription.updated が subscription.created より先に着くこともあります。テストモードで手動クリックしているうちは、これらはまず起きません。起きるのは、実ユーザーが増えて、リトライとタイムアウトが日常になった本番だけです。

以下では、Rork Max と Stripe でサブスクリプションを立ち上げる基本手順をおさえたうえで、その「本番でだけ壊れる」層に絞って実装を掘り下げます。基本のつなぎ込みができている方は、前半を飛ばして「Webhookを冪等にする」から読み進めていただければと思います。

前提条件

このガイドに取り組む前に、以下の準備を整えておいてください。

  • Rork Max アカウント: 基本的な操作に慣れていることが望ましいです。はじめての方はStripe 決済連携ガイドから着手すると流れをつかみやすいです。
  • Stripe アカウント: 管理画面にアクセスでき、公開可能キーとシークレットキーを取得できる状態にしてください。
  • REST API と JSON の基礎: Webhook の署名検証やイベント処理を読み解くうえで必要です。
  • データベース: ユーザーとサブスクリプション情報を保存します。Supabase / Firebase いずれでも構いません(バックエンドガイド参照)。
✦

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

この記事の続きを読む

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

この記事で得られること
✦Webhookの二重配信・順序逆転をイベントID台帳で吸収する冪等処理の実装
✦past_dueやincompleteを含むサブスクリプション状態遷移の扱いと、DBをStripeへ照合する再同期ジョブ
✦Stripe CLIでのローカル検証手順と、手数料を織り込んだ損益分岐の試算表
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

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

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

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

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

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

関連記事

⟐ ビジネス2026-04-28
Rork アプリの収益モデル比較 — 広告・サブスク・買い切りを実運用の数字で選ぶ
広告・サブスクリプション・買い切りという3つの収益モデルを、壁紙系アプリの広告運用がピークだった時期の実体験をもとに、MAU5,000という同一条件で試算し直しました。eCPMやフィルレートの実態、ハイブリッド設計、段階的な移行の順序まで整理します。
⟐ ビジネス2026-04-28
Rork Max で SwiftUI ネイティブアプリを収益化する — App Store 審査攻略からサブスクリプション設計まで
Rork Max が生成した SwiftUI コードを App Store 審査に通し、StoreKit 2 でサブスクリプション課金を組み込むまでの工程を、動くコードと審査で確認される項目つきで整理します。
⬡ 開発ツール2026-10-15
EXPO_PUBLIC_ の値が、開発では読めて本番だけ undefined になる書き方を、変換結果で見分けます
API の URL が開発中は読めるのに、ビルドした途端に undefined になる。原因は process.env の書き方でした。babel-preset-expo の変換結果を開発・本番で並べ、置き換わる書き方と残ってしまう書き方を表にしました。