Skip to content

Latest commit

 

History

History
113 lines (88 loc) · 3.75 KB

File metadata and controls

113 lines (88 loc) · 3.75 KB

Planning Poker サービス仕様書

📏 概要

本サービスは、アジャイル開発における見積もり作業のための「Planning Poker」をWeb上で実現するリアルタイムアプリケーションです。

🌟 目的

  • 認証不要で即座に利用可能なPlanning Pokerツールを提供
  • 小規模なチームによる軽量な利用を想定
  • リアルタイムで見積もり状況を同期
  • データは永続化せず、セッション終了時に破棄

🏠 システム構成

📚 技術スタック

技術 説明
フロントエンド HTML + CSS + JS Reactなどは使用しない
サーバー Node.js + Express WebSocketサーバとして利用
通信 Socket.IO 双方向通信エンジン

🔀 アプリ仕様

🌐 ルーム参加フロー

  1. 任意のルームIDを入力し、ユーザー名を設定
  2. サーバへ接続し、当該ルームにジョイン
  3. 同一ルームIDで参加しているユーザー全員に状態が同期
  4. 最初に参加したユーザーが自動的にホストとなる

🃏 ポーカー機能

機能 内容
投票カード 1, 2, 3, 5, 8, 13, 21
投票の記録 ユーザーごとにメモリ上に投票値を保持
投票の公開 ホストがボタンを押すと全員に公開
投票結果の表示 公開前は「❓」で表示、公開後には値を表示
再投票 ホストが投票終了ボタンで新しい投票を開始
投票トピック ホストが設定可能、各投票に名前をつけられる
投票履歴 過去の投票結果をセッション中に保存して表示

👥 ユーザー管理

  • 識別対象: socket.id
  • 表示名: ユーザー側で入力した名前
  • ホスト: 最初に参加したユーザー、または前ホスト退出時に自動的に選出
  • 退出: ブラウザのタブ閉じなどで通知
  • 招待: 招待リンクをコピーして他のユーザーに共有可能

🔑 ホスト機能

  • 投票トピックの設定
  • 結果の公開
  • 投票の終了と新しい投票の開始
  • ホスト退出時は別のメンバーに自動的に権限が移譲

🧐 データ構造

rooms = {
  [roomId]: {
    users: {
      [socketId]: {
        name: "ユーザー名",
        vote: 5, // or null
        isHost: true // or false
      }
    },
    revealed: false,
    hostId: "socketId",
    topic: "投票トピック名",
    history: [
      {
        topic: "過去の投票トピック",
        timestamp: "2023-xx-xxTxx:xx:xx.xxxZ",
        votes: {
          "ユーザー名1": 5,
          "ユーザー名2": 8
        }
      }
    ]
  }
}

セッション終了時にデータは破棄されます

🔢 UI仕様

  • ルームIDと名前を入力
  • 招待リンクをコピーして共有可能
  • ホストはトピックを設定可能
  • 投票ボタンを押して選択
  • ホストが結果公開ボタンと投票終了ボタンを操作
  • 投票状況はSocket.IOによりリアルタイムで同期
  • ヘルプボタンから使い方ガイドを表示
  • 投票履歴を一覧表示

🔒 制約事項

  • 小規模なユースケースを想定
  • サーバが停止するとデータは全て破棄

‼️ 拡張案

  • ルームID自動生成
  • タイマー機能
  • 結果の統計表示
  • カードセットの切り替え
  • CSSライブラリによる結果表示の改善