⚠️ 次セッション開始時の最重要確認事項
このSTATUS LOGを最初に読み込んでから会話を始めること。
アーキテクチャ刷新方針(確定)
新規index.html(超軽量ゲートウェイ・11.6KB)
├── Route Attack(ルート設定+ソナーナビ)
├── Area Scout(POI管理+Places API検索)
├── STATUS LOG(このファイル)
└── PSHP_dashboard.html(車両管理・旧index.html)
設計原則:
- index.htmlの役割はゲートウェイのみ
- 各モジュールは独立・ブックマーク直接起動可能
- indexに機能を持たせない(肥大化防止)
AreaScout設計原則(確定)
「登録を意識させない」
気になる場所 → ワンアクションでpin → 即ナビ継続 or 即編集
ソナー演出の結晶(お互いのアイデア)
| トリガー | 演出 |
| スイープ線がPOIに触れる | 点が浮かび上がる(基本PING) |
| 時間経過 | 徐々に減衰・消える |
| 自車がPOIに近づく | 点が大きくPOP・点滅 |
| POIをタップ | 波紋が広がる→白線がスルスルと伸びる |
| 次のCPに設定 | 点が色変化してロック表示 |
レスポンシブUI設計(未実装)
横持ちスマホ(バイクマウント・最優先)
├── 円を画面高さいっぱいに拡大
└── 左右余白を情報・操作エリアに活用
10インチタブレット → 円を最大化・周囲に情報配置
絶対遵守の哲学(防風壁)
- 右肩靭帯保護が最優先:低負荷運用・疲労排除
- 連泊・空荷アタック
- 拠点条件:サウナ・モール温泉必須・駐輪は屋内またはエントランス横
- Brembo換装は永久に禁止(確定済み)
- 実装前に内容確定・ユーザー確認:急いでコードを書かない
📅 最終更新:2026-05-12 残り60日(出発:7月11日)
Route Attack(5,045行)
| 機能 | 状態 |
| IndexedDB・OSRM白線・動的レンジ | 完了 |
| ヘディングアップ(方位追従) | 完了 |
| PWA(Service Worker) | 完了 |
| 4象限タップズーム(右上拡大・左上縮小・左下復帰・右下目盛り) | 完了 |
| 白線崩壊修正(範囲外ポイントで線を切断) | 完了 |
| スカウトスタート(ルートなし即出発) | 完了 |
| GPS取得後に出発点を現在地に自動補正 | 完了 |
| getMergedPOI()にArea Scout localStorageを統合(暫定) | 完了 |
| drawSnake逸脱フラグ(_wasOff・連射防止) | 未実装 |
| 距離目盛りラベルの回転(まだ回転している) | 未修正 |
| POI DB共通化(IndexedDB統一) | 未実装 |
| ソナー演出(スイープ→PING) | 未実装 |
| レスポンシブUI(横持ち対応) | 未実装 |
Area Scout(拡張版)
| 機能 | 状態 |
| GPS近い順・カテゴリフィルター | 完了 |
| Places API検索(日本語) | 完了 |
| Place Details API(詳細取得ボタン) | 完了 |
| 出力形式選択(poi_master.js / JSON / CSV) | 完了 |
| インポート機能(JSON / CSV両対応) | 完了 |
| 全POIエクスポート(3形式) | 完了 |
| POI DB共通化(IndexedDB統一) | 未実装 |
Cloudflare Worker(更新版)
| エンドポイント | 状態 |
| POST /places/search(Text Search) | 稼働中 |
| POST /places/details(Place Details) | 要デプロイ |
| GET /api/route(GraphHopper + OSRM両対応) | 要デプロイ |
修正済みバグ(2026-05-12)
- radar-screenがmeter-cardのタップを横取りしていた → radar-screenに統合
- handleRadarTapにclientYを渡し忘れ → 4象限判定が全部失敗していた
- drawOsrmPolylineが範囲外ポイントを外周にクリップ → 線を切断に変更
- getEffectiveRangeKm()が手動ズームを無視 → 手動ズーム優先に修正
- drawSnake._lastIdx局所探索(別Claudeが実装・入っている)
- onGPS関数:スカウトモードの出発点をGPS取得後に現在地補正
🚨 触るな(確定済み・変更禁止)
onGPS関数:最適化済み・updateNextCpRoute()はCP変更時のみ呼ばれる
fetchRoute:キャッシュ実装済み・変更禁止
isApiLocked():既存の日次制限ガード・変更禁止
drawSnake._lastIdx:局所探索実装済み・変更禁止
Google Places API
プロジェクト:pshp-495711
API:Places API (New) ✅ 有効
料金:月$200無料クレジット(実質無料)
1回 = $0.032・最大20件取得
Cloudflare Workers
URL:https://pshp-api.naturerider-gsx1300r.workers.dev
POST /places/search ← Places API(languageCode: ja)
GET /routing ← GraphHopper(carプロファイル)
Secrets:GOOGLE_PLACES_API_KEY ✅ / GRAPHHOPPER_API_KEY ✅
POI検索キーワード例
セイコーマート 北海道 / 道の駅 北海道
温泉 苫小牧 / 温泉 帯広 / 温泉 弟子屈
ガソリンスタンド 千歳 / ガソリンスタンド 帯広
ファイル構成
PSHP/
├── index.html ← 軽量ゲートウェイ(11.6KB)
├── PSHP_dashboard.html ← 車両管理(旧index.html)
├── PSHP_RouteAttack.html ← ナビ本体(4,787行)
├── PSHP_AreaScout.html ← POI管理・Places API
├── pshp-status.html ← このファイル
├── poi_master.js ← マスターPOIデータ
└── route-attack-worker.js ← PWA Service Worker
デバイス
Motorola Edge 40 ← Route Attack専用・RAM車載マウント
Xiaomi 15 ← メイン通信端末
🔴 最優先(次回セッション冒頭で着手)
- POI DB共通化:Area Scout(localStorage)→ IndexedDB統一(Route Attackと共有)
- drawSnake逸脱フラグ(_wasOff)追加:逸脱状態が続く間の全件探索連射を防止
🟡 実走行確認待ち
- CP通過後の蛇の道表示問題(実走行データが必要)
- 逸脱フリーズ再現確認(_wasOff実装前に再現するか確認)
- スカウトモードでArea ScoutのPOIを寄り道に追加できるか確認
🟢 要実装
- 距離目盛りラベルの回転修正(-travelBearingは入っているが効いていない)
- Cloudflare Workerデプロイ(/places/details・/api/route)
- ソナー演出(スイープ→POI浮かび上がり→波紋→白線)
- レスポンシブUI(横持ち・10インチ対応)
🏆 本命本丸(基盤安定後に着手)
- 標高・勾配表示:白線を勾配で色分け(平坦:白/登り:オレンジ/下り:水色)
- Open-Elevation API追加 → Cloudflare Workerに/api/elevation追加
- updateNextCpRoute()と連動:ルート確定時に自動で標高取得・再取得
- 既存ナビにない価値:右肩負荷の事前予測・トルク谷対策・エンブレ準備
- ※geojson事前焼き込みは失敗済み。ルート確定時にAPI取得が正解
次回Claudeへの引き継ぎ文(コピーして使う)
PSHPプロジェクト(隼25周年・北海道ツーリング)の続きです。
pshp-status.htmlを確認しました。
【前回完了】
・4象限タップズーム(右上拡大・左上縮小・左下復帰・右下目盛り)
・白線崩壊修正(範囲外で線を切断)
・スカウトスタート(ルートなし即出発)
・Area Scout拡張(詳細取得・3形式エクスポート・インポート)
・getMergedPOI()にArea Scout localStorageを暫定統合
【今回やりたい】
[ここに書く]
【触るな】
・onGPS関数:最適化済み
・fetchRoute:キャッシュ実装済み
・drawSnake._lastIdx:局所探索実装済み
防風壁:右肩保護・低負荷運用・連泊空荷アタック
Brembo換装は永久禁止(確定済み)
📝 自由メモ(自動保存)
アイデア・気づき・決定事項を自由に。3秒後に自動保存されます。