[Release] Pro / 広告リリース(2026-05-31) - #80
Draft
ippei-shimizu wants to merge 390 commits into
Draft
Conversation
旧レポートには新指標(出塁率/長打率/OPS)が無く undefined.toFixed で落ちて いたため、fmt3 を null 安全にし欠損値は "-" 表示にする。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
密な1行メタ(取組N日・練習N・ノートN)を、アイコン付きのスタットチップに 変えて視認性を上げる。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- インターバル音をビープから笛の音(whistle.wav)に差し替え - カウント読み上げ(expo-speech)を追加。設定でON/OFFでき、10本ごとに 現在の本数を日本語で読み上げる(短いインターバルで詰まらないよう間引き) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
出塁率などに 400 を入れると「400.000」と表示されていたため、1未満は 従来の .XXX(3桁)、1以上は小数第1位まで(例: 400.0)に整形する。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- カウント読み上げを1本ごとに変更(前の読み上げを stop してから最新本数を発話) - 読み上げのみONでもマナーモードで鳴るよう audio session 設定を sound||voice に Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 笛の音源を短い「ぴっ!」(約130ms)に差し替え - 笛の音とカウント読み上げを排他化(一方をONにすると他方をOFF) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 設定画面の最上部にタイマーの説明文を表示 - 笛の音とカウント読み上げがどちらか一方のみ選べる旨の注記を追加 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- GoalPeriodType/ラベル/並び順に weekly/yearly/custom を追加 - 作成フォームで各期間タイプの開始日・期限を送信(週次=今週・年間=今年は自動、 カスタムは開始日/終了日を選択)。種類選択は6種になったため折り返しチップ表示に - カスタムは開始日≤終了日をフロントでも検証 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
タグの型/サービス/フックを追加し、ノート作成・編集フォームにタグ選択セクション (トグルチップ+自由追加)を組み込む。編集時は既存タグを初期選択する。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ノート詳細・記録一覧カードにタグチップを表示し、記録一覧にタグの複数選択 フィルタ(選択のいずれかを含む=OR)を追加。検索対象にもタグ名を含める。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
保存名は「打撃」のまま、表示だけ tagLabel で「#打撃」にする。自由追加の入力で 先頭に付けた # は保存名から除去する。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
実装は「取組 5日」とスペース区切りで描画するが、テストの正規表現が /取組5日/ でスペースを含まず一致せず CI が失敗していた。
設定インターバルで1周するストップウォッチ形式の円形リングを中央に表示し、テンポを視覚的に取れるようにした。リングと先端ドットは reanimated 共有値でインターバルに同期し、一時停止/再開・カウントアップに追従する。中央に本数、下部に目標までの全体進捗バーと経過時間を配置。
導線ラベル・画面タイトル・Paywall 文言・カードの説明を新名称に統一する。 エンタイトルメントキー(correlation_insights)は内部識別子のため変更しない。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
確定済み目標の履歴(/history)も取得し、is_achieved/is_finalized で3タブに分類。各タブに件数を表示し、確定済み目標は編集・達成トグルを無効化。GoalProgressBar は確定済みで「残りN日」ではなく「確定済み」を表示する。
取組中/克服/アーカイブの3タブ(件数バッジ付き)でstatus別に表示。「新しい課題に取り組む」ボタンをタブ上部の固定ヘッダーに移動し、各タブに空状態メッセージを用意した。
課題画面と同様に追加ボタンをタブバー上の固定ヘッダーへ移動し、リスト下部から削除した。
入力(コンディション・練習量・練習メニュー)×成績(打撃/投手)を選んで組み合わせを 作成する画面とAPI連携を追加。 - 型/定数(INPUT_OPTIONS/METRIC_OPTIONS)、service(create/delete)、mutationフックを追加 - (insight)/create.tsx を新設し _layout にルート登録 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
一覧を「自作」「おすすめ」に分けて表示し、自作カードは削除できるように。 上部に「組み合わせを作る」ボタンを追加。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
「因果ではなく」→「必ずそうなるとは限りません」等、統計用語を避けた表現にする。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
スクロール量でフェード表示する共通の useBackToTop フックと BackToTopButton を切り出し、ActivityView とダッシュボードの DashboardContent に配置した。
複数の目標が並ぶと壁のように見えていたため、ホームでは各目標を角丸のミニカードで 分離し、現在→目標と残り日数を1行にまとめて高さを抑える(GoalProgressBar に compact を追加)。目標一覧画面(既にカード有り)の表示は従来のまま。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
振り返りテンプレはノート作成時に問いを与えるノート機能のため、ホームの上達サイクルセクションから外し、ノート一覧ヘッダーに「テンプレ」管理ボタンを追加した。
前コミットで旧プロフィールノート画面に置いていたが、実際に使われる記録一覧(野球ノートタブ)の記録ボタン下にテンプレ管理リンクを配置し直した。
Feature: mobile AdMob広告配信の実装(バナー+インタースティシャル)
front側の改訂内容に合わせ、自動更新・課金タイミング・解約方法・ 返金ポリシー・価格変更時の対応・13歳未満禁止を第10条として追加する。
front側の改訂内容に合わせ、決済代行サービスへの第三者提供・課金目的・ AdMob広告についての記載を追加する。
front側の特商法ページをWebViewで表示する。設定画面からの導線を追加。
App Store審査ガイドライン(サブスク購入前の規約リンク提示)に対応する。
RevenueCatによる購入情報・Sentryのクラッシュデータ・AdMobの広告識別子など アプリが直接収集するデータ種別を宣言し、iOS 17+のPrivacy Manifest要件に対応する。
利用規約・プライバシーポリシーと同じくハードコード複製方式に統一し、 オフライン時にも表示できるようにする。
settings.tsx から router.push で直接遷移する画面(利用規約・プライバシー ポリシー・特商法・お問い合わせ・アカウント削除・成績の算出方法・ プロフィール編集)はStackの先頭になり canGoBack() が効かず、標準の戻る ボタンが表示されなかった。notifications/_layout.tsx と同じ headerLeft 明示パターンで解消する。
月額¥980→¥300、年額¥9,800→¥2,980(月あたり¥248)に修正。
back/mobileの16件の考慮漏れ・バグ・デグレについて、ユーザーと1件ずつ 合意した対応方針をまとめる。実装はこのプランに従って別セッションで行う。
purchasePackage 成功後の syncProStatus 失敗は Sentry 記録に留めて success 画面へ遷移する。課金済みなのに購入失敗と表示すると 二重購入を誘発するため(Pro 状態は webhook / 次回同期で回復する)。
restorePurchases は復元対象が無くても成功するため、返却された customerInfo の active entitlement の有無で成功/案内メッセージを 出し分ける。
disabled プロパティによる制御だけに頼らず、handlePurchase / handleRestore の関数先頭でも実行中フラグを確認して多重起動を防ぐ。
PAYMENT_PENDING_ERROR(保留中)と PRODUCT_ALREADY_PURCHASED_ERROR (購入済み)は失敗ではないため、汎用の「購入に失敗しました」ではなく 状況に応じた案内を表示する。
useFeatureFlag の戻り値(オブジェクト)を truthy 判定していたため Redirect が発火しなかった。enabled を分割代入して判定し、flag 取得中は ローディング表示にして false 誤判定による誤リダイレクトも防ぐ。 テストは Redirect が宣言的コンポーネントで router.push を呼ばない点を 踏まえ、共有モックに __redirectSpy を追加して遷移先を直接検証する形に修正。
Pro 状態の取得に失敗した場合、DEFAULT_PRO_STATUS(無料状態)のまま 描画すると Pro 加入者に「未加入」と誤表示するため、エラーであることを 明示して再試行ボタンを表示する。
back が返す 422 + error: "pro_active" を判別し、汎用エラーではなく 「先に解約してください」の案内とサブスクリプション管理画面への導線を表示する。
更新・解約・返金・別端末購入など、アプリ内購入フローを経由しない RevenueCat 側の顧客情報更新を検知して pro/status キャッシュを無効化する。
セルフレビューで検出。handlePurchase と同じバグクラスが handleRestore にも残っていた。restorePurchases 成功後の syncProStatus 失敗は Sentry 記録に留め、entitlement 有無の判定と結果表示まで到達させる。
テストルール(.claude/rules/testing.md)で新規テストの
jest.mock("@services/...") は禁止のため、DELETE /user を
MSW で intercept する形に修正。検証するシナリオは変更なし。
state はレンダーを跨ぐまで最新値を同期的に読めないため、非冪等な 課金・復元処理のガードとしては ref の方が確実。UI 表示用の state は ref と同時更新するので呼び出し側の記述は変えていない。 連打時に処理が1回しか走らないことを検証するテストも追加。
Fix: issue#450 Pro機能レビュー指摘対応(mobile)
staging環境が無いため、ngrokでlocalhostのbackを公開しApple Sandbox経由の 実課金Webhookをローカルで受け取り検証する手順をまとめる。
48 tasks
mobile PR#80 / back PR#216で実装されたPro機能について、機能ベースで QA観点を整理する。購入・復元・解約・プラン変更・entitlement・ Webhook同期・法務ページ導線・既知の実装差異等13カテゴリ60項目。
無料プランの上限(目標2件まで等)はpro_featuresフラグと無関係に常時有効だが、 上限到達時に開くPaywallModal自体はフラグでkill switchされ何も描画されないため、 フラグOFFの間は「操作しても無言で何も起きない」壊れたUXになっていた。 購入導線(プラン一覧・加入・購入の復元)だけをフラグでガードし、 contextMessageによる上限到達の説明は常に表示するよう修正した。 不要なOfferings取得(RevenueCatへのリクエスト)もフラグOFF時はスキップする。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
BUZZ BASE Pro リリース(2026年5月31日予定)の統合リリースブランチ。
各機能の作業ブランチはこの release/pro-202605 から切り、このブランチへマージしていく。
本番反映時に main へマージし、EAS Build → App Store 提出。
含まれる issue(ルートリポジトリ: ippei-shimizu/buzzbase)
開発フロー
作業ブランチ(feature/{issue番号}-{機能名})→ release/pro-202605 → main → EAS Build → App Store
マージ予定
2026-05-30 頃 → main へマージ → EAS Build → App Store 提出。
それまでは Draft 状態を維持。
関連ドキュメント(buzzbase ルートリポジトリ)