ãã®æçš¿ã¯ãèšäºã®ç¡æ翻蚳ã§ãã ãªãViperã¯ã ã»ã«ã²ã€ã»ããããã«ãã次ã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæªãéžæãªã®ã
éå»1幎éã誰ããVIPERã«ã€ããŠæžããŸããã ãã®ã¢ãŒããã¯ãã£ã¯ãæ¬åœã«éçºè ã«åºæ¿ãäžããŸãã ããããå®éã«ã¯ãã»ãšãã©ã®èšäºã¯ããªãåã£ãŠããŸãã 圌ãã¯ãã®ãã¬ãã£ããªåŽé¢ã«ã€ããŠã¯é»ã£ãŠããã®å»ºç¯ãã¿ãŒã³ã®æ¥åŸé ã瀺ãã ãã§ãã ãããã圌ã¯ä»ã®äººãããå£ããªãåé¡ãæ±ããŠããŸãã ãããŠããã®èšäºã§ã¯ãVIPERã圌ããèšãã»ã©è¯ããªãçç±ãšããããããªãã®ã¢ããªã±ãŒã·ã§ã³ã®ã»ãšãã©ã«é©ããªãçç±ã説æããããšããŸãã
ã¢ãŒããã¯ãã£ã®æ¯èŒã«é¢ããããã€ãã®èšäºã§ã¯ãéåžžãVIPERã¯ä»ã®MVCã¢ãŒããã¯ãã£ãšã¯ãŸã£ããç°ãªããšäž»åŒµããŠããŸãã ããããå®éã«ã¯ãVIPERã¯éåžžã®MVCã§ãããã³ã³ãããŒã©ãŒã¯ã€ã³ã¿ã©ã¯ã¿ãŒãšãã¬ãŒã³ã¿ãŒã®2ã€ã®éšåã«åãããŠããŸãã ãã¥ãŒã¯ãã®ãŸãŸã§ãã¢ãã«ã¯ãšã³ãã£ãã£ã«ååãå€æŽãããŸããã ã«ãŒã¿ãŒã«ã¯ç¹å¥ãªæ³šæãå¿
èŠã§ããã¯ããä»ã®ã¢ãŒããã¯ãã£ã§ã¯ç¥èªã§ãã®éšåã«èšåããŠããŸããããæé»çã«ïŒ pushViewController
ãåŒã³åºããšãåçŽãªã«ãŒã¿ãŒãäœæããŸãïŒãŸãã¯ããæçœã§ãïŒäŸãšããŠFlowCoordinatorsïŒã
VIPERãæäŸãããã°ããºãã«ã€ããŠè©±ããŸãããïŒ ãã®æ¬ãåç §ããŸã ïŒã ç®æš2ãèŠãŠã¿ãŸããããããã¯ãSRPïŒå ±æ責任ã®ååïŒãæããŸãã ããã¯å€±ç€Œã«èãããŸããããããå©ç¹ãšèŠãªãã«ã¯ã©ã®ãããªçš®é¡ã®ãšãã»ã³ããªãã¯ãå¿ èŠã§ããïŒ ããªãã¯åé¡ã解決ããããã®å ±é ¬ãåãåããŸããæµè¡ã®èšèãäžèŽãããããã§ã¯ãããŸããã ã¯ããTDDãBDDãåäœãã¹ããã¬ã«ã ãŸãã¯SQLiteãäŸåæ§æ³šå ¥ããã®ä»å€ãã®ããšãåŒãç¶ã䜿çšããŸããããããã¯ãã¹ãŠäœ¿çšç®çã ãã§ãªããã¯ã©ã€ã¢ã³ãã®åé¡ã解決ããããã«ã䜿çšããŸãã
ãã¹ãã
ããã¯å¥ã®èå³æ·±ãåŽé¢ã§ãããéåžžã«éèŠãªã¿ã¹ã¯ã§ãã è¯ãé¢ãšããŠã¯ãå€ãã®äººããã¹ãã«ã€ããŠè©±ããŠããã®ã§ããã¹ãã«é¢ããå¥ã®èšäºãæžãããšãã§ããŸãããå®éã«ã¢ããªã±ãŒã·ã§ã³ããã¹ããã人ã¯å°ãªããæ£ãã人ãå°ãªãã§ãã
äž»ãªçç±ã®1ã€ã¯ãè¯ãäŸããªãããšã§ãã assert 2 + 2 == 4
åäœãã¹ãã®äœææ¹æ³ã«é¢ããèšäºã¯ããªããããŸãããå®éã®äŸã¯ãããŸããïŒãã ãã Artsyã¯ã¢ããªã±ãŒã·ã§ã³ããªãŒãã³ãœãŒã¹ã®ãŸãŸã«ããŠããããããžã§ã¯ãã確èªããå¿
èŠããããŸãïŒã
VIPERã¯ããã¹ãŠã®ããžãã¯ã責任ãå ±æããå€ãã®å°ããªã¯ã©ã¹ã«åããããšãææ¡ããŠããŸãã ããã«ãããã¹ãã容æã«ãªããŸãããåžžã«ããã§ã¯ãããŸããã ã¯ããåçŽãªã¯ã©ã¹ã®åäœãã¹ããæžãã®ã¯ç°¡åã§ããããããã®ãã¹ãã®ã»ãšãã©ã¯äœããã¹ãããŸããã ããšãã°ãã»ãšãã©ã®ãã¬ãŒã³ã¿ãŒã¡ãœãããèŠãŠã¿ãŸãããããããã¯ããã¥ãŒãšä»ã®ã³ã³ããŒãã³ããšã®éã®ãããã·ã«ãããŸããã ãã®ãããã·ã®ãã¹ããäœæã§ããŸããããã«ãããã³ãŒãã®ãã¹ãã«ãã¬ããžãåäžããŸããããããã®ãã¹ãã¯åœ¹ã«ç«ã¡ãŸããã ãŸããå¯äœçšããããŸããã³ãŒããå€æŽãããã³ã«ããããã®åœ¹ã«ç«ããªããã¹ããæŽæ°ããå¿ èŠããããŸãã
ãã¹ãã®æ£ããã¢ãããŒãã«ã¯ãã€ã³ã¿ã©ã¯ã¿ãŒãšãã¬ãŒã³ã¿ãŒã®å³æãã¹ããå«ãŸããå¿
èŠããããŸãããããã®2ã€ã®éšåã¯äºãã«å¯æ¥ã«é¢é£ããŠããããã§ãã ããã«ãããžãã¯ã2ã€ã®ã¯ã©ã¹ã«åå²ãããããåäžã®ã¯ã©ã¹ãããå€ãã®ãã¹ããå¿
èŠã§ãã ããã¯åçŽãªçµã¿åããã§ããã¯ã©ã¹A
ã¯4ã€ã®å¯èœãªç¶æ
ããããã¯ã©ã¹B
6ã€ã®å¯èœãªç¶æ
ãããããããã®çµã¿åããã«ã¯24ã®å¯èœãªç¶æ
ãããããããããã¹ãããå¿
èŠããããŸãã
ãã¹ããç°¡çŽ åããé©åãªã¢ãããŒãã¯ãè€éãªã³ãŒããå€æ°ã®ã¯ã©ã¹ã«åå²ããã®ã§ã¯ãªããã³ãŒããæž æœã«ããããšã§ãã
å¥åŠãªããšã«ããã¥ãŒã®ãã¹ãã¯ãããžãã¹ããžãã¯ã®äžéšããã¹ããããããç°¡åã§ãã ãã¥ãŒã¯ç¹å®ã®ããããã£ã®ã³ã¬ã¯ã·ã§ã³ã§ããããããã®ããããã£ã®å€èŠ³ãç¶æ¿ããŸãã FBSnapshotTestCaseã䜿çšããŠãã¹ããŒã¿ã¹ãšå€èŠ³ãæ¯èŒã§ããŸãã ãã®ããšã¯ãã«ã¹ã¿ã ãã©ã³ãžã·ã§ã³ã®ãããªç¹å¥ãªã±ãŒã¹ããŸã åŠçããŸããããã©ããããã®é »åºŠã§äœ¿çšããŸããïŒ
èšèšã®ãªãŒããŒãšã³ãžãã¢ãªã³ã°ã
VIPERã¯ãå ãžã£ãã¹ããiOSã®äžçã«äŸµå ¥ãããšãã«èµ·ããããšã§ãã -n0damageã redditã«é¢ããã³ã¡ã³ã
æ£çŽãªãšããã誰ãããããèŠãŠããã¯ãããããã®è¿œå ã®ã¯ã©ã¹ãšãããã³ã«ã¯æ¬åœã«ç§ã®ã¢ããªã±ãŒã·ã§ã³ã§äœãèµ·ãã£ãŠãããã«ã€ããŠã®ç§ã®ç解ãåäžãããŸãããšèšãããšãã§ããŸãã
ç°¡åãªã¿ã¹ã¯ãæ³åããŠãã ããããµãŒããŒããæŽæ°ãéå§ãããã¿ã³ãããããµãŒããŒããåä¿¡ããããŒã¿ã衚瀺ãããã¥ãŒããããŸãã ãã®å€æŽã®åœ±é¿ãåããã¯ã©ã¹/ãããã³ã«ã®æ°ãæšæž¬ããŸããïŒ ã¯ããå°ãªããšã3ã€ã®ã¯ã©ã¹ãš4ã€ã®ãããã³ã«ã¯ããã®ãããªåçŽãªæ©èœãå®è£
ããããã«å€æŽãããŸãã Springãããã€ãã®æœè±¡åã§å§ãŸãã AbstractSingletonProxyFactoryBean
ã§çµãã£ãæ¹æ³ãèŠããŠããŸããïŒ ç§ã¯ãã€ããã³ãŒãå
ã«ã ã·ã³ã°ã«ããŒã³ã®ã¿ãäœæãããããã·ãã¡ã¯ããªçšã®äŸ¿å©ãªãããã·ãã¡ã¯ããªã¹ãŒããŒã¯ã©ã¹ ãã倢èŠãŠããŸããã
åé·ã³ã³ããŒãã³ã
ïŒåé·ã³ãŒãã¯ãç§ãèããŠããã»ã©ç¡å®³ã§ã¯ãããŸããããã®å¿ èŠæ§ã«ã€ããŠèª€ã£ãã·ã°ãã«ãäžããŸããïŒ
åè¿°ã®ããã«ããã¬ãŒã³ã¿ãŒã¯éåžžããã¥ãŒããã€ã³ã¿ã©ã¯ã¿ãŒïŒ ãã®ãããªãã® ïŒã«åŒã³åºããæž¡ãã ãã®éåžžã«æããªã¯ã©ã¹ã§ãã ã¯ããæã«ã¯è€éãªããžãã¯ãå«ãŸããããšããããŸãããåºæ¬çã«ã¯åãªãåé·ã³ã³ããŒãã³ãã§ãã
ãDIã«åªããããããã³ã«ã®æ°
ïŒãã³ãŒãã¯èªèãããããã³ã¹ããç°¡åã«èŠç©ããããšãã§ããŸããæœè±¡åãæ£ãããªãå Žåã¯ããã§ã¯ãããŸãããïŒ
ãã®ç¥èªã«ã¯äžè¬çãªæ··ä¹±ããããŸããVIPERã¯SOLIDååãå®è£ ããŠããŸããDIã¯ã æ³šå ¥ ãã§ã¯ãªããäŸåæ§å転 ãã§ãã äŸåæ§æ³šå ¥ã¯ããå¶åŸ¡ã®å転ããã¿ãŒã³ã®ç¹æ®ãªã±ãŒã¹ã§ããããã¡ããæ¥ç¶ãããŠããŸãããäŸåæ§ã®å転ãšã¯ç°ãªããŸãã
äŸåæ§å転ãšã¯ãç°ãªãã¬ãã«ã®ã¢ãžã¥ãŒã«ãæœè±¡åããããšã«ãããããããåé¢ããããšã§ãã ããšãã°ãUIã¢ãžã¥ãŒã«ã¯ãããã¯ãŒã¯ã¢ãžã¥ãŒã«ã«çŽæ¥äŸåããªãããã«ããŠãã ããã å¶åŸ¡ã®å転ã¯å¥ã§ãã ããã¯ãã¢ãžã¥ãŒã«ïŒéåžžã¯å€æŽã§ããªãã©ã€ãã©ãªããïŒãäœããå¥ã®ã¢ãžã¥ãŒã«ã«å§ä»»ãããšãã§ããéåžžã¯ãæåã®ã¢ãžã¥ãŒã«ã«äŸåé¢ä¿ãšããŠæäŸãããŸãã ã¯ãã UITableView
ããŒã¿ãœãŒã¹ãå®è£
ãããšãã¯ãIoCååã䜿çšããŸãã ããŸããŸãªé«ã¬ãã«ã®ãã®ã«åæ§ã®ååã䜿çšãããšãæ··ä¹±ã®åå ã«ãªããŸãã
VIPERã«æ»ãã åãã¢ãžã¥ãŒã«å ã®ã¯ã©ã¹éã«ã¯å€ãã®ãããã³ã«ïŒå°ãªããšã5ã€ïŒããããŸãã ãããŠããããã®ãã¹ãŠãå¿ èŠãšããããã§ã¯ãããŸããã ãã¬ãŒã³ã¿ãŒãšã€ã³ã¿ã©ã¯ã¿ãŒã¯ãç°ãªãã¬ã€ã€ãŒã®ã¢ãžã¥ãŒã«ã§ã¯ãããŸããã IoCã®ååãé©çšããããšã¯çã«ããªã£ãŠãããããããŸããããèªåããŠãã ããã1ã€ã®ãã¥ãŒã«å¯ŸããŠå°ãªããšã2人ã®ãã¬ãŒã³ã¿ãŒãç²åŸããé »åºŠã¯ã©ããããã§ããïŒ ããªãã®ã»ãšãã©ãã決ããŠããšçããªãã ãããšç¢ºä¿¡ããŠããŸãã ããã§ã¯ããªãç§ãã¡ã決ããŠäœ¿çšããªããã®äžé£ã®ãããã³ã«ãäœæããå¿ èŠãããã®ã§ããããïŒ
ããã«ããããã®ãããã³ã«ã®ãããIDEã§ã³ãŒããç°¡åã«ããã²ãŒãããããšã¯ã§ããŸããã çµå±ã®ãšããã cmd+click
ã¯ããããå®è£
ããã®ã§ã¯ãªãããããã³ã«ã«æã蟌ã¿ãŸãã
ããã©ãŒãã³ã¹ã®åé¡
ããã¯éèŠãªãã€ã³ãã§ãããå€ãã¯åçŽã«ããã«ã€ããŠå¿é ããªãããåã«è²§åŒ±ãªã¢ãŒããã¯ãã£ã®åœ±é¿ãéå°è©äŸ¡ããŠããŸãã
Typhoonãã¬ãŒã ã¯ãŒã¯ïŒobjective-cã®äžçã§ã¯äŸåæ§æ³šå ¥ã§éåžžã«äººæ°ããããŸãïŒã«ã€ããŠã¯èª¬æããŸããã ãã¡ãããç¹ã«èªåå±éã䜿çšããå Žåã¯ãããã©ãŒãã³ã¹ã«ããçšåºŠã®åœ±é¿ããããŸãããVIPERã¯ãã®äœ¿çšãå¿ èŠãšããŸããã 代ããã«ãã©ã³ã¿ã€ã ãšã¢ããªã±ãŒã·ã§ã³ã®èµ·åãããã³VIPERãæåéãã©ãã§ãã¢ããªã±ãŒã·ã§ã³ãé ãããæ¹æ³ã«ã€ããŠèª¬æããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéã ãã®ãããã¯ã«ã€ããŠã¯ã»ãšãã©èª¬æããŸããããéèŠã§ãã çµå±ãã¢ããªã±ãŒã·ã§ã³ã®èµ·åãéåžžã«é ãå ŽåããŠãŒã¶ãŒã¯ããã䜿çšããŸããã ååã®WWDCã§ã圌ãã¯ã¢ããªã±ãŒã·ã§ã³ã®èµ·åæéã®æé©åã«ã€ããŠè©±ããŠããŸãã ã ã¢ããªã±ãŒã·ã§ã³ã®éå§æéã¯ããã®äžã®ã¯ã©ã¹ã®æ°ã«äŸåããŸãã 100åã®ã¯ã©ã¹ãããå Žå-ããã¯æ£åžžãªç¶æ ã§ãããé 延ã¯ãããããã§ãã ãã ããã¢ããªã±ãŒã·ã§ã³ã«100ã®ã¯ã©ã¹ãããªãå Žåããã®è€éãªã¢ãŒããã¯ãã£ãæ¬åœã«å¿ èŠã§ããïŒ ããããããšãã°Facebookã¢ããªã±ãŒã·ã§ã³ïŒ 18Kã¯ã©ã¹ ïŒã§äœæ¥ããŠããå Žåãªã©ãã¢ããªã±ãŒã·ã§ã³ã巚倧ãªå Žåãéãã¯é¡èã«ãªããŸãïŒçŽ1ç§ã ã¯ããã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒã«ãã¹ã¿ãŒãã¯ããã¹ãŠã®ã¯ã©ã¹ã¡ã¿ããŒã¿ãããŒãããã®ã«1ç§ããããããŸããã
ã©ã³ã¿ã€ã ã®èª²é¡ã ããã§ã¯ãã¹ãŠãããè€éã§ãäž»ã«Swiftã³ã³ãã€ã©ãŒã«ã®ã¿é©çšãããŸãïŒObjective-Cã©ã³ã¿ã€ã ã«ã¯ããå€ãã®æ©èœããããã³ã³ãã€ã©ãŒã¯æé©åãå®å
šã«å®è¡ã§ããªãããïŒã ã¡ãœãããåŒã³åºãããšãã«ãå
éšã§ãäœãèµ·ãããã«ã€ããŠè©±ããŸãããïŒ2çªç®ã¯Swiftã«ãšã£ãŠåžžã«æ£ãããšã¯éããªãããããã¡ãã»ãŒãžãéä¿¡ãããã§ã¯ãªããåŒã³åºãããšèšããŸãïŒã Swiftã«ã¯3ã€ã®ã¿ã€ãã®åŒã³åºãïŒé«éããäœéãžïŒããããŸãïŒéçãåŒã³åºãããŒãã«ãããã³ã¡ãã»ãŒãžã®éä¿¡ã åŸè
ã¯Objective-Cã§äœ¿çšãããå¯äžã®ãã®ã§ãããObjective-Cã³ãŒããšã®äºææ§ãå¿
èŠãªå ŽåããŸãã¯ã¡ãœãããdynamic
ãšå®£èšãããŠããå Žåã«Swiftã§äœ¿çšãããŸãã ãã¡ãããã©ã³ã¿ã€ã ã®ãã®éšåã¯é«åºŠã«æé©åããããã¹ãŠã®ãã©ãããã©ãŒã ã®ã¢ã»ã³ãã©ãŒã§èšè¿°ãããŸãã ããããã³ã³ãã€ã«æã«æ£ç¢ºã«äœãåŒã³åºãããããã³ã³ãã€ã©ãŒã«ç¥ãããããšã«ããããã®ãªãŒããŒããããåé¿ã§ãããšãããã©ãã§ããããïŒ ããã¯ãŸãã«ãSwiftã³ã³ãã€ã©ãŒãéçããŒãã«ãšåŒã³åºãããŒãã«ã§è¡ãããšã§ãã éçåŒã³åºãã¯é«éã§ãããã³ã³ãã€ã©ã¯100ïŒ
åä¿èšŒãªãã§ã¯ãããã䜿çšã§ããŸããã ãããŠãå€æ°ã®åããããã³ã«ã®å Žåãã³ã³ãã€ã©ã¯ããŒãã«åŒã³åºãã䜿çšããããšã匷å¶ãããŸãã ããã¯é
ãããããšã¯ãããŸãããã1ããªç§ãããã1ããªç§ããããŸããä»ã§ã¯ãã¯ãªãŒã³ãªSwiftã³ãŒãã§éæã§ãããã®ãšæ¯èŒããŠãåèšå®è¡æéã1ç§ä»¥äžå¢å ããŠããŸãã ãã®é
ç®ã¯ããããã³ã«ã«é¢ãã以åã®é
ç®ã«é¢é£ããŠããŸãããã³ã³ãã€ã©ã䜿çšããŠã䜿çšãããŠããªããããã³ã«ã®æ°ã«é¢ããæžå¿µã倧éšãããåãé¢ããæ¹ãè¯ããšæããŸãã
æœè±¡åã®åŒ±ãåé¢
ãããè¡ãããã®æ確ãªæ¹æ³ã¯1ã€ãã§ããã°1ã€ã ãã«ããå¿ èŠããããŸãã
VIPERã³ãã¥ããã£ã§æã人æ°ã®ãã質åã®1ã€ïŒãXã¯ã©ãã«æã£ãŠããã¹ãã§ããïŒã äžæ¹ã§ã¯ãç©äºãæ£ããè¡ãæ¹æ³ã«ã€ããŠå€ãã®ã«ãŒã«ããããä»æ¹ã§ã¯ãå€ãã®æ±ºå®ãä»äººã®æèŠã«åºã¥ããŠããããšãããããŸãã ãããã¯ã NSFetchedResultsController
ãŸãã¯UIWebView
ã䜿çšããŠCoreData
ãåŠçãããªã©ãè€éãªå ŽåããããŸãã ãããã UIAlertController
ã䜿çšãããªã©ã®äžè¬çãªã±ãŒã¹ã§ãããè°è«ã®å¯Ÿè±¡ã§ãã èŠãŠã¿ãŸãããã ããã§ã¯ãã«ãŒã¿ãŒãã¢ã©ãŒããšå¯Ÿè©±ããŸããã ããã§ã¯ãã¥ãŒã瀺ããŠããŸãã ãã®åçŽãªã¢ã©ãŒãã¯ãã¯ããŒãºä»¥å€ã®ã¢ã¯ã·ã§ã³ã䌎ããªãã¢ã©ãŒãã®ç¹æ®ãªã±ãŒã¹ã§ãããšçããããšãã§ããŸãã
ç¹å¥ãªå Žåã¯ãèŠåãç Žãã®ã«ååã§ã¯ãããŸããã
ãã®éãã§ããããªãããã«ãã®ãããªã¢ã©ãŒããäœæãã å·¥å Žãããã®ã§ããïŒ ãã®çµæã UIAlertController
ããæ··ä¹±ããŠãUIAlertController
ã ãã欲ããïŒ
ã³ãŒãçæ
å¯èªæ§ãéèŠã§ãã
ããã¯ã©ã®ããã«ã¢ãŒããã¯ãã£äžã®åé¡ã«ãªããŸããïŒ æåã§èšè¿°ããã®ã§ã¯ãªãããã³ãã¬ãŒãããã¯ã©ã¹ã®æãçæããã ãã§ãã ããã§åé¡ã¯äœã§ããïŒ åé¡ã¯ãã»ãšãã©ã®å Žåãã³ãŒããæžããŠããã®ã§ã¯ãªãã³ãŒããèªãã§ãããšããããšã§ãã ãã®ããã«ããŠãã»ãšãã©ã®æéãã³ãŒããšæ··åããå®åã³ãŒããèªã¿åããŸãã ããã§ããïŒ ããã¯æããŸãã
ãããã«
ç§ã®ç®æšã¯ãããªããVIPERã®äœ¿çšãæããšã©ãŸãããããšã§ã¯ãããŸããã æ©æµãåããã ãã®ã¢ããªã±ãŒã·ã§ã³ããããããããŸããã ãã ããã¢ããªã±ãŒã·ã§ã³ã®éçºãéå§ããåã«ã次ã®2ã€ã®è³ªåãèªåããå¿ èŠããããŸãã
ãã®ã¢ããªã®ã©ã€ããµã€ã¯ã«ã¯é·ããªããŸããïŒ
èŠä»¶ã¯ååã«å®å®ããŠããŸããïŒ ããããªããšãå°ããªå€æŽãå ããå Žåã§ããç¡éã®ãªãã¡ã¯ã¿ãªã³ã°ãçºçããŸãã
- ã¢ããªãæ¬åœã«ãã¹ãããŠããŸããïŒ èªåã«æ£çŽã«ãªã£ãŠãã ããã
3ã€ã®è³ªåãã¹ãŠã«ãã¯ãããšçããå Žåã«ã®ã¿ãVIPER ãã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããŸãã
ãããŠæåŸã«ãæåŸïŒããªãã¯ããªãèªèº«ã®æ±ºå®ãããªããã°ãªããŸããã ãUse XãX is coolããšèšãMediumïŒãŸãã¯HabrïŒã®ç·ãç²ç®çã«ä¿¡é Œããã ãã§ã¯ãããŸããã ãã®ç·ãééã£ãŠããå¯èœæ§ããããŸãã