STATUS: ONLINE
← cd ../
学バ
# TypeScript # Go # Gemini API # Next.js # TypeSpec # PDF Processing # CLI # PWA

学バスNavi — TUT スクールバス時刻表PWA

東京工科大学のスクールバス時刻表を快適に確認できるPWA。LinuxClubのメンバーと共同開発。Next.js + Go + TypeSpec 構成で、現在時刻から次のバスを一覧表示する。時刻表PDFから運行データを抽出するGemini API活用のGo製CLIも担当。

概要

大学公式サイトの時刻表が読みづらく、待機列の状況が見えないという学生の不満を解消するため、LinuxClubメンバーと共同開発中のPWAアプリ。現在時刻から近いバスの発車時刻を出発地ごとに一覧表示し、スライド操作で出発地を切り替えられる。

技術スタック

レイヤー技術
フロントエンドNext.js + TypeScript + Tailwind CSS
バックエンドGo
API設計TypeSpec
AI機能Gemini API(時刻表サイトから運行予定を自動取得・更新)
インフラCloudflare Pages / tut-bus-api.hekuta.net

担当範囲 — 時刻表PDFの構造化パイプライン

途中参加。時刻表PDFから運行データを抽出する Go 製CLIツールを担当。

  • 解決したかった課題: 時刻表は学校祭や学期ごとにダイヤが変わり、毎回手作業で更新していた。1つの時刻表に100件を超える時刻が載るがPDFの形式上コピー&ペーストができず手入力に大幅な時間を要していた。またバス運行組織が作成しているためデータ連携の手段がなく、予期せぬレイアウト・書式変更のリスクが常にあった
  • Go言語によるCLIとして実装した理由: ビルド後にシングルバイナリになるため、実行先での環境構築や依存関係の解決が不要で、バッチ処理としての運用・デプロイが容易
  • Gemini API を選んだ理由: 他のLLMと比較検討し、ドキュメント解析の精度とAPI料金のバランスが最も優れていた
  • パイプライン: PDF読み込み → テキスト抽出 → プロンプト構築 → Gemini API呼び出し → JSONバリデーション を自動化
  • 不規則なレイアウトへの対応: プロンプトを工夫して抽出精度を上げた
  • エラーハンドリング: API呼び出しの失敗や部分的な抽出エラーに備えた自動リトライ機構
  • 現状: コアの抽出ロジックは完成しており、抽出精度のテストとチューニングを進めている段階

主な機能

  • 現在時刻から次のバスを複数本一覧表示
  • 出発地を横スライドで切り替え(大学 / 八王子駅 / みなみ野駅 / 学生会館)
  • 日付・出発地・目的地・時間帯で絞り込み検索
  • 表示テーマとプロフィール設定

今後の展望

位置情報から最寄り出発地を自動判定し、次発バスまでの時間をプッシュ通知する機能を予定。