Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JAWS FESTA 2024「バスロケ」GPS×サーバーレスの開発と運用の舞台裏/jawsf...

JAWS FESTA 2024「バスロケ」GPS×サーバーレスの開発と運用の舞台裏/jawsfesta2024-bus-gps-serverless

Kohei "Max" MATSUSHITA

March 01, 2025
Tweet

More Decks by Kohei "Max" MATSUSHITA

Other Decks in Technology

Transcript

  1. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 昨年の「JAWS FESTA 2024

    in 広島」では、 駅から会場を結ぶシャトルバスの位置情報を リアルタイムで提供する「バスロケ」サービスを、 コミュニティの面々で開発・運用しました。 本セッションでは、GPSデバイスの準備や設置、 サーバーレス構成によるロケーションアプリの構築、 バス会社さんとの調整、当日の運用体制について詳しく解説し、 IoTの分散型開発のポイントや、 非機能要件を "作らずに創る" (作業せずに実現する) 実践方法を共有します。 JAWS FESTA 2024 in 広島で提供した「バスロケ」とは
  2. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • JAWS FESTA

    2024の会場は広島大学。バス移動は必須! • 同日開催の酒まつり臨時駐車場(広島大学)⇔西条駅シャトルバス があり、 無料で利用させてもらうことに! ◦ 酒まつりの利用者とは移動方向が逆になっており、空車のバスを走らせる のならば、FESTA参加者を乗せてほしいとお願い。 • 無料で利用させてもらえるなら、酒まつり側に何か恩返しできないかな? • シャトルバスの運行状況をリアルタイムに可視化できれば、待ち時間のストレ スを軽減できると考えた。楽しみながらバスを待てる(かも?) • FESTA参加者にも酒まつり参加者にも役に立つ!一石二鳥!! そもそも、なぜ企画したの?
  3. 古里 武士 (ふるさと たけし) • 株式会社DIGITALJET プログラマー • AWS Samurai

    2022 • JAWS-UG 事務局 会計担当 • JAWS-UG Okayama コアメンバー • SORACOM UG Okayama コアメンバー • JAWS FESTA 2024 実行委員 • 「バスロケ」では以下を担当 ◦ バス会社さんとの折衝 ◦ GPSマルチユニットの設定・輸送・引き渡し・引き取り ◦ テスト走行、現地検証 ◦ ウェブサイト(地図以外)、チラシ作成 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c
  4. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • 位置(GPS)、温湿度、加速度の4つのセンサーとバッテリーを備える •

    LTE-Mを使ってSORACOMプラットフォームにデータを送信 • バッテリーは毎分のデータ送信で2日間持ちそうだと実測で確認したが、念の 為に夜間のみ送信するように設定 GPSマルチユニットとは?
  5. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • バス会社さんにご挨拶 ◦

    ちゃんと岡山お土産持っていった(笑 ◦ とても友好的に話ができた(お土産効果?) • 「気にしてほしいこと」をいくつか頂いた ◦ 乗客や運転手の迷惑にならないこと ◦ バス会社さんへのクレームにならないこと ▪ バスが休憩中やコースから外れたときの居場所を見せないで • GPSデバイスを設置するのに車両工事は無しで →これはGPSマルチユニットで解決 バス会社さんとの調整・要件定義
  6. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • 前日夕方に電源ONの状態で引き渡し ◦

    バス会社さんの手間簡略化のため、充電無しで頑 張る! • GPS受信のために「できるだけ外が見えるところにお いてね」とお願いした ◦ GPS的に最高の場所に設置されてた(感謝 ◦ 直射日光で熱暴走が心配→問題なかった! • FESTA(酒まつり1日目)、酒まつり2日目で稼働 ◦ 2日目はバスの台数も増やしています • 酒まつり2日目の夕方にバス会社さんからGPSマルチ ユニットを引き取り ◦ 引き渡し・引き取りは古里が現地対応 with 岡山土産(笑 バスへの設置
  7. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c • デザインは古里の知り合いに依頼 • 古里が前日に印刷屋に持ち込んで100枚カラー印刷し、 GPSマルチユニットと合わせて持ち込み。 バス座席や運転席付近に貼ってもらいました。 JAWS

    FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 チラシ 実際のバスに寄せきれずにバス会社さんに 「おしいー」って言われちゃいました(汗
  8. 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c 株式会社ソラコム テクノロジー・エバンジェリスト 松下 享平 (まつした こうへい)

    "Max" • 講演や執筆を中心に活動、登壇数700以上/累計 • 好きな言葉「論よりコード」 • X(旧Twitter): @ma2shita • JAWS-UG IoT 専門支部 • 好きな AWS サービス: • AWS IoT Core • AWS IoT Events 無冠の Hero だよ 「バスロケ」では: • 全体アーキテクチャと 技術監修 • デバイス提供と設定
  9. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 構成図(AWS/SORACOM) 面倒になったからAWS IoT

    Events を 直接見ればいいからやめた サーバーレス 見積りづらいトラヒックへの対抗策 ファンアウト・パターン 相互影響の無い、並行開発 1 2
  10. • 和田 健一郎 • JAWS-UG 千葉 運営メンバー • SORACOM UG東京

    運営メンバー • AWS Community Builder(Serverless) • SORACOM MVC 2022 • 好きなAWSサービス ◦ AWS Lambda ◦ Amazon Location Service • Twitter: @Keni_W Facebook : kenichiro.wada.3 • バスロケでは以下担当 ◦ Web部分 ◦ AWSアカウント提供 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c
  11. JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c • 地図の表示部分は、AWS Amplify(Gen1)でReactで構築

    • つまり、GPSマルチユニット x Amazon Location Service ハンズオンの流用 • つまり、AWSさん謹製のAmazon Location Serviceワークショップの流用 創って作らず • カスタマイズした部分は以下 ◦ 画面ロード時の中心を広島県西条市の中心部に ◦ アイコンをバスのアイコンに変更 ◦ 今回不要な履歴表示やルート機能などを削除 Webまわり
  12. JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c • 実はそんなにない。流用だから! •

    やろうと思ってできなかったこと&実はできたんじゃ?ことは以下 ◦ 範囲外に出た場合に、バスの表示を消したい ▪ デバイスの履歴情報から取るようするなどしてみたが、イマイチうまく 動かなかったのでやめた(前日広島のホテルで試行錯誤してた) ◦ バス停の位置を表示する ▪ バス停どこだっけ?的な話が上がってた ▪ 位置は決まっていたので、その位置をAmazon Location Serivceに送り 続ければできたかも ◦ バスの進行方向出せない?(バス会社さんからの要望) ▪ 検討してみたけど断念 至るまでの経緯はJAWS FESTAで話したので、こちらみてね!→ 苦労した点・できなかったこと
  13. 名前 :木村健一郎 所属 :株式会社オルターブース JAWS-UG福岡 SORACOM UG九州 娘ちゃんのパパ(7歳8ヶ月) 受賞歴:AWS Samurai

    2019 APJ Commnity Award 2023(Ownership) SORACOM MVC 2021,2023 「バスロケ」では以下を担当 ◦ 範囲外にいるバスを表示させないための 仕組みの構築 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c
  14. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 どうやって実現しよう? • 表示側で毎回位置を判断する?

    ◦ 表示側の改修が結構大ごと • geo fencingでいける? ◦ geo fencingは、範囲に入った/出たというイベントを拾うだけなので、そ のイベントから何をさせる? ◦ trackerに表示・非表示みたいなデータを持たせられない?外部のデータで 保持する? ◦ 結局表示の改修になる • そもそも範囲に入ってないデータをトラックしない、が楽そう 実現方法を考える
  15. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • Lambdaに{ "lat":

    float_data, "lon": float_data}というJSONが渡さ れる • これを判定して、{"within": bool_state}というJSONを返す • Turfpyというpythonライブラリがあるのでこれを使う https://turfpy.readthedocs.io/en/latest/index.html 動かすだけならロジック本体は以下の3行でOK (何なら1行で書けますね) Lambdaの仕様 polygon = Polygon(area['features'][0]['geometry']['coordinates']) point = Feature(geometry=Point((lon,lat))) return boolean_point_in_polygon(point, polygon)
  16. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 本質的に3行で書けるコードでもちゃんとテストとCI/CDは準備した • Lambdaのコード

    : 57行(3,180byte) • 単体テストコード : 109行(7,360byte) • CI/CDコード(GitHub Actions) : 68行(2,025byte) ◦ ※いずれもコメント行は含むが空行は除く 本体よりもそれ以外のコードの方が3倍弱あるが、単体テストがあるおかげで安心 してリファクタリングできるし、AWS環境へのデプロイも自動化されていて気軽 にかつ確実にできるのでやはり単体テストとCI/CDは重要だと再認識しました。 コードは以下で公開しています https://github.com/soracomug/bus-location-service 頑張ったところ:ちゃんとテストとCI/CDを準備する
  17. 尾崎 徳生 (おざき のりお) • 広島市内の非IT企業の情シス • SORACOM UG Hiroshima

    運営メンバー • SORACOM MVC 2024受賞 • JAWS DAYS 初参加・初登壇 • 「バスロケ」では以下を担当 ◦ 異常検知と運用アラートの自動化の組み込み ◦ 当日の運用監視とトラブル対応 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c
  18. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 そもそも何を監視する必要があるのか?問題になりそうなことを洗い出し • GPSマルチユニットの情報が取れない

    ◦ GPSが受信できない→バス内の設置状況次第? ◦ GPSマルチユニットが圏外→事前にコースを試走して情報を収集 ◦ バッテリー切れ→送信時間を指定し、事前に運用テスト 運用・監視 !
  19. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 • AWS IoT

    Eventsで状態を監視し、異常発生時と復旧時にSQS、EventBridge を通じて運営メンバーにSlackで通知する 異常検知と運用アラートの自動化
  20. • 初期状態がpositioning で緯度経度がnullとなれ ばmonitoringに移行 • monitoring状態で合計 3回nullとなったら failedに移行し、異常 通知 •

    monitoring、failed状 態で正常な緯度経度が 届けばpositioningに移 行し復旧通知 GPSが受信できない ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏
  21. • 初期状態がconnecting で5分通信がなければ outageに移行し異常通 知 • outageの状態で通信が あればconnectingに移 行し復旧通知 GPSマルチユニットが圏外

    ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏
  22. • 朝、通信障害の復旧通知(GPSマルチユニットが起きる時間) • ・ • ・ • ・ • 「ちゃんと動いてる?」の指摘

    →マネコン上は問題なく動いてる • ・ • ・ • ・ • 夜、通信障害の異常通知(GPSマルチユニットが寝る時間) 当日の様子 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏
  23. ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c • サイトもGPSマルチユニットも無停止! • アクセスもいい感じ ◦ FESTA会場へ移動のバスに乗ったときに アクセスしてくれたみたい

    ◦ 酒まつり2日目も使ってくれてた • バス会社への苦情・クレームは一切なし! JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 実際に動いた2日間 1日目朝 酒まつり 2日目
  24. • 対物理世界は人の力が重要 • アクセス量や負荷が読めないときこそサーバレス ◦ 分担して並列開発もできる • GPSマルチユニット超優秀 • デバイスは万一に備えて入念な準備を

    ◦ 何を監視し、何を監視しないかが大切 ◦ バッテリーも計算だけでなく実際にチェックした ◦ 万一に備えて予備機も準備した • 詳しくは以下で議事録を公開していますので参照して下さい https://bit.ly/43hd2Av まとめ ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c