最初の開発
最初の製品要件を受け取ったのは 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