## 背景 #6002 で追加された `sids` ベースのディープリンク (`?sids=A,B,C,...&dir=0`) では、ユーザーが駅 ID を出発駅→目的駅の順に並べることでそのまま意図を表現する。 このとき `dir` パラメータは: - `dir=0` (INBOUND): `selectedBound = sids[sids.length - 1]` = 最後尾の駅 = ユーザーが並べた目的地 - `dir=1` (OUTBOUND): `selectedBound = sids[0]` = 先頭の駅 = 出発駅 となるが、**sids ベースでは「ユーザーが並べた最後の駅 = 目的地」が定義そのもの**であり、`dir=0` は並び順から完全に冗長になる。逆方向のリンクを共有したい場合は `sids` を逆順に並べれば済むため、`dir=1` を許す意味も乏しい。 ## 現状の挙動 PR #6003 (実装済み) では: - `dir` 省略時は `dir=0` として扱う (= INBOUND) - `dir=0` / `dir=1` のいずれも受け付ける - `dir=2` 等の不正値はリンク全体を no-op つまり実質的に `dir` を渡しても渡さなくても同じになるケースが大半で、URL が長くなるだけ。 ## 提案 **sids ベースのリンクでは `dir` パラメータを無視する。** 常に「先頭の駅 = 出発駅、末尾の駅 = 目的地」(INBOUND 相当) として扱う。 ### handleUrl の挙動 1. `sids` が存在する場合、`sgid` / `lid` / `lgid` / **`dir`** をすべて無視する 2. `sids` の解釈とバリデーションは #6002 の仕様通り 3. `selectedDirection` は常に `INBOUND`、`selectedBound` は常に `stations[stations.length - 1]` 固定 ### 受信側のリンク例 ```text TrainLCD://route?sids=1131211,1131310,2800217,2800218 ``` `dir` を省略するのが正式仕様となり、`dir=0` / `dir=1` が渡されても受信側で無視する。 ## 後方互換性 - 既存の `sgid` / `lid` / `lgid` ベースのリンクは `dir` 必須のまま変更なし - PR #6003 でリリース直後の挙動からは、sids で `dir=1` を明示的に渡していたリンクのみ挙動が変わる (今後は dir 無視)。ただし PR #6003 はまだリリース前で外部に出ていないため実害は限定的 ## 受け入れ条件 - [ ] `?sids=A,B,C,...` 形式 (dir 無し) のリンクで、末尾駅が `selectedBound` になる - [ ] `?sids=A,B,C,...&dir=0` / `&dir=1` / `&dir=任意の値` のいずれも、dir 無しと同じ結果になる - [ ] 既存形式 (`sgid`/`lid`/`dir`) のリンクは動作変化なし - [ ] 単体テストで dir 無視を検証する ## 関連 - 関連: #6002 「ディープリンクで他路線直通・経路全体を表現できるようにする」 - 関連: #6005 「ディープリンク sids 形式で通過駅を表現できるようにする」 - 関連 PR: #6003
背景
#6002 で追加された
sidsベースのディープリンク (?sids=A,B,C,...&dir=0) では、ユーザーが駅 ID を出発駅→目的駅の順に並べることでそのまま意図を表現する。このとき
dirパラメータは:dir=0(INBOUND):selectedBound = sids[sids.length - 1]= 最後尾の駅 = ユーザーが並べた目的地dir=1(OUTBOUND):selectedBound = sids[0]= 先頭の駅 = 出発駅となるが、sids ベースでは「ユーザーが並べた最後の駅 = 目的地」が定義そのものであり、
dir=0は並び順から完全に冗長になる。逆方向のリンクを共有したい場合はsidsを逆順に並べれば済むため、dir=1を許す意味も乏しい。現状の挙動
PR #6003 (実装済み) では:
dir省略時はdir=0として扱う (= INBOUND)dir=0/dir=1のいずれも受け付けるdir=2等の不正値はリンク全体を no-opつまり実質的に
dirを渡しても渡さなくても同じになるケースが大半で、URL が長くなるだけ。提案
sids ベースのリンクでは
dirパラメータを無視する。 常に「先頭の駅 = 出発駅、末尾の駅 = 目的地」(INBOUND 相当) として扱う。handleUrl の挙動
sidsが存在する場合、sgid/lid/lgid/dirをすべて無視するsidsの解釈とバリデーションは ディープリンクで他路線直通・経路全体を表現できるようにする #6002 の仕様通りselectedDirectionは常にINBOUND、selectedBoundは常にstations[stations.length - 1]固定受信側のリンク例
dirを省略するのが正式仕様となり、dir=0/dir=1が渡されても受信側で無視する。後方互換性
sgid/lid/lgidベースのリンクはdir必須のまま変更なしdir=1を明示的に渡していたリンクのみ挙動が変わる (今後は dir 無視)。ただし PR ディープリンクで他路線直通の経路全体を sids パラメータで表現できるようにする #6003 はまだリリース前で外部に出ていないため実害は限定的受け入れ条件
?sids=A,B,C,...形式 (dir 無し) のリンクで、末尾駅がselectedBoundになる?sids=A,B,C,...&dir=0/&dir=1/&dir=任意の値のいずれも、dir 無しと同じ結果になるsgid/lid/dir) のリンクは動作変化なし関連