Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ● JAWS FESTA 2024の会場は広島大学。バス移動は必須! ● 同日開催の酒まつり臨時駐車場(広島大学)⇔西条駅シャトルバス があり、 無料で利用させてもらうことに! ○ 酒まつりの利用者とは移動方向が逆になっており、空車のバスを走らせる のならば、FESTA参加者を乗せてほしいとお願い。 ● 無料で利用させてもらえるなら、酒まつり側に何か恩返しできないかな? ● シャトルバスの運行状況をリアルタイムに可視化できれば、待ち時間のストレ スを軽減できると考えた。楽しみながらバスを待てる(かも?) ● FESTA参加者にも酒まつり参加者にも役に立つ!一石二鳥!! そもそも、なぜ企画したの?

Slide 4

Slide 4 text

要件定義・物理関係 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 5

Slide 5 text

古里 武士 (ふるさと たけし) ● 株式会社DIGITALJET プログラマー ● AWS Samurai 2022 ● JAWS-UG 事務局 会計担当 ● JAWS-UG Okayama コアメンバー ● SORACOM UG Okayama コアメンバー ● JAWS FESTA 2024 実行委員 ● 「バスロケ」では以下を担当 ○ バス会社さんとの折衝 ○ GPSマルチユニットの設定・輸送・引き渡し・引き取り ○ テスト走行、現地検証 ○ ウェブサイト(地図以外)、チラシ作成 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 6

Slide 6 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ● 位置(GPS)、温湿度、加速度の4つのセンサーとバッテリーを備える ● LTE-Mを使ってSORACOMプラットフォームにデータを送信 ● バッテリーは毎分のデータ送信で2日間持ちそうだと実測で確認したが、念の 為に夜間のみ送信するように設定 GPSマルチユニットとは?

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ● 前日夕方に電源ONの状態で引き渡し ○ バス会社さんの手間簡略化のため、充電無しで頑 張る! ● GPS受信のために「できるだけ外が見えるところにお いてね」とお願いした ○ GPS的に最高の場所に設置されてた(感謝 ○ 直射日光で熱暴走が心配→問題なかった! ● FESTA(酒まつり1日目)、酒まつり2日目で稼働 ○ 2日目はバスの台数も増やしています ● 酒まつり2日目の夕方にバス会社さんからGPSマルチ ユニットを引き取り ○ 引き渡し・引き取りは古里が現地対応 with 岡山土産(笑 バスへの設置

Slide 9

Slide 9 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c ● デザインは古里の知り合いに依頼 ● 古里が前日に印刷屋に持ち込んで100枚カラー印刷し、 GPSマルチユニットと合わせて持ち込み。 バス座席や運転席付近に貼ってもらいました。 JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 チラシ 実際のバスに寄せきれずにバス会社さんに 「おしいー」って言われちゃいました(汗

Slide 10

Slide 10 text

全体アーキテクチャ ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 11

Slide 11 text

自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c 株式会社ソラコム テクノロジー・エバンジェリスト 松下 享平 (まつした こうへい) "Max" • 講演や執筆を中心に活動、登壇数700以上/累計 • 好きな言葉「論よりコード」 • X(旧Twitter): @ma2shita • JAWS-UG IoT 専門支部 • 好きな AWS サービス: • AWS IoT Core • AWS IoT Events 無冠の Hero だよ 「バスロケ」では: ● 全体アーキテクチャと 技術監修 ● デバイス提供と設定

Slide 12

Slide 12 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 構成図(AWS/SORACOM) 面倒になったからAWS IoT Events を 直接見ればいいからやめた サーバーレス 見積りづらいトラヒックへの対抗策 ファンアウト・パターン 相互影響の無い、並行開発 1 2

Slide 13

Slide 13 text

Web表示 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 14

Slide 14 text

● 和田 健一郎 ● 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

Slide 15

Slide 15 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c ● デザインは古里さんの知り合いに依頼 ● サイトは、CloudFront+S3で公開 モバイルアクセスのみを想定したデザイン ※地図を埋め込み JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 サイト

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c ● 実はそんなにない。流用だから! ● やろうと思ってできなかったこと&実はできたんじゃ?ことは以下 ○ 範囲外に出た場合に、バスの表示を消したい ■ デバイスの履歴情報から取るようするなどしてみたが、イマイチうまく 動かなかったのでやめた(前日広島のホテルで試行錯誤してた) ○ バス停の位置を表示する ■ バス停どこだっけ?的な話が上がってた ■ 位置は決まっていたので、その位置をAmazon Location Serivceに送り 続ければできたかも ○ バスの進行方向出せない?(バス会社さんからの要望) ■ 検討してみたけど断念 至るまでの経緯はJAWS FESTAで話したので、こちらみてね!→ 苦労した点・できなかったこと

Slide 18

Slide 18 text

位置情報表示調整 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 19

Slide 19 text

名前 :木村健一郎 所属 :株式会社オルターブース JAWS-UG福岡 SORACOM UG九州 娘ちゃんのパパ(7歳8ヶ月) 受賞歴:AWS Samurai 2019 APJ Commnity Award 2023(Ownership) SORACOM MVC 2021,2023 「バスロケ」では以下を担当 ○ 範囲外にいるバスを表示させないための 仕組みの構築 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 20

Slide 20 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 バスが休憩所に行くこともあるので。 運行範囲は非矩形 バス会社さんからのお願い:バスがコースから外れたら表示しないで

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 IoT Coreのルール(where句)にはLambda関数の 呼び出しを書くことができるので、これを使う SELECT *, aws_lambda(F,*) as f_res FROM #incoming_channel where f_res.within_area = true Lambdaの出番です

Slide 23

Slide 23 text

ハッシュタグ:#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)

Slide 24

Slide 24 text

ハッシュタグ:#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を準備する

Slide 25

Slide 25 text

監視と運用 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 26

Slide 26 text

尾崎 徳生 (おざき のりお) ● 広島市内の非IT企業の情シス ● SORACOM UG Hiroshima 運営メンバー ● SORACOM MVC 2024受賞 ● JAWS DAYS 初参加・初登壇 ● 「バスロケ」では以下を担当 ○ 異常検知と運用アラートの自動化の組み込み ○ 当日の運用監視とトラブル対応 自己紹介 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 27

Slide 27 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 そもそも何を監視する必要があるのか?問題になりそうなことを洗い出し ● GPSマルチユニットの情報が取れない ○ GPSが受信できない→バス内の設置状況次第? ○ GPSマルチユニットが圏外→事前にコースを試走して情報を収集 ○ バッテリー切れ→送信時間を指定し、事前に運用テスト 運用・監視 !

Slide 28

Slide 28 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 ● AWS IoT Eventsで状態を監視し、異常発生時と復旧時にSQS、EventBridge を通じて運営メンバーにSlackで通知する 異常検知と運用アラートの自動化

Slide 29

Slide 29 text

IoTデバイスの状態をリアルタイムで監視し、異常を検出すると 自動的に通知やアクションを実行するサービス AWS IoT Eventsとは ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 https://aws.amazon.com/jp/iot-events/

Slide 30

Slide 30 text

● 初期状態がpositioning で緯度経度がnullとなれ ばmonitoringに移行 ● monitoring状態で合計 3回nullとなったら failedに移行し、異常 通知 ● monitoring、failed状 態で正常な緯度経度が 届けばpositioningに移 行し復旧通知 GPSが受信できない ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

● 初期状態がthreeでbatが2となっ たらtwo、1となったらoneに移行 し異常通知 ● すべての状態でbatが-1(充電中 )となればchargingに移行 バッテリー切れ ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 33

Slide 33 text

● 限られた時間しかなかったので、電源を入り切りして圏外確認のみ テストの様子 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 IoT Eventsの 状態かわったー Slackの 通知とどいたー

Slide 34

Slide 34 text

● 携帯で通知を待ちつつ、PCで時々IoT Eventsのマネコン確認 ● 何かあったらダッシュでデバイス予備機と交換 当日の保守体制 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 35

Slide 35 text

● 朝、通信障害の復旧通知(GPSマルチユニットが起きる時間) ● ・ ● ・ ● ・ ● 「ちゃんと動いてる?」の指摘 →マネコン上は問題なく動いてる ● ・ ● ・ ● ・ ● 夜、通信障害の異常通知(GPSマルチユニットが寝る時間) 当日の様子 ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 36

Slide 36 text

● トラブルなく動いてくれてよかった! ● だけどがんばって作った処理が動かず、ちょっと複雑な気分でした GPSマルチユニットが優秀すぎて出番なし! ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 37

Slide 37 text

● AWSのノウハウは初心者レベルにもかかわらず、初見サービスを使って1週間 ちょっとでやったので、最後らへん廃人になった →世のIoTサービスやSORACOMサービスの尊さを改めて知った ● 広島県民のくせに当日電車乗り間違えて、大遅刻の大失態 大変だったこと ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏

Slide 38

Slide 38 text

当日の状況とまとめ ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 39

Slide 39 text

ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c ● サイトもGPSマルチユニットも無停止! ● アクセスもいい感じ ○ FESTA会場へ移動のバスに乗ったときに アクセスしてくれたみたい ○ 酒まつり2日目も使ってくれてた ● バス会社への苦情・クレームは一切なし! JAWS FESTA 2024「バスロケ」 GPS×サーバーレスの開発と運用の舞台裏 実際に動いた2日間 1日目朝 酒まつり 2日目

Slide 40

Slide 40 text

● 対物理世界は人の力が重要 ● アクセス量や負荷が読めないときこそサーバレス ○ 分担して並列開発もできる ● GPSマルチユニット超優秀 ● デバイスは万一に備えて入念な準備を ○ 何を監視し、何を監視しないかが大切 ○ バッテリーも計算だけでなく実際にチェックした ○ 万一に備えて予備機も準備した ● 詳しくは以下で議事録を公開していますので参照して下さい https://bit.ly/43hd2Av まとめ ハッシュタグ:#jawsdays2025 #jawsug #jawsdays2025_c

Slide 41

Slide 41 text

No content