メインコンテンツへスキップ

マスターに向けた拡張項目

GPS-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 帰宅経路で確定したこと

  • 門前仲町、代々木上原駅、多摩川、芹が谷公園、セブンイレブン、チー実家、リコスで arrivalfire_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 が残っている。
  • arrivalfire_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ミラーを分ける。

次の実装候補

  1. 判定条件緩和の検討: 現行の dist <= notifyRadius かつ acc <= notifyRadius に対し、候補として dist - acc <= notifyRadius と2サンプル連続成立を検討する。ただし誤発火リスクがあるため、A1/E′後のログで評価する。

次GO候補

  • 7/21夜橋本/鳥貴族、7/23朝リコスを明記した専用自動テスト(関連挙動の回帰テストは実装済み)
  • A1/E′実装に対するStudioLLMデバッグ

拡張項目一覧

ステータス 機能名 機能説明 現状 実装難易度
実装済み・実機合格・継続観測中 A: バックグラウンド未起動でも通知 スマホアプリがバックグラウンド起動していなかったとしても通知したい。現状の到着通知プロトタイプを、アプリ非起動時にも成立する形へ拡張する。 Swift永続パンくず、段階円、SLC、起動時単発測位を実装。10時間無操作後もリコス・帰宅のiPhone通知とG2表示に成功。数日単位の実績を継続収集中。
一部実装・実測継続 B: 消費電力削減 スマホ側の消費電力をもっと抑えたい。位置監視、判定頻度、通知条件のON/OFFを整理し、実用時の電池負荷を下げる。 現在地から2.5kmの選定圏、18円の枠予算、距離順の休眠、確認フェーズ後のDart側測位間引きを実装。長期常用時の電池消費評価は未完了。
実装済み・実機確認済み C: 通知エリア設定値の洗練 入った、通知のエリア設定値をもっと洗練させる。通知半径、到着判定、実際に思い出したい距離感を調整し、誤通知や遅すぎる通知を減らす。 通知半径を25・60・125・250・375・500mの6段プリセットへ変更し、iOS判定円と安全エリア円を新導出へ接続。500mは試験枠。往復走行と長時間キル後走行で検出を確認済み。
一部実装・継続改善 D: UI見直し UIが致命的に使いにくいので見直す。メモ追加、最新通知、メモ一覧、診断ログ、到着テストなどの配置を、通常利用者が迷わない構成にする。 メモ半径指定を6段プリセットへ置換し、地図表示を通知円だけに整理。アプリ全体の画面構成と導線の見直しは未完了。
実装済み・検証合格 E: 重なり合った複数の入ったエリア対応 重なり合った複数の通知エリアに対応する。複数の通知条件を同時に満たした場合、通知は該当メモのうち一番登録が新しいものを表示する。一方で履歴には条件を満たしたメモをすべて記録する。将来の拡張として、優先度、中心距離、半径をタイブレークに入れられる余地を残す。 複数メモの独立確認、同一サンプルでの全メモ評価、退出後の再武装を実装。自動テストと往復実機走行で確認済み。 低-中
主要対策実装済み・一部残 E′: iOS瞬間速度の平滑化 瞬間速度の揺れによる測位条件の変動を抑える。 確認中のdistanceFilter=none、進入後60秒の全更新判定、その後10〜30秒のDart側間引きを実装。iOS瞬間速度の平滑化は未実装。
試作実装済み・製品導線撤去/保留 F: 近くのメモ検索 何かしらの操作をすると、現在地から設定した距離の範囲のメモを検索し、リスト表示する。例えば秋葉原に行った時に、近くのメモ検索で数キロ範囲のメモを見つけ、店の前まで行かなくても未処理の用事を思い出せるようにする。 smartphone APIと検索ロジック・テストは残存。0.1.5で履歴操作を妨害したため、0.1.6でG2の近隣検索導線を完全撤去。再設計・再承認待ち。
未実装 G: 履歴のフォルダ化 現在はすべての履歴が一律でリスト表示されているが、これをフォルダ階層やグループ単位で表示できるようにする。UIは別途検討しつつ、内部的には特定グループで履歴を絞り込める仕組みを用意する。 G2の履歴取得・表示機能はあるが、履歴のフォルダ階層化やグループ絞り込みは未実装。
未実装 H: メモ情報のインポート 現在はメモを手入力しているが、PCなどで作ったデータをデータアセットとして生成し、インポートできるようにする。鎌倉地域の観光スポットデータ集のようなものを作成し、ユーザーはダウンロードしてインポート、削除できる。作成者側にはPCでデータを作成し、ダウンロードできる形式へ変換し、ストアなどへ登録する導線が必要になる。FとGを組み合わせることで、近隣の観光地だけをリスト表示できる。 データ集の作成、配布、インポート、削除はいずれも未実装。 中-高
未実装 I: 曜日・時間による通知ON/OFF 入った、通知判定を曜日、時間でON/OFFできるようにする。帰宅時に最寄駅へ着いた時、ランチタイムだけ表示したい、といった用途に対応する。OFF判定時はGPS判定のための電池を消費しないようにする。 曜日・時間帯による通知条件と、OFF時間帯の測位停止は未実装。 中-高
未実装 J: 自動車・進行方向別・超広域モード 高速道路の上り・下りなど進行方向に応じて通知を分け、サービスエリアや沿線の名所を高速移動中に案内する。 徒歩版から分離した将来項目。方向判定、超広域半径、専用UIはいずれも未実装。
修正済み・実機確認合格 K: G2履歴の取得・画面更新不良 スマホに履歴があるのにG2で取得・反映されない問題を切り分けて解消する。 履歴取得、キャッシュ、自動更新、再取得・旧履歴、画面反映を修正。近隣検索導線撤去後の0.1.6で履歴取得をオーナー実機確認済み。

運用注意

  • DB事実、座標、半径、ふゆきさんの行動事実を突き合わせる前に原因結論を出さない。
  • A、K、E′、通知表示問題を混同しない。
  • ログにないことを、存在しないことと即断しない。現行アプリにはSwift永続パンくずがあるが、ローテーション範囲外や未記録の可能性を分けて扱う。
  • F′、メモ配置UI再設計、安全マージン最小値変更は今回の独立タスクから外す。安全マージンの新しい値は後日オーナーが提示するまで確定しない。