ランキング有料化の進め方(初回導入ガイド)

現行運用メモ:

本資料は、TeamBaseで初めて有料化を導入するための実務ガイドです。

対象要件(今回の確定方針):


1. まず決めること(実装前)

1-1. 無料/有料の境界を固定する

本件では次の境界で固定します。

ポイント:

1-2. プラン情報を定義する

1-3. KPIを先に決める

最低限、以下を計測します。

判断に使う指標:


2. 実装の進め方(初回向け・安全順)

Step 1: 表示ガードを実装(先にUI境界を完成)

狙い:

Step 2: 購入・復元フローを実装

必須条件:


2-補足. 「未購入→購入→有料部分が見える」通しテストはできる?

できます。iOS/Android ともに「未購入状態で起動 → アプリ内で購入 → 購入完了 → 有料タブがアンロック」を一連で確認できます。

ただし、TeamBase の現状実装では 購入完了=即アンロック ではなく、 購入完了 → Functions(recordPremiumPurchaseV1)に購入情報を記録 →(必要なら)ユーザーの premium フラグ更新 → 画面の premium 判定が切り替わる、という流れになります。

事前条件(共通)

「購入したら即アンロック」をテスト環境で成立させる(重要)

Functions の recordPremiumPurchaseV1 は、環境変数 PREMIUM_TRUST_CLIENT_PURCHASE=true のときだけ、 users/{uid}isPremium/premiumActive/premiumEntitlements.rankings=true をセットして即時アンロックします。

設定方法(どれか1つ):

※ 関数名と Cloud Run のサービス名が一致しない場合があるため、まず services list で確認するのが安全です。


2-補足-1. iOS(StoreKit Testing)での通しテスト手順(最短・おすすめ)

App Store Connect を用意しなくても、ローカルの StoreKit テストで「未購入→購入→復元」を回せます。

  1. Xcode で iOS プロジェクトを開く(teambase/ios/Runner.xcworkspace
  2. StoreKit Configuration(例: Premium.storekit)を追加し、サブスク商品を作成
    • Product ID: TeamBase_monthly_premium
    • 期間: 1か月
    • 価格: 300円相当(テスト値でOK)
  3. Scheme 設定
    • Product > Scheme > Edit Scheme... > Run > Options > StoreKit Configuration で上記 .storekit を選択
  4. iOS Simulator(または実機)で起動
  5. ランキング画面のロックされたタブで「購入」→シートで購入→完了
  6. 完了後に有料タブが見えること(アンロック)を確認
  7. 「未購入状態」に戻したい場合
    • Xcode の StoreKit 管理(取引/購入履歴のリセット)でトランザクションをクリアして再確認

復元テスト:


2-補足-2. iOS(Sandbox / TestFlight)での通しテスト手順

  1. App Store Connect でサブスク商品を作成
    • Product ID: TeamBase_monthly_premium
  2. Sandbox テスターを作成
  3. 実機でアプリを起動し、購入シートで Sandbox アカウントを使って購入
  4. 完了後に有料タブが見えることを確認

注意:


2-補足-3. Android(Play Console 内部テスト)での通しテスト手順

  1. Play Console でサブスク商品を作成
    • 商品ID: monthly_premium_300
    • ベースプラン: 1か月 / 300円
  2. 内部テストトラックにビルドを上げ、テスターに配布
  3. テスト端末で Play 経由でインストール(Play 以外のインストールだと課金テストできないことがあります)
  4. アプリで「購入」→購入完了→有料タブが見えることを確認

注意:

Step 3: サーバー側で購読状態を確定

狙い:

Step 4: 計測イベントを埋め込む

Step 5: ストア審査準備


3. iOS / Google Play の課金登録手順(初回向け)

3-1. iOS(App Store Connect)

  1. App Store Connectで対象アプリを開く
  2. 「サブスクリプション」を作成
    • 参照名: TeamBase プレミアム月額
    • Product ID: TeamBase_monthly_premium(iOS アプリ実装と一致させる)
    • 期間: 1か月
    • 価格: 300円帯を選択
  3. ローカライズ情報を入力
    • 表示名
    • 説明文(無料範囲: チーム成績のみ、有料範囲: それ以外)
  4. サブスクリプショングループを作成/紐付け
    • 将来プラン追加時のアップグレード/ダウングレード管理に必要
  5. 審査提出に必要な情報を入力
    • スクリーンショット
    • 審査メモ(有料機能の場所、復元導線の場所)
  6. Sandboxテスターを作成し、iOS実機/Simulatorで購入・復元を確認

注意点:

3-2. Google Play(Play Console)

  1. Play Consoleで対象アプリを開く
  2. 「収益化 > 商品 > 定期購入」を作成
    • 商品ID: monthly_premium_300(Android アプリ実装と一致させる)
    • 名前/説明: iOSと同じ方針の文言にする
  3. ベースプランを作成
    • 期間: 1か月
    • 価格: 300円
    • 自動更新を有効
  4. (必要に応じて)オファーを設定
    • 初回導入時は構成を簡単にするためオファーなし推奨
  5. 内部テストトラックで課金テスト
    • ライセンステスターを設定
    • 購入、解約、復元相当動作を確認

注意点:

3-3. 両ストア共通チェック


4. 画面仕様(今回要件に合わせた最小構成)

無料ユーザー

課金ユーザー


5. リスクと対策(初回導入で重要)

リスク1: 無料ユーザー離脱

リスク2: 課金状態の不整合

リスク3: ストア審査差し戻し


6. リリース手順(推奨)

  1. 内部テスト版
    • 無料/有料出し分けのUI確認
    • 購入/復元の動作確認
  2. 限定公開(小規模)
    • KPIの初期値確認(1〜2週間)
  3. 本番展開
    • 課金転換率と離脱率を毎週レビュー

7. 受け入れチェックリスト


8. 最初の1か月運用ルール


9. 一部ユーザーを無料にするプロモーションコード運用

「一部のユーザーだけ無料で使えるようにしたい」場合、進め方は大きく2通りあります。

9-1. ストア側のプロモーションコードを使う

対象:

向いているケース:

流れ:

  1. iOS は TeamBase_monthly_premium、Android は monthly_premium_300 のサブスク商品を作成済みにする
  2. ストア管理画面でプロモーションコード(Offer Code / Promo Code)を発行する
  3. 対象ユーザーにコードを配布する
  4. ユーザーはストア側でコードを引き換える
  5. アプリ起動後、購入/復元相当の処理で entitlement を反映する

注意:

9-2. TeamBase 独自のプロモーションコードを作る(推奨)

対象:

向いているケース:

推奨理由:

9-3. TeamBase 独自コードの実装手順(推奨)

Step 1: コードのルールを決める

最初は次の最小仕様が安全です。

Step 2: Firestore にコード管理用コレクションを作る

例:

保持項目例:

平文コードは原則 Firestore に保存せず、team recovery code と同様にハッシュで検証する運用が安全です。

Step 3: Functions を2本追加する

追加候補:

付与時に更新するフィールド例:

Step 4: 失効処理を決める

期限付きコードを配るなら、次のどちらかが必要です。

初回導入では、定期ジョブで期限切れユーザーの premiumActive を落とす方式が分かりやすいです。

Step 5: 管理UI / 入力UI を追加する

Step 6: 監査ログを残す

購入と同様に audit log を残しておくと、問い合わせ時の追跡がしやすくなります。

9-4. 実運用のおすすめ方針

今回の TeamBase では、次の住み分けが現実的です。

この形にすると、通常課金フローはそのまま維持しつつ、例外的な無料付与だけを安全に扱えます。

9-5. 初回導入で避けたほうがよい構成

初回は次の最小構成が安全です。

9-6. 今回の暫定運用(確定)

当面は管理UIを作らず、共通の固定コードを1つだけ運用します。

実装方針:

この構成なら、エミュレーターでも「premium 会員になった後の画面挙動」をストア課金に近い形で確認できます。

9-7. 今後追加したい有料機能メモ

今後は、年度単位の一覧発行機能も premium 対象に追加する想定です。

候補:

配置候補:

方針:


関連資料