この記事は「 Android Advent Calendar 2024 」の記事としてお送りします。
(期間後に空いている日付を埋めるスタイル💨)
前置き
以前 X を眺めていたら「Why WhatsApp uses ListView」というめちゃめちゃ興味深い発表を発見しました。そして先日、その動画が公開されたようだったので、その内容を軽くまとめてみたいと思います。
内容抜粋
前提
- 登壇者の個人の見解である。
- WhatsApp のチャット画面では ListView が使われている。
- 他の画面では RecyclerView が使われたりもする。
WhatsApp のチャット画面の事情
- ListView + CursorAdapter を使った特殊な実装
- 長年の最適化により、大量メッセージを高速に表示できる仕組みが確立している。
- メッセージの種類が多様
- テキスト、画像、音声、地図表示などが混在している。
- すでに長期にわたり安定稼働している
-
WhatsApp は10年以上にわたって ListView ベースの実装を継ぎ足し・最適化している。
-
古い OS や低スペック端末でも軽快に動くよう、多くのバグ回避や調整が積み上げられている。
-
RecyclerView への移行をためらう理由
- 性能向上のメリットが不確定
- ListView でも十分な最適化を行っており、移行による大きなパフォーマンス向上があるとは言えない。
- 改修のリスクが高い
- 10億人以上のユーザーが日常的に使っており、大規模リグレッション(性能劣化やバグ)を避ける必要がある。
- 一部ユーザーへのA/Bテストをするには ListView と RecyclerView の二重実装が必要になり大変。
-
メッセージ表示全体のアーキテクチャを切り替えるとなると、膨大なコード変更と長い検証期間が必要。
- ユーザーメリットが不明瞭
-
移行によりユーザーが実感するような新機能や UX の大幅改善が見込みづらい。
-
代わりにもっと優先度の高い機能開発や改善へリソースを割くほうが価値が高い可能性がある。
-
- セキュリティの問題がない
-
ListView 自体がセキュリティリスクになるわけではないので、切り替える強い動機になりにくい。
-
所感
まさにトレードオフだなぁというのをざっくりと感じました。当然 ListView よりも RecyclerView を使ったほうが高機能でなんとなく良さそうな気がしますが、各種のメリット・デメリットを鑑みて意思決定しているんだなぁという感じ。
これが小規模アプリだったら話は別ですが、WhatsApp という全世界で使われていてユーザー数が10億人以上となると想像できない問題がありそう。そうなれば現状維持がベターだよなぁ。
幸いにしても、よくわからん3rdパーティーのライブラリとかではなく、ListView を使っていたのは良かったのかなと思う。ListView は API レベル 1 からあるはずだし、Android が続く限りなくなりはしないと思いますし。
昨今、Android View から Compose への移行が積極的に行われているかと思いますが、ただ良さそうだからと闇雲に移行するのではなく、メリット・デメリットをちゃんと考える必要があるのかなぁと思いました。