Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,15 @@ NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# Optional: Supabase Service Role Key (for server-side operations only)
# WARNING: Never expose this key to the client side!
# SUPABASE_SERVICE_ROLE_KEY=your_service_role_key

# Web Push Notifications (VAPID)
# Generate keys by running: node scripts/generate-vapid-keys.js

# VAPID Public Key (safe to expose to client)
NEXT_PUBLIC_VAPID_PUBLIC_KEY=your_vapid_public_key

# VAPID Private Key (NEVER expose to client!)
VAPID_PRIVATE_KEY=your_vapid_private_key

# VAPID Subject (mailto: or https: URL)
VAPID_SUBJECT=mailto:admin@tag-support.app
70 changes: 63 additions & 7 deletions PROGRESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,15 +194,54 @@
- TypeScript型安全性の維持
- ビルド成功確認

### Phase 6: プッシュ通知サーバー実装 (完了) ⭐️ NEW

- [x] **VAPIDキー生成システム**
- VAPIDキー生成スクリプト作成(scripts/generate-vapid-keys.js)
- 環境変数設定(.env.example更新)
- セキュアな鍵管理方法の文書化

- [x] **Next.js API Routes実装**
- GET /api/push/vapid - VAPID公開鍵取得API
- POST /api/push/subscribe - プッシュサブスクリプション登録API
- POST /api/push/unsubscribe - サブスクリプション解除API
- POST /api/push/send - プッシュ通知送信API(ユーザー/ロール別フィルタリング)

- [x] **Web Pushユーティリティライブラリ**
- lib/web-push.ts作成
- web-pushライブラリ統合
- バッチ送信機能
- サブスクリプション検証機能
- エラーハンドリングと無効サブスクリプション削除

- [x] **データベース統合**
- push_subscriptionsテーブル作成(マイグレーション)
- Database型定義の拡張(types/database.ts)
- RLSポリシー設定(ユーザー毎のサブスクリプション管理)
- 自動更新タイムスタンプトリガー

- [x] **クライアント側統合**
- useNotificationsフック拡張(subscribeToPush/unsubscribeFromPush)
- VAPID公開鍵の自動取得
- Service Worker統合強化
- プッシュサブスクリプション管理

- [x] **ドキュメント作成**
- docs/push-notifications.md(セットアップ・使用方法・API仕様)
- トラブルシューティングガイド
- セキュリティベストプラクティス

## 現在の制限事項

### 未実装機能

- [x] ~~Push通知システム(Web Push API統合)~~ ✅ 完了
- [x] ~~Push通知サーバー統合~~ ✅ 完了(Phase 6)
- [x] ~~データベーススキーマの実環境デプロイ(location_historyテーブル等)~~ ✅ マイグレーション完了
- [ ] Supabase実環境構築(RLS設定、マイグレーション実行)
- [ ] マルチゲームマスター対応(複数GM同時運営)
- [ ] 特殊役職システム(データモデルは準備済み)
- [ ] Push通知サーバー統合(現在はクライアントサイドのみ
- [ ] ゲームイベント連動の自動通知(サーバー統合

### 技術的制約

Expand All @@ -213,14 +252,20 @@
## ファイル構成

```
tag-support/ (28ファイル作成) ⭐️ 更新
tag-support/ (35ファイル作成) ⭐️ 更新
├── supabase/migrations/
│ ├── 20250101000000_initial_schema.sql
│ ├── 20250118000000_add_captures_zones.sql
│ └── 20250119000000_add_location_history.sql ⭐️ NEW
│ ├── 20250119000000_add_location_history.sql
│ └── 20250120000000_add_push_subscriptions.sql ⭐️ NEW
├── scripts/
│ └── generate-vapid-keys.js ⭐️ NEW
├── lib/
│ └── supabase.ts # Supabase設定
├── types/index.ts # 型定義
│ ├── supabase.ts # Supabase設定
│ └── web-push.ts # Web Pushユーティリティ ⭐️ NEW
├── types/
│ ├── index.ts # 型定義
│ └── database.ts # Database型定義(push_subscriptions追加) ⭐️ 更新
├── hooks/
│ ├── useAuth.tsx # 認証フック
│ ├── useLocation.ts # 位置情報フック(履歴自動記録機能追加) ⭐️ 更新
Expand All @@ -229,7 +274,7 @@ tag-support/ (28ファイル作成) ⭐️ 更新
│ ├── useCapture.tsx # 捕獲フック
│ ├── useZones.tsx # ゾーンフック
│ ├── useLocationHistory.tsx # 位置履歴フック
│ └── useNotifications.tsx # Push通知フック ⭐️ NEW
│ └── useNotifications.tsx # Push通知フック(サーバー統合) ⭐️ 更新
├── components/
│ ├── Map.tsx # 地図コンポーネント
│ ├── GameControls.tsx # ゲーム制御
Expand All @@ -242,7 +287,18 @@ tag-support/ (28ファイル作成) ⭐️ 更新
│ ├── page.tsx # ランディング
│ ├── runner/page.tsx # 逃走者UI
│ ├── chaser/page.tsx # 鬼UI
│ └── gamemaster/page.tsx # GM UI(統計・リプレイ統合済み)
│ ├── gamemaster/page.tsx # GM UI(統計・リプレイ統合済み)
│ └── api/push/ # Push通知API ⭐️ NEW
│ ├── vapid/route.ts # VAPID公開鍵取得
│ ├── subscribe/route.ts # サブスクリプション登録
│ ├── unsubscribe/route.ts # サブスクリプション解除
│ └── send/route.ts # プッシュ通知送信
├── docs/
│ ├── TESTING.md
│ ├── TECH_STACK_MIGRATION.md
│ ├── SUPABASE_SETUP.md
│ ├── 仕様書.md
│ └── push-notifications.md ⭐️ NEW
└── public/
├── manifest.json # PWAマニフェスト
└── sw.js # Service Worker(Push通知対応) ⭐️ 更新
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,23 +105,25 @@ tag-support/

✅ Next.js + TypeScript + PWA基盤
✅ Supabase (PostgreSQL + PostGIS) 連携
✅ 位置情報トラッキング
✅ 位置情報トラッキング(自動履歴記録付き)
✅ Leaflet.js地図表示
✅ 役職別UI(逃走者・鬼・ゲームマスター)
✅ ミッションシステム(作成・削除・完了)
✅ ミッションシステム(作成・削除・完了・位置ベース自動判定
✅ セーフゾーン・立禁エリア管理
✅ ゲーム状態管理(開始・停止・設定変更)
✅ 捕獲システム(近距離検出・PostGIS)
✅ 位置履歴記録・リプレイ機能
✅ ゲーム統計・分析機能
✅ **プッシュ通知システム(Web Push API + サーバー統合)** ⭐️ NEW
✅ PWA設定・オフライン対応基礎
✅ CI/CD (GitHub Actions)
✅ テスト環境 (Vitest + Playwright)

## 今後の実装予定

- [ ] Push通知機能(Web Push API)
- [ ] Supabase実環境構築(RLS設定・マイグレーション実行)
- [ ] ゲームイベント連動の自動通知
- [ ] マルチゲームマスター対応
- [ ] データベーススキーマの実環境デプロイ
- [ ] 特殊役職システム

## 開発コマンド
Expand Down
116 changes: 68 additions & 48 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,60 +56,67 @@

---

## Phase 3: 通知・ミッション機能 📋
## Phase 3: 通知・ミッション機能 ✅ (ほぼ完了)

**想定期間**: 2-3セッション

### 3.1 Push通知システム

- [ ] Web Push API設定
- [ ] 通知許可フロー
- [ ] 役職別通知ロジック
- ゲーム開始/終了通知
- ミッション完了通知
- 捕獲/救出通知
- [ ] バックグラウンド通知テスト

### 3.2 ミッションシステム

- [ ] ミッションデータモデル実装
- [ ] 位置ベース判定ロジック
- エリア到達判定
- 滞在時間計測
- 距離計算最適化
- [ ] ミッション進行UI
- [ ] 達成状況リアルタイム同期

### 3.3 ゲーム進行管理

- [ ] GM用ミッション作成UI
- [ ] 動的ミッション配信
- [ ] 進行状況ダッシュボード
**状況**: Phase 3.1, 3.2完了、3.3一部完了

### 3.1 Push通知システム ✅ (完了)

- [x] Web Push API設定
- [x] 通知許可フロー
- [x] 役職別通知ロジック
- [x] ゲーム開始/終了通知(テンプレート実装済み)
- [x] ミッション完了通知(テンプレート実装済み)
- [x] 捕獲/救出通知(テンプレート実装済み)
- [x] VAPIDキー生成・管理
- [x] プッシュサブスクリプションAPI(subscribe/unsubscribe/send)
- [x] プッシュ通知サーバー統合
- [ ] バックグラウンド通知テスト(実機)
- [ ] ゲームイベント連動の自動通知

### 3.2 ミッションシステム ✅ (完了)

- [x] ミッションデータモデル実装
- [x] 位置ベース判定ロジック
- [x] エリア到達判定(Haversine距離)
- [x] 滞在時間計測
- [x] 距離計算最適化
- [x] ミッション進行UI
- [x] 達成状況リアルタイム同期

### 3.3 ゲーム進行管理 🚧 (一部完了)

- [x] GM用ミッション作成UI
- [x] 動的ミッション配信
- [x] 進行状況ダッシュボード
- [ ] 自動通知トリガー(ゲームイベント連動)

---

## Phase 4: エリア管理・安全機能 🗺️
## Phase 4: エリア管理・安全機能 🚧 (一部完了)

**想定期間**: 2-3セッション
**状況**: Phase 4.1完了、4.3一部完了

### 4.1 エリア管理システム
### 4.1 エリア管理システム ✅ (完了)

- [ ] セーフゾーン設定UI
- [ ] 立禁エリア設定UI
- [ ] ドラッグ&ドロップでのエリア編集
- [x] セーフゾーン設定UI
- [x] 立禁エリア設定UI
- [x] ドラッグ&ドロップでのエリア編集
- [ ] エリア境界での自動警告

### 4.2 安全機能強化
### 4.2 安全機能強化 📋

- [ ] 危険エリア警告システム
- [ ] 緊急停止機能
- [ ] 参加者の安全状況監視
- [ ] SOS機能

### 4.3 位置情報精度調整
### 4.3 位置情報精度調整 🚧 (一部完了)

- [ ] GM用精度設定UI
- [ ] 更新間隔動的調整
- [x] GM用精度設定UI
- [x] 更新間隔動的調整
- [ ] 通信断時の挙動改善

---
Expand Down Expand Up @@ -138,23 +145,27 @@

---

## Phase 6: 分析・改善機能 📊
## Phase 6: 分析・改善機能 🚧 (一部完了)

**想定期間**: 2-3セッション
**状況**: Phase 6.1, 6.2完了

### 6.1 リプレイシステム
### 6.1 リプレイシステム ✅ (完了)

- [ ] 移動履歴可視化
- [ ] タイムライン再生
- [x] 移動履歴可視化
- [x] タイムライン再生
- [x] 可変速度再生(1x/2x/4x/8x)
- [x] シーク機能
- [ ] ハイライト機能

### 6.2 ゲーム分析
### 6.2 ゲーム分析 ✅ (完了)

- [ ] 統計データ収集
- [ ] プレイヤー行動分析
- [x] 統計データ収集(位置履歴・速度・方向)
- [x] プレイヤー行動分析(移動距離・平均速度・最高速度)
- [x] ゲーム統計UI
- [ ] ゲームバランス分析

### 6.3 改善サイクル
### 6.3 改善サイクル 📋

- [ ] フィードバック収集システム
- [ ] A/Bテスト基盤
Expand Down Expand Up @@ -228,8 +239,17 @@

## 次回セッション重点項目

1. **Supabase実環境構築** (最高優先)
1. **Supabase実環境構築** (最高優先・ブロッカー)
- 全マイグレーションの実行(push_subscriptions含む)
- RLSポリシー設定
- VAPIDキー生成と環境変数設定
2. **モバイル実機テスト**
3. **基本ゲーム機能追加**

**目標**: 実際に屋外でテストプレイが可能な状態を目指す
- プッシュ通知の実機動作確認
- 位置履歴記録の精度検証
- ゲーム全体フローのテスト
3. **自動通知トリガーの実装**
- ゲーム開始/終了時の全員通知
- ミッション完了時の通知
- 捕獲時の通知

**目標**: 実際に屋外でテストプレイが可能な状態を目指す(全機能実装済み)
Loading
Loading