ユーザー / 活動履歴(バッジ獲得履歴)
ユーザー / 活動履歴(バッジ獲得履歴)
本ページは 2 段構成。上段が biz/CS 向け(ユーザー提示可)、下段(
## 🔧 実装詳細以降)が dev 向け。biz/CS がユーザーへ提示・転用してよいのは上段のみ。
概要
ユーザーが講座で活動した成果として獲得したバッジの履歴を本人が確認する機能。mypage > 「バッジ獲得履歴」メニューから遷移する。
スコープ: 現時点では「バッジ獲得履歴」のみを扱う画面。コンテンツ閲覧履歴・トーク投稿履歴・契約履歴・支払履歴等は本機能には含まれない(それぞれ別経路で確認)。
バッジは 2 種類:
- 投稿数バッジ: トークルーム等への累計投稿数で獲得(10 件 / 50 件 / 200 件 の 3 段階)
- 契約日数バッジ: 講座契約の累計日数で獲得(30 / 60 / 90 / 180 / 365 / 730 / 1095 日 の 7 段階)
契約が終了するとバッジは「喪失」の履歴として残り、再契約時には喪失状態が解除される。獲得・喪失両方が時系列で履歴として確認できる。
主な使い方:
- 受講者: 自分が獲得した全バッジ履歴の閲覧
- 講師: 自講座の管理対象受講者のバッジ履歴を別経路で閲覧可能(受講者管理機能と連携)
📝 レビュー観点(draft 段階の記述ヒント、完成時に削除):
- 目的: 講座での活動成果としてのバッジ(投稿数 / 契約日数)獲得履歴を本人が確認する画面
- 誰が使うか: 受講者・講師(受講者以上)。講師は受講者のバッジ履歴も別経路で参照可
- どこで使うか: mypage > バッジ獲得履歴
- 隣接機能との関係: プロフィール(
./profile.md)の mypage トップから遷移、契約・課金履歴とは別(./payment-history.md/../plan/contract.md)- CS 問い合わせで頻発する論点: 「バッジが消えた」(契約終了による喪失)/ 「同じ講座で複数バッジある」/ 「バッジ獲得日時の集計タイミング」
- [本機能特有] 「活動履歴」=「バッジ獲得履歴」: 画面ヘッダ文言は「バッジ獲得履歴」固定。ファイル名 activity は将来拡張用で、現状はバッジに閉じている。biz 上段の表現を要検討(「活動履歴」と書くと閲覧履歴・契約履歴等を期待される可能性)
- [本機能特有] 喪失履歴: 契約終了で
lost_dateが記録され、履歴に「喪失」として残る- [本機能特有] feature toggle: mypage トップのメニュー表示は feature toggle で制御
利用シナリオ
シナリオ 1: 受講者が自身の獲得バッジを確認
受講者が mypage > 「バッジ獲得履歴」を開くと、自分が獲得した全バッジが時系列降順で一覧表示される。各行には「バッジ種別 / 講座名 / ランク名 / 獲得日時」が表示される。
シナリオ 2: 契約終了による「喪失」が記録される
ある講座を退会すると、その講座で獲得したバッジは「喪失」の履歴として残る。一覧では獲得日時とは別に喪失日時の行が「喪失」表示で並ぶ。データ自体は保持されており、後日同じ講座に再契約すると喪失状態が解除される。
シナリオ 3: 講師が管理対象受講者のバッジを確認
講師が自講座の受講者管理画面を開いた際、対象受講者の獲得バッジ一覧を閲覧できる経路がある(../plan-management/member.md 参照)。表示形式は本人 mypage と同じ。
よくある失敗ケース
- 「バッジが消えた」: 講座契約終了で喪失扱いになった場合のケース。再契約で復元される
- 「投稿数バッジが付かない」: 集計タイミング(バッチ起動)の都合で投稿直後には付与されないことがある
- 「同じ講座で複数バッジある」: 投稿数バッジ・契約日数バッジは別カテゴリなので、同一講座で両方獲得することはあり得る
📝 レビュー観点:
- 受講者が自分のバッジ獲得履歴を確認する典型例
- 契約終了で「喪失」が記録される例
- 講師が自分の管理対象受講者のバッジを確認する例(別経路)
権限別仕様
権限定義は ../user-roles.md 参照。用語は ../terminology.md。
講座権限軸
| 操作 | 未受講者 | 受講者 | サブ講師 | メイン講師 |
|---|---|---|---|---|
| 自身のバッジ獲得履歴の閲覧 | ×(ログインしていれば可、講座スコープ外) | ○ | ○ | ○ |
| 講座の管理対象受講者のバッジ獲得履歴の閲覧 | × | × | ○(自講座の受講者のみ) | ○(自講座の受講者のみ) |
横断軸
| 操作 | 運営アドミン | テストユーザー | 投稿禁止 |
|---|---|---|---|
| 自身のバッジ獲得履歴の閲覧 | (通常と同じ) | (通常と同じ) | (通常と同じ、閲覧は可) |
| 他ユーザーのバッジ獲得履歴の運営アドミン参照 | ×(運営アドミン経由の専用操作経路は存在しない) | × | × |
📝 レビュー観点:
- 講師は「管理対象受講者」(自講座のメイン講師 / サブ講師として管理対象)のバッジを別経路(
/contract_owner/member/{user_id}/badge_history)で閲覧可- 運営アドミン経由の参照経路は 存在しない(CS 対応で困難ケース → 改善課題)
機能詳細(ふるまい)
表示内容
各履歴行で表示される情報:
- バッジ種別(投稿数バッジ / 契約日数バッジ / 喪失)
- ランク名(10 件 / 50 件 / 200 件 / 30 日 / 60 日 / 90 日 / 180 日 / 365 日 / 730 日 / 1095 日 等)
- 講座名
- 獲得日時(喪失行の場合は喪失日時)
- アイコン(バッジ種別・ランクごとに割当)
バッジの種類
- 投稿数バッジ: 投稿数の累計(10 件 / 50 件 / 200 件 の 3 段階)
- 契約日数バッジ: 講座契約の累計日数(30 / 60 / 90 / 180 / 365 / 730 / 1095 日 の 7 段階)
喪失(lost)
講座契約が終了すると、その講座で獲得したバッジには 喪失日時が記録される:
- 履歴一覧では「喪失」として別行で表示される(獲得行とは別エントリ)
- バッジデータ自体は保持され続けるため、後日同じ講座に再契約すると喪失状態が解除される
- 喪失日時の記録は契約終了処理に連動して自動的に行われる
ページング・並び順
- ページングなし(クライアント側
MoleculesDatatableの SP 折り畳み表示のみ) - 並び順: 獲得日時の降順
📝 レビュー観点:
- 入力 → 処理 → 出力: バッジ ENUM、獲得日時、講座名、ランク名
- エッジケース: 契約終了による喪失、再契約による
lost_dateクリア、講座退会時の表示- [本機能特有] 履歴に含まれないもの: コンテンツ閲覧履歴 / トーク投稿履歴 / 講座契約履歴 / 支払い履歴 — 含まれない旨を biz 上段で明示するか要判断
admin 操作
該当なし
運営アドミンによるバッジ獲得履歴の参照経路は存在しない。
実装されていない
- 運営アドミンによるバッジ履歴の参照: 専用操作経路なし — 今後の改善課題(CS 対応上の必要性があれば)
📝 レビュー観点:
- バッジ管理(手動付与 / 取消し)の運営アドミン経路の有無も確認
品質 / 約束事項
- 応答性: 履歴取得は同期処理で即時表示。バッジ獲得自体は内部のバッチ処理で集計・付与されるため、投稿直後すぐに反映されないケースがある
- 信頼性: バッジは契約終了で「喪失」記録が残り、データ自体は保持される。再契約で喪失状態が解除される。物理削除は限定された条件(ENUM 仕様変更時等)でのみ発生
- 制限値:
- ページング: なし(全件返却)
- 保持期間: 喪失行も含めて保持。物理削除はバッジ仕様変更時のみ(要確認)
- データ保持: 契約終了で喪失日時が記録され、履歴は保持される
📝 レビュー観点:
- 集計タイミング: バッジ更新は
BadgeService.updateBadgesForUserAndPlanのバッチ起動と推測 → タイミングを確認- データ保持期間: 物理削除条件(降格時 / ENUM 変更時)と通常運用の差を整理
- [本機能特有] 「活動履歴」のスコープ拡張: 将来コンテンツ閲覧履歴等を含める計画があれば言及
変更履歴(リリースノート候補)
v2.29.2: 2026-05-01(PSD 初版)
- [PSD 追加] 本ドキュメント初版作成。v2.29.2 時点の実装を起こし。機能追加・変更は含まない
📝 レビュー観点:
contract_90バッジ追加(V0_1_61)の経緯lost_date列追加(V0_1_60)の経緯
関連ドキュメント
- 権限定義:
../user-roles.md - 用語辞書:
../terminology.md - 関連 PSD:
./profile.md— mypage トップの導線./payment-history.md— 支払い履歴../plan/contract.md— 契約管理(契約日数バッジの根拠)