来場者向けpj 要件定義書
0. ドキュメント情報
| 項目 | 内容 |
|---|---|
| プロジェクト名 | 来場者向けpj |
| バージョン | v0.1.0 |
| 作成日 | 2026/6/20 |
| 最終更新日 | 2026/7/7 |
| 作成者 | @凶兆の黒猫 |
| 承認者 | |
| ステータス | 検討中 |
更新履歴
| バージョン | 日付 | 変更内容 | 担当者 |
|---|---|---|---|
| v0.1.0 | 2026/6/20 | 初版作成 | @凶兆の黒猫 |
| v1.0.0 | 2026/7/7 | 欠けている点を埋めて添削できる状態まで持っていった。 | @凶兆の黒猫 |
1. 概要
1.1 背景・目的
- マップなどの導入をし、いつどこに人が集まっていたかの統計を収集も同時に行う。
- 事前に情報を入力してもらうことで入場時のフローを簡易化させる。
- チャットで対話式で質問できるような構造を準備する。
1.2 ゴール
- その統計を表示することで混雑状況を来場者が確認できるようにする。
- 入場をスムーズに行えるようにする。
- どのような質問がどの程度来ていたかの確認ができるようにする。
1.3 スコープ
対象範囲(Scope In)
- LIFF(LINE Front-end Framework)を用いた来場者が操作する処理全般
- LINEの対話による質問対応機能
対象外(Scope Out / Out of Scope)
- 入場端末の処理
1.4 用語定義
| 用語 | 説明 |
|---|---|
| 蒼翔祭 | 本プロジェクトが対象とする会津大学の学園祭 |
| PWA | Progressive Web App |
| LIFF | LINE Front-end Framework |
| SoshosaiAPI | 本システムのバックエンドAPI |
| ここどこ | 会場各所を、巡るスタンプラリー企画 |
| グループ | 事前予約時に代表者が作成する、同伴者を含む来場者のまとまり |
| ゲスト | グループに属する個々の来場者 |
2. ステークホルダー
| 役割 | 氏名 |
|---|---|
| プロジェクトリーダー | @凶兆の黒猫 |
| 開発担当 | @yuna1107 @しよを @Y.Haruto |
| 利用者・対象ユーザー | 来場者 |
3. 利用者・ユースケース
3.1 想定利用者(ペルソナ)
- 来場者
3.2 ユースケース一覧
| ID | ユースケース名 | 概要 | 優先度 |
|---|---|---|---|
| UC-01 | 事前予約 | 事前に人数、来場者情報を収集する。 | 高 |
| UC-02 | 予約確認 | 入力した情報を確認および編集を行う。 | 中 |
| UC-03 | 資料公開 | パンフレットやFAQなどをWeb上で表示する。 | 中 |
| UC-04 | マップ | ここどこスタンプラリーのスタンプ設置位置や、イベントの位置などを確認できるようにする。 | 中 |
| UC-05 | イベント | イベントの参加登録・予約を行う。 | 中 |
| UC-06 | 対話形式の質問対応 | 来場者からの質問を受け取って返す。 | 低 |
4. 機能要件
優先度は MoSCoW(Must / Should / Could / Won't)などで管理すると後で取捨選択しやすい
| ID | 機能名 | 説明 | 優先度 | 関連UC |
|---|---|---|---|---|
| F-001 | 来場者情報入力 | 識別用の名前、年齢層、性別を人数分入力させる。 | Must | UC-01 |
| F-002 | LINE Login認証 | 来場者識別にLINE Loginを採用。 | Must | UC-01 |
| F-003 | 来場者グループ作成機能 | 来場者グループを作成するための機能。 | Must | UC-01 |
| F-004 | 入場用QRコード表示 | groupId/guestId を含むQRを表示。 | Must | UC-02 |
| F-005 | 入場予約状況確認 | 入場が予約されているかを表示 | Must | UC-02 |
| F-006 | イベント参加登録・予約 | 任意のイベントに参加登録及び予約ができるようにする。 | Must | UC-05 |
| F-007 | イベント登録状況確認 | 参加登録したイベントリストを確認。 | Must | UC-05 |
| F-008 | ここどこQR読み取り | ここどこスタンプラリーのQR読み取り | Should | UC-05 |
| F-009 | ここどこ進捗確認 | ここどこスタンプラリーで、どこのスタンプが押されているかの確認を行う。全て押されていれば本部に行くよう促す。 | Should | UC-05 |
| F-010 | パンフレット表示 | デジタルパンフレットを表示して、来場者アプリからもパンフレットにアクセスできるようにする | Must | UC-03 |
| F-011 | FAQ表示 | FAQを表示する。 | Could | UC-03 |
| F-012 | 会場マップ表示 | 会場全体(屋外)のマップと、建物単位のイベント開催位置を表示する。 | Must | UC-04 |
| F-013 | フロアマップの表示 | 建物内部(講義棟等)のフロア単位の詳細マップと、フロア内の企画配置を表示する。 | Must | UC-04 |
| F-014 | Soshosai.comへのリンク機能 | Soshosai.comへリンク付けをする | Must | UC-03 |
| F-015 | イベント情報表示 | 学園祭内のイベント情報の表示 | Must | UC-05 |
| F-016 | 混雑状況の可視化 | 位置情報を取得し、その統計をもとに混雑状況をリアルタイムで反映させる。 | Could | UC-04 |
| F-017 | 対話形式の質問対応(LLM) | 入力された質問をLLMで処理し、回答を返す。 | Could | UC-06 |
| F-018 | アクセス情報表示 | シャトルバスの時刻表、会津若松駅の時刻表及び駐車場の誘導情報を表示する。 | Must | UC-03 |
| F-019 | 質問履歴・統計収集 | 入力された質問を収集する。 | Could | UC-06 |
4.1 機能詳細
F-001: 来場者情報入力
- 概要:事前予約時に、識別用の名前、年齢層、性別を来場者の人数分入力させる
- 入力:識別用の名前(実名不要)、年齢層、性別(各ゲストごとに入力)
- 処理:入力内容のバリデーション後、F-003のグループ作成処理へ連携
- 出力:入力完了ステータス
- 異常系・エラー処理:必須項目未入力時はエラー表示。人数と入力件数の不一致時は再入力を促す
- 関連する画面/コマンド:S-01 事前予約フォーム画面
F-002: LINE Login認証
- 概要:来場者の識別・セッション管理にLINE Loginを利用する
- 入力:LINEアカウントの認可(OAuth)
- 処理:LINE LoginでLINE UIDを取得し、SoshosaiAPI側のセッション(Cookie+JWT)を発行
- 出力:認証済みセッション
- 異常系・エラー処理:認可拒否時はログイン不可の案内を表示。LINEアプリ外(外部ブラウザ)アクセス時の挙動を別途定義
- 関連する画面/コマンド:全画面共通(初回アクセス時)
F-003: 来場者グループ作成機能
- 概要:代表者が同伴者を含めた来場者グループを作成する
- 入力:代表者のLINE UID、グループ人数、F-001で入力された各ゲスト情報
- 処理:グループレコードおよび人数分のゲストレコードを作成
- 出力:groupId
- 異常系・エラー処理:作成中の通信エラー時は再試行を促す
- 関連する画面/コマンド:S-01 事前予約フォーム画面
F-004: 入場用QRコード表示
- 概要:groupId/guestIdを含むQRコードを表示し、入場管理システム側での読み取りに使用する
- 入力:groupId、guestId
- 処理:QRコード値の生成・描画
- 出力:QR画像
- 異常系・エラー処理:予約未確定の場合はQRを表示せず、予約状況確認画面へ誘導
- 関連する画面/コマンド:S-02 予約確認・QR表示画面
補足:入場管理プロジェクト側との間で、QRコードに含めるID(groupId/guestId)の形式・発行タイミングをすり合わせる必要があります(入場管理側の要件定義書R-03と対応)。
F-005: 入場予約状況確認
- 概要:来場者が自身の入場予約状況(予約済み/未予約)を確認する
- 入力:groupId
- 処理:Reservationテーブルを照会
- 出力:予約済み/未予約のステータス表示
- 異常系・エラー処理:予約データが存在しない場合は事前予約フォームへの導線を表示
- 関連する画面/コマンド:S-02 予約確認・QR表示画面
F-006: イベント参加登録・予約
- 概要:来場者が任意のイベントへ参加登録・予約する
- 入力:eventId、guestId(またはgroupId)
- 処理:定員チェック後、参加登録レコードを作成
- 出力:登録完了通知
- 異常系・エラー処理:定員超過時はエラー表示、キャンセル待ち等の対応方針は要検討
- 関連する画面/コマンド:S-05 イベント一覧・詳細画面
F-007: イベント登録状況確認
- 概要:ゲストが参加登録したイベントの一覧を確認する
- 入力:guestId(またはgroupId)
- 処理:EventRegistrationテーブルを検索
- 出力:登録済みイベント一覧
- 異常系・エラー処理:登録がない場合は「未登録」の旨を表示
- 関連する画面/コマンド:S-05 イベント一覧・詳細画面
F-008: ここどこQR読み取り
- 概要:会場各所に設置されたここどこスタンプラリーのQRコードを読み取り、取得状態にする
- 入力:スポットQRコードの読み取り値
- 処理:guestId(またはgroupId)とスポットIDを紐づけてスタンプ取得記録を作成
- 出力:取得完了表示
- 異常系・エラー処理:既に取得済みのスポットは再取得できない旨を表示
- 関連する画面/コマンド:S-06 ここどこスタンプラリー画面
F-009: ここどこ進捗確認
- 概要:スタンプの取得状況を確認し、全スポットのスタンプを取得済みの場合は本部への案内を表示する
- 入力:guestId(またはgroupId)
- 処理:StampProgressの取得済みスポット数と全スポット数を比較
- 出力:進捗一覧、コンプリート時は本部案内メッセージ
- 異常系・エラー処理:取得状況の読み込みに失敗した場合は再読み込みを促す
- 関連する画面/コマンド:S-06 ここどこスタンプラリー画面
F-010: パンフレット表示
- 概要:デジタルパンフレットをアプリ内から閲覧できるようにする
- 入力:なし(コンテンツ取得のみ)
- 処理:CMS/DBからパンフレットコンテンツを取得
- 出力:パンフレット表示
- 異常系・エラー処理:取得失敗時はキャッシュ済みの内容を表示、なければエラー表示
- 関連する画面/コマンド:S-03 パンフレット・FAQ画面
F-011: FAQ表示
- 概要:よくある質問とその回答を一覧表示する
- 入力:なし
- 処理:FAQコンテンツの取得
- 出力:FAQ一覧表示
- 異常系・エラー処理:取得失敗時はエラー表示
- 関連する画面/コマンド:S-03 パンフレット・FAQ画面
F-012: 会場マップ表示
- 概要:会場全体(屋外)のマップと、建物単位でのイベント開催位置を表示する
- 入力:なし(ピンタップでイベント詳細やF-013のフロアマップへ遷移)
- 処理:全体マップデータと建物ごとのイベント位置情報を取得・重ね合わせ表示
- 出力:会場全体マップ画面
- 異常系・エラー処理:位置情報データ取得失敗時は静的なマップ画像のみ表示
- 関連する画面/コマンド:S-04 会場マップ画面
F-013: フロアマップの表示
- 概要:建物(講義棟等)ごとのフロア詳細マップと、フロア内の企画配置を表示する
- 入力:建物ID(F-012の会場マップからの遷移時に指定)
- 処理:指定建物のフロアマップデータと、フロア内の企画・出展位置情報を取得
- 出力:フロアマップ画面(フロア切替タブ等を含む)
- 異常系・エラー処理:該当建物のフロアマップが未整備の場合はその旨を表示
- 関連する画面/コマンド:S-04 会場マップ画面(F-012からの遷移先)
F-014: Soshosai.comへのリンク機能
- 概要:蒼翔祭公式サイト(Soshosai.com)への外部リンクを提供する
- 入力:なし
- 処理:外部ブラウザまたはLIFF内ブラウザでリンク先を開く
- 出力:外部サイトへの遷移
- 異常系・エラー処理:特になし
- 関連する画面/コマンド:S-03 パンフレット・FAQ画面
F-015: イベント情報表示
- 概要:学園祭内で開催される各イベントの詳細情報を一覧・詳細表示する
- 入力:eventId(詳細表示時)
- 処理:イベントマスタデータの取得
- 出力:イベント一覧・詳細画面
- 異常系・エラー処理:データ取得失敗時はエラー表示
- 関連する画面/コマンド:S-05 イベント一覧・詳細画面
F-016: 混雑状況の可視化
- 概要:来場者の位置情報を統計化し、会場マップ上に混雑状況として反映する
- 入力:来場者の位置情報(同意取得済みの場合のみ)
- 処理:エリアごとの滞在人数を集計
- 出力:マップ上のヒートマップ等の混雑表示
- 異常系・エラー処理:位置情報取得の同意が得られない来場者のデータは集計対象外とする
- 関連する画面/コマンド:S-04 会場マップ画面
F-017: 対話形式の質問対応(LLM)
- 概要:来場者からの自由入力の質問をLLMに渡し、回答を生成して返す
- 入力:来場者の質問文
- 処理:LLM APIへ問い合わせ、パンフレット・FAQ等のコンテンツを参照した回答を生成
- 出力:回答テキスト
- 異常系・エラー処理:LLM API障害時・レート制限到達時はエラーメッセージと問い合わせ先案内を表示
- 関連する画面/コマンド:S-07 チャット質問画面
F-018: アクセス情報表示
- 概要:シャトルバス時刻表、会津若松駅時刻表、駐車場誘導情報を表示する
- 入力:なし
- 処理:アクセス情報コンテンツの取得
- 出力:アクセス情報画面
- 異常系・エラー処理:データ取得失敗時はエラー表示
- 関連する画面/コマンド:S-08 アクセス情報画面
F-019: 質問履歴・統計収集
- 概要:F-017で送受信された質問・回答を記録し、後から傾向を確認できるようにする
- 入力:質問内容、回答内容、質問日時
- 処理:ChatQuestionテーブルへの記録
- 出力:記録完了(来場者への表示はなし、管理側での閲覧用)
- 異常系・エラー処理:記録に失敗してもチャット応答自体は継続する(記録は非同期・ベストエフォート)
- 関連する画面/コマンド:バックエンド処理のみ。閲覧は管理画面側(Sho-Room等)で想定
5. 非機能要件
| 区分 | 要件 |
|---|---|
| 性能 | 来場者数の急増(想定外の混雑)にも耐えられる設計 |
| 可用性 | イベントまでの間はサービス停止を最小限に抑え、イベント当日はサービス停止が一切発生しないこと |
| セキュリティ | LINE Loginによる本人識別、個人情報の適切な管理・保護 |
| 拡張性 | パンフレット・FAQ・マップのコンテンツ更新が、コードを変更せず管理側の操作だけで行えること |
| 運用・保守性 | エラーの即時収集、メンテ告知 |
| 互換性 | iOS 18以上 または Android 11以上を満たす端末で稼働する |
| コスト | LLMのレートリミットなどを制御し、無駄な損失を抑える |
6. システム構成・アーキテクチャ
6.1 全体構成図
6.2 使用技術・技術スタック
| 区分 | 技術 | 選定理由 |
|---|---|---|
| 言語 | TypeScript | |
| フレームワーク | React / Hono | CloudFlare Workersとの親和性が高いため。 |
| インフラ/ホスティング | CloudFlare Workers | サーバーレスで運用コストが低く、エッジで動くため当日の応答速度に強い |
| データベース | Cloudflare D1 / Drizzle ORM | Workersとの親和性が高く、SQLiteベースで扱いやすいため。Drizzleは型安全なクエリが書け、D1との相性が良いため。 |
| 認証 | SameSite & HttpOnly Cookie + JWT | クライアント ↔ サーバ間は Cookie セッション、サーバ間は JWT |
| その他ライブラリ | LIFF | LINE Front-end Frameworkの略。LINE上でWebアプリを動かす際に使用。 |
6.3 外部連携・API
| 連携先 | 用途 | 認証方式 |
|---|---|---|
| LINE Login | 来場者の本人識別・ログイン(F-002) | OAuth 2.0 |
| LIFF SDK | LINE内WebViewでのアプリ表示・LINE機能呼び出し | LIFFアクセストークン |
| LINE Messaging API | LINE Bot経由でのチャット対応(F-017)、通知等 | Channel Access Token |
| Gemini API | 対話形式の質問対応(F-017)の回答生成 | APIキー |
| SoshosaiAPI(自システム内) | 来場者データ・予約・イベント情報等の読み書き | Cookie(HttpOnly)+JWT |
| 入場管理システム(別プロジェクト) | QRコード(groupId/guestId)を用いた入場確認との整合 | 要すり合わせ |
7. データ要件
7.1 データモデル概要
グループ(1)—(多)ゲスト、グループ(1)—(多)予約、ゲスト(1)—(多)イベント参加登録、ゲスト(1)—(多)スタンプ取得記録、という構成を想定。
Group (グループ)
├─< Guest (ゲスト)
└─< Reservation (入場予約)
Guest
├─< EventRegistration (イベント参加登録)
├─< StampProgress (スタンプ取得記録)
└─< ChatQuestion (質問履歴)
Event (イベント) ─< EventRegistration
StampSpot (スタンプ設置場所) ─< StampProgress
7.2 主要エンティティ
| エンティティ名 | 概要 | 主な属性 |
|---|---|---|
| Group(グループ) | 事前予約の単位となる来場者のまとまり | groupId, 代表者LINE UID, 人数, 予約日時 |
| Guest(ゲスト) | グループに属する個々の来場者 | guestId, groupId, 識別用の名前, 年齢層, 性別 |
| Reservation(入場予約) | グループの入場予約情報 | reservationId, groupId, 予約日時, ステータス |
| Event(イベント) | 学園祭内で開催されるイベント情報 | eventId, 名称, 開催時間, 開催場所, 定員 |
| EventRegistration(イベント参加登録) | ゲストのイベント参加登録・予約情報 | registrationId, eventId, guestId, 登録日時 |
| StampSpot(スタンプ設置場所) | ここどこスタンプラリーの設置箇所マスタ | spotId, 名称, 位置情報, QRコード値 |
| StampProgress(スタンプ取得記録) | ゲストごとのスタンプ取得状況 | progressId, guestId, spotId, 取得日時 |
| ChatQuestion(質問履歴) | LLMへの質問と回答のログ(F-019統計収集用) | questionId, guestId, 質問内容, 回答内容, 日時 |
| LocationLog(位置情報ログ) | 混雑状況統計用の位置情報(F-016) | logId, guestId, エリアID, 取得日時 |
8. 画面・UI要件
| 画面ID | 画面名 | 概要 | モック/参考リンク |
|---|---|---|---|
| S-01 | 事前予約フォーム画面 | 来場者情報入力・グループ作成(F-001〜F-003) | |
| S-02 | 予約確認・QR表示画面 | 入場用QR表示、予約状況確認(F-004, F-005) | |
| S-03 | パンフレット・FAQ画面 | デジタルパンフレット・FAQの表示(F-010, F-011) | |
| S-04 | 会場マップ画面 | 会場マップ・イベント位置・混雑状況表示(F-012, F-013, F-016) | |
| S-05 | イベント一覧・詳細画面 | イベント情報表示・参加登録(F-006, F-007, F-015) | |
| S-06 | ここどこスタンプラリー画面 | QR読み取り・進捗確認(F-008, F-009) | |
| S-07 | チャット質問画面 | LLMへの対話形式質問対応(F-017) | |
| S-08 | アクセス情報画面 | シャトルバス・駅時刻表・駐車場誘導(F-018) |
9. 制約条件
- 予算・期間の制約:蒼翔祭開催日(2026/8/31想定、12章参照)までに開発・受け入れテストを完了する必要がある
- 技術的制約:LIFFのウィンドウモード(Full/Tall/Compact)による表示制限、LINE内WebViewのブラウザ機能制限(位置情報取得等の対応可否を含む)
- 技術的制約:Gemini APIのレートリミット・コストの上限を事前に設定する必要がある
- 規約・ポリシー上の制約:来場者の個人情報(年齢層・性別・位置情報等)を扱うため、プライバシーポリシーの整備と同意取得フローが必要
- 体制・リソースの制約:開発担当3名+リーダー1名という限られた体制での開発となる
10. 前提条件
- 来場者はLINEアカウントを保有していること
- 事前予約は開催前の一定期間内に受け付けること
- 位置情報を用いた混雑状況の可視化(F-016)は、来場者の同意を得たうえで実施すること
- 入場管理システム(別プロジェクト)側で、本アプリが発行するQRコード(groupId/guestId)を読み取れる前提であること
11. リスク・課題
| ID | 内容 | 影響度 | 対応方針 | 担当者 |
|---|---|---|---|---|
| R-01 | Gemini APIのコスト・レートリミットの具体的な上限値が未確定 | 中 | 想定質問数からコストを試算し、上限値を設定する | |
| R-02 | 入場管理システム側とのQRコード形式(groupId/guestId)のすり合わせが未確定 | 中 | 早期に両プロジェクト間で仕様を確定する | |
| R-03 | 位置情報取得(F-016)の同意取得方法・LINE内WebViewでの取得可否が未検証 | 中 | 技術検証を先行して行い、対応可否に応じて優先度を再設定する |
12. マイルストーン・スケジュール
| フェーズ | 内容 | 期限 | ステータス |
|---|---|---|---|
| 要件定義 | 本ドキュメントの確定 | 2026/7/10 | 進行中 |
| 設計 | データモデル・画面設計・API設計 | 2026/7/12 | 未着手 |
| 実装 | F-001〜F-019の開発 | 2026/8/15 | 未着手 |
| テスト | 当日想定でのリハーサル(複数端末同時アクセス含む) | 2026/8/24 | 未着手 |
| リリース | イベント当日の運用開始 | 2026/8/31 | 未着手 |
13. 受け入れ条件(Acceptance Criteria)
- LINE Loginでログインし、事前予約フォームからグループ・ゲスト情報を登録できる
- 予約確認画面で入場用QR(groupId/guestId)が正しく表示される
- イベントへの参加登録ができ、登録済みイベント一覧が確認できる
- ここどこスタンプラリーのQRを読み取り、進捗状況が正しく反映される
- パンフレット・FAQ・会場マップ・アクセス情報がアプリ内から閲覧できる
- (Could要件を含める場合)チャットでの質問に対しLLMが妥当な回答を返す
- (Could要件を含める場合)混雑状況がマップ上にリアルタイムで反映される
14. 承認
| 役割 | 氏名 | 承認日 | サイン/コメント |
|---|---|---|---|
付録
- 関連ドキュメントへのリンク
- 参考資料