Java ã§ã®åäœãã¹ã: æŠç¥ãšããŒã«
å¹ççãªãã¹ããšã³ãŒãå質ã®åäžã«ã€ãªããæŠç¥ããã¯ããã¯ãããŒã«ã«çŠç¹ãåœãŠãŠãJava ã®åäœãã¹ãã®äžçãæ¢çŽ¢ããŸãã

åäœãã¹ãã¯ãéçºè ãã³ãŒãã®æ£ç¢ºæ§ãä¿¡é Œæ§ãå¹çæ§ã確ä¿ã§ããããã«ãããœãããŠã§ã¢éçºã®éèŠãªåŽé¢ã§ãã Java ã§ã¯ãåäœãã¹ããšã¯ãã¡ãœãããã¯ã©ã¹ããŸãã¯é¢é£ããã¡ãœãããã¯ã©ã¹ã®å°ããªã°ã«ãŒããªã©ãåã ã®ã³ãŒãåäœã®åäœãæ€èšŒããããšãæããŸããäž»ãªç®æšã¯ãéçºããã»ã¹ã®æ©ã段éã§ãšã©ãŒãçºèŠããæçµè£œåã®ãã°ã®æ°ãæå°éã«æããããšã§ãã
åã ã®ãŠãããããã¹ããããšã次ã®ãããªå€ãã®å©ç¹ãåŸãããŸãã
- ãã°ãæ©æã«æ€åºããä¿®æ£ã容æã«ãªããŸãã
- æ£ç¢ºæ§ã確ä¿ãããªã°ã¬ãã·ã§ã³ã鲿¢ããããšã§ã³ãŒãã®å質ãåäžãããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®èšèšãšã¢ãŒããã¯ãã£ã®æ€èšŒã«åœ¹ç«ã¡ãŸãã
- éçºè ãèªåã®ã³ãŒãã«å¯Ÿããèªä¿¡ãé«ããŸãã
- ã³ãŒãã®ä¿å®ãšãªãã¡ã¯ã¿ãªã³ã°ãããå¹ççã«ãªããŸãã
- 倿Žã«é¢ãããã£ãŒãããã¯ãå³åº§ã«æäŸããããšã§ãéçºããã»ã¹ãã¹ããŒãã¢ããããŸãã
Java åäœãã¹ãã¯ããã¹ãã®äœæãšå®è¡ãç°¡çŽ åãã髿°Žæºã®ã³ãŒãå質ãç¶æããã®ã«åœ¹ç«ã€ãã¬ãŒã ã¯ãŒã¯ãããŒã«ãããã³æ¹æ³è«ã«å€§ããäŸåããŠããŸãããã®èšäºã§ã¯ãåäœãã¹ãã®åºæ¬çãªæŠå¿µã«ã€ããŠèª¬æããå¹çç㪠Java åäœãã¹ãã®ããã®å®è·µçãªæŠç¥ãšãã¯ããã¯ãæäŸããŸãã
åäœãã¹ãã®åºæ¬æŠå¿µ
Java ã§åäœãã¹ããå§ããã«ã¯ãããã€ãã®åºæ¬æŠå¿µãçè§£ããããšãäžå¯æ¬ ã§ãã
ãã¹ãã±ãŒã¹
ãã¹ã ã±ãŒã¹ã¯ãã¹ã ã¹ã€ãŒãã®æå°ã®ã¢ãããã¯ãªéšåã§ãããåäžã®å ¥å (颿°ã®åŒæ°ãã¡ãœããåŒã³åºããªã©) ã«çŠç¹ãåœãŠãããã«å¯Ÿå¿ããåºå (æ»ãå€ãäŸå€ãªã©) ããã¹ãããŸãããã¹ã ã±ãŒã¹ã¯ãã³ãŒããèŠä»¶ãæºãããŠããããšãæ€èšŒããããã«æåŸ ãããçµæãå«ãç¹å®ã®å ¥åã·ããªãªã§æ§æãããŸãã
ãã¹ãã¹ã€ãŒã
ãã¹ã ã¹ã€ãŒãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®ãŠããããã³ã³ããŒãã³ãããŸãã¯æ©èœããã¹ãããããã«èšèšããããã¹ã ã±ãŒã¹ã®ã³ã¬ã¯ã·ã§ã³ã§ãããã¹ã ã¹ã€ãŒãã®ç®çã¯ããã¹ã察象ã®ã³ã³ããŒãã³ãã®ã¹ã³ãŒãå šäœãæ£ããåäœããŠããããšãæ€èšŒããå®è¡æã«ã¢ããªã±ãŒã·ã§ã³ã®ã¹ããŒã¿ã¹ã«é¢ãããã£ãŒãããã¯ãæäŸããããšã§ãã
ãã¹ãã©ã³ããŒ
ãã¹ã ã©ã³ããŒã¯ããã¹ã ã±ãŒã¹ã®å®è¡ãšçµæã®ã¬ããŒããæ åœããããŒã«ãŸãã¯ã³ã³ããŒãã³ãã§ããã»ãšãã©ã®å Žåããã¹ã ã©ã³ããŒã¯åäœãã¹ã ãã¬ãŒã ã¯ãŒã¯ã®äžéšã§ãããæ§é åããå¶åŸ¡ãããç°å¢ã§ãã¹ããå®è¡ã§ããå€ãã®å Žå CI/CD ãã€ãã©ã€ã³ãŸã㯠IDE ãšçµ±åãããŸãã
ã¢ãµãŒã·ã§ã³
ã¢ãµãŒã·ã§ã³ã¯ãã³ãŒãåäœ (ã¡ãœããã颿°ãªã©) ã®å®éã®åºåãšæåŸ ãããçµæãæ¯èŒããã¹ããŒãã¡ã³ãã§ããã¢ãµãŒã·ã§ã³ã¯ããã¹ã ã±ãŒã¹ãæåããã倱æãããã倿ããæ€èšŒã¡ã«ããºã ãšããŠæ©èœããã³ãŒããèŠä»¶ã«åŸã£ãŠåäœããããšãä¿èšŒããŸãã
ãã¹ãããã«
ãã¹ã ããã«ã¯ããã¹ã察象ã®ãŠãããã®äŸåé¢ä¿ã眮ãæããŠãŠããããåé¢ãããã¹ãçšã®å¶åŸ¡ãããç°å¢ãæäŸããããã«äœ¿çšããããªããžã§ã¯ãã§ãããã¹ã ããã«ã¯ãã¢ãã¯ãã¹ã¿ãããããŒããã§ã€ã¯ãã¹ãã€ã«åé¡ã§ããŸãããããã¯ããã¹ãããã»ã¹ãç°¡çŽ åãããã广çãã€å¹ççã«ããããã«äžå¯æ¬ ã§ãã

å¹çç㪠Java åäœãã¹ãã®ããã®æŠç¥ãšãã¯ããã¯
å¹çç㪠Java åäœãã¹ããå®çŸããã«ã¯ãããã»ã¹ãç°¡çŽ åããå æ¬çãªãã¹ãç¯å²ã確ä¿ãã广çãªæŠç¥ãšææ³ãé©çšããããšãéèŠã§ãããã¹ãã®ã¢ãããŒããæ¹åããããã®å®è·µçãªææ¡ãããã€ã瀺ããŸãã
ã¯ãªãã£ã«ã« ãã¹ã®ãã¹ãã«éç¹ã眮ã
ã¢ããªã±ãŒã·ã§ã³å ã®ã¯ãªãã£ã«ã« ãã¹ãç¹å®ãããããã®é åã®ãã¹ãã«åªå é äœãä»ããŸããã¯ãªãã£ã«ã« ãã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ£ããæ©èœããäžã§ãªã¹ã¯ãè€éãããŸãã¯éèŠæ§ãé«ãã³ãŒãé åã§ãããããã®é åã«çŠç¹ãåœãŠãããšã§ãæãéèŠãªæ©èœãå®å®ãããã°ãçºçããªãããšãä¿èšŒãããŸãã
é©åãªã¢ãµãŒã·ã§ã³ãéžæãã
ãã¹ã察象ã®ã³ãŒãã®èŠä»¶ãšæåŸ ãããçµæã«äžèŽããé©åãªã¢ãµãŒã·ã§ã³ã䜿çšããŸããããšãã°ãã¡ãœãããåžžã«æ£ã®æ°ãè¿ãå¿ èŠãããå Žåã¯ãæ»ãå€ã 0 ãã倧ããããšãã¢ãµãŒãããŸããã¢ãµãŒã·ã§ã³ãå ·äœåãããšããã¹ãããã匷åã§ä¿¡é Œæ§ã®é«ããã®ã«ãªããŸãã
ãã¹ãäžã®ãŠããããéé¢ãã
ãŠãããããã¹ããããšãã¯ããã®åäœãããŒã¿ããŒã¹ããããã¯ãŒã¯æ¥ç¶ããã®ä»ã®ã·ã¹ãã ã³ã³ããŒãã³ããªã©ã®å€éšäŸåé¢ä¿ããåé¢ãããŠããããšã確èªããŠãã ããããã®ã¢ãããŒãã«ãããããå®å®ããŠä¿å®ããããå¹ççãªãã¹ããå¯èœã«ãªããå€éšèŠå ã«ãã£ãŠåŒãèµ·ããããæœåšçãªåé¡ãé²ãããšãã§ããŸãã
ãã¹ãã±ãŒã¹ã广çã«æŽçããŠååãä»ãã
ãã¹ã察象ã®ã³ãŒã ã³ã³ããŒãã³ããŸãã¯æ©èœã«åºã¥ããŠããã¹ã ã±ãŒã¹ãè«çã¹ã€ãŒãã«ç·šæããŸããããã«ããã¹ã ã±ãŒã¹ãšã¡ãœããã«ã¯æç¢ºã§èª¬æçãªååã䜿çšãããã¹ãã®ç®çãšæåŸ ãããçµæã瀺ããŸãããã®ã¢ãããŒãã«ãããä»ã®éçºè ããã¹ããçè§£ããå°æ¥çã«ãã¹ã ã¹ã€ãŒããç¶æããããšã容æã«ãªããŸãã
ã¯ãªãŒã³ã§ä¿å®ãããããã¹ãã³ãŒããæžã
ãã¹ã ã³ãŒãã¯ãéçšã³ãŒããšåãããã现å¿ã®æ³šæãæã£ãŠæ±ããŸããçè§£ãããããä¿å®ãããªãã¡ã¯ã¿ãªã³ã°ãããããã¯ãªãŒã³ã§ç°¡æœãã€çµç¹åããããã¹ã ã³ãŒããäœæããŸãããã¹ã ã³ãŒãã®å質ãé«ãä¿ã€ããšã¯ããã广çãã€å¹ççãªåäœãã¹ããšã³ãŒãã®å質ã«è²¢ç®ããŸãã
å¯èœãªå Žåã¯ãã¹ããèªååãã
å埩çãã€æ¥åžžçãªãã¹ãã¿ã¹ã¯ãèªååããŠãæéãç¯çŽãã人çãšã©ãŒãåæžããŸããèªååããããã¹ã ã¹ã€ãŒãã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãã€ãã©ã€ã³ã®äžéšãšããŠå®è¡ããããã³ãŒãã®åè³ªãšæ£ç¢ºæ§ã«é¢ãããã£ãŒãããã¯ãå³åº§ã«æäŸããããã«ã¹ã±ãžã¥ãŒã«ãããããããšãã§ãããããéçºãµã€ã¯ã«ã®æ©ã段éã§ãšã©ãŒãèŠã€ããŠä¿®æ£ããããšã容æã«ãªããŸãã
ãããã®æŠç¥ãšææ³ãå®è£ ãããšãJava åäœãã¹ããããå¹ççãã€å¹æçã«ãªããã³ãŒãã®å質ãåäžããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ãšä¿¡é Œæ§ãåäžããŸãã
Java çšã®äžè¬çãªåäœãã¹ã ããŒã«
Java éçºè ã¯ã ãã¹ã ããã»ã¹ã广çã«åçåããããã«ãããã€ãã®åäœãã¹ã ããŒã«ãå©çšã§ããŸãããããã®ããŒã«ãçµã¿åãããŠãåã ã®ãŠãããã®ãã¹ãããã¹ã ã¹ã€ãŒãã®äœæããªããžã§ã¯ãã®ã¢ãã¯ãªã©ã容æã«ããããšãã§ããŸããæã人æ°ã®ããããŒã«ã«ã¯æ¬¡ã®ãããªãã®ããããŸãã
- JUnit: JUnit ã¯ãJava ãããžã§ã¯ãã§æãåºã䜿çšãããŠããåäœãã¹ã ãã¬ãŒã ã¯ãŒã¯ã§ããåäœãã¹ããéçºããã³å®è¡ããããã®ããŸããŸãªæ³šéãã¢ãµãŒã·ã§ã³ãæ§æã®éžæè¢ãæäŸãããŸãã
- TestNG: TestNG ã¯ãJUnit ãš NUnit ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãå¥ã®ãã¹ã ãã¬ãŒã ã¯ãŒã¯ã§ããã䞊åãã¹ãã®å®è¡ãæè»ãªãã¹ãæ§æãããŒã¿é§ååãã¹ãã®ãµããŒããªã©ã®è¿œå æ©èœãåããŠããŸãã
- Mockito: Mockitoåäœãã¹ãçšã®ã¢ã㯠ãªããžã§ã¯ãã®äœæãæ§æãå¶åŸ¡ã®ããã»ã¹ãç°¡çŽ åããã人æ°ã®ãã Java ã¢ããã³ã° ãã¬ãŒã ã¯ãŒã¯ã§ãã
- PowerMock: PowerMock ã¯ãMockito ã EasyMock ãªã©ã®ä»ã®äžè¬çãªã¢ã㯠ãã¬ãŒã ã¯ãŒã¯ã®æ¡åŒµæ©èœã§ãããéçã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒãæçµçãªã¯ã©ã¹ãšã¡ãœããã®ã¢ãã¯ãªã©ã®è¿œå æ©èœãæäŸããŸãã
- AssertJ: AssertJ ã¯ã衚çŸåè±ãã§èšè¿°çãªãã¹ã ã¢ãµãŒã·ã§ã³ãäœæããããã®æµæ¢ãª API ãæäŸãããªãŒãã³ãœãŒã¹ ã¢ãµãŒã·ã§ã³ ã©ã€ãã©ãªã§ãã
- Spock: Spock 㯠Java ããã³ Groovy ã¢ããªã±ãŒã·ã§ã³çšã®ãã¹ãããã³ä»æ§ãã¬ãŒã ã¯ãŒã¯ã§ãããGroovy ããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãæç¢ºã§è¡šçŸåè±ããªä»æ§èšèªã䜿çšããããŒã¿é§ååã®ãã¹ããã¢ãã¯ãªã©ã®é«åºŠãªæ©èœãæäŸããŸãã
å€ãã® Java éçºè ãããŒã ã¯ãç¹å®ã®ããŒãºã奜ã¿ã«åãããŠããŒã«ã®çµã¿åãããéžæãããããžã§ã¯ãã®èŠä»¶ã«åãããŠé©åãªãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªãéžæããä¿¡é Œæ§ã®é«ãé«å質ã®ã³ãŒããæäŸããŸãã
JUnit - æãåºã䜿çšãããŠãã Java åäœãã¹ã ãã¬ãŒã ã¯ãŒã¯
JUnit 㯠Java ã¢ããªã±ãŒã·ã§ã³çšã®ãã¹ã ãã¬ãŒã ã¯ãŒã¯ãšããŠåºãæ¡çšãããŠãããåäœãã¹ããäœæãç·šæãå®è¡ããæ©èœãæäŸããŸããç¶ç¶çãªæŽæ°ãšå€§èŠæš¡ãªãµããŒãã³ãã¥ããã£ã«ãããJUnit 㯠Java éçºè ã«ãšã£ãŠã®äºå®äžã®æšæºã§ããç¶ããŸãã
JUnit ã®éèŠãªæ©èœã¯ãã·ã³ãã«ã§ãããªãã匷åãªæ³šéããŒã¹ã®æ§æã§ãããããã®ã¢ãããŒã·ã§ã³ã䜿çšãããšãéçºè ã¯ãã¹ã ã¡ãœãããè¿ éã«å®çŸ©ãããã¹ã ã³ã³ããã¹ããã»ããã¢ããããã³ç Žæ£ãããã¹ã ã¹ã€ãŒããæŽçã§ããŸããæãäžè¬çã«äœ¿çšããã JUnit ã¢ãããŒã·ã§ã³ã«ã¯ã次ã®ãããªãã®ããããŸãã
@Test: ã¡ãœãããåäœãã¹ããšããŠå®çŸ©ããŸãã@BeforeEach: ã¯ã©ã¹å ã®åãã¹ã ã¡ãœããã®åã«å®è¡ãããã¡ãœãããæå®ããŸãããã¹ãç°å¢ã®ã»ããã¢ããã«äœ¿çšã§ããŸãã@AfterEach: ã¯ã©ã¹å ã®åãã¹ã ã¡ãœããã®åŸã«å®è¡ãããã¡ãœãããæå®ããŸããã¯ãªãŒã³ã¢ããäœæ¥ã«äœ¿çšã§ããŸãã@BeforeAll: éåžžãå ±æãªãœãŒã¹ãåæåããããã«ãã¯ã©ã¹å ã®ãã¹ãŠã®ãã¹ãã®åã« 1 åå®è¡ãããã¡ãœãããæå®ããŸãã@AfterAll: ã¯ã©ã¹å ã®ãã¹ãŠã®ãã¹ãã®åŸã«ãéåžžã¯å ±æãªãœãŒã¹ãè§£æŸããããã« 1 åå®è¡ãããã¡ãœãããæå®ããŸãã@DisplayName: ãã¹ã ã¡ãœãããŸãã¯ãã¹ã ã¯ã©ã¹ã«äººéãå€èªã§ããã«ã¹ã¿ã åãæäŸããŸãã@Nested: ãã¹ããããã¯ã©ã¹ã«è¿œå ã®ãã¹ã ã±ãŒã¹ãå«ãŸããŠããããšã瀺ããŸãããã¹ãããããã¹ã ã¯ã©ã¹ã䜿çšãããšããã¹ã ã±ãŒã¹ããã广çã«æŽçã§ããŸãã
JUnit ã¯ãæåŸ
ããããã¹ãçµæãæ€èšŒããããã®ããã€ãã®ã¢ãµãŒã·ã§ã³ ( assertEquals ã assertTrue ã assertNull ãªã©) ãæäŸããŸããããã«ã assertThrows ã¡ãœããã¯äºæãããäŸå€ã®ãã¹ããç°¡çŽ åããã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã§ã®äŸå€ã±ãŒã¹ã®é©åãªåŠçãä¿èšŒããŸãã

Java åäœãã¹ãã§ã®ã¢ãã¯ãšã¹ã¿ã
ã¢ããã³ã°ãšã¹ã¿ãã¯ããã¹ã察象ã®ã³ãŒããäŸåé¢ä¿ããåé¢ããå¶åŸ¡ãããç°å¢ã§çŸå®äžçã®ãªããžã§ã¯ãã®åäœãã·ãã¥ã¬ãŒãããããã®åäœãã¹ãã«ãããŠäžå¯æ¬ ãªææ³ã§ãããã®åé¢ã«ãããç¹ã«è€éãªã¢ããªã±ãŒã·ã§ã³ã«ãããŠããã¹ãã¯å€éšã®äŸåé¢ä¿ã§ã¯ãªãããã¹ã察象ã®ãŠãããã®æ©èœã®ã¿ã«çŠç¹ãåœãŠãããšãä¿èšŒãããŸãã
Mockito ã PowerMock ãªã©ã®ã¢ã㯠ãã¬ãŒã ã¯ãŒã¯ã¯ãJava åäœãã¹ãã§ã®ã¢ã㯠ãªããžã§ã¯ãã®äœæãšç®¡çã«åœ¹ç«ã¡ãŸãããããã®ãã¬ãŒã ã¯ãŒã¯ã«ãããéçºè ã¯æ¬¡ã®ããšãå¯èœã«ãªããŸãã
- ã«ã¹ã¿ã ã®ã¢ãã¯å®è£ ã¯ã©ã¹ãäœæããã«ã¢ã㯠ãªããžã§ã¯ããçæããŸãã
- ã¹ã¿ã ã¡ãœãããåŒã³åºããã¢ãã¯åãããã¡ãœããã®ã«ã¹ã¿ã æ»ãå€ãŸãã¯äŸå€ãå®çŸ©ããŸãã
- ãã¹ã察象ã®ãŠããããšãã®äŸåé¢ä¿ã®éã®çžäºäœçšãæ€èšŒããŸã (ããšãã°ãã¡ãœãããç¹å®ã®åŒæ°ã§åŒã³åºãããŠããããšã確èªããŸã)ã
Mockito ã¯ãã¢ã㯠ãªããžã§ã¯ããçæããã³æ§æããããã®ã¯ãªãŒã³ã§ç°¡å㪠API ãæäŸããã人æ°ã®ãã Java ã¢ããã³ã° ã©ã€ãã©ãªã§ãã Mockito ã¯ãã€ã³ã¿ãŒãã§ã€ã¹ãšå ·è±¡ã¯ã©ã¹ã®ã¢ã㯠ãªããžã§ã¯ãã®äœæããµããŒãããèªã¿ãããæ§æã§ã¡ãœããã®ã¹ã¿ãåãšæ€èšŒãå¯èœã«ããŸããããšãã°ãMockito ããããžã§ã¯ãã«ã€ã³ããŒãããåŸãéçºè ã¯æ¬¡ã®ã³ãŒãã䜿çšããŠã¢ã㯠ãªããžã§ã¯ããäœæã§ããŸãã
MyService myServiceMock = Mockito.mock(MyService.class);
Mockito ã§ã®ã¡ãœããåŒã³åºãã®ã¹ã¿ãåã¯ã when ãš thenReturn ã¡ãœããã䜿çšããããšã§ç°¡åã«è¡ããŸãã
Mockito.when(myServiceMock.doSomething(arg)).thenReturn(someResult);
ã¢ããªã±ãŒã·ã§ã³ ã³ãŒããšã¢ãã¯åããããªããžã§ã¯ãéã®çžäºäœçšã®æ€èšŒã¯ãMockito ã® verify ã¡ãœããã䜿çšããŠå®çŸã§ããŸãã
Mockito.verify(myServiceMock).doSomething(arg);
ãã 1 ã€ã® Java ã¢ã㯠ãã¬ãŒã ã¯ãŒã¯ã§ãã PowerMock ã¯ãMockito ã©ã€ãã©ãªãš EasyMock ã©ã€ãã©ãªãæ¡åŒµããéçã¡ãœãããã³ã³ã¹ãã©ã¯ã¿ãŒãæçµã¯ã©ã¹ãšã¡ãœãããã¢ãã¯ããããã®è¿œå æ©èœãæäŸããŸãããã®æ¡åŒµæ©èœã¯ãMockito ãªã©ã®åºç€ãšãªãã¢ã㯠ã©ã€ãã©ãªã® API ã䜿ãããªããªãããã¬ã¬ã·ãŒ ã³ãŒãããã¹ããå°é£ãªã³ãŒãããã¹ãããå Žåã«æçã§ãã
Java åäœãã¹ãã§ã¢ãã¯ãšã¹ã¿ãã䜿çšãããšãéçºè ã¯ãã¹ã察象ã®ãŠãããã®æ£ç¢ºæ§ãšå¹çã«éäžã§ããããã«ãªããæœåšçãªåé¡ã éçºã©ã€ã ãµã€ã¯ã« ã®æ©ã段éã§ç¢ºå®ã«ç¹å®ããã解決ãããŸãã
Java ã®ãã¹ãé§åéçº (TDD)
ãã¹ãé§åéçº (TDD) ã¯ãå®éã®ã³ãŒããäœæããåã«ãã¹ããäœæããããšã«éç¹ã眮ããäžè¬ç㪠ãœãããŠã§ã¢éçº æ¹æ³è«ã§ãããã®ã¢ãããŒãã«ã¯ãã³ãŒãã®å質ã®åäžããªãã¡ã¯ã¿ãªã³ã°ã®å®¹æããã³ãŒãã®ä¿å®æ§ã®åäžãªã©ãããã€ãã®å©ç¹ããããŸãã TDD ããã»ã¹ã¯ãå€ãã®å Žå Red-Green-Refactor ãšåŒã°ãã 3 ã€ã®äž»èŠãªã¹ãããã§æ§æãããŸãã
- 倱æãããã¹ããäœæãã (èµ€) : å¿ èŠãªæ©èœãå®çŸ©ããæ°ããåäœãã¹ããäœæããŸããå¿ èŠãªã³ãŒãããŸã å®è£ ãããŠããªãããããã¹ãã¯æåã¯å€±æããŸãã
- ãã¹ãã«åæ Œããã³ãŒããèšè¿°ããŸã (ç·è²) : ãã¹ãã«åæ Œããããã«å¿ èŠãªã³ãŒããå®è£ ããŸãããã®ã¹ãããã¯ãçµæãšããŠåŸãããå®è£ ãæé©ãŸãã¯å®å šã§ã¯ãªãå Žåã§ãããã¹ãã«åæ Œããããšã«éç¹ã眮ããŠããŸãã
- ã³ãŒãããªãã¡ã¯ã¿ãªã³ã° (Refactor) : å¿ èŠã«å¿ããŠãã³ãŒããã¯ãªãŒã³ã¢ããããå¿ èŠãªæ¹åãå ããŸãããªãã¡ã¯ã¿ãªã³ã°åŸããã¹ããåæ Œããããšã確èªããŸãããã®ã¹ãããã¯ããã¹ããã°ãªãŒã³ã«ä¿ã¡ãªãããã³ãŒãã®å質ãç¶æããã®ã«åœ¹ç«ã¡ãŸãã
ãã®ãµã€ã¯ã«ã¯æ°ããæ©èœããšã«ç¹°ãè¿ããããœãããŠã§ã¢éçºãžã®æ§é åãããäœç³»çãªã¢ãããŒããæäŸãããŸãã TDD ããã»ã¹ã«ã¯ãJava éçºè ã«ãšã£ãŠããã€ãã®å©ç¹ããããŸãã
- ã³ãŒãå質ã®åäž: ãã¹ãã¯å®éã®ã³ãŒãã®åã«èšè¿°ããããããéçºè ã¯æºãããªããã°ãªããªãèŠä»¶ãæç¢ºã«çè§£ã§ããŸãããã®ããã»ã¹ã¯ãã°ããªã°ã¬ãã·ã§ã³ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
- ãªãã¡ã¯ã¿ãªã³ã°ã®å®¹æå: éçºè ã¯ãããããªã°ã¬ãã·ã§ã³ããã£ããããäžé£ã®ãã¹ããå©çšã§ãããããäºåã«ãã¹ããäœæãããšãã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšæ°æ©èœã®å®è£ ãããå®å šã«ãªããŸãã
- ããä¿å®ããããã³ãŒã: TDD ã§ã¯ãå°ããªæ©èœåäœã¯åå¥ã«ãã¹ãå¯èœã§ããå¿ èŠããããããéçºã«ã¢ãžã¥ãŒã«åã®ã¢ãããŒãã匷å¶ãããŸããããã«ãããéåžžãã³ãŒããããä¿å®ãããããçè§£ãããããªããŸãã
Java ã¢ããªã±ãŒã·ã§ã³éçºã« TDD ã䜿çšããã«ã¯ãJUnit ã®ãããªææ°ã®åäœãã¹ã ãã¬ãŒã ã¯ãŒã¯ãå¿ èŠã§ãã TestNG ã Mockito ãªã©ãä»ã®äžè¬çãªãã¹ã ãã¬ãŒã ã¯ãŒã¯ãããŒã«ã JUnit ãšçµ±åããŠã远å ã®æ©èœãæäŸã§ããŸãã
Java ã§ã®ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãšåäœãã¹ã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ (CI) ã¯ãéçºè ãã³ãŒãã®å€æŽãå ±æãªããžããªã«é »ç¹ã«çµ±åããããšã奚å±ãããœãããŠã§ã¢éçºææ³ã§ãã CI ãµãŒããŒã¯ãæ°ããã³ãŒããèªåçã«æ§ç¯ããã¹ããæ€èšŒããã¢ããªã±ãŒã·ã§ã³ã®å質ãšå®å®æ§ã«é¢ãããã£ãŒãããã¯ãå³åº§ã«æäŸããŸãã Java åäœãã¹ãã CI ãã€ãã©ã€ã³ã«çµ±åãããšã次ã®ãããªå©ç¹ããããŸãã
- ã³ãŒãå質ã«é¢ãã峿ãã£ãŒãããã¯: ãã¹ãŠã®ã³ãŒã倿Žã®èªåãã¹ãã«ãããéçºããã»ã¹ã®æ©ã段éã§ãšã©ãŒã確å®ã«çºèŠã§ããŸãããã®ãã£ãŒããã㯠ã«ãŒãã¯ãéçºè ãåé¡ãç©æ¥µçã«ç¹å®ããŠå¯ŸåŠããã®ã«åœ¹ç«ã¡ããã®çµæãæ¬çªç°å¢ã§ã®æ¬ é¥ãæžå°ããŸãã
- åžå Žæå ¥ãŸã§ã®æéã®ççž®: CI ã¯ãã«ããšãã¹ãã®ããã»ã¹ãèªååããããšã§ç¶ç¶çããªããªãŒãä¿é²ããæ°æ©èœãæ¹åãå®çšŒåç°å¢ã«å°å ¥ããã®ã«ãããæéãççž®ããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®åŒ·å: CI ãã€ãã©ã€ã³ã¯ãã³ãŒãã®å質ãšå®å®æ§ã«é¢ããå¯äžã®ä¿¡é Œã§ããæ å ±æºãæäŸããããšã§ãéçºè ããã¹ã¿ãŒããã®ä»ã®é¢ä¿è éã®ã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã©ãã¬ãŒã·ã§ã³ãä¿é²ããŸãã
JenkinsãGitLab CIãCircleCI ãªã©ã®äžè¬ç㪠CI ããŒã«ã¯ãJUnit ã TestNG ãªã©ã® Java åäœãã¹ã ãã¬ãŒã ã¯ãŒã¯ãšã®ã·ãŒã ã¬ã¹ãªçµ±åãæäŸããŸãããããã®ããŒã«ã䜿çšãã CI ãã€ãã©ã€ã³ã®ã»ããã¢ããã¯ããã«ã ã¹ã¯ãªãããæ§æããå®è¡ãããã¹ã ã±ãŒã¹ãæå®ããã ãã§ç°¡åã§ããããã«ãããéçºè ã¯ã³ãŒãã®äœæã«éäžããCI ãã€ãã©ã€ã³ãå©çšããŠäœæ¥ã®å質ã«é¢ãããã£ãŒãããã¯ãèªåçã«æäŸã§ããããã«ãªããŸãã
Java éçºè ã®ããã®åäœãã¹ãã®ãã¹ã ãã©ã¯ãã£ã¹
åäœãã¹ããäœæããéã«ãã¹ã ãã©ã¯ãã£ã¹ã«åŸãããšã¯ãJava ã¢ããªã±ãŒã·ã§ã³ãæåãããããã«éåžžã«éèŠã§ããæ¬¡ã®ãã¹ã ãã©ã¯ãã£ã¹ã¯ãJava éçºè ãå¹ççã§ä¿¡é Œæ§ãé«ããä¿å®ããããåäœãã¹ããäœæããã®ã«åœ¹ç«ã¡ãŸãã
- æç¢ºãã€ç°¡æœãªãã¹ã ã±ãŒã¹ãäœæãã: ãã¹ã ã±ãŒã¹ã¯ã·ã³ãã«ã§èªã¿ããããã³ãŒãã® 1 ã€ã®åŽé¢ããã¹ãããããšã«éç¹ã眮ãããã®ã«ããå¿ èŠããããŸããä¿å®ãçè§£ãå°é£ã«ãªãå¯èœæ§ããããããé床ã«è€éãªãã¹ã ã±ãŒã¹ãäœæããªãã§ãã ããã
- ã¯ãªãã£ã«ã« ãã¹ããã¹ããã: æåã·ããªãªããšããž ã±ãŒã¹ã倱æã·ããªãªãªã©ãã³ãŒãå ã®éèŠãªãã¹ããã¹ã ã±ãŒã¹ã§ã«ããŒãããŠããããšã確èªããŸããå æ¬çãªãã¹ã ã«ãã¬ããžã¯ãã¢ããªã±ãŒã·ã§ã³ ããžãã¯ãæ€èšŒããå ç¢æ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
- é©åãªã¢ãµãŒã·ã§ã³ã䜿çšãã: åãã¹ã ã±ãŒã¹ã«é©åãªã¢ãµãŒã·ã§ã³ãéžæãã倱æããå Žåã«ã¯æå³ã®ãããšã©ãŒ ã¡ãã»ãŒãžã衚瀺ããŸãããã®ã¢ãããŒãã¯ãéçºè ããã¹ãçµæãè¿ éã«è©äŸ¡ããäœãåé¡ã ã£ãã®ããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
- ãã¹ãäžã®ãŠããããåé¢ãã: ã¢ãã¯ãã¹ã¿ããªã©ã®ææ³ã䜿çšããŠããã¹ãäžã®ãŠããããåé¢ããå€éšäŸåé¢ä¿ãåé€ããŸãããã®ã¢ãããŒãã«ããããã¹ãçµæãäŸåé¢ä¿ã®åäœã§ã¯ãªãããã¹ã察象ãŠãããã®åäœãæ£ç¢ºã«åæ ããããšãä¿èšŒãããŸãã
- ãã¹ã ã±ãŒã¹ã®æŽçãšååä»ã: ãã¹ã ã±ãŒã¹ãããã±ãŒãžå ã§é©åã«æŽçãããããããããã¹ã ã¡ãœããåã䜿çšãããªã©ããã¹ã ã±ãŒã¹ã®äžè²«ããåœåèŠåã«åŸã£ãŠãã ãããããã«ãããé¢é£ãããã¹ããèŠã€ããŠå®è¡ããããšã容æã«ãªããŸãã
- ãã¹ãé§åéçº (TDD) ã䜿çšãã: TDD ãæ¡çšãããšãéçºè ã¯æ°ããæ©èœãå®è£ ããåã«ãã¹ããäœæããããšã奚å±ãããŸãããã®æ¹æ³è«ã«ãããã³ãŒãã®å質ãåäžããã¢ãžã¥ãŒã«èšèšãä¿é²ããããªãã¡ã¯ã¿ãªã³ã°ã容æã«ãªããŸãã
- åäœãã¹ããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãã€ãã©ã€ã³ã«çµ±åãã: åäœãã¹ãã CI ãã€ãã©ã€ã³ã«çµ±åãããšãã³ãŒãã®å€æŽãéä¿¡ããããã³ã«ãã¹ããèªåçã«å®è¡ãããŸãããã®ããã»ã¹ã«ãããã³ãŒãã®å質ã«é¢ãããã£ãŒãããã¯ãå³åº§ã«åŸãããæœåšçãªåé¡ã®æ©æçºèŠã«åœ¹ç«ã¡ãŸãã
ãããã®ãã¹ã ãã©ã¯ãã£ã¹ã«åŸãããšã§ãJava éçºè ã¯ãããè¯ãã¢ããªã±ãŒã·ã§ã³ã«ã€ãªããå¹ççã§ä¿¡é Œæ§ã®é«ãé«å質ã®åäœãã¹ããäœæã§ããŸããåäœãã¹ãã¯ãã°ãèŠã€ããã ãã§ãªãããœãããŠã§ã¢ã®èšèšãšåè³ªãæ¹åããããšãç®çãšããŠããããšã«æ³šæããŠãã ãããããå¹çç㪠Java ã¢ããªã±ãŒã·ã§ã³éçºã®ããã«ãéçºããã»ã¹ã®äžå¯æ¬ ãªéšåãšããŠåäœãã¹ããçµã¿èŸŒã¿ãŸãã
çµè«
åäœãã¹ãã¯ãã³ãŒãã®å質ãšä¿¡é Œæ§ãä¿èšŒãã Java éçºã®éèŠãªåŽé¢ã§ããããã«ãããéçºè ã¯ãã°ãæ©æã«æ€åºããŠä¿®æ£ã§ãããã匷åãªã¢ããªã±ãŒã·ã§ã³ã®éçºã«ã€ãªãããŸããé©åãªæŠç¥ããã¯ããã¯ãããŒã«ã䜿çšãããšãJava éçºè ã¯åäœãã¹ã ããã»ã¹ã®å¹çãšæå¹æ§ãæå€§åã§ããŸãããã®èšäºã§ã¯ããã¹ãã®åé¢ãæ£ç¢ºãªã¢ãµãŒã·ã§ã³ããã¹ãé§åéçº (TDD) ã®æ¡çšãªã©ãJava åäœãã¹ããæ¹åããããã®ããŸããŸãªæŠç¥ãšææ³ãæ€èšããŸããã
ãŸãããã¹ãã®äœæãšå®è¡ããã管çãããããããJUnitãMockitoãTestNG ãªã©ã®æã人æ°ã®ãã Java åäœãã¹ã ããŒã«ã«ã€ããŠã詳ãã説æããŸããã Java ã§ã®åäœãã¹ãã¯æåã¯è€éã«æãããããããŸãããããã¹ã ãã©ã¯ãã£ã¹ãšã¢ããªã±ãŒã·ã§ã³åºæã®èŠä»¶ãçè§£ããããšã«éç¹ã眮ãããšã§ãæãŸããã¬ãã«ã®ãã¹ããæåãããããšãã§ããŸããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ããã»ã¹ãå®è£ ããéçºã¯ãŒã¯ãããŒã®äžéšãšããŠãã¹ããçµ±åãããšãç¶ç¶çã«ãã¹ããæåãããããšãã§ããŸããã³ãŒãã®å質ãåäžãããŸãã
ããã«ã AppMaster ã®ãã㪠ããŒã³ãŒã ãã©ãããã©ãŒã ã¯ã REST API ããã®ä»ã®çµ±åæ¹æ³ãéã㊠Java ã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ã§ãããããããŸããŸãªã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ãã¹ã±ãŒã©ãã«ãªæ¹æ³ã§äœæã§ããæè»æ§ãåŸãããŸãããããã®éèŠãªåŽé¢ãéçºããã»ã¹ã«çµã¿èŸŒãããšã§ãæã®è©Šç·Žã«èããé«å質㮠Java ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ãªããŸãã
Java åäœãã¹ãã®äžçã¯å€çšéã§ãããããŸããŸãªéçºããŒãºã«å¯Ÿå¿ããããŸããŸãªããŒã«ã𿹿³è«ãæäŸããŠããŸãããã®ãã¯ãŒã掻çšããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ä¿¡é Œæ§ãšä¿å®æ§ã確ä¿ããããœãããŠã§ã¢æ¥çãçŽé¢ãã課é¡ã«å¯ŸåŠã§ããããã«ãªããŸãã
ãããã質å
Java ã®åäœãã¹ããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ£ç¢ºæ§ãä¿¡é Œæ§ãå¹çã確ä¿ããããã«ãã¡ãœãããã¡ãœããã®å°ã°ã«ãŒããªã©ãã³ãŒãã®åã ã®åäœã«çŠç¹ãåœãŠããã¹ãæ¹æ³ãæããŸããåäœãã¹ãã®ç®çã¯ãéçºã®åææ®µéã§ãšã©ãŒãæ€åºããŠä¿®æ£ããåŸã®æ®µéã§ã®ãã°ãæå°éã«æããããšã§ãã
JUnit ã¯ãæãåºã䜿çšãããŠãã Java åäœãã¹ã ãã¬ãŒã ã¯ãŒã¯ã§ãããã¹ããå¹ççã«äœæããã³å®è¡ã§ããããã«ãå€ãã®æ³šéãã¢ãµãŒã·ã§ã³ãæ§æãªãã·ã§ã³ãæäŸãããŸãã JUnit ã¯ãåäœãã¹ããäœæããã³å®è¡ããããã® Java ãšã³ã·ã¹ãã ã®äºå®äžã®æšæºã§ãã
ãã¹ãé§åéçº (TDD) ã¯ãå®éã®ã³ãŒããäœæããåã«ãã¹ããäœæããããšã«éç¹ã眮ãã¢ãžã£ã€ã« ãœãããŠã§ã¢éçºææ³ã§ãã TDD ã§ã¯ãéçºè ã¯å¿ èŠãªæ©èœã®åäœãã¹ããäœæãããããã®ãã¹ããæºããã³ãŒããäœæããŸãããã®ããã»ã¹ã«ããããã¹ã ã«ãã¬ããžã確ä¿ãããã³ãŒãã®å質ãåäžããéçºã¿ã¹ã¯ãç°¡çŽ åãããŸãã
ã¢ãã¯ãšã¹ã¿ãã¯ããã¹ãã®ããã«å¶åŸ¡ãããç°å¢ã§çŸå®äžçã®ãªããžã§ã¯ãã®åäœãã·ãã¥ã¬ãŒãããææ³ã§ãããããã¯ããã¹ã察象ã®ãŠããããäŸåé¢ä¿ããåé¢ããããã«äœ¿çšãããŸããã¢ããã³ã°ã¯ããããããæ±ºããããåäœãæã€ãªããžã§ã¯ããäœæããæ¹æ³ãæäŸããã¹ã¿ãåã¯ãªããžã§ã¯ãã®å®è£ ã®äžéšãç°¡çŽ åããããã®ã«çœ®ãæããŸãã
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ (CI) ã¯ãéçºè ãã³ãŒãã®å€æŽãå ±æãªããžããªã«é »ç¹ã«çµ±åããããšã奚å±ãããœãããŠã§ã¢éçºææ³ã§ãã CI ãµãŒããŒã¯ãæ°ããã³ãŒãã«å¯ŸããŠåäœãã¹ããèªåçã«å®è¡ããã¢ããªã±ãŒã·ã§ã³ã®å質ãšå®å®æ§ã«é¢ãããã£ãŒãããã¯ãå³åº§ã«æäŸããŸãã Java éçºè ã¯ãåäœãã¹ãã CI ãã€ãã©ã€ã³ã«çµ±åããŠãã·ãŒã ã¬ã¹ã§èªååããããã¹ã ããã»ã¹ãå®çŸã§ããŸãã
Java åäœãã¹ãã®ãã¹ã ãã©ã¯ãã£ã¹ã«ã¯ãæç¢ºã§ç°¡æœãªãã¹ã ã±ãŒã¹ã®äœæãã¯ãªãã£ã«ã« ãã¹ã®ãã¹ããé©åãªã¢ãµãŒã·ã§ã³ã®äœ¿çšããã¹ã察象ã®ãŠãããã®åé¢ããã¹ã ã±ãŒã¹ã®æŽçãšååä»ãããã¹ãé§åéçº (TDD) ã®æ¡çšãåäœãã¹ãã®ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãã€ãã©ã€ã³ãžã®çµ±åãé©åãªããŒã«ãšãã¬ãŒã ã¯ãŒã¯ã䜿çšããŸãã
Java çšã®äžè¬çãªåäœãã¹ã ããŒã«ã«ã¯ãJUnitãMockitoãTestNGãSpockãPowerMockãAssertJ ãªã©ããããŸãããããã®ããŒã«ã¯ããã¹ã ããã»ã¹ãç°¡çŽ åããã¢ãã¯ãšã¹ã¿ãã容æã«ããã³ãŒãã®æ£ç¢ºããšä¿¡é Œæ§ã確ä¿ããããã®å¹ åºãã¢ãµãŒã·ã§ã³ãæäŸããããŸããŸãªæ©èœãæäŸããŸãã
AppMaster Go (golang) ã§ã®ããã¯ãšã³ã ã¢ããªã±ãŒã·ã§ã³ãVue3 ã§ã® Web ã¢ããªã±ãŒã·ã§ã³ãKotlin ãšSwiftUIã§ã®ã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ã®çæã«éç¹ã眮ããŠããŸããããã®åŒ·åãªno-codeãã©ãããã©ãŒã ã䜿çšããŠãREST API ããã®ä»ã®ææ®µãéã㊠Java ã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ã§ããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããçµ±åã®ã AppMasterã¢ããªã±ãŒã·ã§ã³ã¯æ¡åŒµæ§ãé«ãããšã³ã¿ãŒãã©ã€ãº ã¬ãã«ã® Java ãããžã§ã¯ãã«é©ããŠããŸãã


