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
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
710
FireTVことはじめ
nshiba
2
5.2k
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
600
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
How to Talk to Developers About Accessibility
jct
2
230
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Abbi's Birthday
coloredviolet
2
8.1k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
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