こんにちは、株式会社Mobility Technologies(以下、MoT)です。MoTはタクシーアプリ「GO」を中心に「移動で人を幸せに。」することを目指す会社です。「GO」を利用したことがあるよという方もいらっしゃると思いますが、MoTでは普段みなさんが利用する一般向けのスマホアプリだけでなく、タクシー車内の車載システムもAndroidで開発しています。今回は「GO」の開発に関わる2つのAndoroidアプリ開発チームについて紹介します。
AndroidとMobility Technologies
MoTは、2020年4月にJapanTaxi社とDeNA社のMOVやDRIVE CHARTなどの事業が統合して誕生しました。会社名をご存じない方でもこの「GO」のロゴは街中で見かけたことがある方は多いと思います。MoTは全国のタクシー車両10万台と提携しており、2021年9月時点で全国20都道府県で「GO」を展開しています。コロナ禍でも利用は大幅に伸びており、リリースから1年で500万ダウンロードを達成しました。
またJapanTaxi時代ではありますが、DroidKaigi 2019ではタクシー車内のハードウェア構成を再現したプロダクトボードをブース展示しました。こちらも憶えているという方もいらっしゃるのではないでしょうか。
このように一般向けのスマホアプリだけでなく、タクシー乗務員さんが注文を受ける乗務員向けのアプリ、タクシー車内の後部座席にあるタブレット端末含めたAndroid環境の車載システムなど、さまざまなデバイスで動作するAndroidアプリを開発しているのがMoTにおけるAndroidアプリ開発の特徴です。
チーム紹介
この記事では「GO」の開発に関わる2つのAndroidアプリ開発チーム、タクシー利用者のみなさんに使っていただくユーザーアプリを開発しているチームと、タクシー車内の車載システムを開発しているチームについて紹介します。
カメラ、マイク(音波でのタブレット連携)、通話、GPS、PushとAndroidの機能を使い倒しているユーザーアプリチーム
まずは一般向けの「GO」を開発しているユーザーアプリチームを紹介します。
前述のとおり「GO」は2020年4月にJapanTaxi社が開発する「JapanTaxi」アプリと、DeNA社が開発する「MOV」アプリが統合して生まれたタクシーアプリです。そういった経緯からユーザーアプリチームは、JapanTaxi社出身のエンジニアとDeNA社出身のエンジニアがジョインする形で生まれました。
2020年4月というとコロナ禍による最初の緊急事態宣言が発令されたタイミングでもあり、ユーザーアプリチームも基本リモートワークで開発を行っています。そのため実はまだ一度も一堂に会することができていなかったりもします。
そんなユーザーアプリチームが目下取り組んでいるのが、コードの保守性と拡張性の向上です。もともとカメラ、マイク、GPS、通話機能などタクシー配車を実現するためだけでも多機能になる背景がある中、2つのアプリの統合も完遂したことで今後実現したい機能もどんどん増えており、新しいメンバーも迎えている状況において、保守性と拡張性は重要なテーマです。既存コードのリファクタリングは日々行いレガシーコードを減らしていこうとしていますが、同時に新規開発の部分はマルチモジュール化にチャレンジしています。
簡単ではありますが「GO」のモジュール構造を紹介します。
「GO」ではレイヤーごと、機能ごとでモジュールを分けています。特徴的なところは、あえて分割していないandroid-coreとrepositoryというレイヤーでしょう。
repositoryを機能ごとに分けるか分けないかは議論があったのですが、「GO」の場合は分けることによるデメリット(ボイラープレートコードの増加など)に対し、得られるリターンが少ないと判断しました。またandroid-coreは、repositoryでもなく、modelでもない共通のクラスを配置するレイヤーとして用意しました。
規模の大きなアプリを開発しているので、新たな技術を導入する場合は安定性などを特に意識しているのですが、先に挙げたマルチモジュール化のように新機能の開発時には影響範囲を局所的に抑えつつ新技術の取り込みにチャレンジしています。
たとえば「GO Pay」というアプリ内決済の新機能を開発した際は、Androidでハマりがちなカメラ周りの処理に、当時Google I/O 2019で発表されたばかりだったCameraXを活用するなど、守りところは守り、攻めるところは攻めるバランス感覚がとれた技術投資を大事にしています。
今回触れた内容は、詳細を紹介した動画がありますので、ぜひブログからアーカイブもご覧ください!
電波・温度条件が過酷な中、多数の外部デバイスと連携する車載Android端末開発チーム
次に紹介するのは、タクシー車内の車載システム(乗務員端末、後部座席タブレット)を開発している車載Android端末開発チームです。
チームには組み込み系Androidエンジニアだけでなく、一般向けのAndroidスマホアプリ開発から転身したエンジニアも多く在籍しています。
ここで1つ技術的な事例を紹介します。
直接インターネットにつながる乗務員端末(SIMあり)と、つながらない後部座席タブレット(SIMなし)において、WiFi-DirectとVpnServiceを活用して後部座席タブレットをインターネット通信させた事例です。
本来VPN接続するためのVpnServiceを使って、SIMなし端末側で発生する通信をすべて取得し、その内容をWiFi-Direct経由でSIMあり端末に伝送するという構成で実現しました。
ただここで1つ課題が発生しました。VpnServiceは通信パケットの内容すべてを入出力するのに対し、Javaの既存のSocket通信では各通信プロトコルのヘッダーが取り除かれた状態で入出力されるため、この組み合わせではうまく通信させることができませんでした。そこでTCP/IPのプロトコルスタックを扱えるクラスの自前実装を実現しました。
このようにスマホとは異なるフィールドでの開発にカルチャーショックを感じることもありますが、たとえばトンネルに入ったときの電波状況や機器の設置状態など、一般向けのAndroidスマホアプリ開発だとあまり意識しないようなことにも気を配る必要があるため、幅広い技術知識が身につく環境だと思います。
事例の話を読んで「それってテザリングじゃ駄目だったの?」と感じた方は、この事例について詳細を紹介した動画がありますので、ぜひブログからアーカイブもご覧ください!
一般向けのスマホアプリとは一味違う現場特有の制約など、車載システムならではの面白さを感じていただけると思います!
さいごに
交通領域を得意とするMoTでは、今回紹介した「GO」だけではなくさまざまな事業を幅広く展開しており、Androidエンジニアの活躍の場がたくさんあります。
- 移動革命の起点となるタクシーアプリ「GO」
- 「家で味わう贅沢を」フードデリバリー「GO Dine」
- AIを活用して交通事故削減を支援する次世代AIドラレコサービス「DRIVE CHART」
- トラフィックデータ活用基盤を開発する空間情報プロジェクト 等
「移動で人を幸せに。」というミッションの達成に向けて一緒にチャレンジしてくれる仲間を募集していますので、興味関心を持っていただけた方は、ぜひこちらから技術ブログや採用情報をご覧ください。
著者紹介
技術広報チーム
事業部横断でエンジニアが集まり、オンラインイベントの企画やTwitterの中の人をやっています。Androidエンジニアとしては、普段はKotlinでお仕事をしていますが、最近、Flutterをはじめました!
MoTの最新技術情報は公式Twitterアカウント @mot_techtalk で随時発信していきますので、ぜひフォローしてください!