推し活プラス / Point Mall ・ ドラフト(要件定義中)
| バージョン | v1.1 |
|---|---|
| ステータス | 要件定義中 |
| プロジェクト | 推し活プラス(応援スコア) |
| 担当者 | Tomohiro Abe |
| 作成日時 | 2026年6月11日 |
| 最終更新日時 | 2026年6月15日 |
| 関連PRD | PRD_応援スコアリセット機能.md |
| リリース目標 | 2027年3月(チムニー生活の初回リセットに間に合わせる) |
| バージョン | 更新日 | 変更内容 |
|---|---|---|
| v1.0 | 2026/06/11 | 初版作成(§1〜§11) |
| v1.0 | 2026/06/11 |
|
| v1.1 | 2026/06/15 |
|
応援スコアに「ターム(期間)」の概念を導入し、一定期間が経過するとスコアをリセットして次のタームを開始できるようにする。リセットの有無とターム期間はオーナーごとに任意で設定できる。
| 用語 | 定義 |
|---|---|
| 集計方式 | オーナーのスコア集計の挙動。永続(累計) または ターム制 のいずれか。 |
| ターム | スコアを集計する期間の単位。開始日・終了日を持つ。例:「第3期 2026/04/01〜06/30」。 |
| リセット | あるタームが終了し、次タームが開始すること。次タームの今期スコアは0から始まる。 |
| 今期スコア | 現在アクティブなターム内で獲得した応援スコアの合計。 |
| 永続スコア(累計) | 従来どおり全期間を合算したスコア。永続オーナーで使用。 |
| 称号セット | あるタームに紐づく称号(owner_badges)のまとまり。 |
オーナー設定(応援スコア)に「スコア集計方式」を追加する。デフォルトは永続(累計)で、既存オーナーの挙動は変わらない。
| 値 | 挙動 | 称号 |
|---|---|---|
永続(累計)(既定) | 全期間のスコアを合算(従来どおり) | 累計スコアで判定・永続 |
ターム制 | アクティブなターム内のスコアのみ集計。ターム終了で次タームへ | 今期スコアで判定・タームごとにリセット |
スコア集計方式設定(ターム設定を含む)は、報酬設定で「応援スコア付与」が有効な場合のみ表示する。応援スコア付与が無効のオーナーには集計方式の概念が不要なため、設定欄ごと非表示とする。
| 応援スコア付与 | スコア集計方式設定の表示 |
|---|---|
| ✓ 有効(チェックあり) | 表示する(永続 / ターム制 を選択可) |
| — 無効(チェックなし) | 非表示(設定欄ごと隠す) |
ターム制オーナーは、ターム管理セクションで期間を登録する。1タームは開始日・終了日とターム名を持つ。
| 項目 | 必須 | 備考 |
|---|---|---|
| ターム名 | ✓ | 例:「第3期」「2026 Spring」。ユーザー画面に表示 |
| 開始日 | ✓ | 日付。JST基準 |
| 終了日 | ✓ | 日付。終了日の 23:59:59 JST まで有効 確定(時刻単位の指定は当面スコープ外) |
| 状態 | — | DBカラムを持たず、参照時の日付と start_date/end_date の比較で都度算出する。予定(開始日未到来)/ 進行中(期間内)/ 終了(終了日経過) |
ターム管理(例) ┌──────────────────────────────────────────────┐ │ 第2期 2026/01/01〜03/31 終了 │ │ 第3期 2026/04/01〜06/30 進行中 残り12日 │ │ 第4期 2026/07/01〜09/30 予定 [編集][削除]│ │ [+ 新規作成] [⧉ コピーして作成]│ └──────────────────────────────────────────────┘
状態はDBカラムを持たず、現在日付と start_date/end_date の比較で都度算出する(バッチ・cron不要)。
予定(scheduled) ──開始日到来──> 進行中(active) ──終了日経過──> 終了(closed)
│
└─ 終了と同時に、開始日が到来した次タームを active 化
SupportScore::BadgeEvaluationService)。付与レコードの帰属タームが直前の付与と異なるターム(=ターム切替後の最初の付与)の場合に再評価を自動起動し、新タームの称号判定を開始する。23:59:59 JST まで有効)。次タームを設けないケースや、タームとタームの間に空白が生じるケースは運用上起こりうる。アクティブなタームが無い期間(=ターム外)の挙動は以下とする。
| 対象 | 挙動 |
|---|---|
| 応援スコア | 表示する。ターム外で付与されたスコアも一旦は反映(ターム外スコアとして加算・表示) |
| スコア付与 | 継続する(停止しない) |
| 称号 | 対象タームが無いため表示しない(その期間に紐づく称号セットが存在しないため) |
ターム制では、称号(owner_badges)の判定基準を「累計スコア」から「今期スコア」に変更し、称号をタームごとに保持する。
SupportScore::BadgeEvaluationService:スコア集計(TotalScoreQuery)と称号取得をアクティブタームの今期スコア/称号セットにスコープして流用する。OwnerBadges::RecalculationService:既に付与・剥奪の両方をスコアベースで行う。集計をターム期間で絞れば、今期スコア0の新タームを対象に再集計を走らせるだけで全員が未獲得に戻り、自然にリセットされる。専用の削除処理は不要。OwnerBadgeAward)はタームごとに別レコードのため、新タームの再集計は過去タームの実績に影響しない(履歴保全)。| 方式 | 内容 | 省力化 | 柔軟性 | 評価 |
|---|---|---|---|---|
| A. 完全テンプレート (称号はターム非依存) |
称号はオーナー単位で1セットのみ定義。タームはスコアだけリセットし称号定義は共有 | ◎ 登録ゼロ |
△ ターム毎に内容を変えられない |
— |
| B. 毎ターム手動登録 | 各タームで称号を都度新規作成 | × 毎回8個登録 |
◎ | 却下 |
| C. 新規作成+コピー作成 (推奨) |
ターム作成手段を「新規作成(空)」と「既存タームをコピーして作成」の2操作に分ける。コピーで前タームの称号セットごと引き継ぎ、差分だけ編集 | ◎ コピーから作成 |
◎ ターム毎に調整可 |
採用 |
ターム作成の入口を「新規作成」と「コピーして作成」の2つに分けるだけのシンプルな構成。コピーから作れば前タームの称号セットが既定で引き継がれるため「使い回し」を簡単に満たし、新規作成なら空から設定できる。Aの「変えられない」弱点とBの「毎回登録」負荷の両方を回避する。
ターム作成手段を以下の2つに分け、シンプルに省力化を実現する。
| 操作 | 称号の初期状態 | 用途 |
|---|---|---|
| 新規作成 | 称号データなし(空) | 称号を一から設定したいとき |
| コピーして作成 | コピー元タームの称号セットを既定で引き継ぐ | 前タームと同じ/類似の称号を使い回すとき(=大半のケース) |
ターム管理 ┌──────────────────────────────────────────────┐ │ 第3期 2026/04/01〜06/30 進行中 │ │ │ │ [+ 新規作成] [⧉ コピーして作成] │ └──────────────────────────────────────────────┘ 「コピーして作成」 ┌──────────────────────────────────────────────┐ │ コピー元 [第3期 ▼] ← 称号8件を引き継ぎ │ │ ターム名 [第4期 ] │ │ 開始日 [2026/07/01] 終了日 [2026/09/30] │ │ [キャンセル] [作成する] │ └──────────────────────────────────────────────┘
称号タブ ┌──────────────────────────────────────────────┐ │ 対象ターム [第4期(予定)▼] │ │ ─────────────────────────────────────────────│ │ 🥉 ブロンズサポーター 必要スコア 500 [編集]│ │ 🥈 シルバーサポーター 必要スコア 1500 [編集]│ │ 🥇 ゴールドサポーター 必要スコア 5000 [編集]│ │ … (前タームから8件引き継ぎ済み) │ │ [+ 称号を追加] │ └──────────────────────────────────────────────┘
ターム制オーナーの応援スコアマイページに、今期の状況・ターム情報・通算実績を表示する。永続オーナーは従来表示のまま変更しない。
応援スコアマイページ(ターム制) ┌──────────────────────────────────────────────┐ │ [ 今期 ] [ 過去のターム ] ← タブ切替 │ │ ─────────────────────────────────────────────│ │ 第3期(2026/04/01〜2027/03/31) 残り294日 │ │ 今期の応援スコア 1,250 pt │ │ 今期の称号 🥈 シルバーサポーター │ │ ─────────────────────────────────────────────│ │ 通算応援スコア 12,300 pt / 応援歴 3年 │ ← A案:別軸 └──────────────────────────────────────────────┘
| 表示要素 | 内容 | 状態 |
|---|---|---|
| 現在のターム名・期間 | 「第3期(2026/04/01〜2027/03/31)」。期間長はオーナー設定(チムニー生活は1年を想定) | 確定 |
| 残り日数 | 終了日までのカウント。継続応援を促す | 確定 |
| 今期スコア | アクティブターム内の合計 | 確定 |
| 今期称号 | 今期スコアで獲得した称号 | 確定 |
| 通算応援スコア | 全タームを通算した累計スコア(リセットされない別軸)。A案として併設 | 確定 |
| 応援歴(年数) | 応援を始めてからの経過年数。長期応援の承認(要:起算日の定義) | 提案 |
過去タームは「今期」とは別タブで一覧表示する。今期表示が散らからず、過去の実績を独立して振り返れる。
「過去のターム」タブ ┌──────────────────────────────────────────────┐ │ 第2期 2025/04〜2026/03 3,400 pt / 🥇 ゴールド │ │ 第1期 2024/04〜2025/03 980 pt / 🥉 ブロンズ │ └──────────────────────────────────────────────┘
| 切替パターン | スコア集計 | マイページ表示 |
|---|---|---|
| 永続 → ターム制 | 切替前の付与分は「ターム外」扱い(どのタームにも帰属しない) | 過去タームタブに「ターム外」行として表示する |
| ターム制 → 永続 | 全期間の付与レコードを合算(ターム時代のスコアも含む全件) | 永続表示に切り替わり、過去タームタブは非表示にする |
シーズン/期間リセットを持つサービスの事例を踏まえ、以下を段階的に検討する。ランキングは今回スコープ外のため、順位・昇降格系の演出は除く。
| # | 施策 | 参考 | 強度 |
|---|---|---|---|
| 1 | 常設のターム名+期間+残り日数(10.1で確定) | Duolingo/バトルパス | 必須 |
| 2 | 終了間際の強調(残りN日で色・アイコンをアクセント。煽りすぎない) | Duolingo カウントダウン | 軽 |
| 3 | ターム終了サマリー(「今期の応援スコア◯pt/獲得称号◯◯」を称える一度きりの演出)→ 過去タームタブへ動線 | Duolingo リザルト画面の軽量版 | 中(推奨) |
| 4 | 新ターム開始の告知(「第4期がスタートしました」) | シーズン開始告知 | 軽 |
ファイル:prototype_応援スコアリセット_マイページ.html
上記プロトタイプでは以下の方針で実装した。
| 要素 | 方針・備考 |
|---|---|
| ターム情報バナー | ターム名(第N期)・期間(開始〜終了)・残り日数ピルを金カードの上部に横並びで表示。残り日数が少ない場合(例:12日)のUI調整は今後検討 |
| 今期スコア表示 | 金カード中央に大きく表示。サブバーの累計スコア位置にも今期スコアを反映(ターム制では累計ではなく今期が主軸) |
| 今期の称号 | 金カード内に160×160の称号バッジ画像エリアを配置(スコアの下)。画像未設定時はシルバーカラーのフォールバックSVGを表示。称号名は白いpillボタンとしてバッジ下部に表示。「次の称号まで○pt」は表示しない。永続モードのランクバッジUIと同スタイル(v2ブラッシュアップ) |
| 過去ターム履歴 | §10.2 で「別タブ」と記載していたが、プロトタイプでは金カード内のアコーディオン(折りたたみ)で実装。タブ vs アコーディオンは今後の検討事項(§11参照) |
| 通算スコア(A案) | v1プロトタイプには含めず。別軸としての追加要否は今後決定 |
| 永続モード | 既存の「累計応援スコア」カード表示を維持(変更なし)。モード切替トグルで2パターンを比較確認可能 |
| # | 論点 | 暫定方針 | 状態 |
|---|---|---|---|
| 1 | 付与スコアのターム帰属:付与日基準か、既存の集計月(target_month)基準か | 付与日基準で確定。付与日がどのタームの期間に含まれるかで帰属を判定(後からの開始日遡及にも追従、§6.3) | 確定 |
| 2 | 称号の再判定処理:既存ロジックの流用可否 | 流用で確定。RecalculationService の付与/剥奪を流用し、集計をターム期間にスコープ。ターム切替時は新タームを対象に再集計を自動起動してリセット(§7) | 確定 |
| 3 | リセットの締め時刻 | 終了日 23:59:59 JST 締め、翌0:00以降のバッチで切替。時刻単位の指定は当面スコープ外(要望次第で追加) | 確定 |
| 4 | ターム外スコアの後続タームへの取り込み | 案A確定:ターム帰属は付与日で判定。新タームの開始日以降のみ今期スコア。開始日を前ターム終了翌日に遡って登録した場合はターム外分も新タームに含まれる(§6.3) | 確定 |
| 5 | 集計方式の途中切替(永続⇄ターム制)/切替後のスコア集計・UI表示 | 両方向対応。永続→ターム制:切替前の付与分は「ターム外」扱い・過去タームタブに表示。ターム制→永続:永続スコアは全期間の付与レコードを合算(ターム分含む全件)。マイページは永続表示に切り替わり過去タームタブは非表示(§4・§10.2) | 確定 |
| 8 | ターム切替の実現方式:日次バッチ vs 都度計算 | 日次バッチ・cronは不要。ターム状態(予定/進行中/終了)は start_date/end_date と現在日付の比較で都度算出。称号再評価はスコア付与イベントをトリガーとし、帰属タームが変わった時点で自動起動(§6.1・§6.2) | 確定 |
| 6 | 3系統付与(月額/キャンペーン/ウェルカム)それぞれのターム帰属ルール | いずれも付与日がどのタームの期間に含まれるかで帰属(§6.3と同一規則) | 確定 |
| 7 | 称号シェア画像の引き継ぎ方法 | コピー時は同一画像を参照、差し替え時のみ再アップで確定(§8.3) | 確定 |
PRD_応援スコアリセット機能.mdSupportScoreGrant / SupportScoreCampaignGrant / WelcomeBonusGrantSupportScoreLog(ビュー)/ SupportScore::TotalScoreQueryOwnerBadge(required_support_score)/ SupportScore::BadgeEvaluationService / OwnerBadgeRecalculationWorkerowners テーブル(reward_score ほか)本仕様書はドラフトです。提案 および 要確定 項目はレビューを経て確定します。