事例紹介

Monzo がシンプルな R8 アップデートでパフォーマンス指標を最大 35% 向上

所要時間: 2 分

Monzo は、1,500 万人の顧客を抱え、成長を続ける英国のデジタルバンクです。アプリの規模が拡大するにつれて、エンジニアリング チームはアプリの起動時間を改善すべき重要な領域として特定しましたが、コードベースに大幅な変更が必要になることを懸念していました。

Monzo は R8 の最適化を完全に有効にすることで、アプリケーション応答なし(ANR)の発生率を 35% 大幅に削減しました。このシンプルな変更により、効果的な最適化には必ずしも複雑なエンジニアリング作業が必要ないことが証明されました。

R8 のフルモードで広範なパフォーマンスの向上を実現

Monzo は、R8 のフルモードが試してみる価値のある簡単な修正であると判断しました。その結果、パフォーマンスが全体的に向上しました。

  • 起動の信頼性: コールド スタートが 30%、ウォーム スタートが 24%、ホット スタートが 14% 改善されました。
  • 起動速度: P50 の起動時間が 11%、P90 の起動時間が 12% 改善されました。
  • 効率: アプリの全体的なサイズが 9% 削減されました。
  • 安定性: ANR が 35% 削減されました。
AANDDM_Monzo_Quote-1.png
large_AANDDM_Monzo_Quote-2.png

1 回の変更で最適化を有効にする

多くの Android アプリでは、R8 オプティマイザのほとんどの機能を無効にする古いデフォルトの構成ファイルが使用されています。Monzo がこれらのパフォーマンスの改善を実現するために行った主な変更は、proguard-android.txt デフォルト ファイルを proguard-android-optimize.txt に置き換えたことです。この変更により、-dontoptimize 命令が削除され、R8 が適切に動作できるようになりました。

buildTypes {
  release {
    isMinifyEnabled = true
    isShrinkResources = true
    proguardFiles(
      getDefaultProguardFile("proguard-android-optimize.txt"),
    )
  }
}

この変更を行った後は、Keep 構成ファイルを確認することをおすすめします。これらのファイルは、コードのどの部分をそのままにするかを R8 に指示します(通常、動的に呼び出されるか、外部ライブラリによって呼び出されるため)。不要な Keep ルールを整理すると、R8 でより多くの処理を行うことができます。

ベースライン プロファイルでスクロール パフォーマンスを改善する

ユーザー エクスペリエンスをさらに向上させるため、Monzo は ベースライン プロファイルを実装し、メインフィードのスクロールとレンダリングのパフォーマンスを特に重視しました。この戦略により、最も一般的なユーザー ジャーニー(アプリを開いてフィードをスクロールする)が完全に最適化されました。レンダリングへの影響は大きく、P90 のスクロール パフォーマンスが 71% 高速化し、P95 のスクロール パフォーマンスが 87% 向上しました。アプリのスクロールが以前よりもスムーズになりました。

Monzo は、これらの改善を長期的に維持するために、リリース プロセスに組み込みました。「ベースライン プロファイルの生成は、毎営業日(夜間ビルドを実行する前)にトリガーし、完了したら最新の変更をコミットします」と Neumayer 氏は説明しています。

最新の Android 開発に対応する

Monzo の事例は、Android ビルドツールの推奨事項を常に最新の状態に保つことで実現できることを示しています。従来のアプリでは複雑なリフレクションの使用に苦労することがよくありますが、Monzo は Keep ルールを適切に文書化することで、移行を簡単に行うことができました。「Keep ルールが設定されている理由を常にコメントで説明しているので、ルールを安全に削除できるタイミングを把握できます」と Neumayer 氏は述べています。

他のチームへの Neumayer 氏のアドバイスは次のとおりです。現在の標準に照らしてプラクティスを定期的に確認する。「Google からのアプリのパフォーマンスに関する最新の推奨事項を確認し、最新のアドバイスをすべて実施しているかどうかを確認してください。」

R8 の使用を開始して詳細を確認するには、https://d.android.com/r8 をご覧ください。

執筆者:
続きを見る