VIPER アーキテクチャ 
による iOS アプリの設計 
Copyright © Classmethod, Inc. 
Classmethod Inc 
安達勇一 
1
Copyright © Classmethod, Inc. 
自己紹介 
• iPhone アプリ・サービス事業部 
• iOS 開発歴 2.5 年 
• 最近は Swift で開発をしています 
2
Copyright © Classmethod, Inc. 
9月上旬… 
3 
F.T氏 
私 
北海道勉強会やるんだけど、なんか話さない? 
お題は未定ね 
そうすね…Swift かなんかで話しましょうか… 
F.T氏 
Swift勉強会…いいよね…
月日は流れ… 
Copyright © Classmethod, Inc. 4
Swift勉強会改め、スマホアプリの設計的な話にしようかと思う 
んだけど、どう? 
Copyright © Classmethod, Inc. 
9月下旬… 
5 
F.T氏 
私 
設計の話すかwwwwwwwwww 
_人人人人人人人人人_ 
> 突然の仕様変更 < 
‾Y^Y^Y^Y^Y^Y^Y^Y‾
Copyright © Classmethod, Inc. 
 
6 
 ios mobile archtecture
Copyright © Classmethod, Inc. 
 
7 
 ios mobile archtecture
 
Copyright © Classmethod, Inc. 8
VIPERアーキテクチャ 
• View Interactor Presenter Entity Routing 
Copyright © Classmethod, Inc. 
9
Copyright © Classmethod, Inc. 10
その前に… 
Copyright © Classmethod, Inc. 11
MVCアーキテクチャ 
• ModelとViewとControllerにコードを分割 
• Model: ロジック 
• View: 表示 
• Controller: Modelを制御 
Copyright © Classmethod, Inc. 
12 
Controller 
View 
Model 
Event
MVP on iOS Application 
• Model View Presenter 
• ViewはModelを直接操作しない 
• Model : ロジック 
• Presenter : UIViewController 
• View : UIView 
Copyright © Classmethod, Inc. 
13 
View 
Presenter 
Model
Massive ViewController 
• ModelとViewに置けなかったロジックは 
ViewController(Presenter)へ 
• 扱うViewの量に合わせて         
コード量が増える 
• Mediatorとしては正解だが… 
Copyright © Classmethod, Inc. 
14
Massive ViewController 
• ModelとViewに置けなかったロジックは 
ViewController(Presenter)へ 
• 扱うViewの量に合わせて         
コード量が増える 
• Mediatorとしては正解だが… 
Copyright © Classmethod, Inc. 
15
MVCで考えることの不満点 
• Modelに様々な役割があるのにひとまとめ 
にしてしまう 
• Massive ViewControllerになりやすい 
• テスト可能なModelへの移行に役割を与え 
たい 
Copyright © Classmethod, Inc. 
16
Copyright © Classmethod, Inc. 
Before VIPER 
View 
Controller 
Model 
17
Controller(Over 1000lines!!) 
Copyright © Classmethod, Inc. 
Before VIPER 
View 
Model 
18
VIPER 再び 
Copyright © Classmethod, Inc. 19
VIPERアーキテクチャ 
View Interactor Presenter Entity Routing 
• フレームワークに依存しない 
• DB, APIに依存しない 
• UIに依存しない 
• テストしやすい 
Copyright © Classmethod, Inc. 
20
VIPERアーキテクチャ 
DataStore 
Interactor 
Entity 
Copyright © Classmethod, Inc. 
• コアの静的モデル 
• 内部ビジネスロジック 
• 外界とビジネスロジッ 
クの仲介 
• 外界 
21 
DB 
API 
View 
OSS 
Presenter 
Routing
Copyright © Classmethod, Inc. 22 
View 
Presenter 
Routing 
Interactor 
Entity 
DataStore
Copyright © Classmethod, Inc. 23 
View 
Presenter 
Routing 
Interactor 
Entity 
DataStore 
Protocolによって疎結合に、互いに知らない状態にする
依存性を注入 
DB,WebAPIを 
仲介 
UIView, UIViewController 
Copyright © Classmethod, Inc. 24 
UIロジック 
Businessロジック 
静的データ
Copyright © Classmethod, Inc. 
Interactor 
• 単一のユースケースを動的なモデルで表現 
• ビジネスロジック部 
• UIに全く依存しない 
• テストしやすい 
25
Copyright © Classmethod, Inc. 
Entity 
• Presenter以降のレイヤに直接渡されない 
• 静的なモデル 
• VIPERでは動的でない 
26
Copyright © Classmethod, Inc. 
Presenter 
• InteractorからのデータをView向けに送る 
• Viewからのインプットを受ける 
• Viewを直接知らない 
• Viewロジックに対する          
テストを書ける 
27
Copyright © Classmethod, Inc. 
View 
• View, ViewController等 
• 主体的にPresenterにデータを要求しない 
• Presenterからの指示          
待ち 
28
Copyright © Classmethod, Inc. 
Routing 
• UIWindowのインスタンスを保有 
• WindowにViewController(VC)を注入 
• VCにPresenterを注入 
• VCの遷移表示も管理 
29
Copyright © Classmethod, Inc. 
Before VIPER 
View 
Controller 
Model 
30
After VIPER 
Copyright © Classmethod, Inc. 31 
View 
Presenter 
Routing 
Interactor 
Entity 
DataStore
After VIPER 
Copyright © Classmethod, Inc. 32 
View 
Presenter 
Routing 
Interactor 
Entity 
DataStore
Copyright © Classmethod, Inc. 33
参考資料 
objc-io 13 
http://www.objc.io/issue-13/viper.html 
Clean Architecture 
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean- 
architecture.html 
Forked Sample Code 
https://github.com/UsrNameu1/VIPER-SWIFT 
Copyright © Classmethod, Inc. 34
VIPER アーキテクチャによる iOS アプリの設計

VIPER アーキテクチャによる iOS アプリの設計