ãããžã§ã¯ãèšèšãé²ãã ãã¹ãã®æ¬è³ªãããããŸãïŒ
Springã«ãã¹ããå
¥ããæ¹æ³ã§å§ãŸããã¢ãŒããã¯ãã£è¬çŸ©ã§çµãããŸãïŒ ãã¹ãã«å¯Ÿããæ£ããæèŠãäŒããããã«ã¯ãçµå±ã¢ãŒããã¯ãã£ã§çµãããªããã°ãªããªããšããèããããããã§ãã
ãã¹ãã®åºæ¬çãªæŠå¿µãåŠã³ãSpringïŒã¹ããªã³ã°ïŒã«ãã¹ããå
¥ããæ¹æ³ãåŠã³ãŸããããã«ãèªç¶ãªãã¹ããã§ããããã«ã¹ããªã³ã°èšèšã倿Žããæ¹æ³ãåŠã³ãŸãã
ã ããããã®ãããªå
容ãåŠã³ãŸãã ãã¹ãã«ã€ããŠåºæ¬æŠå¿µ
Springãžãã¹ããå
¥ãã æ¹æ³
Springãã¶ã€ã³é²åããã æ¹æ³
ã¯ãªãŒã³ ã¢ãŒããã¯ãã£
ãããµãŽãã« ã¢ãŒããã¯ãã£
ãšããã§ãããããããããããªæ°ãããŸãããïŒ ãã¹ãã«é¢ããæ©ã¿ãšèª€è§£ ããã¹ããæ¬åœã«åå®ã«å
¥ããŠã¿ããã§ãããšããã§âŠã ä»ã®äŒç€Ÿã«éãå人ã¯ãæä»£ã®ããŒãºã«åãããŠãã¹ããçå®ã«å
¥ããŠãããŸãããšããã§ãåœç€Ÿã¯ãã¹ããå
¥ããŠããŸãããé
ããããããŸãããå匷ããæå¿ããããŸãããšããã§ããšã«ãããã®ã¬ã¬ã·ãŒã·ã¹ãã ã«ãã¹ãã³ãŒããã©ã®ããã«å
¥ããªããã°ãªããªãã æããããŸããã
ãH2ã䜿ã£ããã¹ãã«æ°ç©ããããŸããã H2ã䜿ã£ããã¹ãã¯é
ãããŠDBã«äŸåããããŸãããã¹ãŠã®ãã¹ããH2ã䜿çšããŠããŸãããã¹ããåãã®ã¯è² æ
ã«ãªãããã¹ããh2ãå
±æããŠããã®ã§ãããŒã¿ãæ··ä¹±ããŠãããšãã¯ãã¹ããæåãããŸããããšãã¯å€±æ ããŸãã
ããã¹ãã®å¿
èŠæ§ãæããããŸãããã ç§ãã¡ã®ããŒã ã¯ã人ãããã»ã©å€ãããªããé
åžããªãããããŸãäžå®ãæããããšããããŸãããèŠä»¶ã¯æã
å€ãããŸããããããTDDãã©ã®ããã«ããŸããïŒãã¹ãã¯éçºé床ã ãé
ããã ãã ãš æããŸãã
ãã¹ããç§ãåãæ©ã¿ãããŸããã åžäžã«åºãŠãããã¹ãé¢é£ã®æ¬ãã»ãããŒãæ¢ããŠã¿ããšãã»ãšãã©ãã®ãŸãŸãã¹ãã®å©ç¹ããã¹ãã³ãŒãã®äœãæ¹ãJUnitãMockitoçšåºŠã ã話ããŠçµãããŸããäŸã¯ã¡ããã©å
¥éè
ã®å¥œã¿ã«åãã»ã©ç°¡åãªäŸã ãã§ããã ããæåŸã«è¡ã£ãŠæ¬ãèŠãæã¯ãããªæ°ãããŸãã
ãäžäœãããçŸæ¥ã§ã©ã®ããã«æžãã®ã§ããïŒã ãSpringã«ã¯ãã¹ããã©ã®ããã«å
¥ããã®ã§ããïŒã ãããã¯ãã¬ãŒã ã¯ãŒã¯ããªãç¶æ³ã§å
¥ãããã¹ãã ããç°¡åã«å
¥ããããã®ã§ã¯ãªãã§ããããïŒã æ··ä¹±ããŸããã H2ã䜿ã£ãJPAãã¹ã...ãŸãããã§ããããããElasticSearchãCassandraã®ããã«ãã¹ãçšã®DBããªãå Žåã¯ãã©ã®ããã«ãã¹ãããã®ã§ããïŒããã«ãH2ã䜿ã£ããã¹ãã¯æ¬åœã«èŽåœçãªã»ã©é
ãã£ããäžæ¥ã«ãäœåºŠãåãè² æ
ã§ããããã¹ãã¯é »ç¹ã«å£ããŠDBããŒãã«ã§ã倿Žãããæ¥ã«ã¯é¢é£ãããã¹ããèœçããŠä¿®æ£ããªããã°ãªããªãã®ã§æéã®ç¡é§ã®ããã ãšæããŸãã
TDDãå匷ããã«ã¯ãTDDããå匷ããªãã§ãã ããã ãã®éãç§ã®æ©ã¿ã¯ãã¢ãŒããã¯ãã£ãšDDD ã®å匷ãå§ããªããããã¹ãŠè§£æ±ºãããŸããç¥ã£ãŠããŸãã TDDã¯åžžã«ãããã§ãããšããã§ãTDDã¯æ¬åœã«é
åçã§ãããªãããé£ããæ¹æ³è«ã§ãã TDDããã£ãããšã®ãªãçµç¹ã§TDDãæµè¡ã£ãŠããã®ã§ãããããTDDãšããŠéçºããããšããã°ããã«ãªãã®ã§ããããïŒ TDDã¯ãæã£ãããå§ããåã«ç¥ã£ãŠããã¹ãéžæã®ç¥èãšå
±æãå¿
èŠãšããŸãã
ãããã£ãŠãTDDãå匷ããã«ã¯ãTDDããå匷ããªãã§ãã ããããã¹ããæåã«å匷ããå¿
èŠããããŸãã 埮ç©åãããã«ã¯ãæ¹çšåŒããæ±ããšç¥ã£ãŠããå¿
èŠãããããã§ãã
ãã¹ãã«é¢ããç§ã®è©±ãè§£ããŸãïŒ ãã¹ãã«æ©ã æå¿«ã«è§£æ±ºããŸãã
ãã¹ãã®å¿
èŠæ§ ãæããªãå Žåãã¹ãã®å¿
èŠæ§ãæããããªãå Žåã¯ããŸã ãããžã§ã¯ãã®èŠæš¡ãããã»ã©å€§ãããªããããã¹ãããªããŠãååãªéçºèœåãšæåãåããŠããããã§ãããã¹ãã¯æ£è§£ã§ã¯ãããŸããïŒ ãã¹ãããªãã£ãæä»£ã«ãçŽ æŽããããããžã§ã¯ããããããéçºãããŸããããã¹ãã¯è¯ããœãããŠã§ã¢ãåŸãããã®ããŒã«ãªã®ã§ãããèªäœãç®æšã§ã¯ãããŸããã
ãã¹ãã§è¯ããã¶ã€ã³ ãåŸãæ¹æ³ãããããªãå Žå ãã¹ããããæ¹æ³ã ãã« éãããŠå匷ããŠããããã§ãã JUnitã®äœ¿ãæ¹ãMockitoã®äœ¿ãæ¹ãh2ãé£åããæ¹æ³ãå匷ããããšã¯æããã«æå³ã®ããå匷ã§ãããããããã¹ãã®æ¬è³ªã§ã¯ãããŸããããªããã¹ããããªããã°ãªãããã©ã®ãããªç®æšãããããã®ç®æšãéæããããã«ã©ã®ããã«å®è·µããã¹ãããåŠã¶å¿
èŠããããŸã
ãã¹ããã¬ãŒã ã¯ãŒã¯ ãªãã§ãã¹ãããæ¹æ³ãããããªãå Žåãã¹ããã¬ãŒã ã¯ãŒã¯ã«é¢ãã質åã以åã®è³ªåãšåãçãã§ããããããªããTypescript + Nest.jsãæžãç°å¢ã«ãããªããã©ããã£ãŠãã¹ãããŸããïŒ MockitoãH2ãªã©ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãªãã§ ãã¹ãããæ¹æ³ãåŠã¶å¿
èŠããããŸãã
Springéçºè
ã«å¿
é ãã¹ããå
¥ããæ¹æ³ ãåŠã¶å¿
èŠããããŸãã â
å®åãšåçã®ãã¹ããå
¥ããæ¹æ³ããç¥ããããŸããã â
Springéçºè
ã«å¿
èŠãªãã¹ããå
¥ããæ¹æ³ãæããŠãã ããã â
åæã«ããªããã®ããã«ãã¹ãã ããç¥ããããŸãã ãã®åçã«åºã¥ããç¥èã¯ãä»ã®ãã¬ãŒã ã¯ãŒã¯ã§ãäžè¬çãªç¥èã§ãã Nest.jsã䜿ã£ãŠãããSwing UIã䜿ã£ãŠãããGinã䜿ã£ãŠããâŠã©ãã§ãé©çšã§ããç¥èã ãšæããŸãã
çµç« ã«è¡ããšãèšèšã«é¢ããè¬çŸ© ã«ã€ãªãããŸãããã¹ãã®äŸ¡å€ãæå€§éã«èª¬æããŠããã ãããã«ã¯èšèšã«ã€ããŠã®å
容ãæããŠã¯ãããªããšèããããã§ãã
å°ãªããšãç§ããã©ãŠãºè«åœå
ã®ã¹ããªã³ã°ã«ãã¹ããå
¥ããæ¹æ³ãæããŠãããæ¬ãè¬çŸ©ã¯èŠãããªãããã§ãããã¹ãŠ@Mock ã @Spyãããã®ã¢ãããŒã·ã§ã³ãå©çšããŠmockingãšäŸåæ§æ³šå
¥ãåããŠãã¹ããäœæããŸãããããããããã®ãããªMockã©ã€ãã©ãªãååšããªãç°å¢ãªããã©ã®ããã«ãã¹ãããã®ã§ããããïŒæ¬è³ªçã«ããããã®ã¢ãããŒã·ã§ã³ããªããŠããã¹ãããæ¹æ³ ãç¥ãå¿
èŠããããŸãïŒãããŠããã¹ããã¹ã察象ãäœã§ããããåºå¥ã§ããå¿
èŠããããŸãã
ãã¹ãããã¹ãã®ããã«è¿œå ãã æ¹æ³ããç¥ããããŸãïŒ
ãã¹ãã®å¿
èŠæ§ ãããããŸãã
ãã¬ãŒã ã¯ãŒã¯ãªãã§ ã¹ããªã³ã°ã«ãã¹ããå
¥ããæ¹æ³ãããããŸãã
ã¹ããªã³ã° ã䜿çšããããè¯ãæ¹æ³ãããããŸãã
ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ãããããµãŽãã«ã¢ãŒããã¯ãã£ãžã® ç§»è¡æ¹æ³ãçè§£ããŸãã
ãªãªãšã³ããŒã·ã§ã³
ãã¹ãã远å ãããçµç¹ã§TDDãå°å
¥ãããšãã«å€±æããçç±ãèŠãŠãã ãããäžè¬çã«ãç§ãããŠããTDDã¯ãªã倱æããã®ããèŠãŠããŸãããã¹ããæ£ããçè§£ããããšãªãããã¹ããã©ã³ãã ã«æ¿å
¥ãå§ãããšãã«çºçããåé¡ããŸãšããŸãã
ãã¹ãã®çè«
åºæ¬çãªãã¹ãç¥èãå匷ããŸãããã¹ãã®å¿
èŠæ§ãå
±æãããã¹ããšèšèšã®çžé¢é¢ä¿ãç¹å®ããŸãããã¹ããäœæããªãããéçºè
ã¯ã©ã®ãããªæ©ã¿ããã¹ãããçè§£ããŸããæåŸã«ãèªç¶ãªãã¹ãã®ããã«Testabilityãåäžãããããšã«ã€ããŠèª¬æããŸãã
ããŒã1 - ãã€ãããžã§ã¯ãããŒã¹ã®ãã¹ããé©çš
ä»åŸäœ¿çšãããã€ãããžã§ã¯ããèŠãŠã¿ãŸãããããããŠããã€ãããžã§ã¯ãã«ããããããŠãã¹ããå
¥ããŠãã§ããã ããã¹ããå
¥ããŠã«ãã¬ããž100ïŒ
ãéæããŠã¿ãŸãããã®ããã»ã¹ã§ã¯ãh2ãMockMvcãPowerMockãªã©ã®å€éšã©ã€ãã©ãªã䜿çšããŸãã
æçµçã«äœæããããã¹ããäžç·ã«èŠãŠãååž°ã®ãã°ã ããã«ããŒããããã®ãã¹ãã«ã¯ã©ã®ãããªåé¡ãããããèŠãŠãã ããã
æ¹åæ§ããã²ãŒã·ã§ã³
ç§ãã¡ã®ãã€ãããžã§ã¯ãã«ãã¹ããå
¥ããã®ãããŸãè¯ãæ¹åã§ã¯ãªãçç±ãäžç·ã«èŠãŠã¿ãŸããããããã«ãåŸæ¥ã®ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ã®åé¡ç¹ã«ã€ããŠãŸãšããŠã¿ãŸãããããããŠã©ã®ããã«æ¹åããããè¬æŒè
ã®æèŠãèããŸãã
1éšå®æ©ã§ç¡äœçºãã¹ããå
¥ããããã«èŠåŽããŠãããã2éšã§ã¯Mockitoã®ãããªå€éšã©ã€ãã©ãªãªãã§èªç¶ã«Mockããæ¹æ³ã身ã«ã€ããŸããããŒã2ã®å®è·µã®ããã«ãäºåã«ã©ã®ããã«ã³ãŒãã倿Žããã®ããèŠãŠã¿ãŸãããã
ããŒã2 - ãã€ãããžã§ã¯ãæ§é èšèšã®æ¹å
å
é²ã®æ¹åæ§ããã²ãŒã·ã§ã³ãéããŠåŸãããã€ã³ãµã€ããåœç€Ÿã®ãã€ãããžã§ã¯ãã«å°å
¥ããŸãããã®éçšã§æ§é çãªå€åãäžããèšèšãæ¹åããŸãããããŠãã®éçšã§ä»¥äžã®ãããªææ³ã䜿ãããŸãã
ããã±ãŒãžæ§é ã®æ¹å ãã¡ã€ã³ãšæ°žç¶æ§ãªããžã§ã¯ããåºå¥ãã ãµãŒãã¹ããžãã¯ããã¡ã€ã³ã«ã€ã³ããŒããã å€éšé£åãäŸåæ§ãé転ãã ãã¹ããå°åãã¹ãã«ãã é²åããã¢ãŒããã¯ãã£
ãã¹ããšèšèšã®çžé¢é¢ä¿ãä»ããŠã¢ãŒããã¯ãã£ãé²åãããæ¹æ³ã«ã€ããŠèª¬æããŸããã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ããããµãŽãã«ã¢ãŒããã¯ãã£ã«ã©ã®ããã«å€ããããèŠãŠãã ãããé¢å¿ãåé¢ããªãããéçºè
ããã¡ã€ã³ã«éäžããæ¹æ³ãåŠã³ãŸãã
éçºè
ãšããŠæé·ãã å©ããŠã»ããïŒããã«ã¡ã¯ããã ã»ãŠã°ã³ ã§ãïŒ ð çŸåšã«ã«ãªã§åããŠããŠãäœãã®ã奜ããªã®ã§ãéå€åŸãåžžã«äœããéçºããŠããŸãã ã巚人ã®è©ã®äžã«ç«ã£ãå°äººããšããèšèããããŸããç§ããã¯ãå°ããªå°äººã ãã§ãããäžãã£ãå·šäººã®æé·ã«åœ¹ç«ã€ããã«ç¥èã®å¯Ÿå³ã«åªããŠããŸããå€ãã®ãžã¥ãã¢éçºè
ã®æ¹ã
ãæå°ããçµéšããããçæ§ã®æé·ããæäŒãã§ããŸãã
Q&A ð¬ Q. JUnitãMockitoã®äœ¿ãæ¹ã¯æããŠããã ããŸãããïŒ
ã¯ããçç±ã¯ä»¥äžã®éãã§ãã
ã³ã³ããã¹ãïŒ åè¬çã®å人ããšã«ãšã©ãŸãç¶æ³ãç°ãªããŸãããã§ã«æ°åãã¹ãããã人ãããå Žåã¯ãã©ã€ãã©ãªãæ±ãç緎床ãç°ãªãå ŽåããããŸããäŒç€Ÿã§äœ¿çšããŠããã©ã€ãã©ãªãJUnitãMockitoã§ã¯ãªããããããªããããŒãžã§ã³ãç°ãªããããæäŸããªãã€ã³ã¿ãŒãã§ã€ã¹ãååšããå¯èœæ§ããããŸãã代衚çãªäŸãšããŠãJUnit4ã¯@ParameterizedTestããµããŒãããŠããŸãããããã«ãåè¿°ã®ã©ã€ãã©ãªã®äœ¿ãæ¹ã¯ããã»ã©é£ãããªããé¢é£ããè¯ãè³æããã§ã«å€ãããŸãããšã«ãããGithub READMEãã¡ã€ã«ãèªãã ããå
¬åŒã¬ã€ããèªãã ãããã ãã§ååãªäœ¿ãæ¹ãåŠã¶ããšãã§ãããšæããŸãããããã£ãŠãäœ¿çšæ³ã¯éèŠãªå
容ã§ã¯ãªããšæããŸããã
ãã¹ããã¶ã€ã³ïŒ ç¹å®ã®ã©ã€ãã©ãªãæäŸããç¹å®ã®æ©èœã䜿ã£ãŠãã¹ãããæ¹æ³ãåŠã¶ããšã¯ããã®ã©ã€ãã©ãªããªããã°ãã®ãã¹ããè¡ãããšãã§ããªããšããããšã§ããããŒã«ããã¬ãŒã ã¯ãŒã¯ãããã¹ããã©ã®ããã«èšèšããã©ã®ããã«ãã¹ãå¯èœãªæ§é ã«å€ããããããéèŠã§ãããããã£ãŠããã®è¬çŸ©ã¯ããŒã«ã«éäžããŸããããã¹ãã¯éçºããã»ã¹ã®äžéšã§ãããããã£ãŠãèŠä»¶ã®åæãèšèšãé
眮ãã¡ã³ããã³ã¹ãªã©ã®æèã§èæ
®ãã¹ãç¹ã確èªããããšãããéèŠã§ãããšèããŸããã
Q. 以åã®è¬çŸ© ãšã®éãã¯äœããããŸããïŒ
ã«ãªãã¥ã©ã ãèŠãã°ããããŸããã以åã®è¬çŸ©ãšéè€ããå
容ãå€å°ãããŸããããããå¿
èŠããããšããããšã ãã説æããã«ã¯èª¬åŸåãäžè¶³ããŠæèãçè§£ãããŠãããªãã®ã§ãç¬ç«ããŠè©²åœè¬çŸ©ãåè¬ã§ããããè¬çŸ©ãæ§æããŸãããã ããå¿
ãç®æ¬¡ã確èªããŠã¿ãŠãéãªãå
容ãããã確èªããŠã¿ãŠãã ããã
ççŽãªè©±ã§ä»¥åã®è¬çŸ©ããã£ããçè§£ããŠãããããããŠéè€ããŠåè¬ããå¿
èŠã¯ãªããšæããŸãã以åã®ã¬ãã¹ã³ãæ§é çã«ãªããããè¡ãã¹ããã説æããã¬ãã¹ã³ã§ããã°ãä»åã®ã¬ãã¹ã³ã¯å®éã«ã³ãŒãã¬ãã«ã§ã©ã®ããã«è§£ãããããæ±ãã¬ãã¹ã³ãšèŠãªãããšãã§ããŸãã
Q. åè¬åã«ç¥ã£ãŠããã¹ãããšã¯ãããŸããïŒ
ãã®è¬çŸ©ã¯ãã¹ããªã³ã°ãJPAãæããŠãããè¬çŸ©ã§ã¯ãããŸãããåè¬è
ãããããã®SpringãšJPAã«å¯ŸåŠã§ããããšãåæã«è¬çŸ©ãè¡ããŸãããŸããã¹ããªã³ã°ã«ãã¹ããå
¥ããæ¹æ³ããç¥ããããŠããŸãããæ¬è³ªçã«ã¯äŸåæ§ãã©ã®ããã«è§£æŸãããã«ã€ããŠçŠç¹ãåœãŠãŠé²ãã§ãã ãå¿
ãããèšèªããã¬ãŒã ã¯ãŒã¯ã«ãã ããå
容ã§ã¯ãªããšæããŸãããªããå°æ»ç¥èã¯å¿
èŠãããŸãã :)
ðŸåè¬åã«ç¢ºèªããŠãã ããïŒ
è¬çŸ©å
ã®å®ç¿å
容ã¯ããªãã¹ãç¹å®ã®ã©ã€ãã©ãªãIDEã仿§ã«äŸåããªãããã«æ§æããŸãããç¹å®ã®ããŒãžã§ã³ã«ããç¹å®ã®æ©èœã掻çšããè¬çŸ©ã«ãªããªãããåªããŸãããããã§ãç¥ããªãã®ã§è¬æŒè
ã®ã©ãããããæ§æã以äžã®ãããªç°å¢ã§ããããšããç¥ããããŸãã PCã®ä»æ§ãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒMacBook ProïŒ16-inchã2019ïŒãšmacOS Monterey 12.6 IDE: IntelliJ IDEA 2021.3.2 Java 17ãSpring Boot 3.0.1ãJUnit 4.13.2ãAssertJ 3.23.1 åè¬çã«ã¯40ããŒãžå
å€ã®PPTè³æ12åã忢±ããŠããŸãã ãã®ã¬ãã¹ã³ã§ã¯ãããã°ã©ãã³ã°èšèªãã¹ããªã³ã°ãæ±ãæ¹æ³ãªã©ã«ã€ããŠã¯èª¬æããŸããã SpringãšSpring Data JPAãäžåºŠã§ãæ±ã£ããŠãŒã¶ãŒã«åºã¥ããŠèª¬æããŸãã ControllerãServiceãRepositoryã«ã€ããŠç¥ã£ãŠããããšãåæãšããŠèª¬æããŸãã è¬çŸ©ã«äœ¿çšãããã€ãããžã§ã¯ãããã¬ãã¥ãŒã¬ãã¹ã³ã«è§£æŸããŸããã確èªããŠã¿ãŠçè§£ã§ããçšåºŠãªã倧äžå€«ã§ãã PPTã®äžéšããã£ããã£ããŠå匷ããå
容ãããã°ã«æçš¿ããããšã¯èš±å¯ãããŠããŸãããè³æå
šäœãå人ã®ããã°ã«å
±æããããšã¯ã§ããŸããããäºæ¿ãã ããïŒ ä»¥åã®è¬çŸ©ãšéè€ããå
容ãå€å°ãããŸããç®æ¬¡ã確èªããŠãéãªã£ãŠããå
容ã確èªããŠã¿ãŠãã ããã ãã¢ãããžã§ã¯ãã¯ãã¡ã ãã芧ãã ããã