はじめに
非エンジニアですが、AIに相談しながら、Google Apps Script(GAS)とGoogleスプレッドシートを使って、ドローン運航記録用のWebアプリを作りました。
対象は Autel Robotics EVO Lite / EVO Lite+ です。
GitHubで公開しています。
このアプリは、単に「飛行時間を記録する」だけではなく、
- 飛行前点検
- 離陸・着陸時刻
- 実飛行時間
- バッテリー管理
- 機体交代
- 飛行後点検
- 飛行記録
- 日常点検記録
- 点検整備記録
- 機体ごとの累計飛行時間
などを、できるだけ現場でスマートフォン1台から扱えるようにすることを目指しています。
なぜ作ったのか
きっかけは、ドローン運航で必要になる記録類です。
特定飛行では、飛行記録・日常点検記録・点検整備記録などの飛行日誌を備える必要があります。
国土交通省の「無人航空機の飛行日誌の取扱要領」では、必要な記載内容を網羅することを前提に、電磁的な記録・保管も認められています。
そこで、
「紙の帳票を何枚も持っていくのではなく、スマホとドローン一式だけで現場へ行き、その場で確認・入力・保存できないか」
と考えました。
これがこのアプリを作った理由です。
なぜGoogle Apps ScriptとGoogleスプレッドシートなのか
最初から「データベースを使った本格Webサービスを作ろう」と考えていたわけではありません。
むしろ重要だったのは、
- スマホから入力できる
- 保存した内容を人間が直接確認できる
- 必要なら手動で補記できる
- あとから印刷できる
- Google Drive上でどこからでも確認できる
- 個人運用なので、できるだけ構成を増やしたくない
という点でした。
そのため、Googleスプレッドシートを単なるデータ保存先ではなく、
「人間がそのまま確認・補記・印刷できる記録帳」
として使っています。
GASはその記録帳へ入力するためのWebアプリ部分を担当しています。
実際の運用フロー
アプリでは、だいたい次の流れで操作します。
開始 → 飛行前点検 → 離陸 → 飛行 → 着陸 → 継続・機体交代 → 飛行後点検 → 一括保存
飛行中は離陸時刻からタイマーを動かしますが、最終的な飛行時間は送信機側の実飛行時間を確認して入力する形にしています。
複数バッテリーを使う場合はバッテリー番号を管理し、機体を交代した場合は交代先の機体へ記録を引き継ぎます。
最後に、今回の運航分をGoogleスプレッドシートへまとめて保存します。
作っていくうちに、かなり複雑になった
最初はもっと単純な入力アプリのつもりでした。
しかし実際に運用を考えると、
- スマホで途中まで入力してアプリを閉じたらどうするか
- 二重保存されたらどうするか
- 通信が不安定だった場合どうするか
- 保存途中で失敗した場合どうするか
- バッテリー交換をどう記録するか
- 機体を途中で交代した場合どうするか
- 機体ごとの累計飛行時間をどう管理するか
- 手動でスプレッドシートを訂正した場合どうするか
など、次々に問題が出てきました。
そのため現在は、
- 下書き保存
- 復元
- 再送
- 二重保存対策
- 保存処理の安全性
- 機体別累計
- バッテリー履歴
- 手動補記との共存
- テスト
- CI
- 設計ドキュメント
まで作るようになりました。
個人用GASアプリとしては、かなり作り込んだ構成になったと思います。
非エンジニアなので、AIと一緒に作った
私は本職のエンジニアではありません。
そのため、
「こういう動きをさせたい」
「この保存方法で壊れないか」
「この処理は法律上の記録としてどう考えるべきか」
「スマホで使いやすくするにはどうすればいいか」
といったことをAIに相談しながら、少しずつ修正してきました。
ただし、AIが生成したコードをそのまま貼って終わりではなく、
- 実際に動かす
- 問題が出る
- 原因を調べる
- 修正する
- 再テストする
- 設計書へ反映する
という繰り返しです。
その結果、コードだけでなく、
AGENTS.md- 設計書
- architecture
- code-map
- invariants
- spreadsheet-spec
- test-spec
- GitHub Actions
なども用意するようになりました。
実機でも動作確認しています
EVO Lite / EVO Lite+ の実機を使って、実際の操作確認もしています。
机上だけで作るのではなく、
「現場でスマホを持って操作したときに使えるか」
を重視しています。
Instagram / Facebook向けに撮影した動作確認動画もあります。
現在の構成
大まかには次のような構成です。
- フロントエンド:HTML / CSS / JavaScript
- バックエンド:Google Apps Script
- 保存先:Googleスプレッドシート
- 公開入口:GitHub Pages
- ソース管理:GitHub
- テスト・CI:GitHub Actions
GASのWebアプリだけではホーム画面アイコン周りに制約があるため、GitHub Pages側にホーム画面追加用の入口も用意しています。
今後考えていること
現在気になっているのは、飛行前のDIPS確認や飛行計画通報とのつながりです。
実際の運航では、アプリを開く前に確認することがあります。
そのため将来的には、
DIPSでの確認 → 必要な通報 → 飛行前点検 → 運航記録
まで、もう少し一連の流れにできないかと考えています。
ただし、DIPS APIの利用条件や、個人開発者がどこまで利用できるのかはまだ調査中です。
GitHubで意見を募集しています
このアプリは完成品というより、実際に使いながら改善している個人用プロジェクトです。
GitHub Discussionsでは、
- ドローンパイロットの方
- DJIなど他メーカーを使っている方
- GASに詳しい方
- Webエンジニアの方
- 設計や保守性を見ていただける方
からの意見を募集しています。
「ここはこうした方がいい」
「スプレッドシートに依存しすぎでは?」
「自分ならこう管理する」
「この設計はそのままでいい」
といった意見でも歓迎です。
GitHubはこちらです。
最後に
もともとの目的はとても単純でした。
紙の帳票を何枚も持ち歩かず、スマホとドローン一式を持って、必要な確認と記録をその場で済ませながら飛ばしに行きたい。
そこから始めた個人用アプリが、気付けばかなり大きくなりました。
GASやGoogleスプレッドシートをここまで使い込む構成が適切なのかも含めて、エンジニアの方から見た意見を聞いてみたいと思っています。
※本プロジェクトはAUTEL公式ではありません。Autel Roboticsとは関係のない個人制作の非公式プロジェクトです。