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
cookpadTV マルチモジュール化について/Multi modularization in...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Naoya Shibahara
February 18, 2019
6.4k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
cookpadTV マルチモジュール化について/Multi modularization in cookpadTV
Cookpad.apk #2
Naoya Shibahara
February 18, 2019
More Decks by Naoya Shibahara
See All by Naoya Shibahara
WorkManager のすすめ / Recommendation of WorkManager
nshiba
0
1.2k
storeLive をスーパーで 動かし続けるためにやったこと/What we did to keep storeLive running at supermarkets
nshiba
0
720
FireTVことはじめ
nshiba
2
5.2k
Featured
See All Featured
Statistics for Hackers
jakevdp
799
230k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.7k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
750
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How to train your dragon (web standard)
notwaldorf
97
6.7k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
340
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
The Invisible Side of Design
smashingmag
301
52k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
590
Transcript
cookpadTV マルチモジュール化について Cookpad.apk #2 2019-02-18 1
自己紹介 柴原直也 (Twitter: @nshiba310) メディアプロダクト開発部 cookpadTV の SmartTV(FireTV/AndroidTV) 向けアプリを担当 2
話すこと • マルチモジュールとは • なぜマルチモジュール化したかったのか • cookpadTV におけるマルチモジュール化 • まとめ
3
cookpadTV 4
cookpadTV - 有名人や料理家の人たちの料理LIVE配信をみながら、一緒に料理をするLIVE 配信アプリ - Android, iOS, FireTV, AndroidTV でリリースしている
5
なぜマルチモジュール化したのか 6
FireTV の開発を加速させたかったから 7
FireTV 8
FireTV - Amazon から発売している TV 向け端末 - Apple TVなどが類似品 -
現在は第3世代まで出ている - https://www.amazon.co.jp/gp/product/B01ETRGGYI/ - 中身の OS はほぼ Android - 第1, 2世代は Android 5.1 (Lollipop、APIレベル22) - 第3世代は Android 7.1 (Nougat、APIレベル25)
FireTV - FireTV 向けアプリを作るにはだいたい2種類ある - 公式フレームワークの Fire App Builder を使う
- https://developer.amazon.com/ja/docs/fire-app-builder/overview.html - https://github.com/amzn/fire-app-builder - Leanback Library を用いて普通に Android TV 開発 - https://developer.android.com/training/tv/ - https://github.com/googlesamples/androidtv-leanback
FireTV - FireTV 向けアプリを作るにはだいたい2種類ある - 公式フレームワークの Fire App Builder を使う
- https://developer.amazon.com/ja/docs/fire-app-builder/overview.html - https://github.com/amzn/fire-app-builder - Leanback Library を用いて普通に Android TV 開発 - https://developer.android.com/training/tv/ - https://github.com/googlesamples/androidtv-leanback
Fire App Builder - Amazon 公式が配布してる FireTV 向けアプリを簡単につくれるフレームワーク - config
ファイル(json)をいじるだけである程度カスタマイズできる - Fire App Builder 発表資料 12
なぜ FireTV の開発を加速させたかったのか 13
Fire App Builder を用いた開発が 辛かったから 14
[当時] FireTV プロジェクトの課題 • FireTV版 の開発には Fire App Builder というフレームワークを採用していたの
で、完全な別プロジェクト(repository も別)になっていた ◦ アプリ版と全く同じ実装を FireTV で全て再実装が必要 ◦ 例: 認証や通信 ◦ そもそも fire-app-builder が辛い 15
[当時] FireTV プロジェクトの課題 • Fire App Builder が辛い ◦ framework
側でクラッシュすることがまぁまぁあり、そのたびに framework のソースコードを読 み修正するのがつらい ◦ メンテナンスがあまりされなく将来的に不安 ▪ ライブラリのアップデートがされていない ▪ issue を見る感じあんま活発に開発はされてなさそう ◦ config いじるだけである程度カスタマイズできる仕様のため reflection 等を用いている。 そのため、プロジェクトの見通しが悪く、実装箇所も多いので機能拡張するのが大変 16
課題を解決するためにどうしたかったのか - Android版とFireTV版で共通して使えそうな部分を共通化したい - FireTV プロジェクトを Fire App Builder をやめて
Leanback Library で作り直し たい 17
課題を解決するためにどうしたかったのか - Android版とFireTV版で共通して使えそうな部分を共通化したい - FireTV プロジェクトを Fire App Builder をやめて
Leanback Library で作り直し たい → Multi Module 化することで解決できそう 18
過去の構成 :firetv :app 19
過去の構成 • :app ◦ モノリシックプロジェクト ◦ VIPER アーキテクチャ • :firetv
◦ fire-app-builder を採用 ▪ マルチモジュール 20
最初にやったこと - 共通モジュールとして common モジュールを作成 - 必要な物のみ common モジュールに移動 -
認証 - API関連 - Preference - etc 21
最初の構成 :firetv :app 22 :common
どうしてこうしたか - :app と :firetv ではUIが全く違うため、API関連と認証以外はあまり共有してもメ リットが薄かったため - repository 層も共有しようと思えば共有できたが、上記の通り
UIが違うので無理に共有すると repository に実装が引きづられてしまってよくないのでやらなかった 23
その後 - 新しく実装するものは基本的に :common にはいれない - 欲しくなったら :common に移動、という方針 -
大きい機能の単位で共通化できるのものは別 module として新しく分離 - exoplayer - appsync 24
現在の構成 :app :smarttv :core :exoplayer :appsync 25 :androidtv :firetv
現在の構成 :app :smarttv :core :exoplayer :appsync 26 :androidtv :firetv Application
Module Library Module
:common 27
:common の名前が悪い問題 - 開発を進めるにつれて common という名前があまり良くないと感じてきた - 新しく実装するときに、これは他でも使えそうだから common に入れておこう、みたいな雑な気
持ちで新規機能を入れたい気持ちになる - なんとなく気持ち悪い 28
:common -> :core - 名前を :common から :core に変更 -
やっかいな点として module 名を変えると import が爆発する - 置換とかをうまく使って一つ一つ変えていく必要があった - AndroidStudio おまかせだとぜんぜんうまくいかなかった - また他のPRなどがマージされて conflict が発生するとなおすのがとてもつらい - 一度にガッとやる必要がある - 地味に辛い 29
:smarttv 30
現在の構成 :app :smarttv :core :exoplayer :appsync 31 :androidtv :firetv
:smarttv - cookpadTV は AndroidTV でもリリースしている - AndroidTV の話がでたのは repository
統一の構想段階あたりで、FireTV版と 一緒のUIという話だった - そのため、ログとかをDIしたり、 application id を変える等のためにapplication module を分けておいて、実態は :smarttv module に実装という形にした 32
まとめ - 当初の目標の FireTV の開発は加速させることができた - しかしまだ、マルチモジュール化によるビルド高速化などの効果はきちんと把握 できていない / 取り組んでいないので次はその辺もやっていきたい
- 今後は feature 単位くらいでモジュールを分けていけると良いかな、と考えてい る - Dynamic Feature Module は検討中(まだあまり考えてない) 33