cookpadTV マルチモジュール化について/Multi modularization in cookpadTV
by
Naoya Shibahara
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
cookpadTV マルチモジュール化について Cookpad.apk #2 2019-02-18 1
Slide 2
Slide 2 text
自己紹介 柴原直也 (Twitter: @nshiba310) メディアプロダクト開発部 cookpadTV の SmartTV(FireTV/AndroidTV) 向けアプリを担当 2
Slide 3
Slide 3 text
話すこと ● マルチモジュールとは ● なぜマルチモジュール化したかったのか ● cookpadTV におけるマルチモジュール化 ● まとめ 3
Slide 4
Slide 4 text
cookpadTV 4
Slide 5
Slide 5 text
cookpadTV - 有名人や料理家の人たちの料理LIVE配信をみながら、一緒に料理をするLIVE 配信アプリ - Android, iOS, FireTV, AndroidTV でリリースしている 5
Slide 6
Slide 6 text
なぜマルチモジュール化したのか 6
Slide 7
Slide 7 text
FireTV の開発を加速させたかったから 7
Slide 8
Slide 8 text
FireTV 8
Slide 9
Slide 9 text
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)
Slide 10
Slide 10 text
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
Slide 11
Slide 11 text
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
Slide 12
Slide 12 text
Fire App Builder - Amazon 公式が配布してる FireTV 向けアプリを簡単につくれるフレームワーク - config ファイル(json)をいじるだけである程度カスタマイズできる - Fire App Builder 発表資料 12
Slide 13
Slide 13 text
なぜ FireTV の開発を加速させたかったのか 13
Slide 14
Slide 14 text
Fire App Builder を用いた開発が 辛かったから 14
Slide 15
Slide 15 text
[当時] FireTV プロジェクトの課題 ● FireTV版 の開発には Fire App Builder というフレームワークを採用していたの で、完全な別プロジェクト(repository も別)になっていた ○ アプリ版と全く同じ実装を FireTV で全て再実装が必要 ○ 例: 認証や通信 ○ そもそも fire-app-builder が辛い 15
Slide 16
Slide 16 text
[当時] FireTV プロジェクトの課題 ● Fire App Builder が辛い ○ framework 側でクラッシュすることがまぁまぁあり、そのたびに framework のソースコードを読 み修正するのがつらい ○ メンテナンスがあまりされなく将来的に不安 ■ ライブラリのアップデートがされていない ■ issue を見る感じあんま活発に開発はされてなさそう ○ config いじるだけである程度カスタマイズできる仕様のため reflection 等を用いている。 そのため、プロジェクトの見通しが悪く、実装箇所も多いので機能拡張するのが大変 16
Slide 17
Slide 17 text
課題を解決するためにどうしたかったのか - Android版とFireTV版で共通して使えそうな部分を共通化したい - FireTV プロジェクトを Fire App Builder をやめて Leanback Library で作り直し たい 17
Slide 18
Slide 18 text
課題を解決するためにどうしたかったのか - Android版とFireTV版で共通して使えそうな部分を共通化したい - FireTV プロジェクトを Fire App Builder をやめて Leanback Library で作り直し たい → Multi Module 化することで解決できそう 18
Slide 19
Slide 19 text
過去の構成 :firetv :app 19
Slide 20
Slide 20 text
過去の構成 ● :app ○ モノリシックプロジェクト ○ VIPER アーキテクチャ ● :firetv ○ fire-app-builder を採用 ■ マルチモジュール 20
Slide 21
Slide 21 text
最初にやったこと - 共通モジュールとして common モジュールを作成 - 必要な物のみ common モジュールに移動 - 認証 - API関連 - Preference - etc 21
Slide 22
Slide 22 text
最初の構成 :firetv :app 22 :common
Slide 23
Slide 23 text
どうしてこうしたか - :app と :firetv ではUIが全く違うため、API関連と認証以外はあまり共有してもメ リットが薄かったため - repository 層も共有しようと思えば共有できたが、上記の通り UIが違うので無理に共有すると repository に実装が引きづられてしまってよくないのでやらなかった 23
Slide 24
Slide 24 text
その後 - 新しく実装するものは基本的に :common にはいれない - 欲しくなったら :common に移動、という方針 - 大きい機能の単位で共通化できるのものは別 module として新しく分離 - exoplayer - appsync 24
Slide 25
Slide 25 text
現在の構成 :app :smarttv :core :exoplayer :appsync 25 :androidtv :firetv
Slide 26
Slide 26 text
現在の構成 :app :smarttv :core :exoplayer :appsync 26 :androidtv :firetv Application Module Library Module
Slide 27
Slide 27 text
:common 27
Slide 28
Slide 28 text
:common の名前が悪い問題 - 開発を進めるにつれて common という名前があまり良くないと感じてきた - 新しく実装するときに、これは他でも使えそうだから common に入れておこう、みたいな雑な気 持ちで新規機能を入れたい気持ちになる - なんとなく気持ち悪い 28
Slide 29
Slide 29 text
:common -> :core - 名前を :common から :core に変更 - やっかいな点として module 名を変えると import が爆発する - 置換とかをうまく使って一つ一つ変えていく必要があった - AndroidStudio おまかせだとぜんぜんうまくいかなかった - また他のPRなどがマージされて conflict が発生するとなおすのがとてもつらい - 一度にガッとやる必要がある - 地味に辛い 29
Slide 30
Slide 30 text
:smarttv 30
Slide 31
Slide 31 text
現在の構成 :app :smarttv :core :exoplayer :appsync 31 :androidtv :firetv
Slide 32
Slide 32 text
:smarttv - cookpadTV は AndroidTV でもリリースしている - AndroidTV の話がでたのは repository 統一の構想段階あたりで、FireTV版と 一緒のUIという話だった - そのため、ログとかをDIしたり、 application id を変える等のためにapplication module を分けておいて、実態は :smarttv module に実装という形にした 32
Slide 33
Slide 33 text
まとめ - 当初の目標の FireTV の開発は加速させることができた - しかしまだ、マルチモジュール化によるビルド高速化などの効果はきちんと把握 できていない / 取り組んでいないので次はその辺もやっていきたい - 今後は feature 単位くらいでモジュールを分けていけると良いかな、と考えてい る - Dynamic Feature Module は検討中(まだあまり考えてない) 33