Instagram Direct × Jetpack Compose

Instagram Direct と Jetpack Compose
画像:Google(Android Developers Blog)

スポンサーリンク

グーグルは9月30日、Android Developers Blog で、Meta が Instagram のメッセージ機能「Instagram Direct」の Android 版 UI を Jetpack Compose へ移行した事例を紹介しました。Meta のエンジニアとグーグルのデベロッパー リレーション担当が共同で執筆した記事で、単なる UI の書き換えではなく「AI のコーディング エージェントが扱いやすいコードベース」を目指して設計し直した点が特徴です。

■ 移行の成果

  • 移行した画面の UI コード量は約50%に減少
  • 書いたコードの量あたりで、エンジニアとエージェントのやり取りが32%減、エージェントの実行時間が35%短縮
  • エージェント 1セッションあたりのトークンコストは、View ベースと比べて33%減少
  • リスクの高いファイルほどエージェントの効率は落ちるが、その低下幅は View の30%に対して Compose は9%にとどまった

■ 設計の考え方

Instagram Direct は1つの UI 部品が160通り以上の状態を取り、会話画面だけで200種類以上のメッセージを扱う大規模な画面です。既存の View の中に Compose を埋め込む方法は移行途中の手段としては有効ですが、命令型と宣言型のコードが混在すると AI が両者を誤って組み合わせ、見つけにくいバグを生みやすいと指摘しています。そこでリスト項目の Compose コードをクラスのメンバーや状態に触れられない形にまとめ、AI が「楽な道」を選んでも正しいコードになるよう、アーキテクチャ自体で境界を守る設計にしたと説明しています。

■ パフォーマンス面の取り組み

  • RecyclerView ベースの構造を LazyColumn に置き換え、A/B テストで両者を切り替えながら検証
  • Compose 1.10 で標準になった Pausable composition と、Compose 1.9 で追加された LazyLayoutCacheWindow を組み合わせ、スクロール時の大きなフレーム落ちを素の Compose 比で約13%削減
  • Compose 1.9.0 で追加された onVisibilityChanged を、表示されたかどうかを記録する仕組みに採用
  • Baseline Profiles で起動直後の描画を高速化

いくつかの API は、両社が Instagram の要件に合わせて共同で開発し、Compose 本体に取り込まれたものだとしています。

■ 所感

Compose 移行のメリットを「AI エージェントとの相性」という切り口で数値化した、いまらしい事例です。コード量の削減は AI を使わない開発でも効いてくる部分なので、View の資産が大きく移行に踏み切れていないチームにとっても参考になる内容です。LazyLayoutCacheWindow の設定例も載っているので、スクロール性能に悩んでいる開発者は一度目を通しておくとよさそうです。

■ ソース

スポンサーリンク