revenuecat-migrate について
既存のアプリ内購入に RevenueCat を導入する場合や、SDK のメジャーバージョンを上げる場合に使うスキルです。移行計画、プラットフォーム別の手順、検証方法を案内します。
主な機能
- 01導入とアップグレードの判別
- 02オブザーバーモードの設定案内
- 03トランザクション処理主体の説明
- 04ユーザー ID の継続性の説明
- 05移行の検証手順
活用シーン
- 01既存の購入フローへの RevenueCat 導入
- 02RevenueCat SDK のメジャー更新
- 03移行後の既存購読者状態の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ revenuecat/ ai-toolkit --skill revenuecat-migrateインストール後、Claude Code で/revenuecat-migrateを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
platforms/android.mdflutter.mdios.mdkmp.mdreact-native.md詳細
revenuecat-migrate:RevenueCat への移行または SDK のアップグレード
アプリ内課金をすでに提供しているアプリに RevenueCat を導入する場合、または RevenueCat SDK のメジャーバージョンをアップグレードする場合に、このスキルを使用します。
この 2 つの経路には共通する概念もありますが、リスクは異なります。コードに手を加える前に、どちらに該当するかを特定してください。
1. プラットフォームを検出する
作業ディレクトリを調べ、上から順に最初に該当するものを選びます。
- React Native:
package.jsonにreact-native-purchasesのエントリーがある、または依存関係にreact-nativeがある →platforms/react-native.mdを読みます。expoも依存関係にある場合は、Expo プロジェクトとして記録します。 - Flutter:プロジェクトルートに
pubspec.yamlがある →platforms/flutter.mdを読みます。 - Kotlin Multiplatform:
build.gradle.ktsにkotlin { … }のマルチプラットフォームソースセットブロックが含まれている、またはcom.revenuecat.purchases:purchases-kmp*に依存している →platforms/kmp.mdを読みます。 - Android(ネイティブ):
build.gradle(.kts)にcom.android.applicationが適用されている(KMP ではない) →platforms/android.mdを読みます。 - iOS(ネイティブ):プロジェクトルートに
Package.swift、*.xcodeproj、*.xcworkspace、またはPodfileがある →platforms/ios.mdを読みます。
複数の条件に該当する場合(例:Flutter プロジェクト内に ios/ フォルダーがある場合)は、ビルドを所有する、最も外側のプロジェクトを選びます。それでも判断できない場合は、設定したいプラットフォームをユーザーに確認してください。
2. 移行経路を特定する
ユーザーに確認するか、コードベースから判断します。
- 経路 A:導入。 アプリには、StoreKit または Google Play Billing を直接使用して実装した、動作中のアプリ内課金がすでにあります。RevenueCat をその上に追加します。
- 経路 B:バージョンアップグレード。 アプリはすでに RevenueCat を使用しており、ユーザーはメジャーバージョンを次のバージョンに上げようとしています(例:v4 から v5、v7 から v8)。
両方の経路を同時に実行する場合もあります(例:最新のメジャーバージョンで RC を導入する)。まず経路 A を実行し、必要に応じて経路 B を実行してください。
3. 共通の概念
オブザーバーモード(経路 A)
オブザーバーモードは、購入コードを書き換えずに RevenueCat を導入するための重要な仕組みです。SDK は、既存の StoreKit / Billing コードが処理するトランザクションを監視し、検証のために RevenueCat バックエンドへ送信して、サブスクライバーの状態を更新します。ただし、トランザクションの開始や完了は行いません。既存の購入 UI、レシート検証、トランザクションの完了処理はそのまま維持します。
設定時に次のように指定します。
- iOS:
Configuration.BuilderにpurchasesAreCompletedBy: .myAppとstoreKitVersion: .storeKit1(または.storeKit2)を設定します。これらは別々のパラメーターであり、単一の関連値ではありません。 - Android:
PurchasesConfiguration.BuilderにpurchasesAreCompletedBy(PurchasesAreCompletedBy.MY_APP)を設定します。 - Flutter:
PurchasesConfigurationにconst PurchasesAreCompletedByMyApp(storeKitVersion: StoreKitVersion.storeKit2)を渡します。 - React Native:設定呼び出しで
purchasesAreCompletedBy: { type: PURCHASES_ARE_COMPLETED_BY_TYPE.MY_APP, storeKitVersion: STOREKIT_VERSION.STOREKIT_2 }を渡します。
デフォルトでは RevenueCat が完了処理を担います(REVENUECAT / .revenueCat)。この場合、SDK がフロー全体を管理します。
オブザーバーモードで安定稼働したら、後から任意で、独自の購入処理を取り除き、purchasesAreCompletedBy のオーバーライドを削除して、全面的な RevenueCat モードに切り替えることができます。
トランザクションを二重に処理しない
purchasesAreCompletedBy を myApp に設定すると、RevenueCat は iOS でトランザクションを完了せず、Android で承認もしません。既存のコードで引き続き処理する必要があります。古いトランザクション完了処理を残したまま myApp フラグを削除すると、トランザクションが二重に承認され、サブスクライバーの状態に不整合が生じる可能性があります。
完了処理/承認を担うのは、必ずどちらか一方だけにしてください。どちらが担うかを決め、もう一方を削除してください。
ユーザーの継続性(パス A)
アプリに独自の認証システムがすでにある場合は、RevenueCat の設定後に Purchases.logIn(existingAppUserID) を呼び出します。これにより、以前の購入履歴が取り込み時に適切な RevenueCat ユーザーに関連付けられます。この手順を省略すると、既存の購入が匿名の RC ユーザーに記録され、後からアプリの実際のユーザー記録と照合できなくなります。
アプリに認証済みユーザーという概念がない場合に限り、この手順を省略してください。
バージョンの更新で必須フィールドが変わります(パス B)
メジャーバージョンのアップグレードでは、設定の構造が変わり、非推奨 API が削除され、リリースごとに変わる形でデフォルトの動作が変更されます。このスキルでは、バージョンごとの差分を複製していません。SDK リポジトリにある正式な情報源を確認してください。
- CHANGELOG:GitHub の該当する SDK リポジトリにあります。現在インストールしているバージョンからアップグレード先までの項目を確認してください。
- 移行ガイド:SDK リポジトリで
*MIGRATION*.mdに一致するファイル、またはmigrations/ディレクトリを検索してください。メジャーバージョンのアップグレードでは、通常、専用のガイドが用意されています。リポジトリの GitHub リリースページにあるメジャーバージョンのリリースノートからリンクされていることが多いです。 - リリースノート:リポジトリの GitHub リリースページにある各メジャーバージョンのリリースノートには、破壊的変更の概要が記載されています。
SDK リポジトリのドキュメントを正式な情報源として扱ってください。ここに記載するバージョン固有の差分は、時間とともに古くなります。移行先のプラットフォームファイルには、参照すべき正確なリポジトリが記載されています。
まず計画を立ててから移行する
すべてのプラットフォームで、次の順序で作業してください。
- ブランチを作成し、新しいメジャーバージョンに SDK を更新します。
- CHANGELOG の非推奨項目と削除項目を参考に、コンパイルエラーを修正します。
- 初回起動時の SDK ログを読み、実行時の動作を修正します。
- マージする前に、既存のテストスイートと手動のサンドボックスシナリオを実行します。
4. 実装
検出結果に一致するプラットフォームファイルを読みます。
platforms/ios.mdplatforms/android.mdplatforms/kmp.mdplatforms/flutter.mdplatforms/react-native.md
各プラットフォームファイルには、そのプラットフォームの両方の移行パスが記載されています。
5. 検証
次のすべてを満たすまでは、移行が完了したと宣言しないでください。
- 新しい SDK バージョンでアプリがビルドでき、気になる非推奨 API に関する警告がないこと。
- サンドボックスでの購入が成功し、想定した appUserID とともに、取引が RevenueCat ダッシュボードの Sandbox ビューに表示されること。
- 移行前からの既存のサブスクライバーがアプリを起動し、エンタイトルメントの状態が正しいこと。パス A では、これによりオブザーバーモードでの取り込みが機能したことを確認できます。パス B では、バージョン更新によって状態が失われなかったことを確認できます。
- リリース前に、デバッグログレベルの上書きを削除していること。