会議グループ詳細¶
画面概要¶
特定の会議グループの開催履歴を年度期間ごとに表示する画面。セッション別の参加者・講師・参加時間を確認でき、管理者はセッションの削除や共通情報の編集が可能。
ルート¶
#/groups/:groupId
ページコンポーネント¶
GroupDetailPage(src/pages/GroupDetailPage.jsx)
画面レイアウト¶

表示項目¶
グループヘッダーカード¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | グループアイコン | Users アイコン |
| 2 | グループ名 | 会議グループの名称 |
| 3 | 主催者名 | 設定されている場合に主催者名を表示 |
| 4 | セッション数 | 会議グループに含まれるセッションの総数 |
| 5 | 合計参加時間 | 全セッションの参加時間合計 |
設計決定: 主催者の独立エンティティ化(Issue #173)
主催者はメンバーとは別の独立エンティティとする(index.json にトップレベルの organizers 配列)。主催者は組織・チーム等を表す概念であり、個人(メンバー)とは性質が異なるため分離する。1グループにつき主催者は1件のみ(シングルセレクト)で、ID による名寄せが可能な形で管理する。ヘッダーには Building2 アイコンで主催者名を表示する。
期間選択リスト(左カラム)¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 期間ラベル | 年度期間の名称 |
| 2 | セッション数 | 当該期間のセッション数 |
| 3 | 合計参加時間 | 当該期間の参加時間合計 |
設計決定: 期別グルーピングの採用(Issue #108)
メンバー詳細画面と同様の2カラムレイアウト(左:期セレクター、右:セッション一覧)を採用する。画面間の UI の一貫性を確保するため。fiscal-period.js の getFiscalPeriod() を再利用し、上期(4月〜9月)/下期(10月〜3月)でグルーピングする。
共通情報セクション(右カラム上部)¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 目的 | 会議グループの目的(テキスト) |
| 2 | 学習内容 | 学習内容の記録(テキストエリア) |
| 3 | 学習成果 | 学習成果の記録(テキストエリア) |
| 4 | 参考資料 | 参考資料のリンク一覧(タイトル + URL) |
設計決定: 期単位の共通詳細情報管理(Issue #196)
グループの期単位で共通の詳細情報(目的・学習内容・学習成果・参考資料)を管理する。管理者は admin モードで期を選択した状態で共通情報を編集・保存できる。データは data/group-term-details/{groupId}/{termKey}.json に保存する。レイアウトは PC 幅1280px以上で横スクロールなし、主要操作が1画面内に収まることを受け入れ条件とする。
セッションアコーディオン(右カラム下部)¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 開催日 | セッションの開催日 |
| 2 | セッション名 | セッションのタイトル(別名が設定されている場合はそちらを表示) |
| 3 | 参照 URL | セッションの参照 URL(設定されている場合に外部リンクアイコンで表示) |
| 4 | 講師名 | 講師として指定されたメンバー名 |
| 5 | 参加者数 | セッションの参加者数 |
| 6 | 合計参加時間 | セッションの参加時間合計 |
設計決定: 講師名の表示方式(Issue #162)
講師名はセッション JSON の instructors フィールド(メンバー ULID の配列)から index.json の members を参照して表示する。セッション JSON に講師名を重複保持しない(名前の一元管理)。講師が0名の場合は非表示とする。
設計決定: 外部 URL リンクの表示(Issue #193)
セッションに外部 URL リンク(資料・録画・議事録等)を紐付けられる。URL が設定されている場合のみ ExternalLink アイコンを表示し、target="_blank" + rel="noopener noreferrer" で新しいタブで開く。
セッション展開時の参加者テーブル¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 参加者名 | 参加メンバーの名前 |
| 2 | 参加時間 | メンバーの参加時間 |
操作仕様¶
| # | 操作 | 振る舞い |
|---|---|---|
| 1 | 戻るボタンをクリック | 前の画面に戻る |
| 2 | 期間ボタンをクリック | 選択した期間のセッション一覧と共通情報を表示する |
| 3 | セッションヘッダーをクリック | セッションのアコーディオンを展開/折りたたみする |
| 4 | 参照 URL をクリック | 外部リンクを新しいタブで開く |
| 5 | 主催者名をクリック | 主催者詳細画面(#/organizers/:organizerId)へ遷移する |
| 6 | 共通情報の編集ボタンをクリック(管理者) | 共通情報を編集モードに切り替える |
| 7 | 共通情報の保存ボタンをクリック(管理者) | 編集内容を Blob Storage に保存する |
| 8 | セッション削除ボタンをクリック(管理者) | セッション削除確認ダイアログを表示する |
| 9 | 削除確認ダイアログで削除をクリック(管理者) | セッションを会議グループから削除する |
設計決定: セッション削除の方針(Issue #154)
セッション削除は index.json からの紐付け解除(sessionRevisions から該当 sessionRef を削除)として実装する。セッション JSON ファイル自体は Blob Storage 上に残置する。Azure Blob Storage を追記専用ストレージ(append-only)として運用しているため、ファイル削除は行わない。削除時はグループとメンバーの totalDurationSeconds を再計算し、楽観的ロック(version チェック)でデータ整合性を保つ。
画面遷移¶
| 方向 | 遷移先 | 条件 |
|---|---|---|
| ← | ダッシュボード | 戻るボタン |
| → | 主催者詳細 | 主催者名クリック時 |
権限¶
- 全利用者が閲覧可能
- 以下は管理者のみ実行可能:
- 共通情報の編集・保存
- セッションの削除