ホットペッパービューティーアプリリプレイスとMVCP

62 views

Published on

2017/03/16に行われたCAMPFIRE iOS #1の発表資料です。
ホットペッパービューティーのアプリリプレイスで採用した、
iOS向けのMVPであるMVCPモデルについてご紹介します。

Published in: Engineering
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
62
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

ホットペッパービューティーアプリリプレイスとMVCP

  1. 1. ホットペッパービューティー アプリリプレイスとMVCP CAMPFIRE iOS #1 2017/03/16 @nirazo
  2. 2. 誰 • 韮澤 賢三(にらさわ けんぞう) • (株)リクルートライフスタイル ホットペッパービューティー
 iOSアプリ開発担当 • 日本グミ協会CTO (@gummi_life)
  3. 3. 今日話すこと • ホットペッパービューティーアプリリプレイ スの背景と説明 • リプレイスで採用したMVCPの実装方法の説 明 • MVCPを導入してみた結果(良さ)について
  4. 4. 今日話すこと • ホットペッパービューティーアプリリプレイ スの背景と説明 • リプレイスで採用したMVCPの実装方法の説 明 • MVCPを導入してみた結果(良さ)について
  5. 5. アプリリプレイス? • Ver1.0リリースは2010年8月 • 6年半、秘伝のソースコードに継ぎ足し継ぎ足 し… • 仕様が詳細にまとまっていない部分も多々 • かつ複雑な仕様も多々…
  6. 6. 2000行超え、1000行超えVC続出 LOCは20万行弱
  7. 7. 明確な設計指針は無い
  8. 8. リプレイスして未来を照らそう
  9. 9. リプレイスで目指していること (要約) • 今後5年、10年と安全かつ素早くサービスの エンハンスが行えるようにする • そのために明確な設計指針を設け、コード品質 を安定化させる • テスト対象が明確で、テストコードが書ける作 りにする
  10. 10. 本日の話の前提 • 本リプレイスは現在進行中(7~8割程度実装済 み)であり、今回の話も未リリースのプロジェク トについての話です • Obj-C -> Swiftの言語リプレイスも同時にやってい ます
  11. 11. 今日話すこと • ホットペッパービューティーアプリリプレイ スの背景と説明 • リプレイスで採用したMVCPの実装方法の説 明 • MVCPを導入してみた結果(良さ)について
  12. 12. MVCP
  13. 13. MVCP? • iOS版MVP • Model, ViewController, Presenterだから MVCPでは!?という議論(?)の末命名
  14. 14. MVCP? MVP (Passive View)のiOSバージョン
  15. 15. ViewController
  16. 16. ViewControllerの特性 • View, Presenterを所有、管理できる • Presenterからはクロージャ、Notificationによってのみ通知を 受け付ける • ライフサイクル系やAutoLayoutの処理等、必要最低限に留め る(ホットペッパービューティーではSnapKit使用) • テストコードを書く対象になる処理は書かない
  17. 17. ViewControllerの役割 • ライフサイクル系 • Viewの更新 • UIパーツのアクション • アニメーション • 画面遷移 • ダイアログ/アクションシート • Notificationの受け付け
  18. 18. Presenter
  19. 19. Presenterの特性 • 表示用データの取得、加工 • Viewと直接やりとりは行わない(VC経由) • Modelを所有、管理できる • ほぼ1VCに1Presenter • テストコード記述対象
  20. 20. Presenterの役割 • UI入力のチェック • Modelのデータの表示用の加工 • 表示用データの取得・保持 • (Closureをもらって)Viewの更新 • 画面に依存したロジック • 効果計測用ログ送信処理
  21. 21. Model
  22. 22. Modelの特性 • ビジネスロジックを実装するレイヤー • テストコード記述対象
  23. 23. Modelの役割 • ビジネスロジック • 我々のアプリだと、単純にAPIを叩いてcallback実 行、というケースが多い • API追加読み込み制御 • UserDefaults, DBへのアクセス
  24. 24. 実装例
  25. 25. エリア選択画面
  26. 26. ViewController Presenterを保持 メソッドはライフサイクル系に留め、 それ以外のメソッドは極力VCには書かない (UINavigation絡みはVCに書く) 計算等の処理自体はPresenterに任せる
  27. 27. Presenter Modelを保持(複数APIを呼ぶ際は複数可) ModelにAPI叩かせる 表示に関連するenumはPresenterで保持 row数やsection数など、表示に 関連するロジックはPresenter持ち
  28. 28. Model API通信を行う API側でビジネスロジックを持っていない部分については、Model にビジネスロジックを記述
  29. 29. 今日話すこと • ホットペッパービューティーアプリリプレイ スの背景と説明 • リプレイスで採用したMVCPの実装方法の説 明 • MVCPを導入してみた結果(良さ)について
  30. 30. 何故MVCP? • 設計自体の学習コストと得られるメリットの トレードオフ • 検証用アプリを小さく作る中で、少ない学習コ ストで恩恵が受けられそうな見込みがあった
  31. 31. 入れてみて • 導入のハードルが低い! • 新規参画者も理解しやすい • ViewControllerの見通しが良くなる • UnitTest可能範囲が明確 なところ
  32. 32. 入れてみて • 導入のハードルが低い! • 新規参画者も理解しやすい • ViewControllerの見通しが良くなる • UnitTest可能範囲が明確 なところ 想定どおり!!
  33. 33. 入れてみて • MVCと比べると登場人物が増えてしまう… • が、「書くのしんどい!」というレベルでは無 い • 我々のアプリだとModelの役割が少し軽す ぎてただのパイプになっている感あり なところ
  34. 34. 入れてみて • MVCと比べると登場人物が増えてしまう… • が、「書くのしんどい!」というレベルでは無 い • 我々のアプリだとModelの役割が少し軽す ぎて少しもったいない感あり なところ 正直デメリットは そこまで感じなかった
  35. 35. 入れてみての実績 Before (.mファイルのみ) After (実装7割程度) LOC 182612 70722 実装 ファイル数 847 648
  36. 36. まだまだ課題はあるものの、 見通しはかなり良くなってます
  37. 37. 入れてみての実績 • テストコードは絶賛実装中!!
  38. 38. まとめ
  39. 39. MVCPはバランスが取れてて良い • 1x万行レベルのアプリでも、恩恵は十分に得られる • 疎にしてテスト範囲の明確化 • VCの見通しをクリアに • 学習コストが低く、とりあえずで試しやすい • Modelが複雑化してきたらClean ArchitectureやVIPERに比 較的移行しやすい
  40. 40. iOSアプリの設計に 悩んでいる皆さま
  41. 41. まずはライトに、MVCPから 始めてみては?
  42. 42. ~ fin ~

×