SlideShare a Scribd company logo
VIPERアーキテクチャの
Routingに関してTIPS
potatotips #43 (iOS Tipis)
ヤマグチケイスケ
自己紹介
• 名前:ヤマグチケイスケ
• Github: ykeisuke
• Qiita: YKEI_mrn
• MAIL: yamagutikeisuke@gmail.com
• 職業:フリーランス
– 出来る事
• Angular2, Android, iOS, CakePHP2and3, Symfony2
– 最近は、
• iOSアプリで出向したり、受託したAngular2案件
やったり
– 以前、Potatotipsで発表させてもらったときは
Androidで発表しました!
閑話休題
質問: VIPER使ってる人いますか?
もくじ
1. VIPERに関してざっくりと説明
1. 構成
2. VIPERのそれぞれの役割
2. Routingに関して
3. Routingを実装するときのTIPS
4. まとめ
VIPERに関してざっくりと説明1
• VIPERとは
– V: View
• 画面、 UIViewControllerとかもってる
– I: Interactor
• ロジック
– P: Presenter
• 仲介するやつ
– E: Entity
• データとか、enumとかもってる
– R: Routing
• なにが、どこにあるか知ってる
• 基本的な考えは、Moduleと言う機能単位で、VIPERを持ってる
VIPERを使ってみる
• こちらに簡単な説明が書いてます:
– iOS開発で VIPER / Clean Architecture を使うなら、
ファイル自動生成の Generamba もどうぞ on
@Qiita
http://qiita.com/YKEI_mrn/items/d1f79ceddf6e00
9fdcd0
VIPERに関してざっくりと説明2
• どう実装するのか?
– Generambaという生成器つかってModuleを簡単
生成できます。
参考:
iOS開発で VIPER / Clean Architecture を使うなら、ファイル自動生成の
Generamba もどうぞ on @Qiita
http://qiita.com/YKEI_mrn/items/d1f79ceddf6e009fdcd0
VIPERに関してざっくりと説明3
VIPERに関してざっくりと説明3
つまり
• つまり、ViewInputにより、Viewが受け付けてる入力
(Method)をPresenterが知ることを強制されてる
• ViewOutputにより、Presenterが受け付けてるViewの
出力を知ることを強制されてる
• InteractorInputにより、Interactorが受け付けてる入力
をPresenterが知ることを強制されてる
• InteractorOutputにより、Presenterが受け付けてる入
力を知ることを強制されてる
VIPERに関してざっくりと説明3
そんな感じのModuleを
作ってアプリをつくっていくのが
VIPERだと思ってます
VIPERに関してざっくりと説明2
Routingに関して
• Routingは…
– 全Module(画面や機能)を知っている唯一の存在
では、どう実装するか?
– (独自の実装)
Routingに関して
Routingだけをする
Moduleを作りました
実装イメージ
実装イメージ
Routingを実装するときのTIPS
• hyperoslo/Compassを使うとすごくいい
• ViewControllerやStoryboardの管理にはこれを参
考にするとすごくいい
– KickStarter iOSアプリのStoryboardのenumでの管理
のしかたに感動した: keisei_1092さん
• http://qiita.com/keisei_1092/items/12230bb7ff9106224292
hyperoslo/Compass
• 何でもURLSchemeにできる
– 全画面が!全機能が!同じ呼び出し方法で呼び
出せる!
hyperoslo/Compass
• 例えば…
– com.hoge://login:test:pass
• testとpassを入力したログイン画面呼び出し
– com.hoge://devicetoken:asdfghjkl;qwertyuio
• DeviceTokenの更新処理呼び出し
hyperoslo/Compass
RoutingModuleだけが知っていれば良い!
=相性良い!
hyperoslo/Compass
RoutingModuleにURLを渡すだけで機能が特定できる
hyperoslo/Compass
Moduleは特定できた、
では、Viewはどうやってとればいいの?
KickStarter iOSアプリのStoryboardの
相性がいい理由
• VIPERを使うときの困った事
– Storyboardの数が爆発的に増える
• RoutingModuleだけが、これを知っていれば良い!
– =相性良い!
• 以下方法でそれに対応できる!
http://qiita.com/keisei_1092/items/12230bb7ff91062242
92
だいたい19個のStoryboardがこれ
だけでtypoすることなく取得でる
ふたつのTIPSを合わせて…
URLSchemeからViewがとれる
あとはUIViewControllerをゴニョゴ
ニョするだけです!
処理の流れは→
まとめ
Routerは一つのModuleにすると楽
Thank you !φ('ᴗ'」)

More Related Content

Similar to Router module in VIPER Architecture

ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCPホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
Recruit Lifestyle Co., Ltd.
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
Junya Hayashi
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話
Yoichiro Sakurai
 
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービスUNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
MakotoItoh
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
Motoki Narita
 
Directiveで実現できたこと
Directiveで実現できたことDirectiveで実現できたこと
Directiveで実現できたこと
Kon Yuichi
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
Fumikazu Kiyota
 
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
Takashi Yamanoue
 
監視 Overview
監視 Overview監視 Overview
監視 Overview
IIJ
 
Git超入門
Git超入門Git超入門
Git超入門
Shun Nishitsuji
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会codeal
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
Tomoaki Imai
 
Go 言語で CLI ツールを作ってみた
Go 言語で CLI ツールを作ってみたGo 言語で CLI ツールを作ってみた
Go 言語で CLI ツールを作ってみた
makoto ikezoe
 
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいQt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
You&I
 
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介![CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
エピック・ゲームズ・ジャパン Epic Games Japan
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
Takao Sumitomo
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Shumpei Shiraishi
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
Hironori Sekine
 
Io t最初の一歩
Io t最初の一歩Io t最初の一歩
Io t最初の一歩
Tsubasa Yoshino
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか

Similar to Router module in VIPER Architecture (20)

ホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCPホットペッパービューティーアプリリプレイスとMVCP
ホットペッパービューティーアプリリプレイスとMVCP
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
 
Xcode で gulp を使うお話
Xcode で gulp を使うお話Xcode で gulp を使うお話
Xcode で gulp を使うお話
 
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービスUNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
UNITY5の地味だけど現場で 役に立つ新機能紹介 & 拡充されるクラウドサービス
 
watchOS2 tips
watchOS2 tipswatchOS2 tips
watchOS2 tips
 
Directiveで実現できたこと
Directiveで実現できたことDirectiveで実現できたこと
Directiveで実現できたこと
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム簡便な大型幅広デジタルサイネージシステムとその自動運用システム
簡便な大型幅広デジタルサイネージシステムとその自動運用システム
 
監視 Overview
監視 Overview監視 Overview
監視 Overview
 
Git超入門
Git超入門Git超入門
Git超入門
 
第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会第1回 コデアルiOSアプリ勉強会
第1回 コデアルiOSアプリ勉強会
 
ユーザーを待たせないためにできること
ユーザーを待たせないためにできることユーザーを待たせないためにできること
ユーザーを待たせないためにできること
 
Go 言語で CLI ツールを作ってみた
Go 言語で CLI ツールを作ってみたGo 言語で CLI ツールを作ってみた
Go 言語で CLI ツールを作ってみた
 
Qt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたいQt5のセンサーAPIを使ってみたい
Qt5のセンサーAPIを使ってみたい
 
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介![CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
[CEDEC2017] 最新モバイルゲームの実例からみるUE4のモバイル向け機能・Tipsを全部まるっとご紹介!
 
エンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったことエンジニアがプロダクト育成を始めるまでにやったこと
エンジニアがプロダクト育成を始めるまでにやったこと
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
Io t最初の一歩
Io t最初の一歩Io t最初の一歩
Io t最初の一歩
 
IoTで何をやったか
IoTで何をやったかIoTで何をやったか
IoTで何をやったか
 

Router module in VIPER Architecture

Editor's Notes

  1. 自己紹介、