Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
REALITY Androidにおけるマルチモジュール移行
Search
haru067
September 11, 2019
Programming
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
REALITY Androidにおけるマルチモジュール移行
https://gree.connpass.com/event/142728/
での5分LT
haru067
September 11, 2019
Transcript
16 slides
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エンジニアを募集しています(たぶん)
More Decks by haru067
See All by haru067
Jetpack Compose: 効果的なComposable関数のAPI設計
haru067
2
8.4k
いかにしてアプリの起動時間を改善するか
haru067
3
2.3k
Immutable data holder
haru067
1
1.4k
ARTのメモリ管理
haru067
8
16k
Other Decks in Programming
See All in Programming
Materialが消えた日 〜真っ白なFlutterキャンバスにRenderObjectで絵を描く〜
umigishiaoi
0
160
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
340
例外からRich Errorsまで Kotlinエラーハンドリングの進化を読み解く
shiita0903
0
160
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
620
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
450
自宅サーバはどこまで再現できるのか - Proxmox VE上のVM環境をIaCとバックアップで戻してみた
youto
0
260
Будущее локальных LLM – Алексей Голобурдин, PythoNN
sobolevn
0
120
Vue.jsで作る空間解析アプリとCapacitorプラグインのData Bridge
hal_spidernight
1
170
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
210
あなたはMCPの機能を、まだ知らない。
4geru
1
140
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
320
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Everyday Curiosity
cassininazir
0
400
The untapped power of vector embeddings
frankvandijk
2
2k
Optimizing for Happiness
mojombo
378
71k
Raft: Consensus for Rubyists
vanstee
143
7.9k
Believing is Seeing
oripsolob
1
280
Designing for humans not robots
tammielis
254
26k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
480
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
450
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
850