前回の投稿から1週間。
仕事の合間にChatGPTに色々指示を出して、アプリの制作を進めてました。
ホーム画面やメニュー画面を作成したらそれっぽいアプリになったと思います。
メニュー画面もすべてChatGPTで生成しているので、背景の作り込みはビミョーな感じです。
おいらのロードスターを読み込んだのですが、テールランプやオーバーフェンダーは認識できずこのような結果に。
また時間あるときに画像生成してみます。
メニューも必要最低限の機能を表示しています。
色々と苦労しましたが、ハイタッチ機能も実装できました。
Cloudfleareの無料枠の範囲内で処理する必要があるので一旦45秒間隔での更新としています。
近くにユーザーがいる場合は更新頻度を上げる設定もできるのですが、このあたりは通信量を見て調整ですね。
画面の切り替えもあります。このあたりもパクリです。
GPS記録の終了時には走行軌跡とハイタッチの履歴を残す仕様にしました。
あとはプロフィールの設定画面とか
称号の取得画面とか(1日1000kmは無理かもしれませんが・・・)
訪問履歴のメニューとか
データのバックアップ・インポート機能とかを作りました。
ハイタッチの機能はサーバーと通信されるので、ON/OFFの切り替えができるようにしました。
通信量の制限があるので、招待コードがないと登録できないようにしています。
昨日は淀川花火があったので、長時間&長距離のテストということで記録をしていたのですが、GPS記録後に再読み込みができない不具合が発生したのでそれも修正。
GPS記録数が多くなると、読込み時にデータ容量オーバーで再表示できなくなるみたいだったので、記録停止後にGPSの点数を減らす処理を追加。
たぶんこれで一通りの機能は実装できたのではないかと思います。
明日から1週間休みなので、アプリのテストをする予定でしたが、天気が悪そうなので長距離のテストがはできないかも・・・。
とりあえず、大量に撮影した花火の写真の整理をしないといけないです。
下記が今の仕様。暇な人向け。
おすすめの機能とかあったら教えてください。
# Androidアプリ「道録」機能・仕様書
作成日:2026年10月18日
開発状況:主要機能実装済み・実機テスト段階
開発環境:Android Studio / Kotlin
---
## 1. アプリ概要
「道録」は、車でのドライブをGPSで記録し、全国のチェックポイント収集や、ほかのユーザーとのハイタッチを楽しめるAndroidアプリ。
主な機能は以下の4つ。
- 走る:GPSで走行軌跡を記録する。
- 集める:全国のチェックポイントを取得する。
- 出会う:ほかのユーザーとハイタッチする。
- 振り返る:走行履歴やハイタッチ履歴を確認する。
Google Mapsは使用せず、無料の地図サービスを採用。
GPS走行データは基本的に端末内へ保存し、チェックポイントのマスターデータとハイタッチ通信にはCloudflareを使用する。
小規模・低コストでの運用を前提とする。
---
## 2. 基本構成
- OS:Android
- 開発言語:Kotlin
- 開発環境:Android Studio
- 地図:MapLibre
- 位置情報:Android位置情報API
- GPS記録:端末内CSV
- チェックポイント管理:Cloudflare Workers + D1
- ハイタッチ通信:Cloudflare Workers + 専用D1
- 認証:招待コード方式
- デザイン:ダークブルーを基調とした近未来的なUI
- GPS記録:Foreground Serviceを使用
- 通信方式:HTTPS
- 基本運用:無料枠を中心に利用
---
## 3. GPS走行記録機能
### 基本機能
- GPS記録開始
- GPS記録の一時停止
- GPS記録の再開
- GPS記録終了
- リアルタイム位置表示
- GPS走行軌跡の地図表示
- 走行距離の計算
- 走行時間の計算
- 平均速度・最高速度などの管理
- 走行データの端末内保存
- バックグラウンドでの走行記録
### GPS取得仕様
- 高精度GPSを使用
- 基本取得間隔:約5秒
- 最短取得間隔:約2秒
- 位置精度の悪い測位点を除外
- 異常速度などの不正な測位点を除外
- GPS記録中は現在位置と軌跡を更新
- 停止・再開区間を考慮して軌跡を描画
- GPSデータは端末内へ保存
- 地図描画用データと元の記録データを分離
### GPS軌跡の軽量化
長時間の走行記録に対応するため、軌跡の圧縮処理を実装。
過去の検証では、572点の軌跡を表示用61点に圧縮できた。
GPS記録そのものの精度を維持しながら、地図描画の負荷を軽減する設計。
### 省電力化方針
- GPS取得間隔は維持
- 走行軌跡の表示更新頻度も従来どおり維持
- 速度集計処理の軽量化
- チェックポイント地図描画の軽量化
- 不要なログ出力を削減
- 地図非表示時の不要なデータコピーを削減
- ハイタッチ通信間隔は変更しない
12秒間隔に軌跡描画を制限する案は不採用。
記録精度とリアルタイム性を優先する。
---
## 4. GPS記録終了時の演出
GPS記録終了ボタンを押した際、以下の順序で画面が切り替わる。
1. GPS記録を停止する。
2. 走行データを保存する。
3. 終了演出画面を表示する。
4. 「運転お疲れ様でした!」というメッセージを表示する。
5. 約3秒間の専用BGMを再生する。
6. 走行結果の地図画面へ自動的に切り替わる。
7. 走行軌跡全体を地図上に表示する。
8. 「ホームに戻る」ボタンを押すとホーム画面へ戻る。
走行結果画面は自動で閉じない。
地図の拡大・縮小が可能。
走行中に成立したハイタッチがあれば、その地点も表示する。
実機で正常動作確認済み。
---
## 5. 走行履歴機能
### 保存内容
- 走行セッション
- 走行開始日時
- 走行終了日時
- 走行時間
- 走行距離
- 速度情報
- GPS走行軌跡
- 走行中に成立したハイタッチ情報
### 主な機能
- 過去の走行履歴一覧表示
- 走行セッションの詳細表示
- 走行軌跡を地図上で再表示
- 地図の拡大・縮小
- 走行履歴の削除
- ハイタッチ地点の表示
- アプリ再起動後も履歴を保持
走行セッション単位でデータを管理する。
---
## 6. 全国チェックポイント機能
全国の施設・地点をGPSによって自動的に取得する。
### チェックポイントカテゴリ
1. 鉄道駅
2. 高速道路IC
3. 高速道路JCT
4. 高速道路SA・PA
5. 道の駅
6. 都道府県庁
7. 景勝地
### 判定半径
- 鉄道駅:150m
- IC:150m
- JCT:150m
- SA・PA:200m
- 道の駅:150m
- 都道府県庁:300m
- 景勝地:150m
### 高速道路チェックポイント仕様
- 高速道路本線の通過を想定する。
- IC・JCT・SA・PAの上下線が近い場合は統合する。
- 上下線の位置を参考に代表座標を設定する。
- 上下線間が300mを超える場合などは方向別に扱う。
- 厳密な道路種別判定は行わない。
- GPS位置との距離で訪問を判定する。
- 本線通過で取得できることを重視する。
### 景勝地
以下の地点種別を統合する。
- 海岸
- 岬
D1登録済みの名前付き景勝地は6,164件。
名前のない地点は登録対象外。
### 取得処理
- 判定半径内への進入で取得
- GPS点間の通過も考慮
- 訪問回数の管理
- 最終訪問日時の保存
- 同一地点の再取得には24時間制限
- チェックポイント取得時に専用画面を表示
- 取得時にWAV効果音を再生
- カテゴリ別の取得履歴表示
---
## 7. チェックポイントデータの管理
Cloudflare D1に全国チェックポイントのマスターデータを保存する。
### キャッシュ方式
- 初回起動時に全国データを取得
- 端末内にキャッシュを保存
- 2回目以降は保存済みデータを利用
- マスターバージョンが変更された場合のみ更新
- 更新ボタンで毎回D1の全データを読み込まない
この仕組みにより通信量とD1読み取り回数を削減。
端末に保存されたチェックポイントは、通信環境がなくてもGPS通過判定に利用できる。
---
## 8. 走行距離の称号機能
走行距離が一定の条件に到達すると称号を取得する。
### 主な仕様
- 走行距離によって称号を取得
- 称号取得時に専用画面を表示
- 専用WAV効果音を再生
- 称号取得回数を記録
- 最終取得日時を保存
- 過去の取得履歴を確認可能
10km、100km、300km、500km、1,000kmなどの距離段階を使用。
距離称号は、走行開始から24時間以内の到達を対象とする仕様。
---
## 9. ハイタッチ機能
GPS走行記録中のユーザー同士が接近すると、ハイタッチが成立する。
### 基本仕様
- ユーザー登録は招待コード方式
- 初回登録後は認証状態を保存
- ニックネーム登録
- プロフィール画像設定
- コメント設定
- ハイタッチ位置共有ON/OFF
- GPS記録中のみ位置情報を共有
- ハイタッチ判定距離:100m以内
- 同じ相手との再ハイタッチ:24時間経過後
- 別の相手とは通常どおり判定
- ハイタッチ成立回数を保存
### 通信仕様
- Cloudflare Workersを使用
- ユーザー情報と通信状態をD1で管理
- 位置情報送信間隔:最短15秒
- 最新位置の有効期限:45秒
- 古い位置データは定期削除
- 位置共有OFF時には位置送信を停止
- GPS記録終了時に位置共有を停止
- ユーザー認証トークンはSHA-256ハッシュでサーバー管理
### ハイタッチ成立時の演出
1. 100m以内への接近を検出する。
2. サーバー側で24時間制限を確認する。
3. ハイタッチイベントが成立する。
4. Android側でイベントを受信する。
5. ハイタッチ専用画面へ切り替える。
6. 相手のニックネームを表示する。
7. 専用WAV効果音を再生する。
8. 約4秒後に元のGPS記録画面へ戻る。
9. GPS記録は停止せず継続する。
アプリがバックグラウンドにある場合はAndroid通知を利用する。
### 24時間制限
Cloudflare D1のhighfive_encountersテーブルで管理。
同じユーザーの組み合わせでは、最後の成立から24時間以内に再成立しない。
テストで変更した時刻は、その後の再成立で正常更新されたことを確認済み。
---
## 10. ハイタッチ走行履歴
GPS走行中に成立したハイタッチを、走行セッションに紐づけて端末内に保存する。
### 保存内容
- 走行セッションID
- ハイタッチイベントID
- 相手のユーザーID
- 相手のニックネーム
- ハイタッチ成立日時
- 成立地点の緯度・経度
成立地点は、基本的に自分のGPS記録位置を使用する。
### 表示内容
- 走行履歴の地図上に✋マーカーを表示
- 地図の下にハイタッチ相手一覧を表示
- ニックネームを表示
- 日時を表示
- 成立地点を表示
- 一覧をタップすると該当位置へ地図が移動
- アプリ再起動後も履歴を保持
- 走行セッションの削除時に対応するハイタッチ履歴も削除
### 実機テスト結果
2026年10月18日、草津駅の仮想GPSテストにて以下を確認済み。
- ハイタッチ成立画面表示:成功
- WAV効果音再生:成功
- GPS記録継続:成功
- 地図画面への自動復帰:成功
- 走行履歴の✋マーカー:成功
- 相手一覧の表示:成功
- 一覧から成立地点への移動:成功
- アプリ再起動後の履歴保持:成功
ハイタッチ履歴の表示がAndroidナビゲーションバーに重なる問題も修正済み。
---
## 11. プロフィール機能
- ニックネーム設定
- プロフィール画像設定
- コメント設定
- ユーザー情報の表示
- ハイタッチ相手のプロフィール表示
- プロフィール編集画面
- 編集画面から戻る操作
ニックネームは最大20文字。
ユーザー同士のハイタッチや地図上の表示で使用する。
---
## 12. バックアップ・復元機能
端末内の走行記録や各種履歴をバックアップできるようにする。
### 対象データ
- GPS走行履歴
- チェックポイント取得履歴
- 称号履歴
- ハイタッチ履歴
- アプリ設定
### 技術仕様
- パスワード付き暗号化バックアップ
- AES-GCM暗号化
- PBKDF2による鍵導出
- バックアップファイルからの復元
- 別端末へのデータ移行を想定
バックアップ・復元処理は実装済み。
端末変更時の完全な復元テストは今後の検証対象。
---
## 13. 画面デザイン
### 基本デザイン
- ダークブルーを基調
- 近未来的なデザイン
- 操作性と視認性を優先
- ボタン・カードは統一したデザイン
- 押下中のみボタンを明るく表示
- ホーム画面はBMW M4の夕景画像を使用
- アプリ名称とロゴはヘッダー内に独立配置
### 操作画面
- GPS記録開始ボタン
- 記録中の一時停止ボタン
- 記録終了ボタン
- ホームに戻るボタン
- 走行履歴画面
- チェックポイント履歴画面
- 称号画面
- プロフィール画面
- 設定画面
Androidのホーム・戻る操作領域とアプリのボタンが重ならないように修正済み。
---
## 14. サーバー・データベース構成
### チェックポイント用
Cloudflare Workers + D1
用途:
- 全国チェックポイントの保存
- マスターデータ配信
- データバージョン管理
### ハイタッチ用
Cloudflare Workers + highfive-db
用途:
- ユーザー登録
- 招待コード管理
- ニックネーム管理
- 認証
- 現在位置共有
- ハイタッチ成立判定
- 24時間制限
- ハイタッチ成立回数管理
- プロフィール情報管理
### 運用方針
- 当面20人程度の利用を想定
- Cloudflare無料枠を活用
- D1読み取り回数を抑制
- 不要な位置データを保存し続けない
- GPS走行軌跡は原則端末内保存
- 将来的なユーザー増加時には通信量・DB使用量を再評価
---
## 15. 実装済み機能と確認状況
【実機動作確認済み】
- GPS記録開始・終了
- 走行軌跡表示
- 走行履歴保存
- 記録終了時の専用画面・BGM
- 走行終了後の地図表示
- ハイタッチ成立演出
- ハイタッチ専用WAV
- 地図画面への自動復帰
- GPS記録の継続
- 走行履歴の✋マーカー
- ハイタッチ相手一覧
- 一覧から該当地点への移動
- アプリ再起動後のハイタッチ履歴保持
- Androidナビゲーションバーとの重なり対策
【実装済み・継続検証対象】
- 全国チェックポイント取得
- チェックポイント履歴
- 距離称号
- プロフィール設定
- 暗号化バックアップ
- バックアップ復元
- ハイタッチのバックグラウンド動作
- チェックポイントキャッシュ
【未検証・今後の確認対象】
- 6,000点以上のGPS長時間記録
- 2台の実Android端末間でのハイタッチ
- 複数ユーザー同時利用
- 長時間走行時のCPU負荷
- バッテリー消費量と省電力化の効果
- 長時間のバックグラウンド記録
- 別端末での完全なバックアップ復元
- 一般ユーザーへの配布テスト
---
## 16. 今後の開発方針
優先順位:
1. GPS省電力化の動作確認
2. CPU負荷・地図描画負荷の計測
3. 6,000点以上の長時間走行テスト
4. 2台のAndroid端末でハイタッチテスト
5. バックアップ・復元の完全検証
6. 一般ユーザーへの配布テスト
7. 不具合修正・操作性改善
### 開発時の重要事項
現在正常に動作している機能は維持する。
特に以下を優先する。
- GPS記録の精度を落とさない。
- GPS取得間隔をむやみに長くしない。
- 走行軌跡のリアルタイム描画を維持する。
- ハイタッチの100m判定を維持する。
- 同一相手の24時間制限を維持する。
- 既存走行履歴を消去しない。
- チェックポイント取得履歴を維持する。
- ハイタッチの演出と走行履歴保存を維持する。
- 記録終了時の演出を維持する。
- Androidナビゲーションバーとの重なりを再発させない。
- 変更前のソースコードをバックアップする。
- 大きな仕様変更を行う前に既存の動作を確認する。
---
## 17. 現在の開発段階
GPS走行記録、チェックポイント収集、ハイタッチ通信、走行終了演出、走行履歴へのハイタッチ記録など、主要機能の実装は進んでいる。
特に草津駅の仮想GPSテストでは、ハイタッチ成立から走行履歴への保存、アプリ再起動後の履歴保持まで正常に動作することを確認した。
今後は大幅な機能追加よりも、以下を優先する。
- 長時間走行時の安定性
- バッテリー消費の改善
- 複数ユーザーでの実地テスト
- データ消失防止
- 一般配布に向けた品質向上
現状は、主要機能が動作する実機テスト段階のAndroidドライブ記録アプリである。
※ この文書は2026年10月18日までの開発履歴に基づく仕様整理。最新のソースコードとの完全な照合や全機能の総合試験が完了したことを意味するものではない。