アウトプッツ

おでかけ・子育て・アプリ開発

「Why WhatsApp uses ListView」を視聴したメモ

この記事は「 Android Advent Calendar 2024 」の記事としてお送りします。

(期間後に空いている日付を埋めるスタイル💨)

 

前置き

以前 X を眺めていたら「Why WhatsApp uses ListView」というめちゃめちゃ興味深い発表を発見しました。そして先日、その動画が公開されたようだったので、その内容を軽くまとめてみたいと思います。

 

www.droidcon.com

内容抜粋

前提

  • 登壇者の個人の見解である。
  • 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 への移行が積極的に行われているかと思いますが、ただ良さそうだからと闇雲に移行するのではなく、メリット・デメリットをちゃんと考える必要があるのかなぁと思いました。