🚉

路線・駅情報のREST API開発と公開

2024/07/01に公開

路線・駅情報のREST APIサービス開発と公開

はじめに

こんにちは。私は鉄道と技術が大好きなエンジニアです。
この2つの情熱を組み合わせてAPIサービスを開発しました。

サービス概要

「路線・駅情報のREST API」は以下のURLで公開しています:
https://train.teraren.com/

このAPIは、以下の主な機能を提供します:

  1. 特定の路線の全停車駅リストの取得
  2. 路線の停車駅
  3. 特定の駅の詳細情報

技術スタック

このサービスは以下の技術スタックを使用して開発されています:

  • バックエンド: Ruby on Rails
  • データベース: MySQL 8.4
  • ホスティング: 自宅サーバ + Cloudflare

API使用例

1. 山手線の全停車駅リストを取得する

❯ curl -s 'https://train.teraren.com/lines/11302/stations.json' | jq '.[].station_name'
"大崎"
"五反田"
"目黒"
"恵比寿"
"渋谷"
"原宿"
"代々木"
"新宿"
"新大久保"
"高田馬場"
"目白"
"池袋"
"大塚"
"巣鴨"
"駒込"
"田端"
"西日暮里"
"日暮里"
"鶯谷"
"上野"
"御徒町"
"秋葉原"
"神田"
"東京"
"有楽町"
"新橋"
"浜松町"
"田町"
"高輪ゲートウェイ"
"品川"

2. 東京タワーから近い駅を取得する

curl -s 'https://train.teraren.com/stations/near_by_stations.json?lon=139.7454329&lat=35.6585805&limit=5' | jq
[
  {
    "station_cd": 9930122,
    "station_name": "赤羽橋",
    "station_g_cd": 9930122,
    "distance": 0.42903606641634495
  },
  {
    "station_cd": 2800317,
    "station_name": "神谷町",
    "station_g_cd": 2800317,
    "distance": 0.49008364939314947
  },
  {
    "station_cd": 9930306,
    "station_name": "御成門",
    "station_g_cd": 9930306,
    "distance": 0.6242921448435772
  },
  {
    "station_cd": 9930305,
    "station_name": "芝公園",
    "station_g_cd": 9930305,
    "distance": 0.6391377203522578
  },
  {
    "station_cd": 9930121,
    "station_name": "大門",
    "station_g_cd": 9930121,
    "distance": 0.8572190503449685
  }
]

検索速度

GETリクエストはCDNに入るのでリモートからベンチマークを取得するのが難しいです。
CDNにキャッシュされていない問い合わせで100msぐらいで返ってきます。WiFiを使っているので10ms程度はロスしていると思います。

❯ time curl -s 'https://train.teraren.com/stations/near_by_stations.json?lon=138.754&lat=35.68&limit=5' | jq
[
  {
    "station_cd": 1131124,
    "station_name": "勝沼ぶどう郷",
    "station_g_cd": 1131124,
    "distance": 1.260601057731234
  },
  {
    "station_cd": 1131125,
    "station_name": "塩山",
    "station_g_cd": 1131125,
    "distance": 3.307396894029273
  },
  {
    "station_cd": 1131126,
    "station_name": "東山梨",
    "station_g_cd": 1131126,
    "distance": 4.871013008643865
  },
  {
    "station_cd": 1131123,
    "station_name": "甲斐大和",
    "station_g_cd": 1131123,
    "distance": 5.162276817888356
  },
  {
    "station_cd": 1131127,
    "station_name": "山梨市",
    "station_g_cd": 1131127,
    "distance": 6.436090680301475
  }
]

________________________________________________________
Executed in   94.13 millis    fish           external
   usr time   10.79 millis    0.12 millis   10.68 millis
   sys time    7.64 millis    1.38 millis    6.26 millis

CDNに入っていれば60ms程度で返却されます。

おわりに

このAPIは、鉄道ファンの方々や、鉄道情報を利用したアプリケーションの開発者の方々に楽しんでいただけると嬉しいです。ぜひ使ってみてください!

フィードバックやご要望があれば、コメントやDiscordにお寄せください。みなさまのご意見を参考に、さらに便利なサービスに成長させていきたいと思います。

Discussion