2022年10月にオイシックス・ラ・大地にAndroidエンジニアとして入社した ohzonoです。 Androidアプリのビルド速度を25倍(※環境による)にしたのですが、未設定の場合であれば比較的簡単に実現できるため紹介したいと思います。
結論
TechBooster C99の第1章に書かれている内容を実装し、gradle-profiler
で計測するとビルド速度が中央値の比較で25倍になりました。
詳細
雰囲気で乗り切っているひとのためのAndroidビルド高速化ノウハウを参考に
TechBooster C99 第1章(以下TechBooster)にはタイトル通りで、Androidのビルド高速化に関する情報がまとめられています。 弊社のOisixアプリ(Android)ではgradleキャッシュを使っていなかったため gradle.propertiesに1行加えることでビルド速度を改善することができました。 ちなみにその他の効果のありそうなオプションは設定されてました。
# 追加した行 org.gradle.caching=true
体感として早くなったとはいえ本当に早くなるか気になりますよね。 また、どうせやるならX倍早くなった事が分かる証拠に近いものが欲しくなります。その点についてはTechBoosterでも触れられていますが割愛されていた gradle-profilerを使ってみました。
gradle-profilerを使う
私がgradle-profilerを認知したのはDroidKaigi 2022でこまたつさんの「はじめようビルドメトリクス(Youtube)」というセッションを拝聴した時です。 gradleキャッシュを有効にするイシューを起票する時に、紹介されていたgradle-profilerを使って改善結果を可視化すれば説得力があるのでは?と思いセットアップして実行してみました。
gradle-profilerのインストール方法や詳細に関しては下記のURL先をご参照ください。オプションの設定により実行時の最大メモリなどの設定も可能なので実行環境に合わせた細かいパラメーターチューニングの試験も可能です。
https://github.com/gradle/gradle-profiler
今回のgradle-profiler の実行コマンドは下記を用いました。
gradle-profiler --benchmark --project-dir ./ --scenario-file ./gradle/scenarios.txt
./gradle/scenarios.txtの中身は下記の通りです。
clean_build { tasks = [":app:assembleDebug"] cleanup-tasks = ["clean"] }
余談ですが、設定によっては計算コストが大きいので席を外す時の実行がオススメです。
結果
gradleキャッシュを有効化している時としていない時でそれぞれ10回連続のクリーン&ビルドを測定し比較したところおよそ25倍早くなっていました 🎉
25.8... ≒ 378,292.81 ÷ 14,641.66
実際の開発作業時は、ビルドの前に多少なりとも差分が発生します。この時、再ビルドの対象となるモジュールによってはビルド時間はもう少し長くなります。
gradleキャッシュ有効化を体験したAndroidチームメンバーの反応
私も嬉しい 😎
困った時の対処
TechBoosterにも記載ありますが、clean & buildするか.gradle/caches/
以下を消せば概ね解決すると思います。
問題が起こった時は下記の順番で対応しています。経験上だと2までで直るため3は使ったことがないです。
- rebuild
.gradle/caches/build-cache-{N}
の削除.gradle/caches/
以下全ての削除
個人的な感想
弊社は道半ばといえどmulti-module化されているので大きく恩恵を受けることができています。 特にブランチ切り替え時のビルド速度がかなり上がった実感があります。また実感だけじゃなく計測によって可視化する事で提案してからマージされるまでの間のコミュニケーションコストも減らすことができました。
加えて、DroidKaigiに参加してて良かったなとも思います。 また、TechBoosterは何回か読んでいたつもりですが見直したらgradle-profilerが(ちゃんと)紹介されており自分の読解力への示唆も得られました😇
そして、なんと!TechBooster著者のmhidakaさんのご厚意で第1章を無料で読めるようにしていただけました!!
まだご覧になったことがない方はこの機会にぜひ下記からチェックしてみてください! techbooster.booth.pm
最後に
オイシックス・ラ・大地では弊社のDXを推進するメンバーを全方位で募集しています。 2024年9月に向け技術的負債などの課題に経営層の旗振りのもと正面から向き合っていける環境はチャレンジングで楽しいです。 事業やミッションに共感していただける方、エンジニアリングやデザイン、プロダクトマネジメントにおいて腕に覚えのある方と一緒に働けたら嬉しいと思っております。
カジュアル面談もやっております。気になるポジションがある方はぜひ気軽に ohzono (Twitter) までお声がけください。