管理画面¶
画面概要¶
管理者向けの機能を集約した画面。参加者レポートの CSV 取込、会議グループ名の修正、主催者の設定、講師の設定、セッション管理、グループの統合を行う。管理者(SAS トークン認証済み)のみアクセスできる。
設計決定: 2カラムレイアウト(#160)
左カラム(グループ一覧アコーディオン)と右カラム(セッション編集パネル)の2カラムレイアウトを採用する。グループとセッションは親子関係にあり、グループを展開→セッションを選択→右カラムで編集という操作フローを直感的に実現するため。
設計決定: AdminPage の遅延読み込み(#71)
AdminPage は React.lazy() で遅延読み込みとし、PapaParse 等の管理者専用モジュールをメインバンドルから分離する。管理者のみが使用する画面であり、一般利用者のバンドルサイズに影響させないため。ヘッダーの管理リンクに onMouseEnter でプリロードを仕込み、遷移時のローディングを最小化する。
ルート¶
#/admin
ページコンポーネント¶
AdminPage(src/pages/AdminPage.jsx、遅延読み込み)
画面レイアウト¶

表示項目¶
CSV アップロードセクション¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | ファイルドロップゾーン | CSV ファイルのドラッグ&ドロップ受付エリア |
| 2 | ファイルキューリスト | アップロードされたファイルの一覧(ファイル名、解析状態、プレビュー) |
| 3 | プログレスバー | 一括保存の進捗(現在/合計) |
設計決定: グループ名プルダウン(#65)
ファイルキュー内にグループ名プルダウンを設け、CSV 解析後に自動検出されたグループ名をデフォルト選択とする。CSV の会議タイトルが空の場合にグループ名が空になるケースへの対応として、グループ名が空の場合はエラー状態とし、既存グループを選択するまで保存不可とする。
会議グループ一覧(左カラム)¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | チェックボックス | グループ選択用(統合操作に使用) |
| 2 | グループ名 | 会議グループの名称(インライン編集可能) |
| 3 | セッション数 | グループに含まれるセッション数 |
| 4 | 未設定バッジ | 主催者・講師が未設定のセッション数 |
設計決定: グループ名インライン編集と ID 不変(#35)
グループ名はインライン編集で変更可能とする。グループ ID は CSV の会議タイトルの SHA-256 ハッシュから生成されるため不変とし、表示名のみを変更対象とする。SAS トークン認証(管理者権限)が必要。
設計決定: グループ統合機能(#109)
Teams の会議タイトルが変更されると同一の活動が別グループとして登録されるため、グループ統合機能を設ける。統合先グループを1つ選択し、統合元のセッションを移動後に統合元グループを削除する。セッション JSON ファイル内の groupId は旧グループ ID のまま残るが、参照は index.json の sessionRevisions 経由のため影響しない。
設計決定: グループ別アコーディオン UI(#133)
セッション名管理はグループ別のアコーディオン UI とする。グループ数・セッション数の増加時にフラットなテーブルでは目的のセッションを探すのが困難になるため、グループごとの折りたたみで見通しを確保する。デフォルトでは最初のグループのみ展開する。
グループ展開時¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 主催者セレクター | 会議グループの主催者を選択するドロップダウン |
| 2 | セッション一覧 | グループ内のセッションボタンリスト |
セッション編集パネル(右カラム)¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | セッション名 | セッションの別名(256文字以内) |
| 2 | 参照 URL | セッションの参照 URL |
| 3 | 講師一覧 | セッションの講師メンバー(複数選択可能) |
| 4 | 参加者テーブル | セッションの参加者一覧 |
設計決定: 講師情報の管理方式(#158)
講師情報はセッション JSON の instructors フィールド(メンバー ULID の配列)で管理する。すべての講師はメンバーとして登録済みであることを前提とし、新規講師の手入力時は index.json に新メンバーを作成して ULID を発行する。講師名は index.json の member.name を参照して表示し、セッション JSON に名前を重複保持しない(名前の一元管理)。instructors フィールドが存在しない既存データは空配列として扱う(後方互換)。
設計決定: セッションのリビジョン管理(#113 / #136)
セッション JSON はリビジョン管理とする。セッション参照は {sessionId}/{revision} の形式で、編集時に新リビジョンを作成する。セッション名や講師などの編集によりセッション JSON は可変リソースとなるが、リビジョンを分けることで HTTP キャッシュとの整合性を確保する(旧リビジョンのキャッシュが新データを汚染しない)。
設計決定: セッションへの外部 URL リンク(#193)
セッション JSON に url フィールドを設け、外部リソース(資料・録画・議事録等)への URL を保持する。url は空文字列またはリンク先 URL を取り、未定義時は空文字列として扱う(後方互換)。バリデーションは https:// または http:// で始まるかを検証する。
グループ統合ダイアログ¶
| # | 項目名 | 説明 |
|---|---|---|
| 1 | 統合対象グループ | 選択されたグループの一覧(ラジオボタンで統合先を選択) |
| 2 | グループ情報 | グループ名、ID、セッション数、合計参加時間 |
操作仕様¶
CSV アップロード¶
| # | 操作 | 振る舞い |
|---|---|---|
| 1 | CSV ファイルをドロップ | ファイルを解析してキューに追加する |
| 2 | 一括保存ボタンをクリック | キュー内の全ファイルを Blob Storage に保存する |
| 3 | リトライボタンをクリック | 失敗した操作を再実行する |
会議グループ管理¶
| # | 操作 | 振る舞い |
|---|---|---|
| 4 | グループ名をインライン編集 | グループ名を編集・保存する |
| 5 | グループのチェックボックスを選択 | グループを統合対象として選択する |
| 6 | 統合ボタンをクリック | 2つ以上のグループが選択されている場合、統合ダイアログを表示する |
| 7 | 統合ダイアログで統合先を選択して実行 | 選択したグループを統合先グループに統合する(ソースグループは削除) |
| 8 | グループを展開して主催者を選択 | ドロップダウンで主催者を選択する(新規主催者の追加も可能) |
| 9 | 主催者の保存ボタンをクリック | 主催者の設定を保存する |
セッション管理¶
| # | 操作 | 振る舞い |
|---|---|---|
| 10 | グループ展開時にセッションボタンをクリック | セッション編集パネルに詳細を表示する |
| 11 | セッション名を編集 | セッションの別名を編集する(256文字以内) |
| 12 | 参照 URL を編集 | セッションの参照 URL を編集する |
| 13 | 講師を選択・追加 | ドロップダウンで講師メンバーを選択する(複数選択可能、新規メンバーの追加も可能) |
| 14 | セッションの保存ボタンをクリック | セッションの変更を保存する(新しいリビジョンを作成) |
共通操作¶
| # | 操作 | 振る舞い |
|---|---|---|
| 15 | 戻るボタンをクリック | ダッシュボードに戻る |
画面遷移¶
| 方向 | 遷移先 | 条件 |
|---|---|---|
| ← | ダッシュボード | 戻るボタン |
権限¶
- 管理者のみアクセス可能(未認証の場合、ダッシュボードにリダイレクトされる)
- SAS トークンによる認証が必要(URL クエリパラメーター
tokenで認証)