本アプリは、LINE Bot からサクッと電車の時刻を確認できる時刻表アプリです。 ユーザーは LINE のトーク画面でメッセージを送るだけで、次の電車の発車時刻をすぐにチェックできます。 バックエンドは AWS Lambda で動かす前提のため、サーバー管理いらずで気軽に使えるシンプルな構成になっています。
また、時刻表データを CSV 形式で読み込む仕組みにしたことで、他の路線や駅にも簡単に対応できるようになっており、用途に応じて柔軟に拡張できる設計を意識しています。
京王電鉄公式の時刻表アプリは UI/UX が洗練されていてとても使いやすい一方で、「次の電車だけサッと知りたい」といった用途には少し重いと感じていました。特に八王子駅周辺では電波が悪く、起動や再読み込みに時間がかかる点が気になっていました。
そこで、もっと軽く実用的に使える時刻表として、本 bot を開発しました。LINE から簡単に確認でき、トーク履歴としても残るため、自宅であらかじめ時刻をチェックしておけば、駅で電波が悪くても困りません。現在も自分自身が日常的に利用しています。
- LINE のトーク画面で、何かしらメッセージを送信するかボタンを押すだけで、直近の電車の時刻表を返信します。
- 「もっと見る」ボタンから、表示件数を指定して、その後の電車もまとめて確認できます。
- 内部では、現在の曜日と時刻から自動的に適切なダイヤ(平日・土日など)を判定し、その時間帯に対応した時刻表を参照しています。
- 言語: Go 1.24.2
- 実行環境: AWS Lambda
- インフラ想定: API Gateway + Lambda(サーバーレス構成)
- 外部サービス: LINE Messaging API
- データソース: 時刻表 CSV
本アプリは、LINE からの Webhook をきっかけに AWS Lambda 上で時刻表を返す、シンプルなサーバーレス構成を想定しています。
- ユーザーが LINE でメッセージを送信
- LINE Messaging API が Webhook を叩く
- API Gateway → Lambda(本アプリ)にリクエストが届く
- Lambda が CSV(平日・休日ダイヤ)を参照し、次の電車の時刻をレスポンスとして返す
-
環境変数
ENV=devを設定してサーバーを起動します。ENV=dev go run main.go
-
別ターミナルで ngrok などを使ってポート 8080 を公開します。
ngrok http 8080
-
LINE Developers コンソールで Webhook URL を
https://<ngrokのドメイン>/callbackに設定します。 -
LINE のトーク画面から Bot にメッセージを送信すると、
ローカルのHandlerDevが呼ばれ、動作確認ができます。
-
Lambda 用バイナリをビルドし、時刻表 CSV と一緒に zip に固めます。
GOOS=linux GOARCH=amd64 go build -o bootstrap main.go zip main.zip bootstrap keio_weekday.csv keio_holiday.csv
-
provided.al2023ランタイムで Lambda 関数を作成し、main.zipをデプロイします。 -
API Gateway または Lambda Function URL を設定し、
生成された HTTPS URL を LINE Developers の Webhook URL に登録します。 -
本番環境では
ENVを dev 以外に設定することで、
lambda.Start(server.Handler)側が実行されます。
本アプリはプログラミングを学び始めてすぐの時期に作った初めてのプロジェクトのため、
内部処理や設計を中心にリファクタリングしたいと考えています。
機能面では以下のような改善・拡張を予定しています。
-
電車種別の指定(各駅停車・快速・特急など)
より細かくユーザーに合った時刻を返すためのフィルタリング機能。 -
到着時刻からの逆算検索
「8:50 に大学へ着きたい」などのニーズに対し、最適な乗車時刻を自動計算。 -
時間割と連携した自動通知
学校の時間割を登録しておけば、毎回自動で「次の授業にちょうどいい電車」を通知。 -
CSV 以外のデータソース対応
他路線にも簡単に対応できる構造に発展させたい(API / DB 対応など)。 -
LINE での操作性向上(Flex Message など)
直感的に操作できる UI を改善し、使いやすさを向上させる。 -
Go の経験値に合わせたコードの書き直し
今のスキルで読み返すと改善点も多いため、設計・アーキテクチャを見直して保守性を上げる。
初期プロトタイプとしては十分動く状態ですが、
今後はより実用的かつ拡張性のあるアプリへ発展させていく予定です。
