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
クリーンアーキテクチャ脱却と Swift UI導入までの道のり 野瀬田 裕樹
Slide 2
Slide 2 text
Speaker - 野瀬田 裕樹(ノセダ ユウキ) - iOS/Android Engineer - 経歴 - 2013年4月 ローム株式会社入社 - 2015年10月 株式会社ナビタイムジャパン入社 - 2017年12月 ヤフー株式会社入社 - 2019年11月 株式会社ディー・エヌ・エー入社
Slide 3
Slide 3 text
サービス紹介
Slide 4
Slide 4 text
- 保険契約者向けの健康増進サービス - 楽しみながら、健康に。 - 2019年6月に公開 - プロダクトは若いが、 中身は若くない kencom×ほけん
Slide 5
Slide 5 text
- 健康保険組合などのユーザ向けのサービス - アプリ機能的にはほぼ同じ - これをforkして開発 前身:kencom
Slide 6
Slide 6 text
プロダクトの構成
Slide 7
Slide 7 text
全体の構成 Native (iOS/Android) WebView Native BFF WebView BFF マイクロサービス マイクロサービス マイクロサービス マイクロサービス RESTful API internet
Slide 8
Slide 8 text
- 5タブ構成 - ホーム:健康に関する記事の表示 - カラダ:歩数や体重などのデータの管理 - ポイント:ポイントの消費、確認 - お知らせ:サービス側からのお知らせの表示 - メニュー:その他の機能や設定など アプリの構成
Slide 9
Slide 9 text
アプリの構成
Slide 10
Slide 10 text
- アプリ側の主な実装内容 - 画面の状態管理、画面遷移、アニメーションなど - その他はHealthKitとの連携、Push通知など - 複雑なロジックはアプリ内で持っていない アプリの構成
Slide 11
Slide 11 text
- kencomから設計(と技術負債)を引継ぎ - MVP, MVVM, Clean Architectureなどの混在設計 - 問題点 - PresenterやViewModelなどがあり表示ロジックがカオス - 複雑なロジックがない画面での複雑すぎる設計 - kencomとの仕様差分で不要になったコードやリソースの山 開発初期のアーキテクチャ
Slide 12
Slide 12 text
どのように問題を解決したか
Slide 13
Slide 13 text
- 現状把握 - 改善の方針決定 - 改善の実施 問題解決のアプローチ
Slide 14
Slide 14 text
- より良い実装を考える上で必要な観点 - 現状のコードがどうなっているか - アプリがどのように変化するか - 開発の体制はどうなっているか 現状把握
Slide 15
Slide 15 text
- 現状のコード - kencomから引き継いだ技術的な負債 - カオスで複雑な混在設計 - Deployment Targetが不必要に低いまま - 2020年9月時点ではまだiOS10をサポートしていた - (このままではSwift UI導入などは到底できない) 現状把握
Slide 16
Slide 16 text
- 現状のコード - kencom×ほけんアプリの変化 - 主にUI面での追加や修正がほとんど - PresenterやViewModelに相当する領域が肥大化しがち - 必要になったらリリース(不定期なリリースサイクル) 現状把握
Slide 17
Slide 17 text
- 現状のコード - kencom×ほけんアプリの変化 - 開発体制 - 基本的にはほぼ1人での開発体制 - 既に全体を把握している人はいない - 学習コストが高い複雑な設計を引き継ぐ運用はできない 現状把握
Slide 18
Slide 18 text
- プロセスの改善 - 継続的なリリースサイクルの確立 - Deployment Targetの変更ルール確立 - 設計の改善 - 修正が必要な画面ごとに設計と実装を見直し - Cocoa MVCを基本として、画面ごとに最小限の設計に変更 改善の方針
Slide 19
Slide 19 text
- ほしい設計の特性 - Swift UIへ移行しやすいこと - UI関連の改修がしやすいこと - 学習コストが低く、引継ぎやすいこと 今後の変化を見越した設計
Slide 20
Slide 20 text
- 既存の設計 - Clean Architecture - Swift UI移行やUI改善のしやすさにあまり寄与しない - 学習コストも高く、設計意図の引継ぎが難しい - MVVM - 複雑な画面になるとVMが肥大化しがち - VCとVMの責務がそれぞれ曖昧になりがち - Swift UI移行時にVC/VMの見直しが必要になる 今後の変化を見越した設計
Slide 21
Slide 21 text
- 今後の設計 - 単純な画面 - Cocoa MVCを採用 - VCが肥大化しない程度の画面であれば、MVCの方が見通しやすい - 複雑な画面 - StoreパターンやFluxに近い設計を採用 - 画面の状態をState構造体として分離し、Storeに持たせる設計 - Swift UIに移行する際の@Stateに相当するので流用がしやすい 今後の変化を見越した設計
Slide 22
Slide 22 text
実際の設計変更の例 - 体重を入力する画面 - 既存実装:MVVM + Clean Architecture - ViewController:200行以上 - ViewModel:100行以上 × 2 - Use Case/Repositoryは単なるAPIのラップ - UI関連の変更は毎回ViewModelとViewControllerを修正していた - 責務が曖昧でVMとVCを都度しっかり読み込む必要があった
Slide 23
Slide 23 text
実際の設計変更の例 - 体重を入力する画面 - 既存実装:MVVM + Clean Architecture - 新規実装:MVC + Storeパターン - ViewController:ほぼViewとStateのbindのみ - UI変更はViewクラス、描画の状態はStateクラスのように責務がわかれ て修正がしやすくなった - Stateを切り分けることでSwift UIへの移行がしやすくなった
Slide 24
Slide 24 text
Swift UI移行の実装例:UIKit版
Slide 25
Slide 25 text
- このようにStateを切り出すとSwift UI化が容易 Swift UI移行の実装例:Swift UI版
Slide 26
Slide 26 text
Swift UI時代の設計 View Controller (UIKit) View (Swift UI) Store (Observable Object) - MVC+Storeパターンを採用 - VC:ナビゲーション周りをUIKitで実施 - View:描画全般は可能な限りSwift UIで実装 - Store:各Viewに持たせてobserveする構造
Slide 27
Slide 27 text
Swift UI時代の設計の理由 - MVC+Storeパターンを採用 - Swift UIのナビゲーションで多くの罠があった - Viewに画面遷移を任せたくなかった - UIKitと同じ構造で統一できるようにしたかった View Controller (UIKit) View (Swift UI) Store (Observable Object)
Slide 28
Slide 28 text
- プロダクト状況に合わせた改善を継続 - 設計の改善のためには、プロセスを含めた周辺環境 の整備や事前の準備が重要 - Swift UIへの移行の上では、Stateを事前に切り出し ておくと便利 - どうしても流用できない箇所や、Swift UI特有の問題もあるた め、try&errorを続けている まとめ
Slide 29
Slide 29 text
2021/03/03 Wed @Online
Slide 30
Slide 30 text
Monorepo と OneTeam で Microservices の課題に挑む 細分化されすぎたマイクロサービスと呼応して増えるレポジトリ の数、レポジトリ毎に異なる開発スタイル、サーバとインフラ チームのコミュニケーション不足によるオペレーションの分断... これらの課題にkencom×ほけんチームはどのように立ち向 かっていったのか、課題解決の施策を中心にお話します。
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
Follow @DeNAxTech ぜひフォローして下さい
Slide 33
Slide 33 text
ご清聴ありがとうございました