Skip to content

京王バス・東急バスの英語表記をカナ読みから補完#1604

Merged
TinyKitten merged 2 commits into
devfrom
claude/keio-tokyu-bus-english-prw3ac
Jul 12, 2026
Merged

京王バス・東急バスの英語表記をカナ読みから補完#1604
TinyKitten merged 2 commits into
devfrom
claude/keio-tokyu-bus-english-prw3ac

Conversation

@TinyKitten

@TinyKitten TinyKitten commented Jul 12, 2026

Copy link
Copy Markdown
Member

概要

京王バス(GTFS)と東急バス(ODPT JSON)は停留所ごとのカナ読みを持つ一方で英語(en)表記を持たないため、stop_name_r / station_name_r が空のままでした。カナ読みから修正ヘボン式ローマ字を生成し、英語表記を補完します。

変更の種類

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

変更内容

  • stationapi/src/domain/romaji.rs を新規追加。カナ読み → 修正ヘボン式ローマ字変換を実装
    • 長音は既存 rail データの表記に合わせマクロン付き(トウキョウTōkyōシンオオサカShinōsaka、拗音長音 シュウshū
    • 形態素境界の母音連続(ヤスウシYasuushi など)はカナだけでは長音と区別できないため字義通り保持
    • 促音 ッチtch、撥音 n、ひらがな入力にも対応
    • 漢字・ラテン文字・数字を含む場合は変換せず None を返し、部分的な誤変換を出さない
    • strip_macrons() でマクロンなし表記(TōkyōTokyo)を導出
  • stationapi/src/import.rs:
    • GTFS 経路(京王ほか)・Tokyu JSON 経路の両方で、en が無い場合のみ stop_name_r をローマ字で補完(実在の en 値は上書きしない)
    • stations への projection で station_name_rn にマクロンなし表記を設定(rail の _r(マクロン付き)/ _rn(マクロンなし)規約に整合)
    • stop_name_r は駅名 projection・名称検索・ローマ字系統/行先名すべての上流ソースのため、この一箇所の補完で英語表示面が一括で埋まる
    • 変換不能・読み欠落の場合は NULL のまま
  • AGENTS.md: バス英語名フォールバックの仕様を追記

生成したマクロン付きローマ字は既存の romaji→IPA/TTS 経路(normalize_name_char がマクロンを展開)と整合し、失敗時もカナ由来 IPA へ graceful fallback するため既存挙動への回帰はありません。

テスト

  • cargo fmt --all -- --check が通ること

  • cargo clippy -- -D warnings が通ること

  • cargo testSQLX_OFFLINE=true)が通ること

  • SQLX_OFFLINE=true cargo test --lib --package stationapi → 423 passed(新規ローマ字テスト 15 件含む)

  • cargo fmt -p stationapi -- --check → 差分なし

  • SQLX_OFFLINE=true cargo clippy --all-targets --all-features → 警告なし

関連Issue

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


Generated by Claude Code

Summary by CodeRabbit

  • 新機能

    • 英語名がないバス停でも、日本語の読みからローマ字名を自動生成できるようになりました。
    • 長音記号を含むローマ字表記と、検索向けのマクロンなし表記に対応しました。
    • 生成されたローマ字名が、駅情報や名称検索、バスのヘッダー・行先表示などに反映されます。
  • 改善

    • 既存の英語名は保持され、ローマ字に変換できない名称は空欄として扱われます。

claude added 2 commits July 12, 2026 11:30
京王バス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_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
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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: 15420093-a689-4676-8fc5-343b41e0ef21

📥 Commits

Reviewing files that changed from the base of the PR and between 25851ac and 28e3a40.

📒 Files selected for processing (4)
  • AGENTS.md
  • stationapi/src/domain.rs
  • stationapi/src/domain/romaji.rs
  • stationapi/src/import.rs

📝 Walkthrough

Walkthrough

バス停留所の英語名が欠落する場合に、かな読みから改変ヘボン式ローマ字を生成する機能を追加しました。GTFS・Tokyu Bus取込とstations投影で利用し、マクロン除去名も保存します。

Changes

バス停名ローマ字フォールバック

Layer / File(s) Summary
ローマ字変換エンジン
stationapi/src/domain.rs, stationapi/src/domain/romaji.rs
かなのローマ字変換、長音・促音・拗音処理、表示名整形、マクロン除去、およびテストを追加しました。
バス取込とstations投影
stationapi/src/import.rs
Tokyu Bus JSONとGTFSで英語名欠落時のローマ字フォールバックを適用し、station_name_rnを保存します。
取込挙動の文書化
AGENTS.md
フォールバックとstationsへの反映仕様を追記しました。

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

Sequence Diagram(s)

sequenceDiagram
  participant Feed as GTFS/ODPTバスデータ
  participant Import as import.rs
  participant Romaji as romaji_display_name
  participant Stations as stations
  Feed->>Import: 停留所名と英語翻訳を渡す
  Import->>Romaji: 英語名欠落時にかな読みを渡す
  Romaji-->>Import: stop_name_rを返す
  Import->>Stations: station_name_rとstation_name_rnを保存
Loading

Possibly related PRs

  • TrainLCD/StationAPI#1601:Keio Bus GTFS取込を追加し、同じバス取込パイプラインを変更しています。

Suggested labels: feature

Poem

ぴょんと跳ねれば、駅名がローマ字に
バスの読み方、空欄を越えて
マクロン帽子も、そっと外し
兎の耳で検索できる
ふわふわ便利に、出発進行!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed PRの主題である京王バス・東急バスのカナ読み由来の英語表記補完を簡潔に示しています。
Description check ✅ Passed 必須の概要・変更の種類・変更内容・テストの各項目が概ね埋まっており、テンプレートに十分沿っています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/keio-tokyu-bus-english-prw3ac

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

@TinyKitten TinyKitten self-assigned this Jul 12, 2026
@TinyKitten TinyKitten merged commit 207b3d8 into dev Jul 12, 2026
11 checks passed
@TinyKitten TinyKitten deleted the claude/keio-tokyu-bus-english-prw3ac branch July 12, 2026 11:51
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.

2 participants