Skip to content

ディープリンクで他路線直通・経路全体を表現できるようにする #6002

@TinyKitten

Description

@TinyKitten

背景

現状の useDeepLinksgid (stationGroupId) + lid (lineId) + dir を基に lineStations(lid) または lineGroupStations(lgid) を1本取得して開く設計のため、他路線を含む経路全体を再現できない

例: 「新宿(JY) → 池袋(JY) → 茗荷谷(M)」のように山手線→丸ノ内線を乗り継ぐ経路をディープリンクで共有しても、受け取り側は「出発駅 + 最初の路線 + 方向」までしか復元できず、乗換駅以降を手動で再選択する必要がある。

現状の制約

useDeepLink.handleUrl のクエリパラメータ:

param 役割
sgid 出発駅 groupId(必須)
lid 路線 ID(必須)
dir 0=INBOUND / 1=OUTBOUND(必須)
lgid 路線グループ(任意、相互直通の一本のみ)
auto 自動モード
theme テーマ

lgid を渡せば相互直通の路線グループは扱えるが、これは StationAPI 側の CSV で手動メンテされているグループ定義に依存する。任意に組み立てた複数路線にまたがる経路を表現する手段は無い

提案

駅 ID(Station.id、事業者ごとに固有の行ID)の順序リストを受け取る新パラメータ sids を追加する。

TrainLCD://route?sids=1131211,1131310,2800217,2800218

駅 ID を使う理由(groupId ではなく)

  • Station 行は .line を持つので、駅IDを渡すだけでどの路線でその駅に居るかが一意に決まる。受信側で隣接関係から路線を推定し直す必要がない
  • 乗換駅(複数事業者・複数路線が共存する駅)でユーザが意図した路線を曖昧さなく表現できる
  • 既存の stations(ids: [Int!]!) クエリにそのまま渡せる

方向は sids の順序そのもの

sids の並び順がそのまま進行方向。sids[0] を出発駅、sids[sids.length - 1] を終着駅として扱う。逆方向にしたい場合は配列を逆順にして渡す。dir パラメータは sids 利用時には不要。

受信側の挙動

  1. sids が存在する場合、sgid / lid / lgid / dir は無視する
  2. sids をカンマ区切り→整数配列にパース、空・1件のみ・パース失敗時は何もしない
  3. stations(ids: $sids) で全駅を一括取得し、stationState.stations に渡された順序のまま投入する
  4. station = stations[0]selectedLine = stations[0].line(行ごとに線が決まっているため自動)
  5. selectedBound = stations[stations.length - 1](並び順から自動)
  6. selectedDirectionstations[0]stations[stations.length - 1]selectedLine 上の位置関係から導出可能(必要なら)
  7. trainTypestations[0].trainType ?? null(既存実装と同じ)

後方互換性

  • 既存の sgid / lid / lgid / dir ベースのリンクはそのまま動作させる
  • 新パラメータ sids を受け取った時のみ新ロジックに分岐
  • iOS/Android のURLスキーム (trainlcd / trainlcd-canary) は変更なし

受け入れ条件

  • ?sids=A,B,C,... 形式のリンクで、列挙された駅列の順序通りに stationState.stations が投入され、selectedBound が末尾駅になる
  • 列挙された駅が stations(ids) で1件以上解決できれば表示は開く(途切れがある場合のUI表現はこのissueの範囲外)
  • 自動モード(auto)/テーマ(theme)等の既存パラメータは併用可能
  • 既存形式 (sgid/lid/dir) のリンクは動作変化なし

関連

Metadata

Metadata

Assignees

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions