コンテンツにスキップ

Spec

ADDED Requirements

Requirement: 期の分類ロジック

セッションの日付から年度の上期・下期を算出しなければならない(MUST)。上期は4月〜9月、下期は10月〜3月とする。年度は4月始まりとし、1月〜3月は前年度の下期に属する。表記は「YYYY年度 上期」「YYYY年度 下期」形式とする。

Scenario: 上期に属するセッションの分類

  • WHEN セッションの日付が 2025-06-15 である
  • THEN 「2025年度 上期」に分類される

Scenario: 下期に属するセッションの分類(10月〜12月)

  • WHEN セッションの日付が 2025-11-20 である
  • THEN 「2025年度 下期」に分類される

Scenario: 下期に属するセッションの分類(1月〜3月)

  • WHEN セッションの日付が 2026-02-03 である
  • THEN 「2025年度 下期」に分類される

Scenario: 年度の境界(3月と4月)

  • WHEN セッションの日付が 2026-03-31 である
  • THEN 「2025年度 下期」に分類される
  • WHEN セッションの日付が 2026-04-01 である
  • THEN 「2026年度 上期」に分類される

Requirement: 期サマリーリストの表示

メンバー明細画面の左列に、メンバーが参加したセッションが属する全ての期をサマリーリストとして表示しなければならない(MUST)。各期のサマリーには参加回数と合計時間を表示する。期は降順(最新が上)で並べなければならない(MUST)。セッションが存在しない期は表示してはならない(SHALL NOT)。

Scenario: 複数期にまたがるセッションがある場合

  • WHEN メンバーが 2025年度上期と2025年度下期の両方にセッションを持つ
  • THEN 左列に「2025年度 下期」「2025年度 上期」の順でサマリーが表示される
  • THEN 各サマリーにはその期の参加回数と合計時間が表示される

Scenario: 単一の期にのみセッションがある場合

  • WHEN メンバーのセッションがすべて 2025年度下期に属する
  • THEN 左列に「2025年度 下期」のみ表示される

Requirement: 期の選択とデフォルト選択

ページ読み込み時に最新の期がデフォルトで選択されなければならない(MUST)。ユーザーは期をクリックして選択を切り替えることができる。選択中の期は視覚的に強調表示されなければならない(MUST)。

Scenario: ページ読み込み時のデフォルト選択

  • WHEN メンバー明細画面が読み込まれる
  • THEN 降順で最初の期(最新の期)が自動的に選択される
  • THEN 右列にその期のセッション一覧が表示される

Scenario: 期の選択を切り替える

  • WHEN ユーザーが左列のサマリーリストで別の期をクリックする
  • THEN クリックした期が選択状態になり視覚的に強調される
  • THEN 右列の表示が選択した期のセッション一覧に切り替わる

Requirement: 選択した期のセッション表示

右列には選択中の期に属するセッションのみを、勉強会ごとのアコーディオン形式で表示しなければならない(MUST)。アコーディオンの構造(勉強会名、参加回数、合計時間、展開時のセッション日付・参加時間テーブル)は既存の MemberDetailPage の表示と同じ形式を維持しなければならない(MUST)。

Scenario: 選択した期のセッションが勉強会別に表示される

  • WHEN 「2025年度 下期」が選択されている
  • WHEN その期にメンバーが「フロントエンド勉強会」と「TypeScript読書会」に参加している
  • THEN 右列に「フロントエンド勉強会」と「TypeScript読書会」のアコーディオンが表示される
  • THEN 各アコーディオンにはその期内の参加回数と合計時間が表示される

Scenario: アコーディオンを展開してセッション履歴を確認する

  • WHEN 勉強会のアコーディオンをクリックして展開する
  • THEN 選択中の期に属するセッションの日付と参加時間がテーブルで表示される
  • THEN セッションは日付降順でソートされる

Scenario: 選択した期にセッションがない勉強会は表示されない

  • WHEN 「2025年度 上期」が選択されている
  • WHEN メンバーが「TypeScript読書会」にはその期に参加していない
  • THEN 右列に「TypeScript読書会」のアコーディオンは表示されない

Requirement: レスポンシブレイアウト

lg ブレークポイント以上では左列(期サマリー)と右列(セッション一覧)を横並びの2カラムで表示しなければならない(MUST)。lg 未満では縦積みレイアウトに切り替えなければならない(MUST)。

Scenario: lg以上の画面幅で2カラム表示

  • WHEN 画面幅が lg ブレークポイント(1024px)以上である
  • THEN 期サマリーリストとセッション一覧が横並びで表示される

Scenario: lg未満の画面幅で縦積み表示

  • WHEN 画面幅が lg ブレークポイント未満である
  • THEN 期サマリーリストの下にセッション一覧が縦に積まれて表示される

Requirement: ヘッダーの維持

既存のメンバーヘッダーカード(メンバー名、通算合計時間、通算参加回数)はレイアウト変更後もそのまま維持しなければならない(MUST)。ヘッダーは2カラムレイアウトの上部に全幅で表示する。

Scenario: ヘッダーが既存のまま表示される

  • WHEN メンバー明細画面が読み込まれる
  • THEN メンバー名、通算合計時間、通算参加回数を含むヘッダーカードが表示される
  • THEN ヘッダーは期別2カラムレイアウトの上に全幅で配置される