アプリケーション設計:概要書

資料作成者: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へ必要な情報を表示します。

風、プレイヤーの当日の調子、ボールの沈み方、木の実際の高さや枝の張り出しは判定しません。現地の視界と状況を見たプレイヤーの判断を優先します。

システム全体の構成

application-system-architecture-drawio.png

スマホアプリをシステムの中心とします。スマホアプリがデータとラウンド状態の正本を持ち、Even G2アプリは表示と操作を担当します。G2との接続が一時的に切れても、ラウンド情報はスマホ側に残します。

役割分担

構成要素主な役割担当しないこと
スマホアプリデータ保持、位置情報の選択、提案計算、ラウンド進行、ショット・スコア記録頭部方位そのものの計測
BLE接続GPS緯度・経度、測位時刻、精度等をスマホへ提供番手提案、コース判定、スコア管理
外付け方位センサー頭部方位、必要に応じて傾き、校正状態をスマホへ提供現在地取得、コースデータ保持、攻略判断
Even G2アプリHUD表示、ラウンド操作、番手変更、スコア入力・修正永続データの正本管理、重い判定処理
Web UIプレイヤープロフィールの入力・編集ラウンド中に必須となる処理

Web UIは便利な編集手段ですが、通信できないゴルフ場でもラウンドできるよう、ラウンド中の基本機能はスマホ内だけで成立させます。

スマホアプリの役割

スマホアプリは、入力データを集約して判断し、ラウンド状態を保存する中心装置です。

現在地の取得元

現在地はスマホ内蔵GPSだけに固定しません。スマホアプリ内に共通の「現在地提供元」を用意し、スマホ内蔵GPSとBLE接続GPSを同じ形式で扱います。

選択モード動作
自動接続中で、有効かつ新しいBLE GPS情報を優先します。使用できない場合はスマホ内蔵GPSへ切り替えます。
スマホGPSスマホ内蔵GPSだけを使用します。
BLE GPSBLE接続GPSだけを使用します。使用できない場合は現在地が必要な操作を止め、警告します。

2つのGPS座標は根拠なく平均しません。採用した1つの測位結果を、その時点の現在地として使用します。自動切替が起きた場合は、G2へ使用中の情報源と注意状態を通知します。

共通の現在地データ

各GPSから受け取った情報は、スマホアプリ内で次の共通形式へ変換します。

項目内容必須
sourcephone_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、データ形式、通知周期、許容精度、情報を期限切れとする秒数は、機器選定と実測後に決定します。現時点では特定機器専用の形式へ固定しません。

現在地を使う処理

処理現在地の使い方
コース検索各ホールのFloorData境界と現在地の最短距離を調べ、どれか1ホールでも2km以内にあるコースを表示します。
Teeショット開始現在地から登録済みTee座標までの距離を調べ、半径5m以内であれば成立します。
現在のライ現在地に対応するFloorDataセルの地表属性を取得します。
ショット記録直前のアドレス位置から現在地までの距離、到着地点の属性、使用した位置情報源を記録します。
番手・方向提案現在地、基本ルート、FloorDataの標高、プレイヤーのキャリーを組み合わせます。

CourseDataには、コース検索用として各ホールのFloorDataの四隅または同等の境界情報を保存します。ホール番号だけでOUT・INを決めず、それぞれに所属するhole IDを明示します。

プレイヤープロフィール

プロフィールはスマホアプリまたはWeb UIで入力します。スマホアプリはラウンド中に使える状態でプロフィールを保持します。

キャリーが未入力の番手は選択候補へ出しません。パターはデフォルトで所有しているものとして扱います。

コース検索とラウンド開始

  1. G2で「コースを探す」を押します。
  2. スマホアプリが現在地とCourseData内の各FloorData境界を比較します。
  3. どれか1ホールでも2km以内にあるコース名をG2へ表示します。
  4. プレイヤーがコースを選びます。
  5. OUT、IN、FULLからラウンド形式を選びます。
  6. CourseDataに明示されたhole IDの順序でラウンドを開始します。

ラウンド中の状態

ラウンド中は、次の状態をスマホアプリが管理します。

コース選択
  ↓
ラウンド設定(OUT / IN / FULL)
  ↓
Teeショットモード
  ↓ 「アドレス状態」ボタン
アドレス状態
  ↓ ショット
通常ショットモード
  ↓ 「アドレス状態」ボタン
アドレス状態
  ↓ 必要回数繰り返す
ホールアウト
  ↓
スコア確認・修正
  ↓
次ホールのTeeショットモード

Teeショットモード

  1. プレイヤーが「Teeショット」ボタンを押します。
  2. スマホアプリが半径5m以内に登録済みTee座標があるか検査します。
  3. 成立したらTeeショットモードを開始します。
  4. 提案された方向と番手を確認し、必要であれば登録済み番手へ変更します。
  5. 「アドレス状態」ボタンを押すと、正式なアドレス状態へ進みます。

通常ショットモード

  1. プレイヤーが次のボール位置へ移動し、「アドレス」ボタンを押します。
  2. 直前のアドレス位置から現在地までを前回ショットの飛距離として記録します。
  3. 前回使った番手と、現在地の床属性を記録します。
  4. 現在地から次の打数のショットモードを開始します。
  5. 提案された方向と番手を確認・変更し、「アドレス状態」ボタンを押します。

「アドレス」ボタンは前回ショットの確定と次ショットの検討開始に使います。「アドレス状態」ボタンは、方向と番手を決めた後にスイング姿勢へ進むための別操作です。

正式なアドレス状態

ショット方向を検討している状態と、実際にスイングする姿勢を区別します。正式なアドレス状態では、右打ちの場合、ショット方向に対して上から見て時計回りに90度回転した向きを基準にします。左打ちは反対方向の90度を基準にします。

方位センサーから受信した頭部方位と基準方向を比較し、G2へ左右の回転量や一致状態を表示します。方位センサーが未接続、未校正、精度不足の場合はアドレス案内を止め、理由を表示します。

番手とショット方向の提案

  1. 現在地から基本ルートを先へたどります。
  2. プロフィールに登録された番手とキャリーを候補にします。
  3. 番手ごとの一般的な弾道の高さと、現在地から着弾候補までの高低差を使ってキャリーを補正します。
  4. 補正後のキャリーと基本ルートが交わる付近を提案方向とします。
  5. プレイヤーが別の登録済み番手へ変更した場合は、キャリー、方向、周辺情報を再計算します。

風は計算へ入れません。木や建物の実際の高さもFloorDataにないため、弾道が越えるかどうかは判定しません。

登録されたキャリーでは池や森などへ到達する場合、同じ番手を使うときの力加減を20%単位で案内できます。人が再現しにくい5%単位の表示は行いません。

障害物・地形情報の表示

表示対象は次の6種類です。これらの存在を理由に基本ルートや提案方向そのものは変更せず、プレイヤーが判断するための情報として表示します。

暫定の最大表示件数は5件です。提案したショット方向とキャリーに近い対象を優先し、左右へ外れた場所よりも、ショット方向の手前や先にある対象を優先します。

未確定
ショット中心線から左右何mまでを検査するか、着弾候補の手前と先を何mまで検査するか、対象が重なった場合の詳細な順位は、FloorDataを使った試験で決定します。

G2へ表示する情報

情報名、方向記号、距離を小さな表示へまとめます。距離を1行目、方向記号と情報名を2行目にする表現を基本とします。

145yd
▼ Green

HUDには次を表示します。

G2アプリの役割

G2アプリはスマホアプリから表示用データを受け取り、プレイヤーの操作をスマホへ返します。

G2側ではCourseData一式やスコアの正本を持ちません。操作イベントをスマホへ送り、スマホが検査・保存した結果を再表示します。

外付け方位センサーの役割

外付け方位センサーは、プレイヤーの頭が向いている方角を測定し、BLEでスマホへ送ります。

方位センサーは番手、ルート、障害物、スコアを判断しません。購入済みのAE-NRF52840単体には方位センサーがないため、追加センサーの選定とファームウェア実装は現在保留中です。

ホールアウトとスコア

  1. 「ホールアウト」ボタンを押すと、直前のアドレス位置から現在地までを最終ショットとして記録します。
  2. そのホールの総打数とParを比較し、バーディ等の対Par表現を表示します。
  3. パット数を入力します。パット数は総打数に含まれる内数で、チップイン等では0回も認めます。
  4. チップイン、押し間違い、ペナルティ等へ対応するため、総打数、パット数、ペナルティを修正できます。
  5. 自動記録したショット履歴と、最終確定したスコアを分けて保持します。

スコア表示の呼称と見せ方は、「みんなのGOLF」シリーズで馴染みのある対Par表現を参考にします。

主なデータ

データ内容正本を持つ場所
PlayerProfile左右の打ち方、所有番手、番手ごとのキャリースマホアプリ
CourseDataコース情報、OUT・INのhole ID、検索用FloorData境界スマホアプリ
HoleData / FloorData地形、属性、Tee、Green/Cup、基本ルートスマホアプリ
LocationSampleGPS情報源、座標、精度、時刻、測位状態スマホアプリが選択
HeadPoseSample頭部方位、傾き、校正状態、時刻方位センサーから受信
RoundStateコース、ホール、打数、現在のモードスマホアプリ
ShotRecord始点・終点、番手、距離、ライ、位置情報源スマホアプリ
HUD表示データG2へ表示する提案、方向、距離、警告スマホアプリが生成

異常時と復旧

状態動作
BLE GPS切断自動モードではスマホGPSへ切り替えます。BLE GPS固定モードでは位置依存操作を止めます。
GPS情報が古い・無効・精度不足Tee判定やショット位置確定を止め、G2へ理由を表示します。
方位センサー切断・未校正アドレス方向案内を止め、再接続または校正を案内します。
G2切断スマホ側でラウンド状態を保持し、再接続後にHUDを復元します。
CourseData不正ラウンド開始前に拒否し、不足項目を表示します。
キャリー未登録の番手番手選択候補へ表示しません。

確定している方針

実装前に決定・検証する項目

現在の実装状況
このページはアプリケーション設計の概要です。スマホアプリ、Even G2アプリ、BLE GPS連携、方位センサーファームウェアが完成したことを示す資料ではありません。実装後は自動テストだけでなく、スマホ、G2、GPS、方位センサーを組み合わせた実地確認が必要です。


リビジョン #3
作成: 2026-09-02 15:34:31 UTC (TRONS-冬木)
更新: 2026-09-02 15:57:14 UTC (TRONS-冬木)