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
Android cookpadLiveの開発改善 / cookpad_tech_kitchen#23
Search
star_zero
January 30, 2020
Programming
920
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android cookpadLiveの開発改善 / cookpad_tech_kitchen#23
star_zero
January 30, 2020
More Decks by star_zero
See All by star_zero
今からはじめるAndroidアプリ開発 2024 / DevFest 2024
star_zero
0
1.6k
Jetpack Compose の Side-effect を使いこなす / DroidKaigi 2023
star_zero
5
7.2k
Android 14 新機能 / Android 14 Meetup Nagoya
star_zero
1
690
Android 14 と Predictive back gesture / Shibuya.apk #42
star_zero
0
500
Coroutines Test 入門 / Android Test Night #8
star_zero
2
1.4k
What's new in Jetpack / I/O Extended Japan 2022
star_zero
1
710
Kotlin 2021 Recap / DevFest 2021
star_zero
3
1.4k
Kotlin Symbol Processing (KSP) を使ったコード生成 / DroidKaigi 2021
star_zero
2
5.3k
What's new Android 12
star_zero
0
630
Other Decks in Programming
See All in Programming
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
200
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
Built Our Own Background Agent at LayerX
layerx
PRO
9
5k
PHP に部分適用が来るぞ!……ところで何それ?おいしいの? #phpcon / phpcon-2026
shogogg
0
580
Google Apps Script で Ruby を動かす
kawahara
0
130
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.3k
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
590
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
460
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
420
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
220
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.4k
Featured
See All Featured
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
200
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
260
How to Think Like a Performance Engineer
csswizardry
28
2.7k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
How to make the Groovebox
asonas
2
2.3k
What's in a price? How to price your products and services
michaelherold
247
13k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Transcript
Android cookpadLiveの 開発改善 Cookpad Tech Kitchen #23 2020/01/30
About me •Kenji Abe •2018/07入社 •Android cookpadLive •Google Developers Expert
for Android •Twitter: @STAR_ZERO
話すこと •Android cookpadLiveで改善してきた色々なこと ‣ たくさんあるので一部抜粋して •今後やりたいこと
アーキテクチャの変更
VIPER MVVM
VIPER •View / Interactor / Presenter / Entity / Router
•iOS由来のアーキテクチャ •https://cheesecakelabs.com/blog/ios-project- architecture-using-viper/
View Presenter Interactor Entity Router
VIPERの問題点 •Jetpackとの相性 ‣ これらを活かせないため効率と品質を上げられない ‣ Lifecycleの管理が面倒でクラッシュも起きやすい •コード量が多い ‣ Interfaceによるやりとり ‣
あちこちにViewの更新コード
MVVM •Model / View / ViewModel •Google 推奨のアーキテクチャ •https://developer.android.com/jetpack/docs/guide
Activity / Fragment ViewModel Repository Room(DB) Retrofit(API) AppSync LiveData
MVVMの良いとこ •Jetpackが活用しやすい ‣ 特にViewModel, LiveData, DataBinding便利 ‣ これらを活用することでバグが減らせる ‣ 効率よく開発できる
‣ その他Jetpackライブラリも導入が簡単
Activity / Fragment ViewModel Repository Room(DB) Retrofit(API) AppSync LiveData Jetpack
Jetpack Jetpack
MVVMの良いとこ •Google推奨(デファクトスタンダード) ‣ 知見やサンプルがたくさんある ‣ 新しく来た人が理解しやすい(可能性が高い) ‣ 去っていく人も次に活かせる(可能性が高い)
Modularization
Single Module Multi Module
Single Module •スマートフォンアプリのみ ‣ AndroidTV / FireTVとコードが重複 •ビルドスピードの問題 •依存関係の絡まり
Multi Module •スマートフォンアプリ、AndroidTV、FireTV ‣ APIアクセスなどは共有 •ビルドスピードの改善 •関心事の分離
app 最初のSingleModule時代
core app 共通部分をcoreに分ける
core smarttv app androidtv firetv AndroidTV / FireTVをプロジェクト統合
core smarttv app androidtv firetv appsync AppSyncをcoreから分離
core smarttv appcore app androidtv firetv appsync app専用の共通モジュールを作成
core smarttv appcore app androidtv firetv features appsync 機能単位にモジュールを分ける
core smarttv appcore app androidtv firetv features appsync 機能単位にモジュールを分ける まだ途中
コメント表示改善
改善前 •受信したコメントをそのまま表示 ‣ 描画負荷が高い ‣ 場合によってはクラッシュを引き起こす •RecyclerViewのアニメーション ‣ デフォルトがそのまま ‣
大量のコメントで違和感
改善後 •受信したコメントを少しバッファリングして表示 ‣ ある程度まとめ描画させて、描画負荷を軽減 •RecyclerViewのアニメーションは無効に ‣ 無効にしたほうが自然な感じ
Activity Repository ViewModel AppSync LiveData
Activity Repository ViewModel AppSync LiveData RxJavaのObservableに変換
Activity Repository ViewModel AppSync LiveData ここで数msバッファリング
Activity Repository ViewModel AppSync LiveData LiveDataでコメントActivityへ
コード自動生成
コード自動生成 •現状、サーバー側がRails Garageを使ってる ‣ 欲しいレスポンスをGETパラメータで指定する ‣ 例: /api/episodes?fields=hoge,foo •面倒なので、Retrofitの戻り値から自動生成 ‣
Annotation Processing
/api/episodes?fields=hoge,foo interface APIService { @Garage @GET("/api/episodes") fun getEpisodes(): Single<List<Episode>> }
data class Episode( val hoge: String? val foo: String? ) このアノテーションから自動生成
デバッグツールの活用
デバッグツールの活用 •Hyperion ‣ アプリ実行中にデバッグメニューから色々できる ‣ 設定値をクリアしたり、APIのエンドポイントを切り替え たり ‣ https://github.com/willowtreeapps/Hyperion-Android
None
デバッグツールの活用 •Flipper ‣ デスクトップアプリを使ったデバッグツール ‣ Stethoみたいなもの ‣ ログ、Preferences、Layoutなどの確認 ‣ プラグインを作れる
‣ https://fbflipper.com/
None
デバッグツールの活用 •Flipper ‣ プラグインを作成して、ダミーのLive配信 • OkHttp Interceptorでダミーデータを差し込む ‣ 簡単な見た目の確認すぐできる ‣
ステージングの配信を作る必要がない
None
OkHttp API Server Flipper OkHttp Interceptor レスポンス 書き換え ダミーデータ
今後やりたいこと
今後やりたいこと •Coroutinesの導入 •テストを充実 •リソースの整理 •さらなる効率化
ありがとうございました