LoginSignup
7
1

【Android】マルチモジュール化によるビルド高速化はどれくらい効果があるのか?調べてみた【Refactoring】

Last updated at Posted at 2023-07-10

はじめに

with Androidチームでは、Jetpack Compose化 と、モジュール分割 の二つの大きなリファクタリングを進めており、自分はモジュール分割を主に担当しています。
マルチモジュール構成でアプリを実装することの大きなメリットとしては、「モジュール間の依存制限による、誤った依存の防止」や「ビルド速度の向上」などがよく挙げられますが、効果のほどはわからず進めていました。
ということで、自分のリファクタリングがどんな影響を及ぼしているのかを知るために、モジュール分割によってビルド時間がどれくらい変化しているかを調査してみました。

前提

with-androidは、ざっくり下記のような構成でできています。

.
├── app
├── data
├── domain
├── playground
├── presentation
│   ├── atomicdesign
│   ├── atomicdesigncatalog
│   ├── auth
│   ├── common
│   ├── dialog
│   ├── feature
│   └── presentation
└── shared

今回はこのうち、:presentation:presentationモジュールに存在するファイルを、機能単位でモジュール分割してfeatureに入れていきます。
:presentation:presentationモジュールには、presentationレイヤーで使用するファイルが丸ごと入っていました。機能追加に伴い、リソースファイルやコードが増えていったことで、このモジュールが占めるビルド時間が一番多くなっていたため、モジュール化を通してビルド時間を改善していきたいという意図があります。

また、調査は下記の方法で実施してみます。

  1. モジュール分割前に、:presentation:presentationモジュール配下のファイルAを変更した際のビルド時間を調査する。
    元のビルド時間を調査するのが目的

  2. モジュール化後に、:presentation:presentationモジュール配下のファイルBを変更した際のビルド時間を調査する。
    モジュール分割によって、:presentation:presentationモジュールのサイズが小さくなったことの影響を調査するのが目的

  3. モジュール分割後に、:presentation:feature:hogeモジュール配下のファイルA'を変更した際のビルド時間を調査する。
    モジュール分割によって、:presentation:feature:hogeモジュールに存在するファイルのみが差分ビルドされるようになったことの影響を調査するのが目的

ビルド時間は、Android StudioのBuild Analyzerを使用して調査します。

1.モジュール分割前に、:presentation:presentationモジュール配下のファイルAを変更した際のビルド時間を調査する。

まずは現在のビルド時間を調査します。
結果はこちら。

スクリーンショット 2023-06-26 10.33.34.png

2.モジュール化後に、:presentation:presentationモジュール配下のファイルBを変更した際のビルド時間を調査する。

次に、変更によるサイズ減少の影響を調査します。
結果はこちら。

スクリーンショット 2023-06-26 10.38.27.png

分割前と分割後で比較すると、ほんのちょっとだけ速くなっています。
長い目で見た時や、リソースファイルのサイズが大きい機能をモジュール分割した場合は影響が大きいのかもしれませんが、今回の修正でのビルド時間に対するインパクトは小さいことがわかりました。

3.モジュール分割後に、:presentation:feature:hogeモジュール配下のファイルA'を変更した際のビルド時間を調査する。

最後に、分割による差分ビルドの影響を調査します。
結果はこちら。

スクリーンショット 2023-06-26 10.37.17.png

1→2と比較すると、結構速くなっているのがわかります。
差分ビルドによって、:presentation:presentationモジュールに存在する無関係のファイルがビルドに含まれないことの影響が大きいということがわかりました。

結果

  • モジュール分割をすることで、ビルドするモジュールのサイズが小さくなることの影響は小さい。
  • モジュール分割をすることで、分割されたモジュールのみがビルドされるようになることの影響は大きい。
  • ということは、今後分割したモジュールのみを修正する際は、ビルド速度向上の恩恵を受けることができる。
    • 関係があるファイルを適切にモジュール分けするのも大事

おわりに

今回の調査では1つのファイルしか修正しなかったので、もしかしたら複数ファイルを修正したり、リソースを追加したりすると結果が変わる可能性もあるかなと思っています。
とはいえ、「状況によってはモジュール化リファクタリングをすることでメリットがある」という事実を知ること、実感を得ることができました。
おかげで今後もモチベーション高く進めていくことができそうです。

おわり。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1