Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Mirrativ-android-efforts
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
morizooo
April 25, 2019
Programming
7.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mirrativ-android-efforts
morizooo
April 25, 2019
More Decks by morizooo
See All by morizooo
Flipperを活用した デバッグ効率化について/flipper
morizooo
0
840
Androidアプリをリアーキテクチャした話/Android-rearchitecture
morizooo
1
230
Android上でUnityを動かすためのノウハウ / Android with Unity
morizooo
2
870
消費型課金を導入する / Introduction to consumable In-App Billing
morizooo
0
540
カンファレンスアプリを作ったぞ!! / builderscon tokyo 2017 LT
morizooo
0
3.4k
Other Decks in Programming
See All in Programming
AWSに止められる覚悟してますか?
morizo_1984
2
540
TechTown - Creating Composable Callables in Contemporary C++
rollbear
0
130
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
180
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
sbt 2.0: takeoff
eed3si9n
0
160
最近”作らせてる” ローカルAIアプリの話
akit37
0
470
気持ちぃ〜角丸 Squircle
ryu1013
0
310
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
720
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.7k
JIS keyboard support in Omarchy
lef237
0
120
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
55
8.4k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
WENDY [Excerpt]
tessaabrams
14
40k
Product Roadmaps are Hard
iamctodd
55
13k
How to make the Groovebox
asonas
2
2.5k
Technical Leadership for Architectural Decision Making
baasie
3
600
Large-scale JavaScript Application Architecture
addyosmani
516
110k
The Invisible Side of Design
smashingmag
301
52k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Fireside Chat
paigeccino
43
4.1k
Bash Introduction
62gerente
615
220k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
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. ◆体験入社/副業制度あります! 改善が好きな方!!!一緒にやりませんか!!!