Skip to content

バス停のポール重複解消と翻訳・英語表記の補完#1607

Merged
TinyKitten merged 3 commits into
masterfrom
dev
Jul 12, 2026
Merged

バス停のポール重複解消と翻訳・英語表記の補完#1607
TinyKitten merged 3 commits into
masterfrom
dev

Conversation

@TinyKitten

Copy link
Copy Markdown
Member

概要

dev に蓄積したバス停まわりの改善を master へ反映するリリース PR です。GTFS の上下ポール重複の解消と、バス停翻訳・英語表記の補完を含みます。

変更の種類

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

変更内容

主な変更ファイル: stationapi/src/import.rsstationapi/src/domain/romaji.rs(新規)、stationapi/src/domain.rsAGENTS.md

テスト

dev の内容に対しローカルで下記を実行し、いずれも通過することを確認しました(cargo test: 41 passed / 0 failed / 8 ignored)。

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

関連Issue

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

TinyKitten and others added 3 commits July 12, 2026 20:51
* 京王バス・東急バスの英語表記をカナ読みからヘボン式で補完

京王バスGTFSと東急バスODPT JSONは停留所ごとのカナ読みは持つが英語
(en)表記を持たないため、stop_name_r が空のままだった。gtfs_stops.
stop_name_r は駅名projection・名称検索・ローマ字系統/行先名すべての
上流ソースであるため、ここが空だと英語表示面が一律に欠落する。

domain/romaji.rs を追加し、カナ読みを修正ヘボン式ローマ字へ変換する。
長音はrailデータの表記(Tōkyō / Kyōto / Shin-Ōsaka)に合わせマクロンを
用い、オウ/オオ→ō・拗音のシュウ/チュウ→ū・ーで前母音を伸ばす。形態素
境界の母音連続(ヤスウシ=Yasuushi 等)はカナだけでは長音と区別できない
ため字義通り残す。変換不能な文字(漢字・ラテン文字・数字)を含む場合は
None を返し、部分的な誤変換を出さない。

import.rs では en が無い場合のみ stop_name_r をこのローマ字で補完する
(GTFS経路=京王等、Tokyu JSON経路の両方)。実際の en 値は上書きしない。
生成したマクロン付きローマ字は既存の romaji→IPA/TTS 経路
(normalize_name_char がマクロンを展開)と整合し、失敗時もカナからの
IPA へ graceful fallback するため回帰は無い。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJ8JoyxRvZsX6XfEKuQEwZ

* バス駅の station_name_rn をマクロンなしローマ字で補完

前コミットで station_name_r をマクロン付きヘボン式(Tōkyō)で補完したが、
railデータの規約では station_name_rn にマクロンなし版(Tokyo)が入る。バス
projection は _rn を設定しておらず NULL のままだった。

domain/romaji.rs に strip_macrons() を追加(ō→o, ū→u, ā→a, ī→i, ē→e)。
integrate_gtfs_stops_to_stations で stop_name_r から _rn を導出して INSERT
に追加する。en 由来・カナ由来いずれの _r でも同じ規約で _rn を生成する。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJ8JoyxRvZsX6XfEKuQEwZ

---------

Co-authored-by: Claude <noreply@anthropic.com>
前回のローマ字化フォールバックだけでは京王バス・東急コミュニティバスの
英語表記も読みも入らなかった。原因は GTFS-JP translations.txt のキー方式
とカラム構成がフィード毎に異なることだった:

- 西武: record_id キー・6列(record_sub_idなし)・全角カナ → 従来動作
- 京王/東急(大田/品川/目黒): field_value(日本語駅名)キーで record_id 空・
  7列・ja-Hrkt が半角カナ → 従来ローダーが record.get(4) 決め打ち&
  record_id のみ参照だったため全取りこぼし。結果 station_name_k に漢字が
  入り station_name_r は空になっていた。

対応:
- load_gtfs_translations をヘッダー名でカラム解決するよう変更し、record_id
  と field_value の両方をキーとして索引。import_gtfs_stops は stop_id →
  停留所名(field_value) の順で翻訳を引く。
- 半角カナ読み(ニシハチオウジ 等、結合濁点含む)を to_fullwidth_katakana() で
  全角カナに正規化してから格納。
- en があればそれを station_name_r に採用(本物の英語を優先)。en が無い
  フィード(東急一般路線JSON等)は従来どおりカナからローマ字生成。

実データ(ODPT)で全事業者の translations.txt 構成を確認済み。ローダーの
両キー方式・列数差・半角カナのユニットテストを追加。


Claude-Session: https://claude.ai/code/session_01VJ8JoyxRvZsX6XfEKuQEwZ

Co-authored-by: Claude <noreply@anthropic.com>
* GTFSの上下ポールを同名+近接でグループ化しバス停の重複表示を修正

parent_stationの階層を持たないフィード(西武・東急コミュニティバス・京王等)
では上下ポールが別々のトップレベルstopとして取り込まれ、同名なのに別
station_g_cdになるため同じバス停名が2件表示されていた。同名かつ250m以内の
stopをunion-findでまとめ、クラスタ代表(最小stop_id)のstation_g_cdを共有させる。
単独stopは従来値と一致するため都営など正しく動くフィードには影響しない。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: apply CodeRabbit auto-fixes

バス停グループ化を決定的 greedy complete-linkage に変更しクラスタ直径を
250m以内に制限(推移閉包による遠距離統合を防止)。parent_stationとして参照
される親stopはグループ化対象外にして自身のstation_g_cdへ固定し、parent
階層を持つフィード(都営等)への影響をなくす。回帰テストを追加。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
@TinyKitten TinyKitten self-assigned this Jul 12, 2026
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d3b39d1a-25b5-408c-a377-3f003bc5e900

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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

@TinyKitten TinyKitten merged commit 6fb1528 into master Jul 12, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant