タイムライン画面設計書
最終更新: 2026-07-17 関連 Issue: #1107(タイムライン機能拡張)/ #1108(V2設計書整備)/ #1151(年表ビュー初期実装)/ #1152(活動期間チャート)/ #1158(活動期間チャートのリーダー期間表示)/ #1326(メンバー未登録イベントの動的導出)/ #1323(初期表示を今日にする)/ #1324(年表ビューの月区切り・出演者表示改善)
1. 画面概要
| 項目 | 内容 |
|---|---|
| URL | /timeline |
| レンダリング方式 | SSR(動的) |
| 追加バージョン | v5.0.0(V1)/ v7.0.0(V2拡張予定) |
2. V1 現状(実装済み)
2-1. 表示内容
- 年単位でイベントを表示(
YearSliderによる年切り替え) - フィルタなし(全 type のイベントを一括表示)
- イベントカード(
EventCard)とライブグループ(LiveTourGroup)の2種類のコンポーネントで構成
2-2. URL 設計
| パラメータ | 説明 |
|---|---|
year |
表示年(例: /timeline?year=2024)。未指定時は最新年 |
2-3. ライブイベントのグループ表示
同一ツアー(title が同じ type=live イベント群)は1グループに折りたたみ表示する。詳細は events-table.md セクション 8-2 を参照。
3. V2 拡張設計(v7.0.0 予定)
3-1. ビュー切り替え
| ビュー | URL パラメータ | 説明 |
|---|---|---|
| 年ビュー(デフォルト) | view=year(省略可) |
年間イベントを時系列で一覧表示(V1 相当) |
| 週ビュー | view=week&year=2024&week=32 |
指定週のイベントを表示 |
| 日ビュー | view=day&date=2024-08-10 |
指定日のイベントを表示 |
| 活動期間ビュー | view=activity |
歴代メンバーの在籍期間・リーダー在任期間を横棒チャートで一覧表示(3-6 参照) |
| 年表ビュー | view=chronicle&members=oda-sakura |
選択したメンバー(加入期指定含む)の在籍期間中の全イベントを年ごとに一覧表示(3-7 参照) |
- ビュー切り替えは UI 上部のトグルボタンで操作する
- 年ビュー → 週ビューへは年スライダーの週クリックで遷移する設計を検討する
年ビューの初期表示(パラメータ完全無指定時のみ)(#1323)
/timeline にクエリパラメータを一切付けずにアクセスした場合(TOPページのタイムラインリンクからの遷移を含む)、表示年・スクロール位置を以下の優先順で「今日」に合わせる。年・ビュー等いずれかのパラメータが指定されている場合はこの自動調整を行わない。
- 今日(JST基準)ちょうどのイベントがあれば、そのイベント(ライブでツアー化されている場合はツアーグループ)へスクロール
- 今日ちょうどのイベントがなくても、今日がいずれかのライブツアー(同一 title の live イベント群)の開催期間(初日〜最終日)中であれば、そのツアーグループへスクロール
- いずれもなければ、今日以降で最も近い未来のイベントへスクロール(そのイベントの年が表示年になる)
- 未来のイベントも該当ツアーもなければ、従来通り最新年をそのまま表示する(自動スクロールなし)
判定ロジックは lib/timeline-utils.ts の findTimelineScrollTarget に実装する。
3-2. メンバーフィルタ
- 現役メンバーと OG メンバーをグループに分けて複数選択可能
- 選択したメンバーに関連するイベント(
events.members配列に含まれる)のみ表示する - 未選択時は全メンバーのイベントを表示する
events.membersが未登録(空配列)の場合、イベント種別に応じて動的にメンバーを導出してから絞り込む(#1326)。個別登録の手間を省くための空配列であり「対象メンバーなし」ではないため、除外せず補完するlive・festival: 開催日時点で在籍していたメンバー全員(joinDate〜gradDate)release(モーニング娘。本体): 既存の在籍期間ベース自動紐づけ(lib/member-release-linker.ts)release(ユニットによるリリース): そのユニットの固定メンバー(unit.memberIds)
メンバーステータスの判定
| 判定 | フィールド | 値 |
|---|---|---|
| 現役(Active) | member.status |
"Active" |
| OG | member.status |
"OG" |
補助情報として member.profile.gradDate が null なら現役、文字列が設定されていれば OG と判断できる。
URL パラメータ
members=oda-sakura,nonaka-miki(カンマ区切りの member.id)
3-3. 種別フィルタ
| フィルタ軸 | パラメータ例 | 対応フィールド |
|---|---|---|
| イベント種別 | types=release,live,festival |
events.type |
| タグ | tags=Birthday,Solo |
events.tags |
選択可能なイベント種別(events.type):
| 値 | 表示ラベル |
|---|---|
release |
リリース |
live |
ライブ |
festival |
フェス |
media |
メディア出演 |
join |
加入 |
graduate |
卒業 |
topic |
トピック |
leader |
リーダー交代 |
- type と tags は AND 条件で絞り込む(指定なしは全件対象)
- 複数値はカンマ区切り
leaderはapp/timeline/page.tsxが「第X代リーダー就任」イベントとして動的に合成する種別で、TypeFilterで選択可能な独立したチップを持つ(components/EventCard.tsxのleaderRetirementGenerationバッジで卒業表示にも対応)
3-4. アクセントカラー
イベントカードのアクセントカラーは type の単純な固定色ではなく、種別ごとに以下の優先順位で決定する(EventCard.tsx の accentColor 算出ロジック)。
join/graduate(加入・卒業): そのメンバー自身のメンバーカラー(getMemberColor)。メンバーカラーの定義はメンバーカラーバッジ設計書を参照release(リリース):releaseFormatごとの色(RELEASE_FORMAT_COLORS)— シングル#f472b6・アルバム#60a5fa・EP#a78bfa・ライブ盤#34d399・サウンドトラック#fbbf24・企画盤#fb923c・その他#94a3b8media(メディア出演): 番組ごとの色(getRadioShowColor)。番組別の色定義はラジオオンエア収集 設計書を参照- 上記に該当しない場合のフォールバック(
EVENT_TYPE_COLORS):
| type | カラーコード |
|---|---|
live |
#a78bfa(パープル系) |
festival |
#fb923c(オレンジ系) |
topic |
#94a3b8(グレー系) |
join |
#4ade80(グリーン系。メンバーカラー未設定時のフォールバック) |
graduate |
#f87171(レッド系。メンバーカラー未設定時のフォールバック) |
leader |
#ffd700(ゴールド系) |
release・media は上記フォールバック表に含まれず、常に1〜3の専用ロジックで色が決まる。
3-5. 比較ビュー(メンバー横並び)
複数メンバーを選択した場合、メンバーごとに列を並べて同じ時間軸で比較できる表示モードを検討する。
- 共演イベント(
events.membersに選択メンバー全員が含まれる)はハイライト表示する - 実装詳細は V2 実装フェーズで別途設計する
3-6. 活動期間ビュー(実装済み、#1152・#1158)
歴代メンバー全員の在籍期間を横棒チャート(Gantt 形式)で一覧表示する。年ビュー等のイベント一覧とは異なり、メンバー・フィルタ(members)や種別フィルタ(types・tags)は適用されない(常に全メンバーを表示)。
- 表示順: 加入期(
generation)昇順 → 期内は加入日昇順 - 各行の棒グラフ: 加入日〜卒業日(現役メンバーは当日まで)を表す。色はメンバーカラー(未設定時は加入期の色
GENERATION_COLORS) - リーダー在任期間: 該当メンバーの棒グラフ上部にゴールド色(
#ffd700)の帯を重ねて表示する(lib/leader-utils.tsのderiveLeaderPeriodsで算出) - 横軸: 5年刻みの年ラベルをスクロール追従(sticky)のヘッダーに表示
- 各行にマウスオーバーすると
メンバー名: 加入年 〜 卒業年(現役は現在の年)/ リーダー在任 X.X年をツールチップ表示する - 実装コンポーネント:
TimelineActivityChart
3-7. 年表ビュー(初期実装 #1151、月区切り・出演者表示改善 #1324、重複イベント集約 #1393)
選択したメンバー(または加入期)の在籍期間中に発生した全イベントを、年ごとの列に分けて時系列表示する。年ビュー等と異なり、メンバーまたは加入期を1件以上選択するまでは何も表示しない(未選択時は「加入期またはメンバーを選択してください。」と案内するのみ)。
- フィルタ:
MemberFilter(メンバー個別選択)とGenerationFilter(加入期単位のショートカット選択、内部的には該当メンバー全員のmembersパラメータに変換される)の2種類を提供する - 対象イベント: 選択メンバーが在籍していた期間の
join・graduate・release・live・festival・media・topic全種別(events.membersが未登録の場合の動的導出は 3-2 と同一ロジックを使用、#1326) - 年カラム: イベントの発生年ごとに列を分けて左右に並べる(
buildYearColumns) - 月区切り: 各年カラム内はさらに月ごとにグルーピングし、月見出しと交互の背景濃淡を表示する(月の区切りは年ごとにリセットされる、#1324)
- ツアーのグルーピング: 同一タイトルの
liveイベント群は公演ごとに分解せず1つのツアーグループとして扱い、最初の公演日の月に配置する。グループ内には各公演の日付(月/日)・会場を列挙する- 同日・同タイトルの複数公演(マチネ/ソワレ等)は日付単位で1件の日付チップに集約する(代表の会場を採用、#1393)
live以外の重複集約: 同日・同タイトルのイベントが複数登録されている場合は1件に統合し、出演メンバーは合成(重複排除)した上で表示する。年表は1年を俯瞰する要約表示であり、時刻等の詳細は通常のタイムライン画面(カード表示)側の役割とする(#1393)- マイルストーン表示:
join・graduate(・将来的なleader)イベントは背景色付き・左ボーダー付きのチップで強調表示する - 出演者表示: マイルストーン以外のイベント(
release・live・festival・media・topic)には、イベントチップに加えて共演メンバー名を付記する - 日付表示: 発生日(
events.date)を持つ各イベントチップ(マイルストーンチップを含む)には発生日(日)を付記する - 実装コンポーネント:
TimelineChronicle(buildYearColumns・buildMonthGroupsがロジックの中核)
4. コンポーネント構成(V2 想定)
TimelinePage(Server Component)
├── ViewToggle(年/週/日/活動期間/年表 切り替え)
├── TimelineNavigation(週/日ビューの日付ピッカー・前後移動)
├── MemberFilter(メンバー選択)
├── GenerationFilter(期選択。年表ビュー等で使用)
├── TypeFilter(種別・タグ選択)
├── YearSlider(年ビュー時のみ)
├── ScrollToTopButton / ScrollToTimelineAnchor
├── TimelineActivityChart(活動期間ビュー、#1152・#1158)
├── TimelineChronicle(年表ビュー、#1151・#1324)
└── EventGrid
├── EventCard(単体イベント)
└── LiveTourGroup(ツアーグループ)
5. 関連ドキュメント
events-table.md— events テーブル定義・V2 拡張フィールド(tags・festival type)・dateEnd 要否の判断screen-design.mdx— 全画面一覧
改訂履歴
| 版 | 更新日 | 変更内容 |
|---|---|---|
| 1.7 | 2026-07-27 | 年表ビューの重複イベント集約仕様(同日・同タイトルのツアー公演/イベントを1件に集約)を追加(#1393) |
| 1.6 | 2026-07-18 | §3-4のアクセントカラーの説明に、メンバーカラーの定義元(メンバーカラーバッジ設計書)・番組別の色定義元(ラジオオンエア収集 設計書)へのリンクを追加(PR #1371レビュー指摘) |
| 1.5 | 2026-07-18 | 実装との乖離是正: leaderイベント種別の記載漏れを解消、アクセントカラーロジックをメンバーカラー/リリースフォーマット別の実装に合わせて修正、コンポーネント構成図にTimelineActivityChart等の未反映コンポーネントを追加(#1366) |
| 1.4 | 2026-07-17 | 活動期間ビュー(#1152・#1158)・年表ビュー(#1151・#1324)の記載漏れを解消し、ビュー一覧表・仕様セクション(3-6・3-7)を追加(#1345) |
| 1.3 | 2026-07-14 | 年ビューの初期表示(パラメータ無指定時に今日の日付へ自動スクロール)仕様を追加(#1323) |
| 1.2 | 2026-07-12 | events.members 未登録時のメンバー動的導出仕様を追加し、festival 除外の記述を削除(#1326) |
| 1.1 | 2026-06-14 | V2 実装完了:ビュー切り替え・メンバーフィルタ・種別フィルタ・EventCard タグチップ・型別色分け(#1111) |
| 1.0 | 2026-06-13 | 初版作成(V1 現状整理 + V2 拡張設計)(#1108) |