Mirrativ-android-efforts
by
morizooo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Androidアプリの取り組み 2019.04.25 morizooo 突撃隣のアーキテクチャ © 2019 Mirrativ, Inc.
Slide 2
Slide 2 text
●Profile ●morizooo(@morizo_999) ●ミラティブAndroid担当(2018/2〜) ●マイブーム:b-monster
Slide 3
Slide 3 text
Mirrativについて 2.タイトル等設定 3.配信開始 1.起動 Mirrativスマホ1台だけでゲーム実況/ライブ配信を可能にする コミュニケーションサービス
Slide 4
Slide 4 text
サービスコンセプト=友達の家でドラクエやってる感じ ゲームを中心に置いた「コミュニケーション空間」
Slide 5
Slide 5 text
99 ● 5年目アプリの現状 ● 課題 ● 取り組んでいること 今日話すこと
Slide 6
Slide 6 text
目次 99 アプリの現状
Slide 7
Slide 7 text
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 開発環境
Slide 8
Slide 8 text
99 アーキテクチャ Activity/Fragment API Client Response (POJO) CustomView (一部だけ) ● いわゆるM-VC
Slide 9
Slide 9 text
99 ACTIVITY/FRAGMENT Activity/Fragment API Client Response (POJO) CustomView (一部だけ) ● ApiClientを呼び出し結果を Viewに表示 ● プレゼンテーションロジックを持 つ ● View,Controllerの責務を持つ (境目が曖昧)
Slide 10
Slide 10 text
99 CUSTOMVIEW Activity/Fragment API Client Response (POJO) CustomView (一部だけ) ● Viewのコンポーネントとして切 り出された物 ● Viewとしての描画の責務を持 つ
Slide 11
Slide 11 text
99 API CLIENT Activity/Fragment API Client Response (POJO) CustomView (一部だけ) ● サーバーに対して問い合わせ 行いResponseを取得 ● Viewに特化したPOJOを返す
Slide 12
Slide 12 text
99 feature配下に機能単位にパッケージを切ってUIを配置 → 多数の責務を持ったり、複数のパッケージに依存していたりカオス化... パッケージ構造
Slide 13
Slide 13 text
目次 99 課題
Slide 14
Slide 14 text
99 ● どこに処理を書くか悩む ○ パッケージ構造が不明瞭 ○ ViewとControllerがの境目が曖昧 ● 厳密なルールがないのでActivityに処理が集中 ○ 6000行のActivityが存在 責務破綻
Slide 15
Slide 15 text
99 ● マッチョActivityを超える危険なやつら☠☠☠ ○ 最凶のBaseクラス ■ 汎用的に作ろうとしてるせいでたらい回しにされる ■ 1000行のクラスを継承する ○ ロジックを持ったView ○ HelperがViewを持ってる ○ checkHogeというメソッドだが副作用がある 責務破綻
Slide 16
Slide 16 text
99 ● 例:オーブ/ダイヤ問題 ○ 開発当初はダイヤ、リリース前にオーブに変更 ○ クライアント内ではオーブという名前 ○ サーバー/分析ログではダイヤという名前のまま ○ 初見殺し爆誕 → アンチパターンとして認識 ユビキタス言語がぶれる
Slide 17
Slide 17 text
目次 99 取り組み
Slide 18
Slide 18 text
99 O 開発に夢中 KR 2019/4〜に洗い出した辛みを解消し、全platformで理想の状態を 確立する 全社的に開発体験を見直すときが来た ● 週に1日は開発体験向上活動を行う ● 各Platformでそれぞれ行われている
Slide 19
Slide 19 text
99 ● 最凶のActivityを倒す ● Android Architecture Componentsの導入 ● 各層の責務の意識合わせ ● パッケージ構造の整理 ● 不要なライブラリの撲滅 ● Kotlin化する ANDROIDの取り組み内容
Slide 20
Slide 20 text
99 ● 一番でかいやつを倒せられればなんとかなるだろう理論 ● 不要な機能の削除(複雑な仕様を減らす) ○ ユーザー利用状況踏まえて機能を削除 ● Viewに分離 ○ CustomViewで小さなコンポーネントにしていく ● Android Architecture Components の ViewModelの利用 ○ 状態管理を改善する 最凶のACTIVITYを倒す
Slide 21
Slide 21 text
99 ● 公式の設計に役立つライブラリ ● 推奨アーキテクチャとしてMVVMが紹介 されている ANDROID ARCHITECTURE COMPONENTSの導入 https://developer.android.com/jetpack/docs/guide
Slide 22
Slide 22 text
99 ● ViewModel, LiveDataを利用 ○ Activity<->View間の状態管理が楽になる ○ View用のプロパティ置き場として活用(M-VCのまま) ANDROID ARCHITECTURE COMPONENTS
Slide 23
Slide 23 text
99 ANDROID ARCHITECTURE COMPONENTS利用例
Slide 24
Slide 24 text
99 ● Model ○ クライアントに特化したAPIをサーバーで返しているので、 Responseは基本的にそのまま描画するだけ ○ iOS/Android/Webでビジネスロジックが各プラットフォームに 書かれないようにする ○ クライアント上にしか存在しないモデルも勿論あるので、そち らはビジネスロジックを持つ 各層の責務
Slide 25
Slide 25 text
99 ● View ○ Viewは情報を表示するだけ ○ プレゼンテーション/ビジネスロジックを持たない ○ Modelを直接参照してはだめ 各層の責務
Slide 26
Slide 26 text
99 ● Controller ○ Modelを取得(APIリクエスト実行) ○ Viewに描画するデータを設定する ○ Viewのコールバックのハンドリング ○ 一旦Fatにして整理できたら分解する 各層の責務
Slide 27
Slide 27 text
99 天下一パッケージ武道会の結果、機能単位から レイヤー単位にフラットに変える方針に パッケージ構造 機能単位 レイヤー単位 機能+レイヤー ? 将来的には機能毎に multimodule化する想定
Slide 28
Slide 28 text
99 ● Android Annotations ○ 昔は便利だったが今ではフレームワークの進化で不要 ○ 学習コストを掛ける時間がもったいない ○ 既存コードの意図がわからず解読する時間がかかる ○ Staticになってテストし辛い部分もあるので消し去る → コードネーム:チョベリバ(死語) 不要なライブラリの撲滅
Slide 29
Slide 29 text
99 ● Java<->Kotlin間の脳内コンテキストスイッチをなくす ● 親まで辿ってnullチェックするのがしんどい ● 仕様を理解する上で良いタスクになる ○ 副業で依頼しやすい ● Authorが自分になるので圧倒的当事者意識 KOTLIN化
Slide 30
Slide 30 text
99 ● 現状は苦しいアーキテクチャになっている ● GUI/システムアーキテクチャを変更出来る段階ではない ○ 既存のコードを責務を意識して改善する ● 過去のコードに感謝し、スケールできるように改良を続けてい く ● 一緒に改善していく仲間を探しています!!! まとめ
Slide 31
Slide 31 text
積極採用中! © 2019 Mirrativ, Inc. ◆体験入社/副業制度あります! 改善が好きな方!!!一緒にやりませんか!!!