Skip to content

振り返りで乗っていない路線が0kmで出る不具合と、乗車時間が短く出る不具合を修正 - #7191

Merged
TinyKitten merged 3 commits into
devfrom
fix/ride-review-junction-duplicate
Oct 5, 2026
Merged

TinyKitten merged 3 commits into
devfrom
fix/ride-review-junction-duplicate

Conversation

@TinyKitten

@TinyKitten TinyKitten commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

概要

振り返り機能の集計で見つかった2つの不具合を修正します。

  1. 直通運転の接続駅で、乗っていない路線が「よく乗った路線」に 0.0 km で出ます。乗車回数も多く数えられます。西武有楽町線で練馬に着いた乗車で、西武池袋線が「2回・0.0 km」と出ていました。
  2. 総乗車時間が実際より短く出ます。1駅ずつの乗車を3回して「3分」と出ていました。

変更の種類

  • バグ修正
  • 新機能
  • リファクタリング
  • ドキュメント
  • CI/CD
  • その他

変更内容

  • 接続駅の重複を記録しないようにしました(src/hooks/useRideRecorder.ts)。
    • 接続駅は、駅リストに前の路線の駅と次の路線の駅として2回並びます(src/utils/dropJunctionStation.ts)。
    • 到着判定がこの2つを行き来すると、駅 ID が違うので別の駅として2つ目を書いていました。
    • 同じ駅グループの駅があいだに駅を挟まずに続いたときは、2つ目を書かないようにしました。
    • 通過として書いた駅に停車したと分かったときだけ、到着を残すために書きます。
  • 既存の記録に残っている重複を集計から除きました(src/utils/rideStats.ts の isJunctionDuplicate)。
    • 路線ごとの集計に数えません。
    • 最後の到着にも数えません。重複しか到着の無いセッションは、乗車回数に入りません。
    • あいだに駅を挟んで同じ駅に戻った記録は、これまでどおり数えます。大江戸線の都庁前がこれに当たります。
  • 乗車時間を ETA で補うようにしました。
    • これまでの乗車時間は、出発駅の到着圏を出てから最後の駅の到着圏に入るまででした。発車直後と停車直前の時間が入らないので、駅間が短いほど短く出ます。
    • 記録時に useEstimateArrivalTimesRoute の経路から ETA 上の所要時間を求め、駅ごとに新しい列 etaMinutesFromPrevious に保存します(src/utils/rideEta.ts、src/lib/rideLog.ts)。
    • 集計では、検出した時間と ETA 上の所要時間の長い方を使います。遅れた乗車では、検出した時間の方が長くなります。
    • 既存の DB には、初期化のときに ALTER TABLE で列を足します。
  • docs/ride-log.md に、接続駅の扱いと ETA の列の説明を足しました。

回帰リスクと対策

  • ETA の列を足す前の記録は、乗車時間が変わりません。修正後に記録した乗車から ETA で補います。
  • 振り返りの記録を有効にしたユーザーでは、estimateArrivalTimes の問い合わせが走ります。ETA 補助のリモート設定が無効でも走ります。
  • 列の追加は、既存の列と同じく PRAGMA table_info で有無を見てから行います。列が既にあるテーブルには何もしません。これはテストで確かめています。
  • 通過として記録した接続駅に実際は停車していて、そこで乗車が終わると、ETA を引けません。この場合は、検出した時間をそのまま使います。

テスト

  • npm run lint が通ること
  • npm test が通ること
  • npm run typecheck が通ること

npm test は 327 スイート・3658 件がすべて通りました。次のテストを足しました。

  • src/hooks/useRideRecorder.test.tsx: 接続駅の行き来を2度書かないこと。出発駅での行き来で乗車を確定しないこと。ETA 上の所要時間の記録。
  • src/utils/rideStats.test.ts: 重複を路線と乗車回数に数えないこと。都庁前のように駅を挟んだ記録は数えること。ETA の時間と検出した時間の長い方を使うこと。
  • src/utils/rideEta.test.ts: ETA 上の所要時間の求め方。
  • src/lib/rideLog.test.ts: 新しい列の追加と書き込み。

接続駅の修正を外すと、足したテストのうち3件が落ちることを確かめました。実機での確認はしていません。

関連Issue

Refs #5751

スクリーンショット(任意)

UI 変更なし: 画面の構成と文言は変えていません。変わるのは集計した値だけです。

🤖 Generated with Claude Code

https://claude.ai/code/session_012DesA8iYdzTfuNCPVVPiW3


Generated by Claude Code

Summary by CodeRabbit

  • 新機能
    • 乗車ログに、前の駅からの所要時間を記録するようになりました。
    • 直通運転の接続駅では、同じ駅の重複記録を抑え、次の駅への記録を正しい路線・距離で継続します。
  • 改善
    • 乗車時間の集計に、駅間の所要時間と検出時間を反映するようになりました。最終駅までの所要時間が取得できない場合は、検出時間を使います。
    • 通過後に停車を検出した場合は、到着として記録します。

@TinyKitten TinyKitten self-assigned this Oct 5, 2026
@github-actions github-actions Bot added the react label Oct 5, 2026
@coderabbitai

coderabbitai Bot commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

🧰 Additional context used
📚 Code guidelines (1)
.github/copilot-instructions.md — auto-discovered

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 3aa36bbc-a957-422e-983b-3d7be9d79da2
📥 Commits

Reviewing files that changed from the base of the PR and between ad5f3a6 and 24cb76f.

📒 Files selected for processing (13)
  • docs/ride-log.md
  • src/components/RideMonthCard.test.tsx
  • src/hooks/useRideRecorder.test.tsx
  • src/hooks/useRideRecorder.ts
  • src/lib/rideLog.test.ts
  • src/lib/rideLog.ts
  • src/screens/RideReview.test.tsx
  • src/utils/rideEta.test.ts
  • src/utils/rideEta.ts
  • src/utils/ridePrefectures.test.ts
  • src/utils/rideRoutes.test.ts
  • src/utils/rideStats.test.ts
  • src/utils/rideStats.ts

Included review availability: This review used your included allowance. 2 included reviews remain after this review. Your included PR review attempts over the past 7 days set your current allowance at 3 reviews per hour.


📝 Walkthrough

Walkthrough

乗車駅間のETA所要時間を算出し、停車記録に保存する処理を追加しました。接続駅の重複記録を抑制し、乗車時間と路線別集計での扱いを更新しました。関連するテストと乗車ログの説明も更新しました。

Changes

乗車ログのETAと集計

Layer / File(s) Summary
ETAデータ契約と保存
src/utils/rideEta.ts, src/utils/rideEta.test.ts, src/lib/rideLog.ts, src/lib/rideLog.test.ts, src/components/RideMonthCard.test.tsx, src/screens/RideReview.test.tsx, src/utils/ridePrefectures.test.ts, src/utils/rideRoutes.test.ts
ETA停留所と起点の型、および駅間ETAの算出関数を追加しました。RideStopRecordにETA値を追加し、データベースの新規作成・既存テーブル更新・読み書きに対応しました。
乗車中のETA記録
src/hooks/useRideRecorder.ts, src/hooks/useRideRecorder.test.tsx, docs/ride-log.md
記録処理でETA経路から駅間所要時間を算出し、駅記録に追加します。接続駅の重複を抑制し、通過記録後の到着は記録します。テストと説明にこれらの条件を追加しました。
乗車時間と路線別集計
src/utils/rideStats.ts, src/utils/rideStats.test.ts, docs/ride-log.md
乗車時間に実測時間と末尾駅までのETA合計の長い方を使います。接続駅の重複を最後の到着および路線別集計から除外し、関連するテストと説明を追加しました。

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Bug fix

Sequence Diagram(s)

sequenceDiagram
  participant useRideRecorder
  participant useEstimateArrivalTimesRoute
  participant estimateRideEtaMinutes
  useRideRecorder->>useEstimateArrivalTimesRoute: ETA経路を取得
  useEstimateArrivalTimesRoute-->>useRideRecorder: 停留所と累積時刻を返す
  useRideRecorder->>estimateRideEtaMinutes: 起点と到着駅から所要時間を算出
  estimateRideEtaMinutes-->>useRideRecorder: ETA所要分数またはnullを返す
Loading

Merge Risk: 🔵 Low · up to 24cb7

Some older return rides may be missing from retrospective totals. This is a bounded aggregation risk to address or explicitly accept before merging.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 接続駅の重複による集計不具合と、乗車時間が短く算出される不具合の修正を示しています。変更の主な内容を明確に表しています。
Description check ✅ Passed 概要、変更の種類、変更内容、テスト、関連Issue、スクリーンショット欄を記載しています。変更内容と回帰リスク、テスト結果も具体的です。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 1…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

うさぎは駅で耳を立て
ETAの時刻をそっと記す
接続駅の重なりを避け
路線の距離を数えます
月明かりの線路を跳ねて
新しい記録に葉っぱを添える

Comment @coderabbitai help to get the list of available commands.

@TinyKitten
TinyKitten merged commit a8b179d into dev Oct 5, 2026
7 checks passed
@TinyKitten
TinyKitten deleted the fix/ride-review-junction-duplicate branch October 5, 2026 12:46
This was referenced Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants