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
Mirrativ-android-efforts
Search
morizooo
April 25, 2019
Programming
1
7.5k
Mirrativ-android-efforts
morizooo
April 25, 2019
Tweet
Share
More Decks by morizooo
See All by morizooo
Flipperを活用した デバッグ効率化について/flipper
morizooo
0
740
Androidアプリをリアーキテクチャした話/Android-rearchitecture
morizooo
1
210
Android上でUnityを動かすためのノウハウ / Android with Unity
morizooo
2
810
消費型課金を導入する / Introduction to consumable In-App Billing
morizooo
0
510
カンファレンスアプリを作ったぞ!! / builderscon tokyo 2017 LT
morizooo
0
3.2k
Other Decks in Programming
See All in Programming
Cloudflare AgentsとAI SDKでAIエージェントを作ってみた
briete
0
140
Server Side Kotlin Meetup vol.16: 内部動作を理解して ハイパフォーマンスなサーバサイド Kotlin アプリケーションを書こう
ternbusty
3
180
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
320
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.7k
Flutterで分数(Fraction)を表示する方法
koukimiura
0
130
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
220
Go言語はstack overflowの夢を見るか?
logica0419
0
230
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
0
1.3k
なぜあの開発者はDevRelに伴走し続けるのか / Why Does That Developer Keep Running Alongside DevRel?
nrslib
3
400
AI Coding Meetup #3 - 導入セッション / ai-coding-meetup-3
izumin5210
0
3.3k
What's new in Spring Modulith?
olivergierke
1
140
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
1k
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How GitHub (no longer) Works
holman
315
140k
How STYLIGHT went responsive
nonsquared
100
5.8k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
The Straight Up "How To Draw Better" Workshop
denniskardys
238
140k
GitHub's CSS Performance
jonrohan
1032
470k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
How to Think Like a Performance Engineer
csswizardry
27
2k
How to train your dragon (web standard)
notwaldorf
96
6.3k
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. ◆体験入社/副業制度あります! 改善が好きな方!!!一緒にやりませんか!!!