Eight事業部でEight Android版の開発を担当している山本です。 2月7日〜8日に開催されたDroidKaigi2019に「multi-module Androidアプリケーション」というタイトルで登壇させていただきました。
スライドはこちら。
当日の発表動画はこちらです。
DroidKaigi 2019 - multi-module Android アプリケーション / Jumpei Yamamoto [JA]
マルチモジュール化に取り組んだ理由
Eight Andorid版では去年の夏からアプリのリニューアルに取り組んでいますが、アーキテクチャ上の大きなテーマがマルチモジュール化でした。この背景にはEightの国際展開があります。今、Eightではインドを主なターゲットとして国際的にサービスを展開することを目指しています。インドは日本と比べてネット環境がよいとは言えず、アプリのダウンロードサイズの削減は重要な課題となっていました。また、海外のアプリ開発者の開発環境としても低スペックのPCで頑張っている人たちも多く、ビルド速度の改善についても課題があると感じていました。
インドのアプリ事情についてはこのスライドが詳しいです。
アプリのダウンロードサイズの削減についてはAppBundleの適用や画像のバイナリサイズの削減などで効果が見えていましたが、より効果的にダウンロードサイズを削減するためには、国際版のアプリでは適切にソースコードを切り替えられる必要があります。また将来的にDynamic Feature Moduleの導入を考えたときに、当時のモノリシックなモジュールからマルチモジュールを見据えたアプリの構造の変更が必要だと判断し、マルチモジュール化に踏み切りました。
ビルドの高速化について
ビルド速度の向上も見込んだマルチモジュール化ですが、いざやってみるとそれほどビルドは速くならない、ともすると以前より遅くなったようにも感じることも多くありました。そこでこの登壇を機に本格的にビルドの高速化について調べました。
マルチモジュールでのビルドの高速化について具体的に説明しているドキュメントは少なかったのですが、参考になったものをふたつ紹介します。
ひとつは、 Google I/Oでの「Google I/O 2017 speeding up your build」というセッション。
Speeding Up Your Android Gradle Builds (Google I/O '17)
もうひとつは、「How modularization can speed up your Android app’s built time」というブログ記事でした。
特に、「How modularization can speed up your Android app’s built time」に関しては非常に参考になる内容だったのですが、Android Studio 3.0以前の記事だったので、こちらの内容を参考にさせていただいて、自分でビルド高速化の実験を行いました。実験に使ったソースコードはこちらで公開しています。
感想など
おかげさまでセッションには立ち見が出るほどの方々に見ていただき、良い反応をもらうことができました。
#DroidKaigi #room2 「multi-module Androidアプリケーション」個人的には感動すら覚える素晴らしい発表でした。
— tak-wisteria (@TakWisteria) 2019年2月8日
高速化のためのモジュール分割の話(検証を含む)と、設計によるモジュール分割の話で、構成もうまくまとまっているし、内容にもすごく納得感あった。こういうトークができるようになりたいな 🙂 #DroidKaigi #room2
— ひろん (@hironytic) 2019年2月8日
マルチモジュールの話はAndroidに限らず設計の上でだいぶ役立ちそうなのでうまく取り入れていきたい。#Droidkaigi #room2
— ふーみん (@fuuuuumin65) 2019年2月8日
マルチモジュール気になってたので聞けてよかった。
— ginyolith@Android (@ginyolith_tech) 2019年2月8日
実プロダクトの例から、レガシープロジェクトからの移行に対してのコスパを考えた解を提示してくれたのが、これからマルチモジュール化を考えている人の事も考えた素晴らしい構成だったと感じた。#DroidKaigi #room2
マルチモジュールについてだいぶ理解できた
— KiKUCHi (@SiM__km777) 2019年2月8日
めっちゃくちゃわかりやすかったからチームに共有しておこう#droidkaigi #room2
セッション後にはオフィスアワーにたくさんの人に来ていただいて、自分としても勉強になるディスカッションができたのが良かったです。 また、セッション後には、以下のようによいフィードバックをいただくことができました。
セッションはどうでしたか?(総合評価):5 1: まったく楽しめなかった 5: 非常に楽しめた セッションはあなたの仕事やプロジェクトに関連がありましたか?:5 1: 関連が薄い 5: 非常に関連する セッションの説明を読んで期待した通りの内容でしたか?:5 1: 期待とは異なる 5: 期待を超える セッションの難易度はいかがでしたか?:4 1: 難しかった 5: 分かりやすかった 技術的な知見は得られたでしょうか?:5 1: 得られなかった 5: とても得られた 他にコメントがあれば教えてください(フリーテキスト) 今日からマルチモジュールだ! 様々な知見が得られたいいセッションでした。
自分のセッションが皆さんのお役に立てたようで非常に嬉しいです。
最後に
自分としては、2度目のDroidKaigiの登壇でしたが、スタッフの皆さんのお陰で、楽しい時間を過ごすことができました。どうもありがとうございました!