Article by: Max Topolsky, Nico Hinderling
これは「man.jpg」です。

なぜか、トヨタの iOS アプリにはこのファイルが含まれており、そのサイズは無視できない 14.6MB でした。都合よく、発覚から数か月後に man.jpg は削除されましたが。
本記事は、man.jpg をアプリに含めるべきだったかどうか、あるいは man.jpg をどれだけ小さくできたか(MB)について論じるものではありません。本記事の主題は、今日から Sentry の Size Analysis を使えば、すべての開発者がアプリサイズの問題を簡単に検出し、修正できるということ(さらに、人気のオープンソースアプリのサイズを 30% 削減する方法 😉)です。
Size Analysis(現在 Early Access)紹介
Size Analysis は、モバイルアプリのサイズを監視し、削減するための機能です。
Sentry が Emerge Tools を買収したことを覚えている方もいるかもしれません。Size Analysis は Emerge の最初の製品であり、Spotify、Square、Tinder などのチームがアプリをできる限り軽量化してリリースするために活用していました。
そして今、Sentry アカウントを持っているすべての開発者が、同じツールを利用できるようになりました。
Size Analysis 使い方
Size Analysis は、React Native や Flutter などのクロスプラットフォームフレームワークを利用している場合も含め、あらゆる iOS / Android アプリで動作します。やることはただ一つ、モバイルのビルドをアップロードするだけです。
CI と連携すれば、変更のたびにアプリサイズを解析し、ビルド間で比較して、サイズ削減の機会を発見できます。
ここでは、オープンソースの Firefox iOS アプリで Size Analysis が何をできるかを見てみましょう。必要なのは、アプリをビルドして Sentry にアップロードすることだけです。以下は v145.0 のビルド解析です。ツリーマップは、アプリのサイズがどこから来ているかを正確に可視化します。

ツリーマップを見ると、本番(prod)に含まれるはずのない test-fixtures ノードがはっきり確認できます。意図しないリソースが本番に紛れ込む事例は想像以上に多く、ツリーマップはビルドに実際に何が入っているかを素早く見渡すための有効な可視化を提供します。

ツリーマップの下には 「Insights」 があり、アプリサイズを削減するための機会を提示してくれます。

- バイナリシンボルの削除:これらのシンボルは、クラッシュレポートのようなスタックトレースをシンボリケートするために使われます。クラッシュレポータに dSYM をアップロードしている場合、本番(prod)ではシンボルは不要です。
提供スクリプトを基にすれば、Firefox のサイズを約 50MB 削減できます。
いずれの場合でも、Size Analysis の Build Comparison が 2 つのビルド間で何が変わったのかを正確に可視化します。以下は、test-fixtures あり/なしのビルド差分です。

CI(継続的インテグレーション)環境で Size Analysis を利用すれば、こうした問題は PR(プルリクエスト)段階で検出され、ユーザーに届く前に防止できます。リグレッションを修正する最も簡単なタイミングは、発生した瞬間に検出すること。そのため、CI チェックが極めて重要なのです。

私たちは、Firefox の 2 つの問題(test-fixtures とデバッグシンボル)について PR を提出しました。結果として、この 2 件の PR により 合計 67MB(全インストールサイズの約 30%) の削減に成功しました。
ユーザーによっては、14.6MB の man.jpg は気にならないかもしれません。67MB でさえも、そう感じない人もいるでしょう。ですが、一部のユーザーにとっては確実に重要です。
たとえば、Wi-Fi に接続していない外出先で頻繁にアプリをダウンロードするユーザーがいる場合、アプリサイズがモバイル通信のダウンロード制限を超えていれば、Uber のようにインストール率が大幅に低下します。また、古いデバイスや通信環境の悪い地域にアプリを配布している場合は、1バイトごとに意味があります。
アプリサイズの肥大化(bloat)は、インストール率やコンバージョンの低下を招き、アンインストールの主な理由にもなり、さらには技術的な副作用を引き起こすこともあります。
明確にしておくと、ここで述べた修正は Firefox チームの問題ではなく、ツールの問題です。Emerge Tools の公式 X(旧 Twitter)を見たことがある方ならわかるように、多くのアプリが同様の課題に直面しています。既存のアプリサイズ計測ツールは限られており、開発者が気づかぬうちにアプリを肥大化させてしまうことは容易なのです。
Size Analysis 始め方
Size Analysis は現在、Sentry ユーザー向けに Early Access で提供中です。今後も継続的に改良していきます。利用を開始するには、次の手順を実施してください。
- Sentry アカウントを用意(無料で作成可能)
- 組織の Early Adopter 設定を有効化
- ビルドのアップロードと CI 連携に関するドキュメントに従って設定
Size Analysis 以外にも、Emerge のプロダクトをすでに 2 つオープンソース化しています。
- Launch Booster:iOS アプリの起動を高速化
- Reaper:実行時解析で未使用コード(デッドコード)を検出
この分野については今後もアップデートを予定しています。Size Analysis に関する最新情報をぜひチェックしてください。
Original Page: Monitor and reduce your mobile app size with Size Analysis (Early Access)
IchizokuはSentryと提携し、日本でSentry製品の導入支援、テクニカルサポート、ベストプラクティスの共有を行なっています。Ichizokuが提供するSentryの日本語サイトについてはこちらをご覧ください。またご導入についての相談はこちらのフォームからお気軽にお問い合わせください。


