Google Home でクラッシュの最大の原因を 33% 削減

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google Home アプリを使用すると、Google Home デバイス、Google Nest デバイス、Chromecast デバイスはもちろん、照明、カメラ、サーモスタットなど数多くのスマートホーム プロダクトのセットアップ、管理、操作を行えます。

Google Home アプリを支えるエンジニアリング チームは、Kotlin と Android Jetpack ライブラリを使用して、エンジニアリングの生産性とデベロッパーの満足度を高めています。

Google Home の取り組み

Google Home チームは、Kotlin をコードベースに組み込むことで、プログラミングを効率化するとともに、var / val、スマート キャスト、コルーチンなど最新の言語機能を使用できるようにしました。2020 年 6 月現在、コードベースの約 30% が Kotlin で記述されており、新機能についてはすべて Kotlin での開発が推奨されています。

また、Jetpack ライブラリを採用することで、デベロッパーの開発速度向上、ボイラープレート コード管理の必要性の低減、必要なコード量の削減を図りました。Jetpack ライブラリは機能や API の境界が明確なため、コードのテストも容易になりました。

結果

「効率的であることと、少ないコードで多くを実行できることが、Kotlin でスピードアップを実現できる理由です」- Google Home ソフトウェア エンジニア、Jared Burrows

Kotlin に切り替えることで、既存の同等の Java コードに比べ、必要なコードの量を削減できました。データクラスと Percelize プラグインを使用した場合を例に取ると、クラスを作成する際に、Java では 126 行の手動による記述が必要だったのに対し、Kotlin ではわずか 23 行の記述で済みました。実に 80% の削減です。 さらに、等価性と Percelize のメソッドを自動的に生成し、最新の状態に維持できます。ループのネストやフィルタ チェックが多数ある場合も、Kotlin に用意された機能的メソッドを使用すれば簡素化できます。

Kotlin は、言語として null 可能性をサポートしているため、null 可能性アノテーションの使用に一貫性がないためバグが見逃されるといった、Java では陥りがちだった状況を回避できます。Kotlin の実装により、Google Home アプリチームは NullPointerExceptions を 33% 低減できました。これは Google Play Console がクラッシュする最大の原因であるため、その低減によりユーザー エクスペリエンスが大幅に向上しました。

Google Home のような大規模(100 万行を超えるコードが含まれます)で成熟したアプリにとって、段階的に追加していける Jetpack ライブラリは有用です。これを組み込むことで、チームはカスタム ソリューションの集約や置き換え、場合によっては単一のライブラリとの置き換えも可能になりました。Jetpack ライブラリは、エンジニアがベスト プラクティスを遵守し、冗長を避けること(たとえば、RoomConstraintLayout の使用)にも役立つため、読みやすさも向上しました。チームは、新しい Jetpack ライブラリの多くを「なくてはならないもの」と考えています。中でも、ViewModelLiveData は、両方とも Google Home のコードベースに広く使用されています。

Google Home アプリチームは、Jetpack KTX と Kotlin コルーチンの統合が特に有用であることに気づきました。現在、コルーチンとライフサイクル対応コンポーネント(ViewModel など)を関連付けることによって、非同期プログラミングで発生しがちなバグをうまく防いでいます。

スタートガイド

詳しくは、Kotlin で Android アプリを開発するAndroid Jetpack をご覧ください。