é廿°å¹Žã«ããã£ãŠãç§ã¯å€ãã®ãããžã§ã¯ããéçºè
ãããã³iOSã³ãã¥ããã£ã§èµ·ãã£ãŠãããã¹ãŠã§ã¯ãªãã«ããŠãå€ãã®åå ã§Model-ViewControllerã¢ãŒããã¯ãã£ãéé£ããèšäºã«åºäŒããŸããã
仿¥ãç§ã¯ããã€ãã®ä»£æ¿çãªèŠè§£ãšã¢ãããŒãã«å ããMVCãšãããžã§ã¯ã管çå
šè¬ãåèããã®ã«åœ¹ç«ã€ãã¯ããã¯ã«æ³šç®ããŸãã èå³ã®ããæ¹-ç«ãžããããã
MVCãšã¯äœãããå§ããŸãããã ããã¥ã¡ã³ããããã®çŸããå³ãèŠãŸããïŒ
ᅩ

çè«çã«ã¯ããã¹ãŠãéåžžã«çŸããã§ããå³ã®ããã«ããã¥ãŒã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ãã³ã³ãããŒã©ãŒã«æž¡ãããŠãŒã¶ãŒã¯å¿
èŠã«å¿ããŠã¢ãã«ãæŽæ°ããŸããæŽæ°ãå®äºããåŸãã¢ãã«ã¯ã³ã³ãããŒã©ãŒã«éç¥ãããã¥ãŒãæŽæ°ããŸãã ãã¹ãŠãã·ã³ãã«ã§ããã¹ãŠãæ©èœããŸãã ãã®ã¢ãããŒãã䜿çšããŠãå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãå«ãæ°åãæ°åã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããããiOSãMacOSã ãã§ãªããWebã¢ããªã±ãŒã·ã§ã³ãWindowsã¢ããªã±ãŒã·ã§ã³ãªã©ããã®ã¢ãããŒããã»ãŒ40幎é䜿çšããŠããå€ãã®ãã®ãæå³ããŸãã ãããã®å€ãã¯çŸåšãã®ã¢ãããŒãã䜿çšããŠãããåæã«åé¡ã¯çºçããŠããŸããã MVCã®äž»ãªå©ç¹ã¯ãç¹ã«iOSã§ã®äœ¿ããããã§ãã UIKitãã¬ãŒã ã¯ãŒã¯ã®UIViewControllerãšãã®åå«ã¯ããããã«äœ¿ãããå€ãã®æ©èœãšæ©èœãæäŸããŸãã å°èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãäœæããã«ã¯ãããã°ã©ãã³ã°ã¹ãã«ã¯å®è³ªçã«å¿
èŠãããŸããã2æ¥éã®YouTubeè¬çŸ©ã§ååã§ãããéå§ã§ããŸãã åé¡ã¯ãå€§èŠæš¡ãªãããžã§ã¯ãã§äœæ¥ããå¿
èŠããããšãã«å§ãŸããŸãã ãã¿ãŒã³ãšããŠã®MVCã®ã¹ã±ãŒãªã³ã°ã¯ããŸããããªããšããå€ãã®èšŒæ ãããããããMassive View ControllerãšåŒã°ããåé¡ã«ã€ãªãããŸãã
åé¡ã®åå ç§ã®æèŠã§ã¯ããã®åé¡ã®çç±ã¯æ¬¡ã®2ã€ã§ãã
1. MVCã¯ãäœæããå¿
èŠããããšã³ãã£ãã£ãšã¯ã©ã¹ãããã³äœæããŠããªããšã³ãã£ãã£ãšã¯ã©ã¹ã«ã€ããŠæç¢ºãªæç€ºãå®éã«æäŸããŸããã ç¹ã«iOSã§ã UIKit MVCã¯æåã¯UIViewControllerã®ã¿ãæäŸããŸãããåºæ¬çã«ã¯ããã ãã§ãã ãã¥ãŒã¯ååšããããæåã¯å®£èšãããŠããªããã€ãŸã ãã¥ãŒã®åå¥ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããšãªããUIViewControllerã¢ããªã±ãŒã·ã§ã³ã®ã¿ããã®æ©èœãå®è¡ããŸãã ã¢ãã«ãšåãããšã ã¢ãã«ã®æ§é ãšã¢ãŒããã¯ãã£ãããã³ã³ã³ãããŒã©ãŒãšã®çžäºäœçšã¯ãéçºè
ã®è¯å¿ãšæ³ååã«å®å
šã«äŸåããŠããŸãã ããã¯ãå®éã«ã¯2çªç®ã®çç±ã«ã€ãªãããŸãã
2.ãã¡ã€ã³é åã®äžååãªçè§£ãéçºè
ãå¿
èŠãªãšã³ãã£ãã£ãå²ãåœãŠãããšãã§ããªããããUIViewControllerå
ã®äŸåé¢ä¿ãšæ©èœã®èç©ã ã€ãŸã éçºè
ãæ°ããæ©èœã远å ãããšãæ°ãããšã³ãã£ãã£ãäœæããŠæ¢åã®ã¢ãŒããã¯ãã£ããªãã¡ã¯ã¿ãªã³ã°ãã代ããã«ãViewControllerã«æ°ããæ©èœã远å ãããŸãã
ã€ãŸã ãã®åé¡ã¯ãã¢ãŒããã¯ãã£ãšäžæ³šæ/æ æ
¢/æ iness /ç¡ç¥/çµéšäžè¶³ïŒäžç·ïŒéçºè
ã®æ¬ é¥ã«ãã£ãŠ
çããçºçãããšèšãããã§ãã
æåã®åé¡ã®è§£æ±ºçMVCåé¡ã®æåã®éšåãéšåçãŸãã¯å®å
šã«è§£æ±ºããMVVMãMVPãVIPãVIPERãFluxïŒFacebookïŒãRibletsïŒUberã®ViperïŒãClean-Swiftãªã©ã®ã¢ãããŒãã¯ãããæ°å¹Žã§éåžžã«äººæ°ããããŸãã ãããã®å€ãã¯ãéçºè
ã«ã¯ã©ã¹ãšãã®ã¯ã©ã¹ãäœæããå¿
èŠãããçç±ã«ã€ããŠæç¢ºãªæç€ºãäžããŸãã ãŸããããŒã ãåããããžã§ã¯ãã«æºãã10人以äžã®éçºè
ã§æ§æãããå Žåã¯ç¹ã«ãããŒã äœæ¥ãã¯ããã«å®¹æã«ãªããŸãïŒããšãã°ãUberã§150人ãJustEats 20人以äžãFacebookãæ€èšããã®ãæãã§ãããééããªã10人以äžã§ãïŒã ããã¯ãã³ã³ãããŒã©ãŒã³ãŒããã«ããŒããã ãã®å€æ°ã®å€ç«ãããªããžã§ã¯ãã®äœæãæå³ãããšããäºå®ã«ãããã®ã§ããããã«ãããããŒã å
ã§å€§ããªæå€±ãªãäœæ¥ã忣ã§ããŸãã
2çªç®ã®åé¡ã¯ãŸã æ®ã£ãŠããŸãã ãã¥ãŒã¢ãã«ãšãã¬ãŒã³ã¿ãŒã¯ã©ã¹ã§VIPãšMVVMã䜿çšããè§£æãšãããã³ã°ããããŒã¿ããŒã¹ã¯ãšãªãšHTTPãªã¯ãšã¹ãã®åœ¢æãŸã§ãè€æ°ã®æäœãå«ã1500è¡ä»¥äžã®ã³ãŒããå«ãå€ãã®ãããžã§ã¯ãã«åºäŒããŸããã éçºè
ã®çµéšäžè¶³ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£å
šäœã®çè§£äžè¶³ã®åé¡ã¯ãåã«ã¢ãŒããã¯ãã£ãã¿ãŒã³ã倿Žããã ãã§ã¯è§£æ±ºã§ããŸããã ç§ã®èгç¹ããã¯ãåã«ãããã©ã«ããã§å€§èŠæš¡ã§è€éãªãããžã§ã¯ãããµããŒã/äœæã§ãããé»éã®åŒŸäžžãã¯ãããŸããã ãããã«ãããããã«ã¯åŽåãåäœãã¹ããé©åãªèšç»ãããã³æéãå¿
èŠã§ãã
2çªç®ã®åé¡ãéšåçã«åé¿ããæ¹æ³ã«é¢ãããã³ããããéšå1.
ViewControllerãä¿é²ãããŸã第äžã«ãè¯ãããšã«ãã¢ããªã±ãŒã·ã§ã³å
ã®ã©ã®ãªããžã§ã¯ããè€æ°ã®æ©èœãæ
åœããã¹ãã§ã¯ãããŸããïŒåäžè²¬ä»»ïŒã å€ãã®éçºè
ã«ãšã£ãŠãããã¯æããã§ãããããã«ããããããã圌ãã®ã³ãŒãã¯ãã®ãããªåçŽãªä»®å®ã«æºæ ããŠãããšã¯èšããŸããã å€ãã®å ŽåãUIViewControllerãä»ã®å
šå¡ãšåããªããžã§ã¯ãã§ããããšãããã³ã¢ãã«ãšãã¥ãŒããã€ã³ããããšãã1ã€ã®è²¬ä»»ã®ã¿ãå¿
èŠã§ããããšã¯æããã§ã¯ãããŸããã ã€ãŸã ãã¥ãŒãé©åãªã¢ãã«ç¶æ
ã«ç¶æãããã®ç¶æ
ã倿Žããå¿
èŠãããå Žåã«ã¢ãã«ã«éç¥ããŸãã ç§ã®èгç¹ãããããšããã®å®çŸ©ãè¶
ãããã®ã¯ãã¹ãŠã³ã³ãããŒã©ãŒã«å±ããŠããŸããã ã¢ãã¡ãŒã·ã§ã³ãã¬ã€ã¢ãŠããæ§æãã¥ãŒãã¬ã³ããªã³ã°ã®å€æŽãè§£æããããã³ã°ãhttpãªã¯ãšã¹ããããŒã¿ããŒã¹ã¯ãšãªãããŸããŸãªã¬ãã«ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãµãŒãã¹ãªã©ããã¹ãŠã®ã¬ããŒãž-ãããã¯ãã¹ãŠã³ã³ãããŒã©ãŒã«å±ããŠããŸããã ãããã¯ã©ããäœæãããã³ã³ãããŒã©ãŒå
ã§åŒã³åºãå¿
èŠããããŸãã åã
ã®ãã€ã³ãã®1ã€ã¯ããã²ãŒã·ã§ã³ã§ãã ViewControllerã«è€æ°ã®åºå£ç¹ãããå Žåã¯ãããã²ãŒã·ã§ã³ãšããã²ãŒã·ã§ã³ã³ã³ãããŒã«ã«ã€ããŠæ€èšããå¿
èŠããããŸãã ã³ã³ãããŒã©ãŒã³ãŒãå
šäœã«5ã10åã®åºå£ç¹ãæ£åšããŠããViewControllerã«é »ç¹ã«åºäŒããªããã°ãªããŸããã§ããã ããã²ãŒã·ã§ã³ã®äœæããåå¥ã®æ¡åŒµæ©èœãžã®ããã²ãŒã·ã§ã³ãã»ã°ãšã®ã¿ã«ããããã²ãŒã·ã§ã³ã®ç®¡çãåå¥ã®ã«ãŒã¿ãŒãšã³ãã£ãã£ã®äœæãUINavigationControllerããã®ç¶æ¿ãªã©ããããç·šæããæ¹æ³ã¯å€æ°ãããŸãã ãããããããè¡ãå¿
èŠããããŸãã ãããŠãã¹ãããŸãã èŠããŠããã¹ãäž»ãªããšã¯ãViewControllerã¯è¡ã®ãã¹ãŠã§ã¯ãªããå¿
èŠãªããšãå®è¡ããå¿
èŠããããšããããšã§ãã MVVMãVIPERã§äœ¿çšããããšã³ãã£ãã£ã«ã€ããŠãåãããšãèšããŸãïŒãªã¹ãã¯ããå°ãæ¬ç©ã§ãïŒã 圌ããããªããã°ãªããªãããšã¯ã圌ããããªããã°ãªããªãããšã ãããããView-ModelãªãããããŠãã¥ãŒã®ããŒã¿è¡šçŸã®ã¿ãããããšã³ãã£ãã£ãªãããããŠããŒã¿ã®ä¿åãšå€æãªã©ã§ãïŒè²¬ä»»ã®äŸã¯arbitraryæçã§ãããèè
ã¯ãããã®ã¹ããŒãã¡ã³ãã®å®å
šãªçå®ãè£
ã£ãŠããŸããïŒã æ¢åã®ã¯ã©ã¹ã«æ°ããã¡ãœãããŸãã¯ããããã£ã远å ããåã«ããããæ¬åœã«ãã®ã¯ã©ã¹ã«ããã¹ããã©ãããåžžã«èããŠãã ããã
2.
ã¢ãã«iOSã§é »ç¹ã«èŠããããšã©ãŒã®1ã€ã¯ãã¢ãã«ã¬ãã«ã®åé¢ããªãããšã§ãã ç§ã®èгç¹ããããããŠå®éã«ã¢ããªã±ãŒã·ã§ã³ãæåãããåŸãã¢ãã«ãå¥ã
ã®ãã¬ãŒã ã¯ãŒã¯ã«é
眮ããããšãæåã§ãã ãã¡ã€ã³ãåãåºãããšãã§ããŸãã ããšãã°ãããŒãããªããªãŒã¢ããªã±ãŒã·ã§ã³ãããå Žåã¯ãå¥ã®ãã¬ãŒã ã¯ãŒã¯ã«å
¥ããããšãã§ããŸããããšãã°ãã¬ã¹ãã©ã³ãšããã«é¢é£ãããã¹ãŠïŒã¬ã¹ãã©ã³ãã¡ãã¥ãŒãå Žæãªã©ã§æ€çŽ¢ïŒãæçãé
éãšãªã¢ãªã©ã§ãã ãã±ããã賌å
¥ããããã®ã¢ããªã±ãŒã·ã§ã³ãããå ŽåãããŒã¹ã®farmework'ovãéžæã§ããŸãïŒãã±ãããäºçŽã賌å
¥ãå±¥æŽãªã©ãæ€çŽ¢ããŸãïŒã åãã¬ãŒã ã¯ãŒã¯ã¯ãåå¥ã®åäœãã¹ãã»ããã§ã«ããŒã§ããŸãã ããã¯ã§ããŸããããããã§ãã³ã³ãããŒã©ãŒãšã®çžäºäœçšããå®å
šã«åé¢ãããã¢ãã«ãäœæããããšããŸãã
3.
å€§èŠæš¡ãªãUIãViewController巚倧ãªã¹ããŒãªãŒããŒãã«äœåºŠãåºäŒã£ãŠããïŒãŸãæ»ã£ãŠããŸãïŒã巚倧ãªUIViewControllersãåæ§ã§ãã 巚倧ãªã®ã¯ã³ãŒãã®éã§ã¯ãããŸãããïŒãããïŒãUIèŠçŽ ã®æ°ã®ç¹ã§ã¯ã ãã¹ãŠã®éçºè
ã巚倧ãªå±±ç©ã¿ã®ViewControllerãèŠããšãã«èªåãã¹ãã ãšæã質åã¯ã次ã®ããã«èãããŸãã
ᅩ

ããã¯Wordã®ç©ºã®ããã¥ã¡ã³ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ããã1ã€ã®ViewControllerã§ãããšã¯æããŸããããå€ãã®iOSéçºè
ã¯1ç»é¢-1 ViewControllerãã©ãã€ã ã«åŸããŸãã
å¥ã®ViewControllerã§ãŠãŒã¶ãŒã®è«çæäœãŸãã¯æ©èœãå®è¡ããç»é¢äžã®ããã€ãã®èŠçŽ ãéžæããŸãã äŸã¯ãã®ç»é¢ã§ãã

衚ã®åã»ã«ã¯åå¥ã®VCã§ãã äœæè
ã®ã¢ãã¿ãŒãäœæè
ãããã³æéã®ã¿ã€ãã«ã¯ãåå¥ã®ViewControllerã§ãã ã³ã³ãã³ããšãªã³ã¯ãå¥åã®ViewControllerã§ãã
ããã-ã³ã¡ã³ã-å
±æ-ãããã®ã³ã³ããŒãã³ãã¯ãã¹ãŠå¥åã®ViewControllerã§ãã
4.
ããããã®UIã³ãŒãèšå€§ãªUIã³ãŒãã¯ãããŸããŸãªã³ã³ããŒãã³ãã®è¥æºã«ãã€ãªãããŸãã ãœãªã¥ãŒã·ã§ã³ã¯ãViewControllerå
ã®ã«ã¹ã¿ãã€ãºã§ã¯ãªããUIã³ã³ããŒãã³ãã®ããã©ã«ãã®ç¶æ¿ã§ããå ŽåããããŸãã ãŸãã¯ãUIã説æããæ¡åŒµæ©èœã远å ã§ããŸãã
5.
å€§èŠæš¡ãªã¹ããŒãªãŒããŒããå€ãã®å Žåããããžã§ã¯ãã§å€§èŠæš¡ãªStoryboardãã¡ã€ã«ã«åºäŒããŸããã ããŸããŸãªè©³çްã¬ãã«ã®20ã50åã®ViewControllerãã¹ããŒãªãŒããŒãã«è¿œå ãããŸãã æåã¯ãã¹ãŠãã¹ã ãŒãºãã€äŸ¿å©ã«è¡ãããããã²ãŒã·ã§ã³å
šäœãããã«ãããèšå®ãããã«ãããŸãããèŠä»¶ã倿Žããããæ°ããéçºè
ãæ¥ç¶ãããšããã«ãããã¯å®å
šãªå°çã«ãªããŸãã 1ã€ã®è§£æ±ºçã¯ãXcode UI Builderããã®ãŸãŸäœ¿çšããªãããšã§ãã ã³ãŒãããã¬ã€ã¢ãŠãå
šäœãäœæããŸãã
ããŸããŸãªã©ã€ãã©ãªã䜿çšããŠãå¶çŽïŒParusãMasonryãªã©ïŒã®èšè¿°ãç°¡çŽ åããããããŒãã³ã¢çšã«CGFrameã䜿çšããŠããã¹ãŠã®æ¹åãšèš±å¯ã«ã€ããŠãã¹ãŠãèªåã§èšè¿°ããŸãã Storyboardãæ¬åœã«äœ¿çšãããå Žåã¯ããããžã§ã¯ããããã€ãã«åå²ããæ¹æ³ãæ€èšããŠãã ããã çæ³çã«ã¯ãã¹ããŒãªãŒããŒãã«ã¯1ã€ã®è²¬ä»»ããŸãã¯1ã€ã®ãŠãŒã¹ã±ãŒã¹ãå¿
èŠã§ãã ã€ãŸã ããšãã°ãã¿ã¯ã·ãŒã®ã¢ããªã±ãŒã·ã§ã³ãããå Žåãåã
ã®ã¹ããŒãªãŒããŒãã¯ãã¿ã¯ã·ãŒã®åŒã³åºããã¿ã¯ã·ãŒã®è¿œè·¡ãæ¯æããäžè¬æ
å ±ãªã©ã«ãªããŸãã ã€ãŸã å€ããå°ãªããç¬ç«ããæ©èœã ã¹ããŒãªãŒããŒããªãã¡ã¬ã³ã¹ã䜿çšãããšãããã¯éåžžã«äŸ¿å©ã§ãããæå°éã®ã³ãŒãèšè¿°ãå¿
èŠã§ãã çæ³çã«ã¯ãã¹ããŒãªãŒããŒãã«ã¯3ã4å以äžã®åå¥ã®ç»é¢ãå«ããªãã§ãã ããã ã¹ããŒãªãŒããŒãã倧ãããªãã»ã©ãããããµããŒãããããã«ããå€ãã®åŽåãå¿
èŠã«ãªããæåã«çè§£ããã®ãããé£ãããªããããŒãããã®ã«éåžžã«æéãããããéçºããŒã ã§äœæ¥ããã®ãããé£ãããªããŸãã
çµè«ãã®æçš¿ã§èšãããã£ãããšã¯ãMVCãiOSéçºè
ã®å€ãã®åé¡ãéé£ããåŸåãããããšã«æ°ã¥ããããšã§ãããããŠãå€ãã®å ŽåïŒäžèšã®äŸã§èŠãããããã«ïŒããããã®æéã¯iOSã«ç¹ã«éå®ãããŸãã å€ãã®å Žåãããã¯éçºè
èªèº«ã®è²¬ä»»ã§ãããããã«ããããã®éçºè
ã¯ä»ã®ã¢ãŒããã¯ãã£ã«åãæ¿ãããšãã«åããŸãã¯åæ§ã®åé¡ãçµéšããããšããããããŸãã å€§èŠæš¡ãªVCã¯ãMVCãã¹ã±ãŒãªã³ã°ã§ããªãããã§ã¯ãªããéçºè
ãå¶éãæ£ããã¹ã±ãŒãªã³ã°ããããªã/èš±å¯ããªãããã«ã90ïŒ
ã®ã±ãŒã¹ã§çºçããŸãã
VIPERãMVVMïŒããã³ãã®ä»ïŒã¯ãç¹ã«éçºããŒã ã§äœæ¥ããŠããå Žåã«ãããæ¯æŽã§ããŸããããã¹ãŠã®åé¡ã«å¯Ÿããäžèœè¬ã§ã¯ãããŸããã ãã®èšäºã§ã¯ãç§èªèº«ããããžã§ã¯ãã§VIPER / MVVMã䜿çšããŠããã«ãããããããMVCãéé£ããããæªéã®æè·è
ãšããŠè¡åããç¶æ³ã®äžéšãåŒçšããããšããŸããã è¯ãã³ãŒããæžããŠãã ããã ãã¹ãŠããŒããŒã