Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
REALITY Androidにおけるマルチモジュール移行
Search
haru067
September 11, 2019
Programming
0
1.3k
REALITY Androidにおけるマルチモジュール移行
https://gree.connpass.com/event/142728/
での5分LT
haru067
September 11, 2019
Tweet
Share
More Decks by haru067
See All by haru067
いかにしてアプリの起動時間を改善するか
haru067
3
1.6k
Immutable data holder
haru067
1
1.1k
ARTのメモリ管理
haru067
8
15k
Other Decks in Programming
See All in Programming
Honoとhtmx
yusukebe
6
1.2k
ONE WEDGE_Company_Information
1wedge
0
180
決断するための勇気、そのためのBacklog / Courage to make decisions, Backlog for that.
seike460
PRO
4
1.9k
RubyVM を PHP で実装する 〜Hello World を出力するまで〜
memory1994
PRO
1
490
複雑なドメインを扱うプロダクトの探索フェーズではいつどのようにテストをするのか / How to testing during exploratory phase
boykush
2
150
もうすぐ新年度、Babylon.jsがお勧めな3個の理由
hideg
0
170
孤独のCTOグルメという やや奇抜な企画をやった目的と効果
shoheimitani
3
1k
SwiftUI, Jetpack Composeの導入で変化した「家族アルバム みてね」のアプリ開発体験
hicka04
6
400
どうしてこうなった命名集 ~🔥編~ / OOC 2024 LT
pictiny
4
2.9k
上手な探索的テストとその上達方法について
matsu802
4
660
オブジェクト指向コードレビューの新しいアプローチ
akkie76
3
1.5k
IntelliJ IDEA を知らなかった 自分に教えたい小ネタ集 / IntelliJ IDEA Hints for My Past Self
mackey0225
3
180
Featured
See All Featured
Designing with Data
zakiwarfel
94
4.8k
Building Applications with DynamoDB
mza
88
5.6k
GitHub's CSS Performance
jonrohan
1023
450k
Side Projects
sachag
451
41k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
Building Your Own Lightsaber
phodgson
97
5.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.2k
Embracing the Ebb and Flow
colly
78
4.1k
A Philosophy of Restraint
colly
195
15k
KATA
mclloyd
14
11k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Producing Creativity
orderedlist
PRO
335
39k
Transcript
REALITY Androidにおける マルチモジュール移⾏ 2019/09/11 グリーグループモバイルアプリ勉強会 Vol.1
REALITYのモジュール構成 • appモジュールがとにかくデカい • 配信周りはモジュール化済み app avatar encoder protocol
REALITYのモジュール構成 • appモジュールがとにかくデカい • 配信周りはモジュール化済み app avatar encoder protocol
移⾏戦略 - Push down • appから切り出してモジュール化 • 各モジュールはappに依存しない • 綺麗にやる世界観
app module A module B module C
移⾏戦略 - Push down • appから切り出してモジュール化 • 各モジュールはappに依存しない • 綺麗にやる世界観
app module A module B module C 途中で挫折した
なぜ難しかったのか • appが膨れ上がっているが故に何をするにしても appの実装が必要になる • クラスAを別モジュールにするにはBが必要で、Bに はCが必要で、CはDが・・・(これが無限に続く) app module A
module B module C こういうことはできない
移⾏戦略 - Pull up • appをライブラリとして各モジュールが読み込む形 • appの実装を使えて楽だが、appへの依存が微妙 • appが各モジュールを使いたいケースは逆につらい
「メイン画⾯でmodule Aのデータをプリフェッチ」 app module A module B module C root
結論:どっちもやる https://jeroenmols.com/blog/2019/03/06/modularizationwhy/ app Feature A Feature B Feature C root
Library D Library E Library F 参考:
結論:どっちもやる 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,
結論:どっちもやる 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,
結果
開発速度が低下した • 移⾏時の調査/作業コスト + 移⾏後の開発コスト • 「使いたいクラスが別モジュールにある」 • 流⾏ってるからやればいい、という話ではない、 開発速度と天秤にかけて選択
ProGuardと戦う時間が増えた app単体のときは⼀箇所⼊れておけばOKだったが モジュールを作るたびに追加が必要 • releaseビルドを作るたびにクラッシュして ややしんどかった
不適切な依存が精査される 例:Modelに動画プレイヤーに依存したコードがある 依存を解消するためにDIが捗る • 必要なクラスが参照できない • 本当に必要だったものを考える • コンストラクタで渡す
リソース系が綺麗になった • 何⽤途で使っているのかよくわからない画像 • 数千⾏あるstrings.xml • 肥⼤化するlayoutフォルダ app モジュール毎に管理 drawable
layout values settings drawable layout values login drawable layout values profile drawable layout values
まとめ • 肥⼤化したappモジュールを絶賛分割中 • appとの依存関係は⽤途に合わせて決める • 開発速度的には遅くなる、必要経費とするか否か • コード的には不適切な依存を精査できて嬉しい •
リソース的には肥⼤化しにくい構造になって嬉しい Wright Flyer Live Entertainmentではマルチモジュール化を 推進したいAndroidエンジニアを募集しています(たぶん)