Skip to content

useTTSText: 終点アナウンスが欠落しているテーマ/状態がある #5915

Description

@TinyKitten

概要

useTTSText のいくつかのテーマ・状態で「次の駅が終点である」旨のアナウンス (JA: 「終点」 / EN: "terminal" or "the last stop") が欠落している。EN 側で漏れているケースが多いが、JA 側にも欠落・不整合がある。

過去 issue #3252 (TY ARRIVING) では限定的に修正済みだが、他テーマ・状態が残存している。

棚卸し

テーマ 状態 言語 終点アナウンス 該当ロジック
TOKYO_METRO NEXT (firstSpeech=true) JA ❌ 欠落 次は、{ne}です。 のみで「終点」の言及なし
TOKYO_METRO NEXT (firstSpeech=false) JA ✅ あり ${isNextStopTerminus ? '、終点' : ''}
TOKYO_METRO NEXT EN ❌ 欠落 isNextStopTerminus 参照なし。両 firstSpeech 共通で漏れ
TOKYO_METRO ARRIVING JA / EN ✅ あり
TY NEXT / ARRIVING JA / EN ✅ あり (#3252 で修正済み)
YAMANOTE NEXT JA ✅ あり ${isNextStopTerminus ? '、終点です' : ''}
YAMANOTE NEXT EN ❌ 欠落 isNextStopTerminus 参照なし
YAMANOTE ARRIVING JA / EN ✅ あり (※1)
SAIKYO NEXT / ARRIVING JA / EN ✅ あり (※1)
JR_WEST NEXT JA / EN ✅ あり nextStationIsBound (= selectedBound) で判定
JR_WEST ARRIVING JA △ 部分的 「ご乗車ありがとうございました」のみ。「終点、」 prefix なし
JR_WEST ARRIVING EN ❌ 欠落 isNextStopTerminusnextStationIsBound も参照なし
TOEI NEXT JA ❌ 欠落 次は、X、X。 のみ
TOEI NEXT EN ❌ 欠落
TOEI ARRIVING JA △ 部分的 thanks のみ。「終点」 prefix なし
TOEI ARRIVING EN △ 部分的 thanks のみ。"the last stop" / "terminal" なし
JR_KYUSHU NEXT / ARRIVING JA / EN ✅ あり (※1) nextStationIsBound で判定

(※1) YAMANOTE / SAIKYO / JR_KYUSHU の ARRIVING は transferLines.length が真のときだけ thanks メッセージを出す副次バグあり。本 issue とは別軸だが、修正時に併せて検討推奨。

期待動作

「次の駅が終点 (= train が終着する駅)」かつ NEXT/ARRIVING のとき、JA/EN ともに何らかの形で「終点」を明示する。具体的なフレーズはテーマの既存スタイルに合わせる:

  • TOKYO_METRO NEXT EN: The next stop is X, the last stop.
  • TOKYO_METRO NEXT JA (firstSpeech=true): 次は、X、終点です。
  • YAMANOTE NEXT EN: The next station is X, terminal.
  • TOEI NEXT JA / EN: 「終点」表記を追加
  • TOEI ARRIVING: thanks の前に「終点」表記を追加
  • JR_WEST ARRIVING EN: terminal mention を追加
  • JR_WEST ARRIVING JA: 「ご乗車ありがとうございました」の前に「終点、X です」相当を追加

判定ロジックの選択

現状 2 種類の boolean が混在している:

  • isNextStopTerminus (= useIsTerminus): stations[0] または stations[stations.length-1] と同一かどうか (= 路線・直通系統の物理的な終点)
  • nextStationIsBound: nextStation.groupId === selectedBound.groupId && !isLoopLine (= ユーザーが選択した行先と一致するか)

両者は通常一致するが、ユーザーが中間駅を行先指定したときに乖離する。テーマごとに使い分けが分かれているのは現状そのままで OK だが、新規追加箇所は既存テーマの方針に合わせる:

  • TOKYO_METRO / TY / YAMANOTE / SAIKYO / TOEI: isNextStopTerminus
  • JR_WEST / JR_KYUSHU: nextStationIsBound

該当ファイル

リファクタ後のファイル: src/hooks/tts/templates.ts の各テーマ NEXT/ARRIVING テンプレート

テスト

既存の src/hooks/useTTSText.test.tsxsetupMockUseNextStation(TOEI_SHINJUKU_LINE_STATIONS[1]) で固定しているため終点ケースを一切踏まない。修正時は次のテストを追加:

  • 各テーマで nextStation = stations[stations.length - 1] の状態で NEXT / ARRIVING を呼び、JA/EN いずれにも「終点」/「terminal」/「last stop」相当の文字列が含まれることを検証
  • JR_WEST / JR_KYUSHU は selectedBound を中間駅にしたケースでも検証

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions