本サービスは、アジャイル開発における見積もり作業のための「Planning Poker」をWeb上で実現するリアルタイムアプリケーションです。
- 認証不要で即座に利用可能なPlanning Pokerツールを提供
- 小規模なチームによる軽量な利用を想定
- リアルタイムで見積もり状況を同期
- データは永続化せず、セッション終了時に破棄
| 層 | 技術 | 説明 |
|---|---|---|
| フロントエンド | HTML + CSS + JS | Reactなどは使用しない |
| サーバー | Node.js + Express | WebSocketサーバとして利用 |
| 通信 | Socket.IO | 双方向通信エンジン |
- 任意のルームIDを入力し、ユーザー名を設定
- サーバへ接続し、当該ルームにジョイン
- 同一ルームIDで参加しているユーザー全員に状態が同期
- 最初に参加したユーザーが自動的にホストとなる
| 機能 | 内容 |
|---|---|
| 投票カード | 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
}
}
]
}
}セッション終了時にデータは破棄されます
- ルームIDと名前を入力
- 招待リンクをコピーして共有可能
- ホストはトピックを設定可能
- 投票ボタンを押して選択
- ホストが結果公開ボタンと投票終了ボタンを操作
- 投票状況はSocket.IOによりリアルタイムで同期
- ヘルプボタンから使い方ガイドを表示
- 投票履歴を一覧表示
- 小規模なユースケースを想定
- サーバが停止するとデータは全て破棄
- ルームID自動生成
- タイマー機能
- 結果の統計表示
- カードセットの切り替え
- CSSライブラリによる結果表示の改善