概要
Pro リリース(release/pro-202605)において mobile は練習機能を含む機能開発が完了しているが、front が追従できていない。front も mobile と同じ機能・UI/UX を実装するため、差分を洗い出して issue に分割した。
back の API は v2 に全機能分が揃っており、front 側の実装だけで大半が完結する。
front の PR #313 に含まれるのは Pro LP / Stripe Checkout / ProGate / ProUpgradeModal / useEntitlement / 法務ページ(特商法・利用規約・プライバシーポリシー)のみで、Pro 配下の実機能は未着手。
Phase 0: 基盤(最優先・他のほぼ全てがブロックされている)
Phase 1: Pro 課金・サブスク管理
Phase 2: 既存成績画面の Pro 開放・フィルタ追従(低コスト・高効果)
Phase 3: 練習ドメイン(front に一切存在しない)
Phase 4: ノート・振り返り
Phase 5: 目標・レビュー
Phase 6: スケジュール・素振り・活動可視化
Phase 7: 既存領域の UX 追従
差分なしと判断した領域
以下は front が既に mobile と実質パリティに達しており、issue 化していない。
打席記録 v2 API(作成/更新/削除/by_game)と3ステップウィザード・編集タブ構成
打席詳細入力の全項目(BSO カウント / 初球打ち / ランナー状況 / イニング / 打球の質 / タイミング / 球種 / 対戦投手 / 登板状況 / 自己分析メモ)と投手マスタ CRUD
試合記録ウィザードのフロー分岐(RecordPattern、no_play のサマリー直行)
グループ招待リンク(発行 / 共有 / コード参加)とグループランキング表(打撃6・投手6カテゴリ)
非公開アカウント(is_private / profile_visible_to?)の表示制御とフォローリクエスト状態
プロフィール編集の送信フィールド、フォロワー/フォロー中一覧、ユーザー検索
シーズン管理の CRUD(front が mobile より先行。Update: [front] シーズン管理の UX 細部を mobile と揃える #498 は導線の細部のみ)
成績の計算式ページ、試合結果サマリータブ、アワード(受賞歴)
Push 通知(device_tokens)は Web 対象外のため、#489 で方式を決めるまで差分扱いしない。
横断的な要検討事項
決済手段 : back 実装により Web は Stripe Checkout で独立して課金できる 構成(platform: web)で確定済み。ただし Stripe の webhook handler が checkout_session_completed のみ で、更新・解約・課金失敗・返金イベントが未処理の可能性が高い。Web 加入者の cancelled / billing_issue / expired への遷移が機能しないと Feature: [front] Web(Stripe) 解約導線と IAP 加入者向け解約案内を実装する #456 / Feature: [front] トライアル終了予告・課金失敗(billing_issue)の常設バナーを実装する #458 を作っても状態が更新されないため、back 側 issue の先行が必要 。
POST /api/v1/pro/sync は RevenueCat 専用 (RevenueCat::SubscriberSync を呼ぶ)。Stripe 加入者に対する挙動が不明なため Feature: [front] Checkout 完了後の Pro ステータス反映待ちと再同期ボタンを実装する #461 の前に確認が必要。
Stripe Customer Portal を使うか自前 UI か : 支払い方法更新・請求書・解約を Stripe 側に委譲すれば billing_issue 時の導線が標準で得られる。back に Portal Session 生成エンドポイントがないため方針決定が必要。
Web でのブラウザ制約 : 素振りのバックグラウンド継続実行(shadow_swing_background)は Web では成立しない。バイブレーションは iOS Safari 非対応。動画トリミングも実装コストが高い。これらの Pro 差別化を Web でどう扱うか要判断(Feature: [front] 素振りカウンター(設定 → カウント → 完了)を実装する #485 / Feature: [front] 野球ノートへのメディア添付(画像・動画)を実装する #477 )。
無料枠の定数が三重管理になる : FREE_CALENDAR_WINDOW_MONTHS = 3 や MENU_SET_FREE_LIMIT = 2 等が back / mobile / front に重複する。API から上限値を返す設計を検討したい。
entitlement 定数の手動同期が破綻しかけている : back から TS 型を自動生成する仕組み(rake タスク or JSON 配信)を別途検討する価値がある。
オンボーディング完了状態の保存場所 : mobile は端末ローカル。front を localStorage にするとデバイス間で共有されない(Feature: [front] 初回オンボーディング(Web版ウォークスルー)を実装する #497 )。
概要
Pro リリース(
release/pro-202605)において mobile は練習機能を含む機能開発が完了しているが、front が追従できていない。front も mobile と同じ機能・UI/UX を実装するため、差分を洗い出して issue に分割した。back の API は v2 に全機能分が揃っており、front 側の実装だけで大半が完結する。
front の PR #313 に含まれるのは Pro LP / Stripe Checkout /
ProGate/ProUpgradeModal/useEntitlement/ 法務ページ(特商法・利用規約・プライバシーポリシー)のみで、Pro 配下の実機能は未着手。Phase 0: 基盤(最優先・他のほぼ全てがブロックされている)
Phase 1: Pro 課金・サブスク管理
Phase 2: 既存成績画面の Pro 開放・フィルタ追従(低コスト・高効果)
Phase 3: 練習ドメイン(front に一切存在しない)
Phase 4: ノート・振り返り
Phase 5: 目標・レビュー
Phase 6: スケジュール・素振り・活動可視化
Phase 7: 既存領域の UX 追従
差分なしと判断した領域
以下は front が既に mobile と実質パリティに達しており、issue 化していない。
RecordPattern、no_playのサマリー直行)is_private/profile_visible_to?)の表示制御とフォローリクエスト状態Push 通知(
device_tokens)は Web 対象外のため、#489 で方式を決めるまで差分扱いしない。横断的な要検討事項
platform: web)で確定済み。ただし Stripe の webhook handler がcheckout_session_completedのみで、更新・解約・課金失敗・返金イベントが未処理の可能性が高い。Web 加入者のcancelled/billing_issue/expiredへの遷移が機能しないと Feature: [front] Web(Stripe) 解約導線と IAP 加入者向け解約案内を実装する #456 / Feature: [front] トライアル終了予告・課金失敗(billing_issue)の常設バナーを実装する #458 を作っても状態が更新されないため、back 側 issue の先行が必要。POST /api/v1/pro/syncは RevenueCat 専用(RevenueCat::SubscriberSyncを呼ぶ)。Stripe 加入者に対する挙動が不明なため Feature: [front] Checkout 完了後の Pro ステータス反映待ちと再同期ボタンを実装する #461 の前に確認が必要。billing_issue時の導線が標準で得られる。back に Portal Session 生成エンドポイントがないため方針決定が必要。shadow_swing_background)は Web では成立しない。バイブレーションは iOS Safari 非対応。動画トリミングも実装コストが高い。これらの Pro 差別化を Web でどう扱うか要判断(Feature: [front] 素振りカウンター(設定 → カウント → 完了)を実装する #485 / Feature: [front] 野球ノートへのメディア添付(画像・動画)を実装する #477)。FREE_CALENDAR_WINDOW_MONTHS = 3やMENU_SET_FREE_LIMIT = 2等が back / mobile / front に重複する。API から上限値を返す設計を検討したい。localStorageにするとデバイス間で共有されない(Feature: [front] 初回オンボーディング(Web版ウォークスルー)を実装する #497)。