Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REALITY Androidにおけるマルチモジュール移行

45fec3b965f9269bc8d6d2cf5bd93a13?s=47 haru067
September 11, 2019

REALITY Androidにおけるマルチモジュール移行

45fec3b965f9269bc8d6d2cf5bd93a13?s=128

haru067

September 11, 2019
Tweet

Transcript

  1. REALITY Androidにおける
 マルチモジュール移⾏ 2019/09/11 グリーグループモバイルアプリ勉強会 Vol.1

  2. REALITYのモジュール構成 • appモジュールがとにかくデカい • 配信周りはモジュール化済み app avatar encoder protocol

  3. REALITYのモジュール構成 • appモジュールがとにかくデカい • 配信周りはモジュール化済み app avatar encoder protocol

  4. 移⾏戦略 - Push down • appから切り出してモジュール化 • 各モジュールはappに依存しない • 綺麗にやる世界観

    app module A module B module C
  5. 移⾏戦略 - Push down • appから切り出してモジュール化 • 各モジュールはappに依存しない • 綺麗にやる世界観

    app module A module B module C 途中で挫折した
  6. なぜ難しかったのか • appが膨れ上がっているが故に何をするにしても appの実装が必要になる • クラスAを別モジュールにするにはBが必要で、Bに はCが必要で、CはDが・・・(これが無限に続く) app module A

    module B module C こういうことはできない
  7. 移⾏戦略 - Pull up • appをライブラリとして各モジュールが読み込む形 • appの実装を使えて楽だが、appへの依存が微妙 • appが各モジュールを使いたいケースは逆につらい

    「メイン画⾯でmodule Aのデータをプリフェッチ」 app module A module B module C root
  8. 結論:どっちもやる https://jeroenmols.com/blog/2019/03/06/modularizationwhy/ app Feature A Feature B Feature C root

    Library D Library E Library F 参考:
  9. 結論:どっちもやる https://jeroenmols.com/blog/2019/03/06/modularizationwhy/ app Feature A Feature B Feature C root

    Library D Library E Library F 参考: Libraryモジュール
 独⽴性の⾼い機能は
 appの下に置く
 例:UI components, 
   Analytics,
  10. 結論:どっちもやる https://jeroenmols.com/blog/2019/03/06/modularizationwhy/ app Feature A Feature B Feature C root

    Library D Library E Library F 参考: Featureモジュール
 それ以外は画⾯単位で
 appの上に置く
 例:Login, Settings, Profile,
  11. 結果

  12. 開発速度が低下した • 移⾏時の調査/作業コスト + 移⾏後の開発コスト • 「使いたいクラスが別モジュールにある」 • 流⾏ってるからやればいい、という話ではない、
 開発速度と天秤にかけて選択

  13. ProGuardと戦う時間が増えた 
 app単体のときは⼀箇所⼊れておけばOKだったが 
 
 モジュールを作るたびに追加が必要 • releaseビルドを作るたびにクラッシュして
 ややしんどかった

  14. 不適切な依存が精査される 例:Modelに動画プレイヤーに依存したコードがある
 依存を解消するためにDIが捗る • 必要なクラスが参照できない • 本当に必要だったものを考える • コンストラクタで渡す

  15. リソース系が綺麗になった • 何⽤途で使っているのかよくわからない画像 • 数千⾏あるstrings.xml • 肥⼤化するlayoutフォルダ app モジュール毎に管理 drawable

    layout values settings drawable layout values login drawable layout values profile drawable layout values
  16. まとめ • 肥⼤化したappモジュールを絶賛分割中 • appとの依存関係は⽤途に合わせて決める • 開発速度的には遅くなる、必要経費とするか否か • コード的には不適切な依存を精査できて嬉しい •

    リソース的には肥⼤化しにくい構造になって嬉しい Wright Flyer Live Entertainmentではマルチモジュール化を
 推進したいAndroidエンジニアを募集しています(たぶん)