...
この記事は eBay のテックリード Larry Mckenzie 氏と Corey Sprague 氏による Android Developers - Medium の "Accelerating app development with Flutter " を元に翻訳・加筆したものです。お 2 人が Flutter によるアプリ開発について解説した内容は、Google の Apps, Games, & Insights ポッドキャスト (英語)で聞くことができます。 詳しくは元記事やポッドキャストでご確認ください。
eBay Motors が Flutter を使ってどのように高品質なアプリを作成したのかを学ぶ
ネイティブ アプリの開発にはトラブルがつきものです。移り変わりの激しいユーザーを考慮して 1 年以内といった短期間に開発するとなれば、なおさらです。私たちが eBay Motors アプリを開発した際にも、難しい課題に直面しました。ですが、Google の UI ツールキットである Flutter の力を借りることで、短期間で高品質なアプリを作成し、Android と iOS のユーザーに対して一貫した体験を提供することができました。
eBay Motors アプリの構想 eBay は自動車向けマーケットプレイスを 10 年以上にわたって提供しています。そして2年ほど前、経営陣は eBay で自動車を売買することに特化した専用のアプリを提供することで新たなビジネス機会を掘り起こせると判断しました。
車のオンライン購入は、他商品のオンライン ショッピングとは大きく異なります。特に車は購入額が高いので、その販売プロセスには考慮すべき点があります。eBay の特長は独自の品揃えです。クラシック モデルやレアモデル、改造車などがあり、販売者は自分たちと同じようにその車を気に入ってくれる人を探しています。eBay の購入者や販売者の多くは、他にはない自分だけの車を探しています。そして私たちは、そういったユーザーのために特別なアプリを作りたいと考えました。そこから eBay Motors アプリの構想が生まれたのです。
eBay Motors の対象ユーザー
eBay Motors の対象ユーザーは自動車愛好家です。ただし日常的な趣味といっても、車を買うのは数年に一度あるかどうかです。ですから、定期的に使ってもらえるアプリを作成するという点が課題でした。そこでまずチームとしては、対象ユーザーの購買動機と、他の自動車愛好家とどのように関わりたいのかを理解することを重視しました。
購入者は次の車を探しているのかもしれません。あるいは、単にウィンドウ ショッピングを楽しんだり、インスピレーションを求めていたりするだけかもしれません。車の購入を検討する場合、購入者は自信を持って購入したいものです。内装、外装、エンジン、駆動系など、あらゆる角度から車を確認し、車と販売者の両面を理解したいと考えています。現在の所有者はどのように車を使っているのでしょうか。毎日運転しているのでしょうか。ガレージに入れて磨いているのでしょうか。年に一度しか運転せず、自動車ショーのために買ったのでしょうか。私たちはそういった情報を求めるニーズを満たせるアプリを作りたいと考えました。
車の販売者側から話を聞くと、販売者が非常に気にしているのは売る相手のことであり、必ずしも価格とは限らないことがわかりました。一部の販売者は、自分が望むように車を扱ってくれるなら、価格が下がってもその人に売りたいと話していました。この姿勢は従来の自動車マーケットプレイスとはまったく異なります。従来のマーケットプレイスであれば、販売者は常に車を一番高く買ってもらうことを考えます。
調査を通して、車の売買は、購入者と販売者の関係の終わりと見なされていないことがわかりました。販売者は、車の状態を確認したり、購入者と話を続けたりしたいと考えていました。購入者側も連絡を取り続けたいと考えていました。「こういう変更を加えようと思ったのだけれど、他の変更が行われているようだ。そのことについて教えてもらえないか?」といったことを尋ねるためです。それを受けて、取引だけではなく、コミュニティを形成する機能も含めたいと考えました。
Flutter の選択
eBay Motors のリーダーは、アプリの作成に関して、チームにかなりの自主性を持たせました。ただし 1 つ、決まった要件がありました。それは、1 年以内にアプリをリリースしなければならないということです。調査したところ、車に関する詳しい情報、オークション、メッセージ、検索など、eBay ユーザーが期待するすべての機能をアプリに含めなければならないことは明らかでした。また、熱心なコミュニティを育むための機能もぜひ追加したかったのです。このため、アプリに対する要件が非常に広く、( Android と iOS の)2 つのプラットフォームを担当するチームが個別に作業を進めると、期限に間に合いません。
アプリの開発に新しいアプローチが必要なことは明らかでした。チームは以前にもいくつかのクロスプラットフォーム開発ツールを評価していましたが、その結果は芳しくありませんでした。
しかし、このプロジェクトが始まったころ、Flutter 1.0 がリリースされたのです。Flutter は Google の UI ツールキットで、1 つのコードベースから、モバイル、ウェブ、PC 向けにネイティブにコンパイルされた、魅力的なアプリを作成できます。とても有望に見えたので、チームは詳しい調査を始めました。
Flutter を徹底評価した結果はすばらしいものでした。数週間のうちに、我々のアプリにとって最善の選択は Flutter だと確信しました。
eBay Motors には 2 つの開発チームがあり、作業の進め方、調整の仕方、プログラミングのスタイルが異なっていました。Flutter を採用すると決めたとき、まずは 2 つのチームをまとめる方法を見つけることが重要でした。スケジュールが厳しく、2 つのチームがアプリの開発方法について合意することが不可欠でした。目標は全員同じでした。高品質な製品を作り、すばやく配信して、期待を上回ることです。
両方のチームで打ち合わせを行って相違点を洗い出し、双方が譲り合いながらも、成功に向けて合意できました。どちらのチームにも Flutter や Dart の経験はまったくありませんでしたが、あらかじめ対策を考えていたので、学習は簡単でした。
最初の開発
最初の製品要件を受け取ったのは 2019 年 3 月でした。それから 3 か月以内に購入と販売が行えるベータ版のアプリを制作し、CEO に見せる必要がありました。
この最初の期限にの存在により、スコープを大幅に縮小する必要がありました。Flutter を使ったとしても、すべての問題を同時に解決できないことはわかっていました。購入や販売に関するすべての機能を開発しながら、コミュニティ全体を構築してメッセージを刷新することはできません。すべての機能に同時にとりかかるのではなく、戦略的に優先順位をつけることが重要でした。その上で、どのスコープをカットするかという議論が大きな焦点になりました。それが調査の焦点になり、さらに開発の焦点になりました。細かな変更ごとに次の道が開かれ、最終的に CEO へ見せるマイルストーンに向かうことができました。ユーザーが解決を望んでいる固有の問題を解決することに集中し、全員で問題に対処しました。Flutter を使った開発によるスピードのおかげでこの困難で厄介なプロセスを乗り切ることができ、想定していなかったような形で期限に間に合わせることができました。そのたびに、チームに活力があふれました。
この最初のマイルストーンの後にもたくさんのマイルストーンがやってきましたが、Flutter のおかげで問題を解決し、先に進むことができました。CEO 向けのベータ版から eBay 全体の内部向けベータ版に進み、数千人の eBay 社員にアプリを使ってもらいました。その 1 か月後には、パブリック ベータ版に進みました。その後、2019 年 12 月に iOS 版と Android 版をマーケットプレイスに公開しました。
こういった瞬間の 1 つ 1 つが eBay Motors にとって大きなものでした。チームの自信につながりました。これを通して学んだのは、新たなユーザーに使ってもらい、フィードバックをもらって、修正や調整を行うことの大切さです。目標に向かってアプリを短い周期で繰り返し改善しながら提供することが、製品チームの成功につながりました。アプリのスコープと複雑さは拡大していったにもかかわらず、短期間で提供し続けることができたのは Flutter のおかげです。
最初にスコープを大きく削減していたため、チャットやコミュニティに関する機能は当初ありませんでした。そこで、2020 年 1 月より、あらためてコミュニティ機能の構築を始めました。そしてリリース後の数か月間で、アプリの機能を 50% 追加しました。
Flutter の効果
Flutter を採用した当初、私たちはそれをコードを共有して時間を節約できるエンジニアリング ツールだと考えていました。しかし Flutter は、チームが想定していなかった多くの問題を解決してくれました。場合によっては、その存在すら知らなかった問題を解決してくれたこともありました。
私たちは、プラットフォーム全体でユーザー インターフェースを確実に統一したいと考えました。特定のプラットフォームのデザイン言語に合わせるのではなく、eBay Motors ブランドを重視した体験を提供したかったのです。しかし、スクロール時の動作やナビゲーションの仕組みなど、一部のプラットフォームに依存した動作は維持する必要がありました。ありがたいことに、Flutter では何もしなくてもこういった問題が解決されます。つまり、デザイナーはプラットフォームによらないデザインを 1 つ作るだけでよいので、多くの作業を削減できます。
製品の要件についても、プラットフォーム間の差をなくしたいと考えました。それぞれの要件の実装を 1 つにすることで、オーバーヘッドが徐々に減っていきました。会議も少なくなり、はるかに少ない労力で同じ成果を実現できました。
Flutter の理解が深まるにつれて、コードの共有が大成功だったことが明らかになりました。私たちのコードベースでは、コードの 98.6% が Android と iOS で共有されています。プラットフォーム固有のネイティブ コードは約 0.5% です。残りは CI パイプライン、自動化ツール、デベロッパー サポートのコードです。
コードの共有によって開発の労力は大幅に節約できましたが、テストでも大きな節約を実現しました。Flutter のテスト ストーリーは、これまで扱ったあらゆるプラットフォームの中で、一番使い勝手が良かったのです。このテスト機能は、すばやく作業を進め、自信をもってリリースするために役立っています。当初から 100% コード カバレッジを必須とするポリシーを採用しており、Flutter によってこの目標の達成が容易になりました。
この節約の効果は、アプリを実際にリリースした今も現れています。iOS と Android で別々にバグに対処する必要がないので、サポートがはるかに予測可能になっています。新しいリリースは融通が利く Android ベータ版チャンネルにプッシュできるので、iOS リリースもスムーズに進むという確信が持てます。これほど多くのことを節約できるのは、実質的に 1 つのアプリを開発してサポートすればいいだけだからです。
Flutter を始めるためのヒント
Flutter を始める場合は、モバイルアプリの問題解決方法についての固定観念を捨て去ることが重要です。Flutter で使われているパラダイムは、従来の iOS や Android とはまったく異なるからです。アプリを開発する際に Flutter が求めることを一度理解してしまえば、すべてはスムーズに進みます。そのための最適な方法は、多少の時間をかけて Flutter のコードベースを学ぶことです。
Flutter のすばらしい点の 1 つは、オープンソースであることです。実際に開いてみれば、Flutter チームがすべてのコンポーネントをどのように構築しているかを見ることができます。そこからたくさんの知見を得ることができます。
Flutter コミュニティも非常に活発で好意的です。Flutter フレームワークが提供していないソリューションが必要な場合でも、誰かがそのパッケージを開発しているかもしれません。必要なものを探したり、貢献したり、オープンソース文化を取り入れたりすることを推奨します。
Flutter の今後
eBay Motors で Flutter を使い始めたとき、公然と Flutter を使っていた大企業はほとんどありませんでした。ニッチなツールキットであまり実績がないと考えられていたのかもしれません。今では、Flutter の勢いは大きく広がり、他の大企業にも採用されています。すばらしいのは、Flutter が最先端を行く最適なアプリ開発エクスペリエンスを提供していることです。特に優れているのは常に成長と改善を続けている点です。
Flutter の成長に合わせて、Dart にもたくさんの改善が行われています。null 安全性の追加など、Swift や Kotlin に欠かせない機能を導入するための多くの作業も進んでいます。Flutter が成長し続けており、それに伴って Flutter アプリ開発の可能性が広がっていることを、とても嬉しく思っています。企業の規模を問わず、Flutter が 1 つのコードベースで PC、ウェブ、モバイル向けのアプリを提供できるという認識が広まるにつれて、Flutter の採用もさらに増えていくでしょう。
おわりに
eBay Motors のチームは、全員がネイティブ iOS かネイティブ Android の開発経験者です。その全員が Flutter をとても気に入っているという意見で一致しています。デベロッパー エクスペリエンスが優れており、コーディングを行う上で、ホットリロードによってすぐにフィードバックを得られる価値は計り知れません。また、プロセスがはるかにスムーズに進むため、すばやく問題を解決できます。2 年経った今でも、そのスムーズさへの感動は続いています。チームのメンバーが「Flutter が大好き。新しい技術を見つけた」と話すことも珍しくありません。
私たちのような規模のチームでは、Flutter を選ばなければ eBay Motors アプリを開発できなかったでしょう。2 つのアプリを別々に開発する方式では実現できない形で、リソースを有効活用できています。Flutter はスピードアップを後押しする潤滑油なのです。
詳細はこちら
ご意見をお寄せください Flutter でアプリを開発してみようと思った方は、
#AskPlayDev を使って Twitter でお知らせください。ニュースや Google Play で成功するためのヒントを定期的に共有している
@GooglePlayDev から英語でご返信します。
Reviewed by Hidenori Fujii - Google Play Developer Marketing APAC