Skip to content

バス停の翻訳をfield_valueキー・半角カナに対応し英語表記と読みを補完#1606

Merged
TinyKitten merged 1 commit into
devfrom
claude/keio-tokyu-bus-translations-fix
Jul 12, 2026
Merged

バス停の翻訳をfield_valueキー・半角カナに対応し英語表記と読みを補完#1606
TinyKitten merged 1 commit into
devfrom
claude/keio-tokyu-bus-translations-fix

Conversation

@TinyKitten

@TinyKitten TinyKitten commented Jul 12, 2026

Copy link
Copy Markdown
Member

概要

京王バス・東急コミュニティバス(大田/品川/目黒)で、停留所の英語表記(station_name_r)も読み(station_name_k)も入らず、station_name_k に漢字が入る問題を修正します。原因は GTFS-JP translations.txt のキー方式とカラム構成がフィード毎に異なるのに、ローダーが片方(record_id・固定列位置)しか見ていなかったことでした。

変更の種類

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

変更内容

実データ(ODPT)で全事業者の translations.txt 構成を確認し、以下が判明:

事業者 キー方式 列数 ja-Hrkt 従来
西武 record_id 6列(record_sub_idなし) 全角カナ 動作
京王 / 東急 大田・品川・目黒 field_value(日本語駅名, record_id空) 7列 半角カナ 全取りこぼし
東急 一般路線(JSON) — (英語なし・全角カナ) ローマ字化(#1604)

従来の load_gtfs_translationsrecord.get(4) 決め打ち&record_id のみを索引していたため、field_value キーのフィードを丸ごと落としていました。結果 station_name_k に漢字が入り station_name_r は空になっていました。

  • load_gtfs_translations: カラムをヘッダー名で解決するよう変更(6列/7列の差を吸収)。stop_name 翻訳を record_id(停留所ID、-NN ポール接尾辞は親IDにもマップ)と field_value(日本語駅名)の両方でキー索引
  • import_gtfs_stops: 翻訳を stop_id → 停留所名(field_value) の順で参照。en があれば本物の英語を stop_name_r に採用し、無いフィード(東急一般路線)は従来どおりカナからヘボン式ローマ字を生成。
  • romaji::to_fullwidth_katakana: 半角カナ読み(ニシハチオウジ 等、結合濁点/半濁点対応)を全角カナへ正規化してから格納。
  • AGENTS.md に翻訳キー方式とフォールバックの仕様を追記。

station_name_r は駅名 projection・名称検索・ローマ字系統/行先名すべての上流ソースのため、この修正で英語表示面が一括で埋まります。

テスト

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

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

  • cargo testSQLX_OFFLINE=true)が通ること

  • SQLX_OFFLINE=true cargo test --lib --bin stationapi → lib 425 + bin 38 passed(ローダーの両キー方式・列数差・半角カナ正規化のユニットテストを追加)

  • cargo fmt -p stationapi -- --check → 差分なし / cargo clippy --all-targets --all-features → 警告なし

  • 実データ(ODPT全事業者)で PostgreSQL にインポートし検証:

    • 京王「西八王子駅南口」: name_katakana=ニシハチオウジエキミナミグチ(漢字→正しい全角カナ)、name_r=Nishi-hachioji Sta. South(本物の英語)
    • バス駅の英語カバー率 28,078 / 28,101 (99.9%)、カタカナ欄に漢字が残る駅 0件
    • 東急一般路線はローマ字フォールバック(Ēdanmōrufukasawa, Tamagawaeki 等)が動作

関連Issue

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


Generated by Claude Code

Summary by CodeRabbit

  • バグ修正

    • GTFS-JP のフィード形式の違いに対応し、バス停の日本語・英語・読み情報をより確実に取り込めるよう改善しました。
    • 半角カタカナの読みを全角カタカナへ正規化し、ローマ字表示にも正しく反映されるようにしました。
    • 英語表記がない場合はローマ字へフォールバックします(変換できない場合を除く)。
  • ドキュメント

    • バス停名の翻訳取り込み手順と、英語表記・ローマ字フォールバックの仕様を更新しました。

前回のローマ字化フォールバックだけでは京王バス・東急コミュニティバスの
英語表記も読みも入らなかった。原因は 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 構成を確認済み。ローダーの
両キー方式・列数差・半角カナのユニットテストを追加。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJ8JoyxRvZsX6XfEKuQEwZ
@TinyKitten TinyKitten self-assigned this Jul 12, 2026
@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: 6a891145-842d-4199-b872-1a52e33f35f2

📥 Commits

Reviewing files that changed from the base of the PR and between 207b3d8 and c9f6dfb.

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

📝 Walkthrough

Walkthrough

GTFS-JPのtranslations.txtにおける列構成とキーの差異に対応し、停留所名の翻訳参照、半角カタカナの全角化、ローマ字フォールバック、回帰テストおよび手順書を更新しました。

Changes

GTFS翻訳と停留所名生成

Layer / File(s) Summary
カナ正規化の拡張
stationapi/src/domain/romaji.rs
半角カタカナと結合濁点・半濁点を全角化するto_fullwidth_katakanaを追加し、ローマ字化をテストしました。
GTFS翻訳の列・キー対応
stationapi/src/import.rs
ヘッダー名で列を解決し、record_idfield_valueの双方を用いた停留所翻訳索引を実装しました。
停留所取り込みと検証
stationapi/src/import.rsAGENTS.md
stop_id優先・停留所名フォールバックの参照、読みの全角化、英語欠落時のローマ字フォールバック、関連テストと手順書を更新しました。

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested labels: fix

Poem

ぴょんと跳ねたら、駅名が読めた
半角カナも、まあるく変わった
翻訳を探し、なければローマ字
バス停の名前が風に舞う
うさぎもにっこり、取り込み完了!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 主要変更である停留所翻訳のキー対応と半角カナ正規化、英語表記補完を具体的に示しています。
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-translations-fix

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

@TinyKitten TinyKitten merged commit 8251c5a into dev Jul 12, 2026
11 checks passed
@TinyKitten TinyKitten deleted the claude/keio-tokyu-bus-translations-fix branch July 12, 2026 12:59
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