応援スコア リセット機能 仕様書v1.1

推し活プラス / Point Mall ・ ドラフト(要件定義中)

バージョンv1.1
ステータス要件定義中
プロジェクト推し活プラス(応援スコア)
担当者Tomohiro Abe
作成日時2026年6月11日
最終更新日時2026年6月15日
関連PRDPRD_応援スコアリセット機能.md
リリース目標2027年3月(チムニー生活の初回リセットに間に合わせる)

変更履歴

バージョン更新日変更内容
v1.0 2026/06/11 初版作成(§1〜§11)
v1.0 2026/06/11
  • §10.4 追記:マイページ プロトタイプ実装方針(v1)
  • §10.4 今期の称号 UI をサブカード形式からバッジ画像エリア(160×160)に変更(プロトタイプ更新に追従)
  • §3 スコープ外に「管理画面での過去ターム履歴閲覧」を追加
  • §9 「過去タームの履歴」セクションを削除(内容は §3・§10.2 に統合)
v1.1 2026/06/15
  • §4 切替時の挙動を確定:ターム制→永続は全期間合算、永続→ターム制は切替前付与をターム外扱いとして表示
  • §6.1・6.2 日次バッチ不要に変更。ターム状態を都度計算・称号再評価をスコア付与イベントトリガーに変更(開発チームFB反映)
  • §10.2 集計方式切替後のマイページ表示ルール表を追加
  • §11 #5 を更新、#8(バッチ不要論)を確定追加
凡例 確定 PRDで合意済み 提案 本仕様書での提案(レビューで確定) 要確定 未決定・要相談

目次

  1. 概要・要件
  2. 用語定義
  3. スコープ
  4. 集計方式の選択(オーナー設定)
  5. ターム設定と事前登録
  6. タームのライフサイクルとリセット処理
  7. 称号のターム対応
  8. 称号登録の省力化(重点)
  9. ユーザー画面表示
  10. 検討事項・残論点
  11. 関連資料

1概要・要件

応援スコアに「ターム(期間)」の概念を導入し、一定期間が経過するとスコアをリセットして次のタームを開始できるようにする。リセットの有無とターム期間はオーナーごとに任意で設定できる。

主要要件

2用語定義

用語定義
集計方式オーナーのスコア集計の挙動。永続(累計) または ターム制 のいずれか。
タームスコアを集計する期間の単位。開始日・終了日を持つ。例:「第3期 2026/04/01〜06/30」。
リセットあるタームが終了し、次タームが開始すること。次タームの今期スコアは0から始まる。
今期スコア現在アクティブなターム内で獲得した応援スコアの合計。
永続スコア(累計)従来どおり全期間を合算したスコア。永続オーナーで使用。
称号セットあるタームに紐づく称号(owner_badges)のまとまり。

3スコープ

対象

対象外(やらないこと)

4集計方式の選択(オーナー設定)

オーナー設定(応援スコア)に「スコア集計方式」を追加する。デフォルトは永続(累計)で、既存オーナーの挙動は変わらない。

挙動称号
永続(累計)
(既定)
全期間のスコアを合算(従来どおり)累計スコアで判定・永続
ターム制アクティブなターム内のスコアのみ集計。ターム終了で次タームへ今期スコアで判定・タームごとにリセット
集計方式の途中切替に対応する 確定 運用途中での切替を両方向とも想定する(イレギュラーだが発生を見込む)。 確定 切替後は既存の「再集計」で付与/剥奪を再計算する。永続時代の累計実績は過去履歴として保全し、初回タームは開始日以降の今期スコアで再判定する(§7)。

4.1 管理画面の表示条件 確定

スコア集計方式設定(ターム設定を含む)は、報酬設定で「応援スコア付与」が有効な場合のみ表示する。応援スコア付与が無効のオーナーには集計方式の概念が不要なため、設定欄ごと非表示とする。

応援スコア付与スコア集計方式設定の表示
✓ 有効(チェックあり)表示する(永続 / ターム制 を選択可)
— 無効(チェックなし)非表示(設定欄ごと隠す)

5ターム設定と事前登録

ターム制オーナーは、ターム管理セクションで期間を登録する。1タームは開始日・終了日ターム名を持つ。

5.1 ターム項目

項目必須備考
ターム名例:「第3期」「2026 Spring」。ユーザー画面に表示
開始日日付。JST基準
終了日日付。終了日の 23:59:59 JST まで有効 確定(時刻単位の指定は当面スコープ外)
状態DBカラムを持たず、参照時の日付と start_date/end_date の比較で都度算出する。予定(開始日未到来)/ 進行中(期間内)/ 終了(終了日経過)

5.2 事前登録 確定

ターム管理(例)
┌──────────────────────────────────────────────┐
│ 第2期  2026/01/01〜03/31   終了                │
│ 第3期  2026/04/01〜06/30   進行中  残り12日    │
│ 第4期  2026/07/01〜09/30   予定    [編集][削除]│
│                    [+ 新規作成] [⧉ コピーして作成]│
└──────────────────────────────────────────────┘

5.3 入力バリデーション 提案

6タームのライフサイクルとリセット処理

6.1 状態遷移

状態はDBカラムを持たず、現在日付と start_date/end_date の比較で都度算出する(バッチ・cron不要)。

予定(scheduled) ──開始日到来──> 進行中(active) ──終了日経過──> 終了(closed)
                                      │
                                      └─ 終了と同時に、開始日が到来した次タームを active 化

6.2 リセット処理 確定

6.3 ターム外期間(アクティブなタームが無い期間)の扱い 確定

次タームを設けないケースや、タームとタームの間に空白が生じるケースは運用上起こりうる。アクティブなタームが無い期間(=ターム外)の挙動は以下とする。

対象挙動
応援スコア表示する。ターム外で付与されたスコアも一旦は反映(ターム外スコアとして加算・表示)
スコア付与継続する(停止しない)
称号対象タームが無いため表示しない(その期間に紐づく称号セットが存在しないため)
ターム帰属は付与日で判定(案A) 確定 スコアがどのタームに属するかは、付与日がどのタームの期間(開始日〜終了日)に含まれるかで判定する。どのタームの期間にも含まれない付与が「ターム外スコア」となる。

7称号のターム対応

ターム制では、称号(owner_badges)の判定基準を「累計スコア」から「今期スコア」に変更し、称号をタームごとに保持する。

既存実装の流用方針 確定

8 称号登録の省力化(重点)

背景 1タームあたり8個程度の称号が想定され、かつ今タームと次タームで同じ/類似の称号を使い回すケースが多い。ターム毎に称号を一から登録するのは運用負荷が大きいため、登録を省力化する仕組みを設ける。

8.1 方式比較

方式内容省力化柔軟性評価
A. 完全テンプレート
(称号はターム非依存)
称号はオーナー単位で1セットのみ定義。タームはスコアだけリセットし称号定義は共有
登録ゼロ

ターム毎に内容を変えられない
B. 毎ターム手動登録 各タームで称号を都度新規作成 ×
毎回8個登録
却下
C. 新規作成+コピー作成
(推奨)
ターム作成手段を「新規作成(空)」と「既存タームをコピーして作成」の2操作に分ける。コピーで前タームの称号セットごと引き継ぎ、差分だけ編集
コピーから作成

ターム毎に調整可
採用
推奨:C. 新規作成+コピー作成(2操作) 提案

ターム作成の入口を「新規作成」と「コピーして作成」の2つに分けるだけのシンプルな構成。コピーから作れば前タームの称号セットが既定で引き継がれるため「使い回し」を簡単に満たし、新規作成なら空から設定できる。Aの「変えられない」弱点とBの「毎回登録」負荷の両方を回避する。

8.2 ターム作成の2つの入口 提案

ターム作成手段を以下の2つに分け、シンプルに省力化を実現する。

操作称号の初期状態用途
新規作成称号データなし(空)称号を一から設定したいとき
コピーして作成コピー元タームの称号セットを既定で引き継ぐ前タームと同じ/類似の称号を使い回すとき(=大半のケース)
ターム管理
┌──────────────────────────────────────────────┐
│ 第3期  2026/04/01〜06/30  進行中               │
│                                                │
│        [+ 新規作成]   [⧉ コピーして作成]       │
└──────────────────────────────────────────────┘

「コピーして作成」
┌──────────────────────────────────────────────┐
│ コピー元   [第3期 ▼]   ← 称号8件を引き継ぎ     │
│ ターム名   [第4期                         ]    │
│ 開始日     [2026/07/01]  終了日 [2026/09/30]   │
│                       [キャンセル] [作成する]  │
└──────────────────────────────────────────────┘

8.3 コピー後の編集

称号タブ
┌──────────────────────────────────────────────┐
│ 対象ターム [第4期(予定)▼]                     │
│ ─────────────────────────────────────────────│
│  🥉 ブロンズサポーター   必要スコア 500   [編集]│
│  🥈 シルバーサポーター   必要スコア 1500  [編集]│
│  🥇 ゴールドサポーター   必要スコア 5000  [編集]│
│  … (前タームから8件引き継ぎ済み)             │
│                              [+ 称号を追加]    │
└──────────────────────────────────────────────┘
シェア画像の引き継ぎ 確定 複製時は同じ画像を参照(ストレージは共有)し、差し替え時のみ新規アップロード。ターム毎に重複アップロードさせない。

10ユーザー画面表示

ターム制オーナーの応援スコアマイページに、今期の状況・ターム情報・通算実績を表示する。永続オーナーは従来表示のまま変更しない。

10.1 マイページの表示要素

応援スコアマイページ(ターム制)
┌──────────────────────────────────────────────┐
│ [ 今期 ]  [ 過去のターム ]          ← タブ切替   │
│ ─────────────────────────────────────────────│
│ 第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案として併設確定
応援歴(年数)応援を始めてからの経過年数。長期応援の承認(要:起算日の定義)提案
A案:通算スコア/応援歴の併設 確定 称号・今期スコアはタームでリセットされるが、通算応援スコアはリセットしない別軸として常時表示する。航空の「生涯マイル」やファンクラブの「継続年数」に倣い、応援の積み重ねが消えずに残る体験を担保し、推し活(CHIMNEY TOWNへの応援)の温度感に合わせる。「応援歴◯年」の併記は任意(提案)。 実装面:通算スコアは全期間を合算する現行の集計(ターム期間で絞らない)がそのまま使えるため、追加負荷は小さい。今期スコアのみターム期間で絞る。

10.2 過去タームの見せ方(別タブ) 確定

過去タームは「今期」とは別タブで一覧表示する。今期表示が散らからず、過去の実績を独立して振り返れる。

「過去のターム」タブ
┌──────────────────────────────────────────────┐
│ 第2期  2025/04〜2026/03   3,400 pt / 🥇 ゴールド │
│ 第1期  2024/04〜2025/03     980 pt / 🥉 ブロンズ │
└──────────────────────────────────────────────┘

集計方式切替後の表示ルール 確定

切替パターンスコア集計マイページ表示
永続 → ターム制 切替前の付与分は「ターム外」扱い(どのタームにも帰属しない) 過去タームタブに「ターム外」行として表示する
ターム制 → 永続 全期間の付与レコードを合算(ターム時代のスコアも含む全件) 永続表示に切り替わり、過去タームタブは非表示にする

10.3 ターム切替の演出UI(他社事例と提案) 提案

シーズン/期間リセットを持つサービスの事例を踏まえ、以下を段階的に検討する。ランキングは今回スコープ外のため、順位・昇降格系の演出は除く。

#施策参考強度
1常設のターム名+期間+残り日数(10.1で確定)Duolingo/バトルパス必須
2終了間際の強調(残りN日で色・アイコンをアクセント。煽りすぎない)Duolingo カウントダウン
3ターム終了サマリー(「今期の応援スコア◯pt/獲得称号◯◯」を称える一度きりの演出)→ 過去タームタブへ動線Duolingo リザルト画面の軽量版中(推奨)
4新ターム開始の告知(「第4期がスタートしました」)シーズン開始告知
リサーチ要点

10.4 プロトタイプ実装方針(v1) 確定

ファイル:prototype_応援スコアリセット_マイページ.html
上記プロトタイプでは以下の方針で実装した。

要素方針・備考
ターム情報バナーターム名(第N期)・期間(開始〜終了)・残り日数ピルを金カードの上部に横並びで表示。残り日数が少ない場合(例:12日)のUI調整は今後検討
今期スコア表示金カード中央に大きく表示。サブバーの累計スコア位置にも今期スコアを反映(ターム制では累計ではなく今期が主軸)
今期の称号金カード内に160×160の称号バッジ画像エリアを配置(スコアの下)。画像未設定時はシルバーカラーのフォールバックSVGを表示。称号名は白いpillボタンとしてバッジ下部に表示。「次の称号まで○pt」は表示しない。永続モードのランクバッジUIと同スタイル(v2ブラッシュアップ)
過去ターム履歴§10.2 で「別タブ」と記載していたが、プロトタイプでは金カード内のアコーディオン(折りたたみ)で実装。タブ vs アコーディオンは今後の検討事項(§11参照)
通算スコア(A案)v1プロトタイプには含めず。別軸としての追加要否は今後決定
永続モード既存の「累計応援スコア」カード表示を維持(変更なし)。モード切替トグルで2パターンを比較確認可能

11検討事項・残論点

#論点暫定方針状態
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)確定
63系統付与(月額/キャンペーン/ウェルカム)それぞれのターム帰属ルールいずれも付与日がどのタームの期間に含まれるかで帰属(§6.3と同一規則)確定
7称号シェア画像の引き継ぎ方法コピー時は同一画像を参照、差し替え時のみ再アップで確定(§8.3)確定

12関連資料


本仕様書はドラフトです。提案 および 要確定 項目はレビューを経て確定します。