推しアイデア
・鬼が近づくと捕獲ボタンが表示される ・逃走者は鬼の位置が見えない ・開始3秒間は鬼が動けないルール ・通知で捕獲や終了をリアルに伝える ・戦略的なマップアイテムを追加予定
―
・鬼が近づくと捕獲ボタンが表示される ・逃走者は鬼の位置が見えない ・開始3秒間は鬼が動けないルール ・通知で捕獲や終了をリアルに伝える ・戦略的なマップアイテムを追加予定
・park発想で公園遊びの鬼ごっこを選定 ・外で遊ばない子に体験を届けたかった ・人数や管理の負担をアプリで解決した
・Flutterで両OS対応のUIを高速開発 ・Firestoreで位置と状態を即時反映 ・Functionsで捕獲処理を自動化 ・FCMでイベント通知を即時配信 ・NTPで時間ズレを自動補正 ・turf_dartで距離や範囲を高精度判定
リアルタイム位置共有・捕獲判定・通知を備えたオンライン鬼ごっこアプリ。
Flutter を用いてモバイルクライアントを実装し、Firebase をバックエンドとして採用したサーバーレス構成。
目的:
| 分類 | 技術 | 役割 |
|---|---|---|
| Frontend | Flutter(v3.24.0 / fvm) | UI・位置送信・地図表示 |
| Backend | Firebase Cloud Functions Gen2(Node.js 22) | 捕獲・エリア外・ゲーム終了通知 |
| Database | Firestore | プレイヤー状態、ゲームセッション管理 |
| Auth | Firebase Authentication | Google / 匿名ログイン |
| Messaging | Firebase Cloud Messaging | 捕獲/エリア外/終了などの通知 |
| Map | Google Maps API(google_maps_flutter) | マップ描画 |
| Utility | turf_dart | ポリゴン内判定(エリア外検知) |

| 機能名 | 説明 | Priority |
|---|---|---|
| プレイヤー登録 | Google/匿名でログイン | ★★★ |
| ルーム作成/参加 | パーティIDでゲーム参加 | ★★★ |
| ロール割り当て | TAGGER / RUNNER / SPECTATOR | ★★★ |
| 位置情報送信 | Geolocatorでリアルタイム送信 | ★★★ |
| マップ反映 | GoogleMap上に全プレイヤー描画 | ★★★ |
| 捕獲判定 | 距離判定 + キャッチボタン | ★★★ |
| ゲーム時間管理 | NTP補正 + Firestore startAt同期 | ★★★ |
| 通知 | Cloud Functions → FCM → Flutter | ★★★ |
| 結果表示 | 勝敗/捕獲数の表示 | ★★☆ |
| 観戦モード | 位置閲覧のみ | ★★☆ |
距離判定(Geolocator.distanceBetween)
distance <= 20.0m (暫定)
{ "caught": true, "caughtAt": serverTimestamp(), "caughtBy": "<taggerId>" }
{ "lastLocation": { "latitude": 35.0, "longitude": 135.0 }, "inside": true, "caught": false, "updatedAt": <serverTimestamp> }
購読対象:
gameSessions/{gameId}/players
反映内容:
UI反映ルール:
game_<gameId>FirebaseMessaging.onMessage.listen((msg) { showSnackBar(msg.notification!.title); });
エリア外に出たら:
Firestore に startAt を記録。
NTP.getNtpOffset() でずれ補正startAt + durationMinutes → 終了時刻| 役割 | 色 | 権限/特徴 |
|---|---|---|
| TAGGER(鬼) | 赤 | 捕獲ボタン可 / 全員の位置を見る |
| RUNNER(逃走者) | 青 | 鬼の位置は非表示 / caughtで脱落 |
| WATCHER | グレー | マップ閲覧のみ |
https://apps.apple.com/ro/app/gottcha-irl-hide-and-seek/id6446601497
geolocator google_maps_flutter firebase_auth cloud_firestore firebase_messaging cloud_functions turf_dart provider / Riverpod
| サービス | 役割 |
|---|---|
| Auth | Google/匿名ログイン |
| Firestore | プレイヤー/セッション管理 |
| Functions (nodejs22 Gen2) | 通知・イベント処理 |
| FCM | 捕獲/終了/エリア外通知 |
| Storage | アバター画像(オプション) |
本プロジェクトでは、設計・実装・レビュー・ドキュメント作成の各工程において、複数のAIツールを戦略的に活用し、開発効率とチーム連携の向上を実現しました。
| ツール | 活用内容 | 採用理由 |
|---|---|---|
| GitHub Copilot | コーディング全般の補完、関数やロジック提案 | 文脈に沿ったリアルタイム補完で、実装速度を大幅に向上可能なため |
| OpenAI Codex | Cloud FunctionsやFirestoreルールの初期生成 | 複雑なルールや非同期処理の構築を効率化できるが、精度と応答性を重視する場面で利用(課金前提) |
| ツール | 活用内容 | 採用理由 |
|---|---|---|
| Figma + MCP Server | FigmaのUI設計からFlutter Widget構造を変換 | デザイナーと開発者の認識ズレを防ぎ、再現性の高いUI構築を実現 |
| Canva AI | キャラクターやロゴの自動生成 | 初期段階のプロトタイピングにおいて、視覚イメージの高速化に貢献 |
| ツール | 活用内容 | 採用理由 |
|---|---|---|
| GitHub Copilot | PRコメント補完・概要説明 | 変更意図の明示と記述負担の軽減に貢献 |
| Gemini Code Assist | PRの自動要約・レビューポイント抽出 | 誰でも無償で利用でき、PR作成時に自動で概要作成とレビュー支援まで可能。レビュアーの負担を大幅に軽減 |
| 自動化対象 | 説明 | 採用理由 |
|---|---|---|
| コミットメッセージ生成 | 差分から意図に沿ったメッセージを自動提案 | フォーマットの統一により、履歴管理・解析が容易に |
| PRディスクリプション生成 | PR作成時の要点や背景を自動出力 | チームメンバー間での意図共有を効率化 |
| ファイル解説生成 | 複雑なファイルの構造・意図を自然言語で解説 | 新規参加者やレビュアーへの学習・共有コストを削減 |
このようなAIツールの選定と活用により、「人に伝わる開発」 を実現しつつ、スピードと品質の両立を図っています。