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
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
590
Fireside Chat
paigeccino
42
4k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
620
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
310
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
Done Done
chrislema
186
16k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
240
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