見出し画像

乗換案内のお仕事:ICカード乗車システムを再現せよ!

こんにちは。
乗換案内のTwitter担当「部長」です。
ほかにも兼エンジン担当、兼お客さまサポート担当、兼なんとやらといろいろやらせていただいております。
「兼」が多すぎや!というツッコミはご容赦ください(笑)。

昨年11月には幕張で、ことし5月には大阪で、「鉄道技術展」にも参戦。ブースにいらっしゃるお客さまとも色々なお話をさせていただきました。
普段お客さまと直接会ってお話をする機会がほとんどありませんので、こうしてリアルの場でありがたいお言葉をたくさん頂戴できたことは、本当に励みになりました。

その中で、こんなお話もありました。

「乗換案内って、技術として成熟しちゃってる?」
「乗換案内をつくるための仕事にどんなことがあるかわからない」

乗換案内をつくる技術のお話は、あまりみなさんに知られていないのが現状です。

そこで今日は「乗換案内のお仕事」第3弾として、エンジン担当として運賃計算プログラムを担当している「部長」が、その開発のお仕事と、その仕事柄悩める話をほんの一部ですが公開しちゃいます!

IC運賃とは何か

非接触式ICカードを用いた乗車カード技術は、2001年にJR東日本がSuicaを導入してからは全国に爆発的に普及し、都市圏の交通機関を利用するのに今や欠かせない存在です。

一方、乗換案内では、出発地・到着地などを入力して、電車やバス、飛行機などの経路を調べることができますが、さらにその経路の交通機関を利用するのにかかる運賃・料金も一緒に表示されます
あまり知られていないかもしれませんが、乗換案内は企業の経理システムなどにも組み込まれ、社員の旅費精算のツールとしての役目も果たしているのですよ。

ジョルダンが提供する乗換案内法人サービスの一例(乗換案内 Biz SDK)。
詳しいご案内はジョルダン法人サービスHPをご覧ください

ここで、ちょっと面倒な話があります。
ICカードで乗車する場合の運賃(以下「IC運賃」といいますね)は事前にきっぷを購入した場合とでは金額が異なる場合があります
特に、2014年からは首都圏を中心としたエリアでIC運賃に「1円単位運賃」を導入したため、10円単位運賃を採用しているきっぷの運賃と差が生じる区間が多くなりました。

IC運賃ときっぷ運賃を両方計算してやらなければならないわけですね。

そこで乗換案内は、ひとつの経路に対してIC運賃ときっぷ運賃の両方を計算。検索結果で切り替えられるようにすることで、両者を比較することができるようにしました。

なお、一般にIC運賃はきっぷ運賃より安いか同額であると思われがちですが、鉄道会社や地域によってはIC運賃のほうが高くなるケースがあり、注意が必要なんです。
だから、どっちが安いか一目でわかるようにしてあるんですよ。

IC運賃の計算は、沼である

日本で鉄道を利用する場合、ふつうはあらかじめ乗車したい経路を指定し、きっぷを購入します。旅客運賃前払の原則といわれるものです。鉄道営業法にも規定があります(第15条)。

目的地まで複数の経路がある場合でも、事前に経路を指定することで運賃を確定させることができるわけです。

ところが、ICカードを使っているときはそうはいきません。

SuicaやPASMOなどを持って電車に乗る場面を思い出してみてください。

改札を入るときに「ピッ」。
改札を出るときに「ピッ」。

そうなんです。
ICカードが自動改札機と通信をするタイミングは、改札を入るときと出るときだけ。
改札を出るときにタッチしたその一瞬で、「どんな経路で乗ってきたか」「その運賃がいくらか」を計算し、ICカードからその運賃を引き去らなくてはなりません。

IC化が進んだ都市鉄道の自動改札機。
ICカードは事前に経路を特定することができないため、運賃計算方法も独特なものに
(画像と本文は直接関係ありません)


例えば、東急線・用賀駅から、東京メトロ線・麻布十番駅まで乗車する場合を考えてみます。

東急線は、直通運転などの関係で、「渋谷」「中目黒」「目黒」の3駅で東京メトロ線と駅施設を共用しています。
これらの駅で東急線から東京メトロ線へ乗り継ぐ場合、一度改札(ラッチ)を出場する必要がないことから、これを鉄道用語で「ノーラッチ」と呼んでいます。

東急線と東京メトロ線のノーラッチ関係図。
ノーラッチ接続駅には「渋谷」「中目黒」「目黒」の3駅があります

鉄道の運賃は距離により決まりますが、異なる鉄道会社間を乗り継ぐ場合の運賃は、基本的にそれぞれの会社の運賃を合算して求めます。
東急線からメトロ線へ乗り継ぐ場合、「渋谷」「中目黒」「目黒」のどの駅で乗り継ぐかによって、当然、運賃総額は変わってくることになります。

ところが。

前述の通り、ICカード乗車券で乗車するときは、入場時と出場時にしか処理を行えません。
つまり、用賀駅で入場後、麻布十番駅で出場する際に、「渋谷」「中目黒」「目黒」のどこで乗り継いできたかを決めてやらないと運賃が求まりません。
しかし、入場駅と出場駅のタッチだけでは、乗車した経路を特定するのは困難です。

そこで、ICカード乗車システムにおいては、乗車経路が特定できない場合、「最も運賃総額が安くなる経路」で乗車したものとみなして運賃の精算を行うこととしています。
次の図をご覧ください。

用賀駅から麻布十番駅まで乗車した場合の運賃総額は、経由駅によりそれぞれ次のようになります。

① 渋谷経由 : 東急線 199円 + メトロ線 199円 = 合計 398円
② 中目黒経由: 東急線 199円 + メトロ線 199円 = 合計 398円
③ 目黒経由 : 東急線 220円 + メトロ線 168円 = 合計 388円

よって、③の目黒経由の総額がいちばん安くなることから、この区間の精算額は388円となります。
仮に用賀から田園都市線・渋谷経由で乗っていったとしてもこの金額になるわけですね。

東急線・用賀駅~東京メトロ線・麻布十番駅の検索結果。
渋谷経由で計算すると運賃は398円だが、目黒経由の388円が表示されている


こんな風に、IC運賃の計算では「実際に乗った経路とは異なる経路で運賃計算を行う」というケースが多数あります。
今回は「東急線と東京メトロ線」の2社間の運賃について話をしましたが、実際には「京急線~都営地下鉄線~京成線~北総線」のような4社間をノーラッチで乗り通す計算があったり、乗換駅でいったん出場する場合の特殊な運賃計算方法があったり、はたまた同じ経路で乗っているだけなのに往路と復路で運賃が異なる場合があったりと、ICカード乗車システムの全貌は驚くほどに複雑であり、まさになわけです。

沼を足搔いて、超えていく

乗換案内では、改札機で実際に精算されるのと同じ金額を検索結果に出せるように、この世にもややこしい仕組みを徹底的なまでに調査しています。
時にはジョルダン社員自らICカードを片手に調査に出向いたり、実際にICカードでお乗りになったお客さまに情報提供を依頼させていただくこともあったりするくらいです。

こうして調べた結果をもとに、ICカード乗車システムを再現していきます。
まずは次のデータを用意しました。

① ノーラッチ接続駅のデータ
② いったん改札を出場する駅のデータ

これらのデータは、正確なIC運賃を計算するための基礎資料となります。
新たな直通運転の開始などで、①②は当然変更もありますから、徹底的な取材とメンテナンスの対応も大切です。変更前後で運賃が変わることもあることから、日付による計算処理の切替対応も欠かせません。

次に、IC運賃を計算するには、乗換案内で検索された経路から、改札の入場駅・出場駅を求めます

例えば、前掲の「用賀から麻布十番」の経路の場合には、東急線から東京メトロ線へ乗車するわけですが、このとき東急線から東京メトロ線へ乗り継ぐ駅(この場合は渋谷)で、改札を通る必要があるかどうかがポイントになります。

このときに①のノーラッチ接続駅データが活用されます。
データには「渋谷駅で東急田園都市線と東京メトロ半蔵門線がノーラッチで接続している」といった形で定義がされており、その定義に合致した場合には、その駅ではノーラッチで乗継をしたということが判定できます。
逆にデータに定義がない他社間乗継の場合は、他社間乗継の原則として「改札を一度出て、次の会社の改札を入りなおす」ものとして判定をします。

こうして、経路の情報から「改札通過情報」への変換を行い、この「改札通過情報」をもとに、各改札口でICカードで精算される運賃を、実際のICカード乗車システムをシミュレートして計算しているわけです。

おわりに

今回は、ICカード乗車券の運賃計算を乗換案内に反映する仕組みをご紹介してきました。

乗換案内の検索結果にIC運賃をお届けするまでに、気の遠くなるような調査・分析・実装の作業があることがおわかりいただけたのではないでしょうか。

ICカード乗車システムのことについては、まだまだ書ききれないことがいっぱいあります。
例えば、IC定期券では定期区間からの乗り越し運賃をチャージ金額から精算できる機能がありますが、その精算の仕組みは、さらにさらに複雑です。
そのあたりを乗換案内がどう対応しているかということについても、また次の機会にみなさんにご紹介できればと思います。

ぜひ、スキやシェアで反応していただけると、筆者の次回作へのモチベーションになります。ご支援よろしくお願いします!


(注)本稿に記載した運賃は2022年10月現在のものです。変更となる場合がありますので、ご了承ください。

いいなと思ったら応援しよう!