応援スコア リセット機能 仕様書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関連資料


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