🚃
名松線の駅をランダムに返すAPI【Hono × Cloudflare Workers】
名松線は、三重県の松阪駅から津市の伊勢奥津駅までを結ぶJR東海のローカル線だ。全長43.5km。全線単線非電化。途中駅には無人駅も多く、日常的に利用する人が少ないこともあって、JR東海の路線の中では営業成績が最も悪いとされている。

名松線キハ11形
そんな名松線に、ほんの少しでも興味を持ってもらえたらいいなと思い、名松線の駅名をランダムで返すだけのシンプルなAPIを作ってみた。
使用技術は、TypeScript製の軽量フレームワーク「Hono」と「Cloudflare Workers」。これまでJavaScriptのAPIはNode.js(Express)で開発してきたが、HonoとCloudflare Workersを使ってみたところ、型安全で開発しやすく、デプロイも簡単で驚いた。Bunで動くため、高速かつ軽量なのも良い。日本の方が開発したという点でも応援したい。
リポジトリURL:https://github.com/muranakaaa/meisho-line-api
APIのURL:https://meisho-line-api.miesanpo.workers.dev/station
このエンドポイントにGETリクエストを送ると、名松線の駅名が1つランダムでJSON形式で返ってくる。
レスポンス例:
{
"station": "伊勢川口駅",
"city": "三重県津市"
}
実装コード(src/index.ts):
import { Hono } from 'hono'
const app = new Hono()
const stations = [
{ name: '松阪駅', city: '松阪市' },
{ name: '上ノ庄駅', city: '松阪市' },
{ name: '権現前駅', city: '松阪市' },
{ name: '伊勢八太駅', city: '津市' },
{ name: '一志駅', city: '津市' },
{ name: '井関駅', city: '津市' },
{ name: '伊勢大井駅', city: '津市' },
{ name: '伊勢川口駅', city: '津市' },
{ name: '関ノ宮駅', city: '津市' },
{ name: '家城駅', city: '津市' },
{ name: '伊勢竹原駅', city: '津市' },
{ name: '伊勢鎌倉駅', city: '津市' },
{ name: '伊勢八知駅', city: '津市' },
{ name: '比津駅', city: '津市' },
{ name: '伊勢奥津駅', city: '津市' }
]
app.get('/station', (c) => {
const random = stations[Math.floor(Math.random() * stations.length)]
const body = JSON.stringify(
{
station: random.name,
city: `三重県${random.city}`
},
null,
2
)
return new Response(body, {
status: 200,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
})
export default app
Discussion