Mercari Engineering Blog

We're the software engineers behind Mercari. Check out our blog to see the tech that powers our marketplace.

テクノロジーで街なかの ”移動” を変える「メルチャリ」の舞台裏

Mercari Advent Calendar 2018 の9日目はメルチャリチーム Androidエンジニアの @wiroha がお送りします。

メルチャリは2018年2月27日にスタートし、現在福岡市内で展開しているシェアモビリティサービスです。
専用の赤い自転車「メルチャリ」の後部に、スマートロックが搭載されており、メルチャリアプリを通じてお客さまが鍵をあけることで利用できます。
本記事では、ハードとソフト、システムとリアルを融合させる、実は複雑で奥深いメルチャリの裏側をご紹介します!

ハードウェア機能と深く連携するアプリ

メルチャリアプリは、自転車や駐輪ポートの情報を地図上に描画して提供しています。主に使う技術は、iOSではApple Map、AndroidではGoogle Mapsです。

車体についているQRコードをお客さまが読み込むと、アプリからサーバ、サーバから自転車へとリクエストが送信され解錠されます。

f:id:Gateau:20181206224316p:plain

メルカリアプリがインストールしてあればiOSはKeyChain、AndroidはContent Providerを通して、メールアドレスやパスワードの入力が不要なワンタップログインが可能です。このログイン完了率は、メールアドレスログインの2倍以上。非常に高い割合で完了まで進んでおり、使い始めるハードルを下げることができています。

開発言語はiOSはSwift、AndroidはKotlinです。ネイティブコードにより、位置情報、カメラ、Bluetoothといったハードウェア機能と深く連携しています。私は業務でKotlinを書いた経験がなかったため学びながらの実装となりましたが、品質の良いプロダクトを早く作れると感じています。

Google Cloud Platformのフル活用

メルチャリのサーバ・インフラは、Google Cloud Platform(GCP)やFirebaseをフル活用しています!ほんの一部を公開すると、次のような構成です。

GCPを用いることで、次のようなメリットが享受できています。

  • インフラ構築にリソースをかける必要がなく、事業にフォーカスできる
  • 鍵という物理デバイスとの通信も問題なく実現できる
  • 移動に伴う膨大なデータの分析が可能である

バックエンドは、Go言語で実装されたApp Engineを中心に構築しています。スマートロックとの通信はCloud Pub/Subに集約することで、デバイスごとに通信方式が異なったとしても差異を吸収し、バックエンドから扱いやすいような設計にしました。

物理デバイスやアプリケーションから取得した膨大なデータはCloud DatastoreやCloud Strageに保存されます。これらのデータに加え、Firebase Analytics、アプリストアのレポートといったあらゆる情報はBigQueryに集約し、エンジニアのみならずプロデューサーやCSもクエリを書いて分析し、施策検討に役立てています。

インフラ担当がおらず、サーバ担当が1人という小さな組織ですが、GCPのおかげで、開発立ち上げから4ヶ月というごく短期間でのリリースを実現できました。

裏にあるもう1つのサービス

メルチャリは、自転車という「モノ」が存在し、しかも縦横無尽に「移動」するのが特徴的なプロダクトです。これらを最適な状態で提供できるよう、現場の運営クルーと協働してメンテナンスや配備を行います。

f:id:Gateau:20180228121624j:plain

システムから現場までの高密度な連携のためには、様々な要素をリアルタイムに把握し分析、指示する必要があります。

  • どこにどんな状態の自転車があるのか?
  • お客さまのニーズはどこにあり、どう動いているのか?
  • 現場をまわる運営クルーは何をすべきか?

そこで、一般に公開しているアプリとは別にもう1つ、運営クルー限定で利用できるアプリを開発しています。

運営クルーは、大学生からシルバーまで世代も属性もさまざまです。これまでスマートフォンやIoTプロダクトに触れたことのないクルーでも高いパフォーマンスを発揮できるよう、ネイティブとWebViewを組み合わせた実装にし、課題の抽出からアプリのアップデートまでPDCAを高速で回しています。

運営アプリでもQRコード読み込みや位置情報などのネイティブ機能が必要となるため、それらのコンポーネントを、ネイティブコードでフレームワーク化することで、メルチャリアプリと共通化しています。その他の機能はWebViewで実装することで、ネイティブでは配信に時間がかかり即座に改修の反映が出来ない問題を解決しました。

またWebであることでPCからもアクセス可能で、各拠点に常駐するメンバーも同じ画面を閲覧できます。これにより円滑なコミュニケーションを実現し、管理画面を別で開発する工数の削減も図れています。

運営クルーによってメンテナンスや配備が完了すると、運営アプリを通じてGCPの情報が更新 され、メルチャリアプリにお客さまのご利用いただける自転車として反映されます。お客さまが使うアプリだけでなく、裏側にある運営の仕組みも高いユーザビリティを心がけ、高いクオリティとスピードを保ったサービスの提供を目指しています。

未来を創るテクノロジー

次の課題は自転車の需給バランスの最適化、利用予測・行動分析、鍵のトラブルの種類判別などによる、より高効率な運用の実現です。今後は機械学習や量子コンピューティングによる最適化・自動化に取り組んでいきます。

自転車の整備ルート最適化への取組みを少しだけお見せします!はじまったばかりのサービスですが小さなチームで大きな価値提供を目指して挑戦を続けています。

これらの取り組みの結果は、また本Engineering Blogで紹介できればと思います。

メルチャリでは、ハード・ソフト・データ分析などあらゆる技術を駆使し、新しい街のかたちを創るバックエンドエンジニアを募集しています!モビリティや新規サービスの立ち上げに強い関心をお持ちの方、ぜひご応募ください!
mercari.workable.com

明日 10 日目は @tadashi0713 による「Docker × Android エミュレータ で、Appium の自動テストを並列化・爆速にする環境を作ったお話」です。どうぞ引き続きお楽しみください!
 

アプリのダウンロードはこちらから!
wnu6m.app.goo.gl