スペクテーターアプリ(Gateway のパブリック画面)
Timers Studio のスペクテーターアプリのリファレンス。/ask/<room> で観客が見る画面、ログイン不要の ID 管理、権限、ルームのブランディング継承について。
最終更新
スペクテーターアプリ(Gateway のパブリック画面)
スペクテーターアプリは Gateway モジュールのパブリックな顔です。観客が Timers Studio のルームをスマートフォンで開いたときに実際に目にするもの、それがこのアプリです。軽量でログイン不要、timers.studio/ask/<room> で配信されます。Studio、Moderator、Player など他の部分はすべて観客からは見えません。この画面の範囲は意図的に狭く設計されています。
スペクテーターの到達経路は 2 つです。ステージやスライド、イベントのプログラムに表示される QR コードを読み取るか、主催者が配布した短い URL を入力します。いずれの場合も経路は同じで、/ask/<room> が controllers テーブルに照らしてルームを解決し、パブリック UI を読み込みます。ロビーも、アカウント作成も、メールアドレスの要求もありません。
スペクテーターが見るもの
アプリはモバイルファーストで親指操作向け、ダークテーマがデフォルトです。読み込み直後から次の機能にアクセスできます。
- 質問を送る — 280 文字のフォームで、
spatial_questionsに書き込みます。任意の座席ピッカー(SeatSelector)がvector_positionとzone_idを付与し、ディレクターが発言位置を把握できます。 - ライブ投票に参加 — ディレクターが投票を開いた瞬間に
SpectatorPollVoteが下からせり上がります。投票するか投票が閉じるまで質問フォームより優先されます。 - アジェンダ — 主催者が有効にしているときに表示される読み取り専用の進行表。Agenda モジュールで編集されたのと同じデータが反映されます。
- LIVE バッジ —
controllers.timer_stateに連動する小さなインジケーター。ステージでタイマーが動いている間は LIVE に切り替わります。 - 成功画面 — 質問送信後、確認画面とリセットボタンで同じ端末から別の質問を続けて送れます。
タブはバックグラウンドで購読が維持されます。ディレクターが投票を開いてもスペクテーターはリロード不要で、投票シートは自動的に届きます。
ID とプライバシー
スペクテーターアプリはパスワードを一切求めません。ID はサーバーセッションではなく、ブラウザ内の spectator_id に保持されます。
- 初回訪問時にアプリが
spectator_idを生成し、ルーム単位のキー(例:fp_<room>)でlocalStorageに保存します。 - その ID、
room_id、任意のnicknameとともにspectatorsに 1 行が挿入されます。 - 同じ端末で再訪すると同じ
spectator_idを使い回すため、ページを開き直した人がオペレーターのカウンターで二重にカウントされません。 - ブラウザのストレージを消去すると ID はリセットされます。これは意図的な仕様で、「イベント後は何も残らない」という観客の期待と一致します。
メールアドレス・電話番号・アカウントが不要なので、Gateway は GDPR の側から見ても健全です。収集されるのは匿名 ID と任意のニックネーム、そしてスペクテーターが明示的に入力した内容(質問、投票)だけです。座席は選択した場合のみ保存されます。
権限と制限
わずかなルールでこの画面を負荷に耐える静かな面に保っています。
- レートリミット — 同じ
spectator_idは 10 秒に 1 件まで質問を送れます。送信の合間はフォームが無効化されます。 - 質問の長さ — 280 文字。クライアントで強制し、INSERT 時に再チェックします。
- 同時にアクティブな投票は 1 つ — スペクテーターは
active状態の投票のみを見ます。過去の投票はこの画面からはたどれません。 - 編集・削除は不可 — 一度送った質問はスペクテーター側で書き直せません。モデレーションはオペレーター側で行います。
- モデレーターツールは非搭載 — 承認、Player へのプッシュ、抽選の当選者決定はすべて Studio 内で行います。スペクテーターアプリはそれらを一切見せません。
ブランディング
スペクテーターアプリは所属するルームの見た目を継承します。Studio のヘッダーと Player の背景を動かすのと同じテーマが、ここにも適用されます。
- プライマリカラーとアクセントカラーはルームのテーマから読み込まれます。
- controller に主催者ロゴが設定されていればアプリ上部に表示されます。
- ダークモードが既定ですが、ルームのテーマで上書きできます。
- 言語は controller の管理言語に従い、アラビア語では RTL レイアウトに切り替わります。
目指しているのは、/ask/<room> のスペクテーターが、ステージ画面と同じイベントの中にいると感じられることです。Timers Studio のクロームがショーから注意を奪うことはありません。
FAQ
スペクテーターはアカウント作成が必要ですか?
いいえ。スペクテーターアプリにはログインも登録もメールアドレス欄もありません。初回訪問時に匿名の spectator_id がブラウザ内で生成されます。
Gateway はどのようなデータを収集しますか?
localStorage 内の匿名 spectator_id、任意のニックネーム、スペクテーターが明示的に送った内容(質問文、座席の選択、投票)だけです。メール、電話、アカウントは収集しません。
アプリをインストールせずに動作しますか? はい。スペクテーターアプリはウェブページです。モバイルでもデスクトップでも、最新のブラウザなら QR コードや短い URL から直接開けます。インストールは不要です。
スペクテーターにアジェンダを非表示にできますか? はい。主催者は Studio からアジェンダの表示/非表示を切り替えられます。非表示のときもアプリは通常どおり読み込まれ、アジェンダタブだけが消えます。
次に読む
- Gateway モジュールの概要 — スペクテーターアプリとオペレーターワークスペースの関係。
- Access Gateway を開く — スペクテーターの送信内容を読むオペレーター側。
- ライブ投票に参加する(スペクテータービュー) — 投票フローの詳細。