アプリケーション設計:概要書
資料作成者:OpenAI Codex(gpt-5.6-sol) 更新日:2026年9月3日
このページの位置づけ
every_golfのスマホアプリ、Even G2アプリ、外付け方位センサー、現在地取得機能の役割と、ラウンド中の基本動作を整理した概要書です。ここに書かれた機能が実装済みという意味ではなく、今後の設計と実装で共通の基準として使います。
製品構想の正本は /Users/trons-fuyuki/Projects/every_golf/doc/from_fuyuki/PROJECT_VISION.md です。このシステムは完全な攻略法を決定するものではありません。コースデータ、現在地、プレイヤーの登録情報から基本的な番手と方向を提案し、最終判断はプレイヤーが行います。
実現する体験
プレイヤーが現在地で次のショットを検討するとき、スマホアプリがコースデータ、現在地、頭部方位、登録済みの番手とキャリーを組み合わせ、Even G2へ必要な情報を表示します。
風、プレイヤーの当日の調子、ボールの沈み方、木の実際の高さや枝の張り出しは判定しません。現地の視界と状況を見たプレイヤーの判断を優先します。
システム全体の構成
Web UI ── プロフィール編集・同期 ──┐
│
コースエディタ ── CourseData ──────┤
▼
スマホ内蔵GPS ─┐ スマホアプリ
├─ 現在地入力 → 計算・判断・記録
BLE接続GPS ────┘ │ ▲
│ │ BLE
外付け方位センサー ── 頭部方位 ─────┘ │
│
Even G2アプリ
HUD表示・ボタン入力
スマホアプリをシステムの中心とします。スマホアプリがデータとラウンド状態の正本を持ち、Even G2アプリは表示と操作を担当します。G2との接続が一時的に切れても、ラウンド情報はスマホ側に残します。
役割分担
Web UIは便利な編集手段ですが、通信できないゴルフ場でもラウンドできるよう、ラウンド中の基本機能はスマホ内だけで成立させます。
スマホアプリの役割
スマホアプリは、入力データを集約して判断し、ラウンド状態を保存する中心装置です。
現在地の取得元
現在地はスマホ内蔵GPSだけに固定しません。スマホアプリ内に共通の「現在地提供元」を用意し、スマホ内蔵GPSとBLE接続GPSを同じ形式で扱います。
2つのGPS座標は根拠なく平均しません。採用した1つの測位結果を、その時点の現在地として使用します。自動切替が起きた場合は、G2へ使用中の情報源と注意状態を通知します。
共通の現在地データ
各GPSから受け取った情報は、スマホアプリ内で次の共通形式へ変換します。
phone_gpsまたはble_gps必須
latitude / longitude緯度・経度必須
altitudeGPSが報告した標高任意
horizontalAccuracyM水平精度の目安必須
verticalAccuracyM垂直精度の目安任意
timestamp測位した時刻必須
fixStatus測位の有効性やfix状態必須
satelliteInfo衛星数等、機器が提供できる品質情報任意
FloorDataの標高とGPSが報告する標高は用途を分けます。コース上の高低差計算はFloorDataを基準とし、GPS標高は測位品質の確認や将来の検証材料として扱います。
BLE接続GPSの扱い
BLE接続GPSは「現在地提供元」です。方位センサーとは別の機能として設計します。将来、GPSと方位センサーを同じ筐体や同じBLE機器へ統合する場合も、スマホアプリ内では位置情報と頭部方位を別々の入力として扱います。
未確定
BLE GPSの具体的な機種、BLE serviceとcharacteristic、データ形式、通知周期、許容精度、情報を期限切れとする秒数は、機器選定と実測後に決定します。現時点では特定機器専用の形式へ固定しません。
現在地を使う処理
CourseDataには、コース検索用として各ホールのFloorDataの四隅または同等の境界情報を保存します。ホール番号だけでOUT・INを決めず、それぞれに所属するhole IDを明示します。
プレイヤープロフィール
プロフィールはスマホアプリまたはWeb UIで入力します。スマホアプリはラウンド中に使える状態でプロフィールを保持します。
キャリーが未入力の番手は選択候補へ出しません。パターはデフォルトで所有しているものとして扱います。
コース検索とラウンド開始
ラウンド中の状態
ラウンド中は、次の状態をスマホアプリが管理します。
コース選択 ↓ ラウンド設定(OUT / IN / FULL) ↓ Teeショットモード ↓ 「アドレス状態」ボタン アドレス状態 ↓ ショット 通常ショットモード ↓ 「アドレス状態」ボタン アドレス状態 ↓ 必要回数繰り返す ホールアウト ↓ スコア確認・修正 ↓ 次ホールのTeeショットモード
Teeショットモード
通常ショットモード
「アドレス」ボタンは前回ショットの確定と次ショットの検討開始に使います。「アドレス状態」ボタンは、方向と番手を決めた後にスイング姿勢へ進むための別操作です。
正式なアドレス状態
ショット方向を検討している状態と、実際にスイングする姿勢を区別します。正式なアドレス状態では、右打ちの場合、ショット方向に対して上から見て時計回りに90度回転した向きを基準にします。左打ちは反対方向の90度を基準にします。
方位センサーから受信した頭部方位と基準方向を比較し、G2へ左右の回転量や一致状態を表示します。方位センサーが未接続、未校正、精度不足の場合はアドレス案内を止め、理由を表示します。
番手とショット方向の提案
風は計算へ入れません。木や建物の実際の高さもFloorDataにないため、弾道が越えるかどうかは判定しません。
登録されたキャリーでは池や森などへ到達する場合、同じ番手を使うときの力加減を20%単位で案内できます。人が再現しにくい5%単位の表示は行いません。
障害物・地形情報の表示
表示対象は次の6種類です。これらの存在を理由に基本ルートや提案方向そのものは変更せず、プレイヤーが判断するための情報として表示します。
暫定の最大表示件数は5件です。提案したショット方向とキャリーに近い対象を優先し、左右へ外れた場所よりも、ショット方向の手前や先にある対象を優先します。
未確定
ショット中心線から左右何mまでを検査するか、着弾候補の手前と先を何mまで検査するか、対象が重なった場合の詳細な順位は、FloorDataを使った試験で決定します。
G2へ表示する情報
情報名、方向記号、距離を小さな表示へまとめます。距離を1行目、方向記号と情報名を2行目にする表現を基本とします。
145yd ▼ Green
HUDには次を表示します。
G2アプリの役割
G2アプリはスマホアプリから表示用データを受け取り、プレイヤーの操作をスマホへ返します。
G2側ではCourseData一式やスコアの正本を持ちません。操作イベントをスマホへ送り、スマホが検査・保存した結果を再表示します。
外付け方位センサーの役割
外付け方位センサーは、プレイヤーの頭が向いている方角を測定し、BLEでスマホへ送ります。
方位センサーは番手、ルート、障害物、スコアを判断しません。購入済みのAE-NRF52840単体には方位センサーがないため、追加センサーの選定とファームウェア実装は現在保留中です。
ホールアウトとスコア
スコア表示の呼称と見せ方は、「みんなのGOLF」シリーズで馴染みのある対Par表現を参考にします。
主なデータ
異常時と復旧
確定している方針
実装前に決定・検証する項目
現在の実装状況
このページはアプリケーション設計の概要です。スマホアプリ、Even G2アプリ、BLE GPS連携、方位センサーファームウェアが完成したことを示す資料ではありません。実装後は自動テストだけでなく、スマホ、G2、GPS、方位センサーを組み合わせた実地確認が必要です。