← 一覧へ戻る

AreUComing

恋人・パートナーが会いに来るまでの位置と記録を共有し、会ったあとにはその過程を振り返れるようにした位置情報ウェブアプリです。

ハッカソン作品 / WaffleStudio Wackathon 2026

担当 / バックエンド開発、セッションドメイン設計、REST API、リアルタイム位置記録フロー

使用技術 / Java, Spring Boot, React, WebSocket, Docker, MySQL, GitHub

関連リンク / バックエンド / フロントエンド / Figma

概要

AreUComing は、恋人・パートナーが待ち合わせ場所に向かうまでの移動過程を共有し、会ったあとにはその過程を記録として残せる位置情報ウェブアプリです。

位置共有のリクエスト、承認、進行、終了へ続くセッションドメインを設計し、REST APIとバックエンド・フロントエンド間のWebSocket通信を実装しました。移動中に発生する座標、メモ、写真、合流完了イベントは一つの履歴モデルに保存し、リアルタイム地図表示と記録照会の両方で使えるようにしました。

WaffleStudio主催のWackathon 2026で開発し、3位を受賞しました。

担当内容

  • セッションと位置ポイント履歴を含む全体DBスキーマを設計しました。
  • 位置共有リクエストを、PENDING / ACTIVE / DONE 状態を持つセッションとしてモデル化しました。
  • セッション作成、現在セッション照会、状態照会、承認、終了、写真アップロード、履歴照会のREST APIを実装しました。
  • バックエンドのWebSocket handlerを実装し、クライアントが送った位置座標、メモ、合流確定イベントを、セッション状態とユーザー権限に合わせて処理しました。
  • フロントエンドでWebSocket接続、定期的な位置送信、相手の位置受信、地図マーカーと経路更新の流れを実装しました。
  • HTTPで既存履歴を読み込み、WebSocketで新しい座標を受け取ることで、再読み込み後も地図状態を復元できるようにしました。

設計上の課題

このプロジェクトで最初に整理する必要があったのは、位置共有を単なる座標送信ではなく、状態を持つセッションとしてモデル化することでした。ユーザーが位置共有をリクエストするとセッションはPENDINGになり、相手が承認するとACTIVEになり、合流完了またはキャンセル後にはDONEとして終了する流れにしました。

セッションは個人ではなくカップル単位で共有されるリソースだったため、アクセス制御も必要でした。現在ユーザーのカップル情報とセッションのcoupleIdを比較してアクセスを制限し、同じカップルに複数のPENDING/ACTIVEセッションが同時に作られないよう、既存セッションを返す形で重複生成を防ぎました。

また、位置共有中に発生する座標、メモ、写真、合流完了イベントを別々に管理せず、SessionPointという共通の履歴モデルにまとめました。保存構造を一つにしたことで、リアルタイム地図表示、再読み込み後の復元、セッション終了後の履歴照会を同じデータフロー上で動かせました。

画面例

AreUComing 画面例 1

モバイル環境でリアルタイム経路とセッション状態を確認できるようにした画面です。