Android アーキテクチャ コンポーネントを活用して出会い系アプリの問題点を解決した Tinder

Tinder は世界で最も人気のある出会い系アプリです。Tinder は出会いやデートの方法を変えることで知られており、ユーザーは右にスワイプすることによって他のユーザーと連絡を取ったりチャットをしたりできます。Tinder で 1 日に行われるマッチングは 2,600 万以上にのぼり、2012 年にリリースされて以来、マッチングの総数は 200 億を超えています。

Tinder はユーザーのニーズに基づき、アプリの拡張を早急に行う必要がありましたが、データベースの実装が創業当初のままだったため、拡張の難易度が一層高くなっていました。また、ライフサイクルの複雑さを軽減するために表示の遅いアーキテクチャを使用していましたが、アクティビティに固有のライフサイクル イベントを把握しなければなりませんでした。Tinder には、Cursor オブジェクトのドメイン オブジェクトへのマーシャリング、データベースの移行、クエリの定期的な実行などのタスクを処理するための一貫したフレームワークがなかったのです。

Tinder の取り組み

図 1: Tinder に掲載された写真家の写真

Tinder は、コードをアップグレードするためのソリューションとして Android アーキテクチャ コンポーネントを採用しました。Lifecycle を使用して、View でホスト アクティビティのライフサイクルをモニタリングできるようにしたほか、LifecycleObserver を使用して、分散型のプラグイン アーキテクチャの導入を促進し、PresenterActivityView オブジェクトの肥大化を防止しました。また、Room 永続化ライブラリを使用することで、ローカル データベースの定義、管理、照会を簡単に行えるようになりました。

Tinder の開発チームは、LifecycleObserver とプラグイン アーキテクチャをわずか 2 週間で実装しました。さらに、内部広告 SDK 用の Room をたった 2 日でシームレスに実装しました。

Tinder の Android プラットフォーム責任者である Andy Lawton 氏は次のように述べています。「プラグインやビューの内部でのアクティビティのライフサイクルの管理に膨大な時間を費やす必要がなくなりました。Room の設計は綿密に練られており、永続化レイヤを簡単に実装することができます。内部広告 SDK 用に Room を使用したことで、おそらく、先行開発期間を 1 週間短縮できました」

結果

Tinder は広告 SDK の結果に非常に満足しており、現在、データベース レイヤ全体の Room への移行を進めています。テストは簡単で、Room の登録解除忘れ防止機能によりメモリリークの発生が低減されました。Android アーキテクチャ コンポーネントは、メモリ使用量の削減にも役立っています。

Lawton 氏は次のように述べています。「Android アーキテクチャ コンポーネントは、デベロッパーが直面するあらゆる規模のさまざまな問題点を解決するための処方箋を提供してくれました。Tinder はこれまで、ライフサイクル対応のコンポーネントを使用することで、デベロッパーの生産性、テストのしやすさ、モジュラー性の向上に取り組み、さらに、表示優先のアーキテクチャの導入を促進してきました。現在は、Room への移行により、SQLite を管理するための他のソリューションが不要になり、データベースの管理と照会が設定内で実行されるようになっています」

指標

LifecycleObserver とプラグイン アーキテクチャを使用することで、MainActivity から 500 行以上のコードを削除しました。

スタートガイド

Android アーキテクチャ コンポーネントは Android Jetpack の一部として全デベロッパーに公開されています。Android アーキテクチャ コンポーネントをぜひご利用ください