見出し画像

最新技術を活用し、チャレンジし続けよう。タクシーデリバリー専用アプリ『GO Dine』開発秘話

2021年5月9日にリリースされた、タクシーデリバリー専用アプリ『GO Dine』。裏側ではタクシーアプリ『GO』と連携し、銘店の料理を接客クオリティの高いタクシー乗務員が玄関まで配達する、タクシーフードデリバリー全体の活性化を目指しているサービスです。

今回は『GO Dine』の開発に携わったグループマネージャーでサーバサイドを担当した平井(中央下)、フロントエンドを担当した宮部(左上)、SREのカンタン(右上)の3名が登場。『GO Dine』の開発ストーリーや面白さ、今後の展望などを語りました。特に最新の技術を活用した開発にチャレンジしたいエンジニアの方には必見の内容です。

最新の技術「Flutter」を使用して開発した『GO Dine』

ーまず『GO Dine』の技術的な特徴から教えてください。

画像1

平井俊之 フードデリバリーグループのマネージャー。『GO Dine』のサーバサイドを担当している。

平井:最大の特徴としては「Flutter」という最新の技術を使ってアプリ開発している点です。Flutterはすでにいろいろなプロダクトで使われるようになってきましたが、MoTほどの規模で使われている事例は少ないのではないでしょうか。

宮部:Flutterは1つのコードベースで2つ以上のアプリが開発できるクロスプラットフォームとして注目されている技術なのですが、その特性を活かしてエンジニアひとりが2つのアプリを開発するために使われるケースが目立っています。

一方、MoTでは大規模なチームで、アーキテクチャーをイチから考えて開発していきました。Flutterを使って複数名でアプリを開発していくユースケースがほとんどなかったので、我々にとってもチャレンジングだったと思います。

実際にやってみて、複数名でコミュニケーションを取りながらイチから開発することにはすごく意味があると感じましたね。通常iOS、Androidと2チームに分かれてアプリをつくりますが、今回はひとつのコードベースなので機能がモリモリできていく。さらにアーキテクチャーを最初にしっかり定義できたこともあってコードベースも整理され、「この機能はこう実装しましょう」「この機能はここで分けましょう」といったやり取りがとてもしやすいかったです。

ーカンタンさん、SREとしてはいかがでしょう?

画像2

プレシ・カンタン SREグループ所属。SREと兼任で『GO Dine』のバックエンド開発を担当している

カンタン:今回のプロジェクトで一番こだわったのは、将来を考慮したアーキテクチャーにしたことです。リリースのタイミングではあまりメリットは感じられないのですが、先々を考えると「この設計でよかった」と思ってもらえるようにしています。

具体的には、サーバを1つではなく3つ作りました。考え方としてはコアロジックのためのサーバを1つと、注文するユーザーとレストランのためのサーバを1つずつ作り、それぞれのユーザーに対して提供したいサービスを実装していくイメージです。それによって、将来的にたとえば法人のユーザーへサービスを提供したり、複数のタクシー会社と連携して注文することになっても、コアロジックとアーキテクチャーを抜本的に変更しなくてもよくなります。もしサーバが1つだと、特定のユーザに片寄った実装になったり様々な要件が混ざったりしてコアロジックが複雑になるため、変更に工数がかかってしまう。サーバを3つ立てることも工数がかかりますが、将来的にはメリットの方が多いわけです。SREとしては、アーキテクチャーまわりが最も注力したポイントです。

タクシーアプリ『GO』と連携することの面白さと難しさ

ー先を見据えたサービスにしていくという方針はすごくクールだと思うのですが、どなたが発案なのでしょうか?

平井:どうでしょう……? 誰かが旗振り役になったというわけではなく、それぞれが自ずとそういう流れになりましたね。これまでに「実証実験的にプロダクトを作ったつもりが、実証実験フェーズだったものが本番のプロダクトになっていて、溜まっていく負債を返す作業に追われた」みたいな経験をしてきたメンバーもいるので、「『GO Dine』はそうはさせまい」という気持ちが自然と働いたのかもしれません(笑)。

画像3

『GO Dine』の企画・開発に携わるフードデリバリーグループのメンバーとSREグループのカンタン

ー特にこだわったポイントがあったら教えてください。

カンタン:機能の多さではないでしょうか。『GO Dine』にはユーザーがメニューを閲覧・注文するECサイトやデリバリーアプリ的な機能と、実際にタクシーを呼び出す配車システム的な機能を兼ね備えているので、機能面の調整によってバックエンドの実装がなかなか進まなかったこともありましたね(笑)。

平井:中でもタクシーの配車に関しては今でも調整を続けているところです。商品はタクシーが店舗に受け取りに行かなければいけないのですが、もちろん遅くてもいけないし、早く着きすぎてもいけません。ちょうどいい時間に到着するために受け渡し時間から逆算して配車ができるように、チームで設定を調整しているところです。

宮部:乗務員さんも普通に乗客を乗せながら、合間に商品を届けてくれているので、あまりにもタイミングをミスるとタクシー営業の売り上げにも影響が出てしまう。だから、なるべくギリギリを狙いたいんですよね。タクシー乗務員さん、注文したユーザー、そしてレストランと全てに目を向けて考えたところが最大のポイントかもしれませんね。

平井:ただ、エンジニアの視点で言わせてもらうとタクシーアプリ『GO』との連携を加味して設計していくことはすごく面白いんですよね。

カンタン:そう、『GO Dine』用のタクシーが走っているわけではないですからね。『GO』の機能をそのまま使い、タクシーに乗りたい人とデリバリーしてもらいたい人が同じタイミングで配車できるようになっている。つい自前でプロダクトに実装したくなるんですが、すでに存在する機能を横展開した点は面白いポイントだと思います。さらに、やろうと思えば、別の配車方法でも使えるように設計しているので、『GO』と『GO Dine』がそれぞれに依存しすぎない点もよかったのではないでしょうか。

なぜFlutterを取り入れたのか

ー今回Flutterという技術を取り入れたのは、どういう意図があったのでしょうか?

画像4

宮部慎太郎 フードデリバリーグループ所属。主に、『GO Dine』のアプリ開発を担当している。HNは「shinmiy 」

宮部:僕自身がプロジェクトの初期からいたわけではないので明確な答えは言えませんが、新たに企画を立てるにあたりAndroidとiOSのアプリを出すことは決まっていたので、そこから出た話だと思います。結果的にiOSとAndroidのアプリを1つのコードベースで出せて、かつチームとして新しい技術のチャレンジになったので、かなり良い選択だったのではないでしょうか。

ー宮部さん自身は、Flutterの経験はあったんですか?

宮部:ありません。今回初めて触りました。プロジェクト旗揚げのタイミングで「Flutterで新しいアプリをつくるけど、興味ある人いない?」とメンバーを募っていたので、「ぜひ」と。チーム全体だと、経験者と未経験者の割合はちょうど半分ぐらいでしたね。

僕自身もともとAndroidエンジニアなのですが、実際使ってみてあまり抵抗はありませんでした。ゼロからiOSを会得する労力に比べたら比較的スムーズに入れて、かつAndroidもiOSも開発できる点はすごく魅力的。しかもどんどん進化しているので、すっかりお気に入りです。

ーすでにFlutterを扱ったことのある方がMoTにジョインするメリットは何だと思いますか?

宮部:リリース期の混沌としたコードではなく、かなり安定したコードベースの中で開発できる点は魅力的だと思います。とはいえ、サービスとしてまだ立ち上げたばかりなので、実験的なチャレンジなども柔軟にできます。安定性と柔軟性が共存しているので、「Flutterを触っているけど、新しい技術もどんどん取り入れたい」という方は超ウェルカムです。

平井:もちろん、Flutter未経験でも問題ありません。先日異動してきたメンバーはもともとサーバサイドのエンジニアだったのですが「Flutterをやりたい」と手を挙げて、現在はサーバサイドもやりつつ、Flutterにチャレンジしています。エンジニアが手を挙げればチャレンジできる環境なので、やりたい気持ちはぜひぶつけていただきたいですね。

『GO Dine』のエンジニアとして活躍するための条件

ーエンジニア組織としてすごく理想的な風土だと思います。

画像5

平井:ありがとうございます。やはり、エンジニアの「やりたい」という情熱は本人のモチベーションにも、プロダクトの改善にもつながりますからね。ひいては事業や会社にもつながるので。結局やりたいことをやってもらうことが一番なんですよ。

ただ「やりたい」という気持ちだけを優先しすぎて能力が伴わないと、現場の負荷が上がって、チームに悪影響が出てしまう。そうならないよう、チームメンバーにはなるべくコミュニケーションをとって、不安や不満をなるべく取り除くにしています。

ー今はどういう組織体制なのでしょうか?

画像6

平井:具体的な数字は出せませんが、十数名でやっています。開発手法は、ウォーターフォールではなくスクラム。2週間ごとに期間を切って、イテレーションを回し、改善を進めています。

ー『GO Dine』のエンジニアとして活躍するための条件があるとしたら、一体何でしょうか?

平井:僕は3つあると思っています。1つは、周りのメンバーをリスペクトしながら、プロダクトの改善に取り組めること。クライアントやサーバなど、組織や部署の垣根を越えてコミュニケーションを取らなければいけない仕事なので。

2つめは、プロダクトや事業に貢献するためのキャッチアップができること。わかりやすいのがFlutterの技術ですが、プロジェクトマネジメントの能力やユーザー目線などでも構いません。大事なのはプロダクトに対して、もっとよくしていくために自分なりの貢献方法を見つけ、行動することだと思います。

3つめは、自分で業務範囲を狭めずに、幅広くチャレンジできること。まだまだできたばかりのプロダクトなので、スタートアップ的にやることはたくさんあります。

画像7

カンタン:『GO Dine』はFlutterに限らず最新の技術を使っているんですよね。言語だとGolang、サービス間通信だとgRPC、インフラだとDockerやKubernetesなどを使っているので、最新の技術に抵抗がなく、チャレンジしていける方にご入社いただきたいと思います。

平井:もうひとつ。フロントもサーバも共通していえるのは、業界知識やドメインの知識をきちんと学べることは重要です。たとえば普段のやり取りで決済の話やECサイトの話が突然出ることがあるわけです。最低限の業務知識がないとついていけないし、何より楽しくありませんからね。

ー最後に、お三方の目標について教えてください。

平井:タクシーデリバリーという新たな事業を世の中に定着させることが目標です。ただ、自分の住所が現状『GO Dine』のエリア外なので……(笑)。関東近郊から最終的には日本各地で『GO Dine』が使えるようになり、田舎のおばあちゃんの家にギフトが贈れるようになったら嬉しいですね。

宮部:平井さんの言う通りですね。ただ、サービスとしては立ち上げ期で、まだまだ手探りな部分も多いので、新しい技術を試しながら、世の中に広めていきたいです。もう少し技術寄りなことだとFlutter自体が新しい技術で、毎月・毎週レベルで進化しているので、サービスとしてもどんどん追いかけ続けられるようにチャレンジを続けたいと思います。

カンタン:平井さんと宮部さんにだいたい言われてしまったのですが、これからもどんどんサービスは進化していくので、機械学習を使った機能を実装するなど大幅なアップデートも実現したいですね。そのときに「最初のアーキテクチャーがよかったので新機能の実装がしやすい」みたいな話が出たらすごく嬉しいです(笑)。

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!