Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Mirrativ-android-efforts
morizooo
April 25, 2019
Programming
1
6.4k
Mirrativ-android-efforts
morizooo
April 25, 2019
Tweet
Share
More Decks by morizooo
See All by morizooo
Flipperを活用した デバッグ効率化について/flipper
morizooo
0
180
Androidアプリをリアーキテクチャした話/Android-rearchitecture
morizooo
1
73
Android上でUnityを動かすためのノウハウ / Android with Unity
morizooo
2
420
消費型課金を導入する / Introduction to consumable In-App Billing
morizooo
0
270
カンファレンスアプリを作ったぞ!! / builderscon tokyo 2017 LT
morizooo
0
2.4k
Other Decks in Programming
See All in Programming
TextPruner による大規模言語モデルの軽量化 / Large language model pruning using TextPruner
misawann
0
280
Jetpack Compose 頑張らないPreviewParameterProvider
horie23
0
110
Hapticをカスタマイズしてみよう / ZOZO Tech Talk #6 Customize Haptic
endoumari
0
350
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
1
370
モデリングの費用対効果
masuda220
PRO
3
860
質とスピード(2022春版、質疑応答用資料付き) / Quality and Speed 2022 Spring Edition
twada
PRO
29
18k
Android入門
hn410
0
310
CIでAndroidUIテストの様子を録画してみた
mkeeda
0
180
近況PHP / PHP in now a days
uzulla
4
1.8k
プログラミングを勉強したいと言われたら
yuba_4
0
420
Update from the Elixir team - 2022
whatyouhide
0
200
Modern Web Apps with Spring Boot, Angular & TypeScript
toedter
12
14k
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
315
19k
Making the Leap to Tech Lead
cromwellryan
113
6.9k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
Mobile First: as difficult as doing things right
swwweet
212
7.5k
Designing for humans not robots
tammielis
241
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_i
21
14k
We Have a Design System, Now What?
morganepeng
35
2.9k
4 Signs Your Business is Dying
shpigford
169
20k
Documentation Writing (for coders)
carmenhchung
48
2.5k
Teambox: Starting and Learning
jrom
121
7.6k
Web development in the modern age
philhawksworth
197
9.3k
Large-scale JavaScript Application Architecture
addyosmani
499
110k
Transcript
Androidアプリの取り組み 2019.04.25 morizooo 突撃隣のアーキテクチャ © 2019 Mirrativ, Inc.
•Profile •morizooo(@morizo_999) •ミラティブAndroid担当(2018/2〜) •マイブーム:b-monster
Mirrativについて 2.タイトル等設定 3.配信開始 1.起動 Mirrativスマホ1台だけでゲーム実況/ライブ配信を可能にする コミュニケーションサービス
サービスコンセプト=友達の家でドラクエやってる感じ ゲームを中心に置いた「コミュニケーション空間」
99 • 5年目アプリの現状 • 課題 • 取り組んでいること 今日話すこと
目次 99 アプリの現状
99 Android Gradle Plugin 3.4.0 targetSdkVersion 28 minSdkVersion 16(5月に21に上げる) support
library version 28.0.3 (AndroidX) 言語: Java 8, Kotlin 1.3.30 主要ライブラリ: Koin, Glide, Retrofit, Gson 開発環境
99 アーキテクチャ Activity/Fragment API Client Response (POJO) CustomView (一部だけ) •
いわゆるM-VC
99 ACTIVITY/FRAGMENT Activity/Fragment API Client Response (POJO) CustomView (一部だけ) •
ApiClientを呼び出し結果を Viewに表示 • プレゼンテーションロジックを持 つ • View,Controllerの責務を持つ (境目が曖昧)
99 CUSTOMVIEW Activity/Fragment API Client Response (POJO) CustomView (一部だけ) •
Viewのコンポーネントとして切 り出された物 • Viewとしての描画の責務を持 つ
99 API CLIENT Activity/Fragment API Client Response (POJO) CustomView (一部だけ)
• サーバーに対して問い合わせ 行いResponseを取得 • Viewに特化したPOJOを返す
99 feature配下に機能単位にパッケージを切ってUIを配置 → 多数の責務を持ったり、複数のパッケージに依存していたりカオス化... パッケージ構造
目次 99 課題
99 • どこに処理を書くか悩む ◦ パッケージ構造が不明瞭 ◦ ViewとControllerがの境目が曖昧 • 厳密なルールがないのでActivityに処理が集中 ◦
6000行のActivityが存在 責務破綻
99 • マッチョActivityを超える危険なやつら☠☠☠ ◦ 最凶のBaseクラス ▪ 汎用的に作ろうとしてるせいでたらい回しにされる ▪ 1000行のクラスを継承する ◦
ロジックを持ったView ◦ HelperがViewを持ってる ◦ checkHogeというメソッドだが副作用がある 責務破綻
99 • 例:オーブ/ダイヤ問題 ◦ 開発当初はダイヤ、リリース前にオーブに変更 ◦ クライアント内ではオーブという名前 ◦ サーバー/分析ログではダイヤという名前のまま ◦
初見殺し爆誕 → アンチパターンとして認識 ユビキタス言語がぶれる
目次 99 取り組み
99 O 開発に夢中 KR 2019/4〜に洗い出した辛みを解消し、全platformで理想の状態を 確立する 全社的に開発体験を見直すときが来た • 週に1日は開発体験向上活動を行う •
各Platformでそれぞれ行われている
99 • 最凶のActivityを倒す • Android Architecture Componentsの導入 • 各層の責務の意識合わせ •
パッケージ構造の整理 • 不要なライブラリの撲滅 • Kotlin化する ANDROIDの取り組み内容
99 • 一番でかいやつを倒せられればなんとかなるだろう理論 • 不要な機能の削除(複雑な仕様を減らす) ◦ ユーザー利用状況踏まえて機能を削除 • Viewに分離 ◦
CustomViewで小さなコンポーネントにしていく • Android Architecture Components の ViewModelの利用 ◦ 状態管理を改善する 最凶のACTIVITYを倒す
99 • 公式の設計に役立つライブラリ • 推奨アーキテクチャとしてMVVMが紹介 されている ANDROID ARCHITECTURE COMPONENTSの導入
https://developer.android.com/jetpack/docs/guide
99 • ViewModel, LiveDataを利用 ◦ Activity<->View間の状態管理が楽になる ◦ View用のプロパティ置き場として活用(M-VCのまま) ANDROID ARCHITECTURE
COMPONENTS
99 ANDROID ARCHITECTURE COMPONENTS利用例
99 • Model ◦ クライアントに特化したAPIをサーバーで返しているので、 Responseは基本的にそのまま描画するだけ ◦ iOS/Android/Webでビジネスロジックが各プラットフォームに 書かれないようにする ◦
クライアント上にしか存在しないモデルも勿論あるので、そち らはビジネスロジックを持つ 各層の責務
99 • View ◦ Viewは情報を表示するだけ ◦ プレゼンテーション/ビジネスロジックを持たない ◦ Modelを直接参照してはだめ 各層の責務
99 • Controller ◦ Modelを取得(APIリクエスト実行) ◦ Viewに描画するデータを設定する ◦ Viewのコールバックのハンドリング ◦
一旦Fatにして整理できたら分解する 各層の責務
99 天下一パッケージ武道会の結果、機能単位から レイヤー単位にフラットに変える方針に パッケージ構造 機能単位 レイヤー単位 機能+レイヤー ? 将来的には機能毎に multimodule化する想定
99 • Android Annotations ◦ 昔は便利だったが今ではフレームワークの進化で不要 ◦ 学習コストを掛ける時間がもったいない ◦ 既存コードの意図がわからず解読する時間がかかる
◦ Staticになってテストし辛い部分もあるので消し去る → コードネーム:チョベリバ(死語) 不要なライブラリの撲滅
99 • Java<->Kotlin間の脳内コンテキストスイッチをなくす • 親まで辿ってnullチェックするのがしんどい • 仕様を理解する上で良いタスクになる ◦ 副業で依頼しやすい •
Authorが自分になるので圧倒的当事者意識 KOTLIN化
99 • 現状は苦しいアーキテクチャになっている • GUI/システムアーキテクチャを変更出来る段階ではない ◦ 既存のコードを責務を意識して改善する • 過去のコードに感謝し、スケールできるように改良を続けてい く
• 一緒に改善していく仲間を探しています!!! まとめ
積極採用中! © 2019 Mirrativ, Inc. ◆体験入社/副業制度あります! 改善が好きな方!!!一緒にやりませんか!!!