Skip to content

バス循環便のTrainType名に経由地を併記し、同名shape間の区別を明確化#1518

Merged
TinyKitten merged 4 commits into
devfrom
feature/bus-loop-name-with-via
May 14, 2026
Merged

バス循環便のTrainType名に経由地を併記し、同名shape間の区別を明確化#1518
TinyKitten merged 4 commits into
devfrom
feature/bus-loop-name-with-via

Conversation

@TinyKitten
Copy link
Copy Markdown
Member

@TinyKitten TinyKitten commented May 14, 2026

概要

バス循環便の TrainType 名が <headsign> (循環) のみで、どこを経由して戻ってくる便なのか分かりづらかった問題に対応。同じ headsign を持つ複数 shape(例: 池86 の「池袋駅東口」3 系統)も区別できるよう、経由地を併記し、行き先表記を <headsign>行 形式に統一する。あわせてこれまで空文字だった type_name_r (gRPC の nameRoman) を生成する。

変更の種類

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

変更内容

  • 循環便(始発 parent == 終着 parent)の type_name 生成ロジックを更新(stationapi/src/import.rs
    • 例: 池袋駅東口 (循環)池袋駅東口行(サンシャインシティ経由・循環) / 池袋駅東口行(新宿伊勢丹前経由・循環)
  • 行き先 headsign を含む各ケースで「行」を付与
    • 循環: <headsign>行(<経由地>経由・循環) / <headsign>行 (循環)
    • 始発と headsign が異なる: <first_stop> → <headsign>行
    • headsign のみ: <headsign>行
    • 双方向ペア <A> ⇔ <B> は方向を表す表記のため変更なし
  • 経由地の選定ロジック:
    1. 同一 route_id × 同一 headsign を持つ全 loop shape を sibling としてグループ化
    2. 各 shape について「自分の停留所列にあって、sibling shape の停留所列には含まれない」停留所を抽出
    3. 差分停留所のうち trip 中央に最も近いものを経由地として採用
    4. 単独 shape(sibling なし)の場合は停留所列の中央点をフォールバック
    5. 経由地名が headsign と一致する場合はスキップして <headsign>行 (循環) にフォールバック
  • 全 loop representative_trip_id 分の (parent_id, stop_name, stop_name_r) を 1 本の ANY($1) バルク SQL で取得し、N+1 のラウンドトリップを回避
  • type_name_r(gRPC の nameRoman)を生成
    • これまで '' を入れていたカラムを、gtfs_stops.stop_name_r / gtfs_routes.route_long_name_r(translations.txt の en 由来)から組み立てた英語表記で埋める
    • 例:
      • 循環+経由: Ikebukuro Sta. via Sunshine City (Loop)
      • 循環のみ: Ikebukuro Sta. (Loop)
      • 矢印: Sunshine City → Ikebukuro Sta.
      • 終点のみ: Ikebukuro Sta.
      • 双方向: Ikebukuro Sta. ⇔ Shinjuku-Isetan
    • headsign roman の決定方法:
      1. trip_headsign == last_stop_name なら last_stop_name_r を採用(最も典型)
      2. 循環便でかつ JA headsign がある場合、first_stop_name_r を採用(loop なら first == last)
      3. JA headsign が route_long_name から取られた場合、route_long_name_r を採用
      4. いずれにも該当しない場合は type_name_r を空文字のままにする(中途半端な日本語混じり防止)

テスト

  • cargo fmt --all -- --check が通ること
  • cargo clippy -- -D warnings が通ること
  • cargo testSQLX_OFFLINE=true)が通ること

関連Issue

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

Summary by CodeRabbit

  • 改善
    • 循環系統の表示名を強化:代表的な経由地を抽出して「○○行き(□□経由・循環)」形式で表示。経由未特定時は従来通り「○○行き(循環)」にフォールバック。
    • 日本語表示とローマ字表示双方で経由表記・ベース名の算出と識別ルールを整合。
    • 中継停留所の優先決定と停留所数サフィックスで類似循環系統をより正確に区別。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@TinyKitten TinyKitten self-assigned this May 14, 2026
@github-actions github-actions Bot added feature 要望対応や課題解決 deploy-dev labels May 14, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 14, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 265d9eee-277b-4245-8a73-1e93473c128c

📥 Commits

Reviewing files that changed from the base of the PR and between 2079456 and ee752b9.

📒 Files selected for processing (1)
  • stationapi/src/import.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • stationapi/src/import.rs

📝 Walkthrough

Walkthrough

GTFS の循環(ループ)判定に基づき、代表バリエーションごとに日本語/roman の「経由地」を抽出して型名生成に反映するよう拡張しました。代表 trip の親停留所列から sibling が訪問しないユニーク停留所を選び via_for_rep / via_roman_for_rep を決定し、loop/roman の命名ルールを新設・適用しています。

Changes

ループバリエーション命名拡張(JA/roman 同期)

Layer / File(s) Summary
VariationRow と SQL の roman フィールド追加
stationapi/src/import.rs
VariationRowroute_long_name_rfirst_stop_name_rlast_stop_name_r を追加。endpoints CTE と最終 SELECT で roman 停留所名を選択して VariationRow に渡すよう更新。
代表 trip の停留所列取得(endpoints → 親停留所列)
stationapi/src/import.rs
代表 trip_id の親停留所列を DB から取得して整列し、バリエーションごとの停留所シーケンスを収集する処理を追加。
ユニーク停留所抽出と via の決定
stationapi/src/import.rs
同一 route_id・同一 headsign の sibling が訪問しない“ユニーク停留所”を抽出し、停留所列の中間付近から候補を選定して via_for_rep(日本語)および via_roman_for_rep(roman)として保持するロジックを追加(via が headsign と同一なら格納しない)。
headsign_r / first_stop_r の導入と算出規則
stationapi/src/import.rs
headsign_rfirst_stop_r を導入し、trip_headsign の roman が無い場合の終点参照、route_long_name の roman ミラー、ループ時の first stop の roman 代替などを適用して roman 側表示名を算出する分岐を追加。
loop_name / loop_name_r ヘルパ導入
stationapi/src/import.rs
循環向け命名ヘルパ loop_name / loop_name_r を追加。via がある場合は「行き(経由・循環)」表記、via がない場合は従来の循環表記を生成(roman 側は via が取れない場合のフォールバックと Drop 処理を含む)。
base_name / disambiguation と types INSERT 更新
stationapi/src/import.rs
base_name / base_name_r の循環分岐を loop_name 系に置換し、停留所数サフィックスによる disambiguation を日本語/roman 両方で整合。types への INSERT で type_name/type_name_k/type_name_r の割当位置と値を更新。

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • TrainLCD/StationAPI#1516: 同関数(integrate_gtfs_trip_variations_to_types)やバス系統の命名ルールに関する改修でコードレベルに密接な関連があります。

Suggested labels

feature

Poem

🐰 ぐるり回る線路の詩をつむぐよ
停留所並べて中ほどに目を凝らす
ひとつだけ見つけた、君だけの経由地
名前にそっと添えて、循環の物語を歌うよ
ぴょんと跳ねて今日もタイプが生まれる

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed PR タイトルは循環便の TrainType 名に経由地を併記し同名 shape の区別を明確化するという主要な変更を正確に要約しており、変更内容と完全に一致している。
Description check ✅ Passed PR 説明は概要・変更の種類・変更内容・テスト結果をすべて記載しており、テンプレート要件を満たしている。具体的な例や実装の詳細も充実している。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/bus-loop-name-with-via

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

TinyKitten and others added 3 commits May 15, 2026 07:47
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@TinyKitten TinyKitten merged commit 102a445 into dev May 14, 2026
11 checks passed
@TinyKitten TinyKitten deleted the feature/bus-loop-name-with-via branch May 14, 2026 23:25
@TinyKitten TinyKitten mentioned this pull request May 14, 2026
10 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deploy-dev feature 要望対応や課題解決

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant