この記事は、Delphi 開発者Alessandro Negri氏の投稿で、彼の所属するCharles River Analyticsで開発した、オートバイの危険を可視化しライダーを命の危険から守るシステムについて紹介しています。開発プロジェクトに、他のプログラミングソリューションではなく、Delphiを選択した理由を語っているほか、このプロジェクトの成功を受けて進めている、Skia4Delphiライブラリを活用したDelphiによるクロスプラットフォームアプリの開発計画についても触れています。
Table of Contents
オートバイ向けハザード報告監視ツールとは
BARRACUDAは、合衆国運輸省との契約に基づいて提案、開発された、オートバイのハザード(危険)報告を行うモバイルアプリ向けSDKです。BARRACUDA SDKは、REVER Android/iOSモバイルアプリケーションのベータ版に統合され、グローバルリリースされています。BARRACUDA SDKは、Android向けのKotlin、iOS向けのSwift、Pythonを用いるバックエンドのネイティブサービスとして記述されています。
SDK開発が完了し、バックエンドをMicrosoft Azureのクラウド環境にデプロイしてみると、ユーザーからのハザード報告がどのように行われているかをすばやく可視化し評価できるようにする必要性に気づきました。バックエンドはセキュアなREST APIとして開発しており、ここには何も追加したくなかったため、この用途のWebアプリケーションを作成することは選択したくありませんでした。
このハザード情報を可視化する地理情報機能は、WindowsとmacOSの双方のクロスプラットフォーム環境で動作する必要があり、そのために迅速に開発、保守が可能なツールが求められました。これにDelphiを使うことは、私の開発スキルを高める絶好の機会だと思ったので、Delphi Professionalを使用して、このツールを構築することを決断したのです。
BARRACUDAプロジェクトの詳細
プロジェクトの詳細については、以下のリンクをご覧ください。
BARRACUDA – Charles River Analytics
プロジェクト設計の進め方
最初のステップは、必要な機能の簡単なアウトラインを作成し、次にツールがユーザーにどのように表示するかを、紙ベースのモックアップで用意することでした。これには、3人の小さなチームが担当しました。ユーザー要件を次に示します。
- 地図を表示
- ハザードをCSVファイルから読み込み
- REST API からハザードを読み込み
- 種類ごとに特徴的なアイコンですべてのハザードをプロット
- すべてのハザードをクリア
- すべてのハザードIDのリストを出力
- すべての一意なハザード報告ユーザーを出力
- 指定された緯度と経度を中心とした地図のセンタリングを有効化
- ハザードとユーザー数を表示
使用するDelphiコンポーネント選定の理由
次に行ったのは、モバイル以外のアプリケーションに埋め込むマップをどのように扱うかを考えることでした。これには、TMS SoftwareのFNC Mapsコンポーネントを使うことにしました。このコンポーネントは、複数のマッププロバイダーをサポートしており、その時点ではどのプロバイダーを使うかを決定していませんでした。いくつかを実際にレビューした結果、Mapboxを使うことにしました。REVERでもMapboxを採用しており、ツール間での差異を少なくしたかったからです。サンプルSDKアプリケーションでも、Mapboxを使っています。
設計プロセスの詳細
最後に、ツールのあるべき外観をノートにスケッチしました。これは、実現したいことをフリーハンドでビジュアル化できるので、いつも行うステップです。このスケッチに芸術性は求められませんが、個人的には非常に満足のいくステップのひとつです(このステップは、データモデル、データベースリレーション、あらゆるUI設計、ゲームの作成などでも実践しています)。
UIデザインの実装法
マップコンポーネントの選定、要求リスト、UIデザインのスケッチの用意ができたので、ツール機能を実装し、共有可能なビルドを作成することに集中できました。およそ2時間、私は次のことに集中しました。
- 下図のように、ビジュアルデザイナでUIを作成
- UIコンポーネントにイベントを設定(ほとんどがOnClickイベント)
- CSVファイルからハザードの読み込み
- REST APIをクエリーし、最新のライブハザードを表示
- ハザードをクリア
- 指定した場所でマップビューをセンタリング(緯度/経度を設定するEditコントロールの横にある目のかたちのアイコン)
- 基本機能をコーディングし、すべてのステップをテスト
- ファイル参照ダイアログの表示
- CSVファイルを読み込んで解析
- RESTコンポーネントを活用してバックエンドにアクセス
- JSONデータの解析
- アプリケーションの統合テスト
- データ解析中の総ハザード数のカウント
- ディクショナリを使用してユニークユーザー数をカウントし、データ解析中に各ユーザーが報告したハザード数を追跡
- TMS FNC Mapsでマーカーレンダリングが正しく機能していることを確認する追加作業
- 基本機能の改善とテスト
- 解析中にすべてのハザードの緯度経度中心平均を取得
- 緯度経度を入力するEditコントロールに入力制約を追加
- 地図のセンタリング
- Windowsでのアプリケーション統合テスト
- macOS向けコンパイルとテスト
他に使用したコンポーネント
このほかに、エンバカデロが提供するRESTコンポーネントも活用しています。REST APIから取得したデータは、JSONライブラリを使って解析し、マップ上にマーカーを作成、追加しています。
TMS FNC Mapには、マーカー更新のバッチ処理などにいくつか問題がありました。そのままでは、マップマーカーのロードとレンダリングに時間がかかってしまったのです。このコンポーネントのMapboxバージョン固有のバグもありましたが、すぐに修正されました。TMSの開発者は、フォーラムで私の遭遇したバグについてサポートしてくれ、コンポーネントをアップデートしてくれました。私にとっては、これがDelphi+TMSコンポーネントを用いた最初の実開発プロジェクトでしたが、その選択が正しかったことが証明されました。
プロジェクトの実行画面
ツールの最終ビルドは、以下の画面ショットをご覧ください。ここでは、ユーザーがバックエンドにクエリーを発行し、ハザード情報をダウンロードし、マップ上に表示しています。
Delphiプロジェクトの可能性ついて
DelphiとFMXを用いることで、既存のREST APIにElectronを用いたWebダッシュボードを追加開発することなく、埋め込み型のマップを備えWindowsとmacOSの双方で利用できる、内部のニーズに対応したスタンドアロンツールを迅速に開発することができました。このシンプルなツールは、こうしたニーズに対応できただけでなく、Delphi に関するナレッジと開発スキルを向上させる機会を与えてくれました。検証とスキルアップを行うのに最適な場面は、通常、社内で使用する内部ツールの作成です。これであれば、他のユーザーが使用するものであるものの(ユーザーベースは小さく)、失敗しても簡単にリカバリーできます。より大きなプロジェクトで自動化を推進し、検証、モニタリングをするのに、こうした小さな内部ツールを活用することには大賛成です。
Delphiは非常に便利で、より大規模で複雑なプロジェクトへと展開可能です。現在、DelphiでSkiaエンジンを用いて、がん患者の12週間にわたる回復期間の経過監視を行うAndroidとiOSの双方に対応したモバイルアプリを作成しています。
この記事は、Enterprise Article Showcaseへ投稿されたものです。RAD Studio、Delphi、C++Builderと関連技術を用いて構築した開発プロジェクトの成功事例をお持ちの方は、ぜひご連絡ください。詳細はこちらをご覧ください。