マスターに向けた拡張項目
マスターに向けた拡張項目
このページは、GPS-MEMOをマスター版へ育てるための拡張候補と現在の状態を整理するものです。詳細な実装順、検証条件、実装記録の正本はリポジトリの作業計画書で管理します。MEMOマスター版へ向けた拡張項目の作業計画ページ。詳細な実装作業はCodex側の作業計画ファイルで管理する。
拡張一覧2026-07-23 A1/Eprime 位置判定・測位診断強化
状態 | 項目 | 内容 |
|---|
候補 | Codex側の正式な作業計画ファイルは core/課題/課題260723a_A1_Eprime_location_diagnostics.md。SESSION_LIVEもこの計画へ切り替え済み。 背景A「バックグラウンド未起動でも通知」と、E′「測位頻度・iOS瞬間速度・確認測位の見直し」に関する実地ログから、通知失敗の原因が一つではないことが分かった。当初は「長時間バックグラウンドでアプリが起きない」が主犯候補だったが、2026-07-22の帰宅経路では長時間バックグラウンド後でも複数地点で到着判定と通知履歴保存が成立している。一方で、2026-07-21夜の橋本/鳥貴族、2026-07-23朝のリコスでは別の失敗が見えている。 2026-07-22 帰宅経路で確定したこと- 門前仲町、代々木上原駅、多摩川、芹が谷公園、セブンイレブン、チー実家、リコスで
arrival と fire_events が残った。 - このため、長時間バックグラウンド後でもiOS region監視から通知判定へ復帰できるケースはある。
- 門前仲町はDB上
notification_delivery_probe pending=false delivered=true lifecycle=paused まで出ているが、G2/Watch/iPhone表示として気づけていない。これはGPS判定ではなく、OS通知表示、Watch/G2ミラー、ロック解除タイミング、通知ID再利用まわりの切り分け対象である。
2026-07-23 朝リコスで確定したこと- 前夜20:30頃に最後にGPS-MEMOを起動し、以後朝までGPS-MEMO本体は起動していない。
- 08:05頃にリコスへ移動し、約2分滞在して退店したが、G2通知もiPhone通知表示もなかった。
- DBには08:08:29
geofence_enter リコス、08:08:29 sample dist=50m acc=20m notifyRadius=25m、08:08:36 sample dist=51m acc=6m notifyRadius=25m が残っている。 arrival と fire_events はない。- iOSが一切起こしていないわけではなく、SwiftからDartまで少なくとも一部は届いている。
- 約2分滞在したのにサンプルは7秒間に2件だけで途絶しているため、確認フェーズ中の
distanceFilter により、屋内・低速・静止時の位置報告が止まった可能性が高い。 - リコス/自宅周辺はGoogle Mapでも位置が飛ぶ地域であり、
acc=6m と高精度を自称しながら実位置と50m級でずれる可能性がある。短域25mはこの地域では成立しないことがある。
2026-07-21 夜 橋本/鳥貴族で確定したこと- ふゆきさんの行動は、横浜線橋本駅から鳥貴族橋本へ移動し、食事後に横浜線橋本駅へ戻って帰宅。
- 横浜線橋本駅と鳥貴族橋本の中心距離は約320.5m。
- 横浜線橋本駅は通知半径125m、入った半径約212.5m、安全半径約161.6m。鳥貴族橋本は通知半径25m、入った半径50m。
- したがって、鳥貴族滞在中は横浜線橋本駅の通知・入った・安全エリアのすべての外にいる。
- DBには20:07:20 横浜線橋本駅
arrival、20:07:28 横浜線橋本駅 notification_delivery_probe ... delivered=true がある。 - 20:12頃に配達窓ログが終わり、20:12〜22:34頃はGPS-MEMO診断ログがほぼ空白。
- 鳥貴族橋本の
geofence_enter は記録されていない。 - 横浜線橋本駅の
safe_exit_rearmed は22:46:01まで記録されていない。 - つまり「安全エリア内にいたから再通知されなかった」ではない。実際には安全エリア外へ出ていたはずなのに、退出確認と鳥貴族の入ったイベントが食事中に記録されていない。
- Swift永続ログがないため、iOSがイベントを出していないのか、Swiftが受けてDartに渡せていないのか、Dartが起きていないのかは確定できない。
問題の分解- A1: iOS/Swift/Dart境界のブラックボックス。沈黙時に、iOSがイベントを出していないのか、Swiftで止まったのか、Dartで止まったのかが分からない。
- E′: 確認フェーズ中の
distanceFilter 問題。enter後にサンプルが少数で止まり、判定もタイムアウトも進まない。 - 判定条件/半径: リコス/自宅周辺のように位置が飛ぶ地域では、通知半径25mが測位ノイズより小さくなる。
- 通知表示:
notification_delivery_probe delivered=true でもユーザーが表示として気づけないケースがある。iPhone通知センターに実物が残っているかを基準に、GPS-MEMO側通知登録とWatch/G2ミラーを分ける。
次の実装候補- A1 Swift永続パンくず:
syncRegions、監視中region一覧、didEnterRegion、didExitRegion、didDetermineState、requestState、SwiftからDartへの送信、Dart応答、測位セッション開始/停止、accuracy、distanceFilter、開始理由、停止理由を永続記録する。 - E′ distanceFilter修正: 確認フェーズ中はiOS側
distanceFilter=none とし、iOS側で位置報告を絞らない。電池対策はDart側の判定間引きで行う。短域25mは進入後60秒は毎更新判定、その後は10〜30秒程度へ降格する。 - 判定条件緩和の検討: 現行の
dist <= notifyRadius かつ acc <= notifyRadius に対し、候補として dist - acc <= notifyRadius と2サンプル連続成立を検討する。ただし誤発火リスクがあるため、A1/E′後のログで評価する。
次GO候補- A1 Swift永続パンくずログ
- E′ 確認フェーズ中
distanceFilter=none - Dart側判定間引き
- 短域入った直後60秒の高頻度判定
- 診断DBへの測位設定ログ追加
- 7/21夜橋本/鳥貴族、7/23朝リコスを前提にした自動テスト
- StudioLLMデバッグ
拡張項目一覧 | バックグラウンド未起動でも通知。スマホ版GPS-MEMOが前面や通常のバックグラウンドにいない場合も、iOSが許す範囲で到着通知を成立させる。 |
候補 | B:E: 消費電力削減 | 位置監視、判定頻度、通知条件を整理し、常用時の電池負荷を下げる。 |
候補 | C: 通知エリア設定値の洗練 | 「入った」、通知、要求精度などの値を実測で洗練する。 |
候補 | D: UI見直し | 通常利用者が迷わない画面構成と導線へ見直す。 |
実装済み・残確認あり | E: 重なり合った複数エリア対応 | 徒歩版で複数メモを独立確認し、到達順に履歴と通知を処理する。 |
未実装 | 重なり合った複数エリア対応。複数メモを独立して確認し、同一位置サンプルで全メモを再評価する。E′: iOS瞬間速度の平滑化 | 瞬間速度の揺れによる測位条件の変動を抑える。 |
ソース実装済み・実機未確認 | iOS瞬間速度の平滑化、測位頻度、distanceFilter、確認フェーズの継続測位を見直す。F: 近くのメモ検索 | G2の現在地から1km、近くのメモ検索。現在地から1km、2.5km、5km、10km以内の生存メモを距離順に検索する。 |
候補 | 10kmなどの範囲で有効メモを検索・閲覧する。G: 履歴のフォルダ化 | 履歴をグループやフォルダ単位で表示・絞り込みする。 |
候補 | G2連携系の後続拡張。H: メモ情報のインポート | 観光スポット等のデータ集を取り込み、まとめて管理する。 |
候補 | インポート元など、メモ属性に基づく将来の内部優先度要素。I: 曜日・時間による通知ON/OFF | 曜日・時間条件で通知判定と測位を制御する。 |
候補 | 有効条件など、メモ属性に基づく将来の内部優先度要素。J: 自動車・進行方向別・超広域モード | 高速道路の上り・下りなど進行方向に応じて通知を分ける。 |
未解決 | 超広域モード。高速道路の上り/下りなど進行方向を考慮する。K: G2履歴の取得・画面更新不良 | スマホに履歴があるのにG2で取得・反映されない問題を切り分けて解消する。 |
画面更新不良。E: 重なり合った複数エリア対応
「入った」エリア同士は重なってよく、Aを確認中にBへ進入してもAの状態を失いません。Bの通知エリアへ先に到達した場合はBだけを処理し、その後Aへ到達したらAを処理します。位置ストリームは1本を共有し、メモごとの退出、期限、削除、通知を独立管理します。
通知半径は25~250m、プリセットは短域25m、中域125m、広域250mです。「入った」半径、安全マージン、要求精度、確認時間、測位頻度は通知半径から自動計算します。
E′: iOS瞬間速度の平滑化
現在はCLLocation.speedの瞬間値または連続位置からの推定速度を使っています。短い移動窓または指数移動平均を候補として、停止、低速、速度不明、急な加減速への追従性を保ちながら測位間隔とdistanceFilterの振動を抑えます。Fでは実装しません。
F: 近くのメモ検索
利用者がG2から操作した時にEven Hub SDKで現在地を取得し、スマホ版GPS-MEMOのF専用APIが返す生存メモを検索します。距離は1km、2.5km、5km、10kmから選び、範囲内を近い順、同距離はメモID順で表示します。一覧に日付・時刻は表示せず、選択したメモの本文を閲覧できます。
通知履歴APIとF専用APIは分離し、履歴APIへ座標を追加しません。F′に相当するオフライン同期や永続キャッシュは採用しません。localhostへ接続できない場合は古い結果を出さず、取得不能として表示します。検索操作は通知、履歴、region監視を変更しません。
2026年7月20日にソース実装、自動テスト、Codex監査、StudioLLM監査を完了しました。StudioLLMは全8項目PASS、BLOCKER 0です。G2実機での位置取得、localhost到達、画面操作は別GOで確認します。
J: 自動車・進行方向別・超広域モード
徒歩版Eとは別モードとします。高速道路の上り・下り用メモは、同じ地点でも方向条件と内容が異なる別メモとして扱います。通知地点の手前側へ伸びる接近領域と進行方向判定を組み合わせ、逆方向では明示的に通知対象外とします。
K: G2履歴の取得・画面更新不良
スマホ側の配達窓、HTTP到達、履歴応答件数と、G2側の取得、応答解析、履歴キャッシュ、画面反映を分けて確認します。F専用APIと通知履歴APIは混同せず、Fの取得失敗が履歴キャッシュを破壊しないようにします。
破棄した独立タスク案運用注意
F′は採用せず、Fへオフライン同期・永続キャッシュを統合しません。DB事実、座標、半径、ふゆきさんの行動事実を突き合わせる前に原因結論を出さない。メモ配置UIの再設計案は独立タスクとして追跡しません。現在の実装は変更・削除しません。A、K、E′、通知表示問題を混同しない。安全マージン最小値の変更案は破棄します。新しいプリセット値はオーナー提示まで確定しません。ログにないことを、存在しないことと即断しない。現行アプリではSwift側の永続ログがない。- F′、メモ配置UI再設計、安全マージン最小値変更は今回の独立タスクから外す。安全マージンの新しい値は後日オーナーが提示するまで確定しない。