ã¯ããã«
JJUG CCC 2025 Fallã«åå ãããŠããã ããŸããã JJUGïŒæ¥æ¬JavaãŠãŒã¶ãŒã°ã«ãŒãïŒã¯ãjavaæè¡ã®åäžã»çºå±ãéçºè ã®æ¯æŽãç®çãšããä»»æå£äœã§ã2007幎4æã«çºè¶³ããŸããã çŸåšã§ã¯äŒå¡ãçŽ10000人ã«éãããŠããããšãã«javaã®åããæŽ»çºã«ãªã£ã2014幎ããããäŒå¡æ°ãå¢å ããŠããŸãã ä»åç§ã¯ååå ã ã£ãã®ã§ãããäŒå Žã¯éåžžã«è³ãã£ãŠããã幎霢局ãè¥ãæ¹ããããã©ã³ã®æ¹ãŸã§å¹ åºãå€å²ã«ããã£ãŠããŸããã äŒå Žã§ã¯æ§ã ãªjavaãkotlinããŸããã以å€ã«ãéåžžã«å€å²ã«ãããã»ãã·ã§ã³ãéãããŠãããjavaãæ¥åã§äœ¿çšããŠãã人ã ãã§ã¯ãªãããã®ä»ã®éçºèšèªã䜿çšããŠããæ¹ãéçºã«æºãã£ãŠããªãæ¹ã§ã楜ãããå 容ã®ã»ãã·ã§ã³ãå€ããšæããŸããã ä»åã¯ç§ãåå ããã»ãã·ã§ã³ã«ã€ããŠãå 容ããŸãšãã€ã€ææ³ã亀ããŠäœéšèšãšãããŠããã ãããšæããŸãã
仿§ããã®ãŸãŸãã¹ãã«ãªãïŒJavaã§å§ããæ¯ãèãé§åéçº
ãã¡ãã¯@uutan1108ããã®ç»å£ã§ããã Xã®æ¹ã§ç»å£è³æãå ¬éãããŠããŸãã
ã¿ã€ãã«ã®éããæ¯ãèãé§åéçºïŒBehavior Driven DevelopmentïŒãjavaã§è¡ãããšãã話ããããŠããŸããã ãã¹ãé§åéçºããæ¯ãèãé§åéçºãžãšçºå±ãããããšã§ããã¹ãããã¹ã¿ãŒãããã°ã©ããŒã®ããã ãã§ã¯ãªããéçºããŒã ã®ããã°ã©ãã³ã°ã«æºãããªãã¡ã³ããŒãšã®ã³ãã¥ãã±ãŒã·ã§ã³ãæ¯æŽããããã®ãã®ãžãšæè¯ãããããšãã§ããŸãã æ¯ãèããèªç¶èšèªã§å®çŸ©ããŠãããããã䜿ã£ãŠjavaã®ãã¹ãã³ãŒããæžãããšã§ãããã°ã©ããŒä»¥å€ã«ãçè§£ããããããŸã仿§ãšã®ç §ããåããã容æã«è¡ãããšãã§ããŸãã
javaã§ãããè¡ãã«ã¯Cucumberãªã©ã®ã©ã€ãã©ãªããããããªã®ã§ãå°ã調ã¹ãŠã¿ãããšæããŸãã
çŸåšæ¥åã§ãã¹ããè¡ãªã£ãŠããŸãããã©ãããŠããäœãç®çãšãããã¹ããªã®ããããããã¥ãããã¹ããå€ãã§ãããããã£ããã®ãã³ãŒãããŒã¹ã§æ¹åã§ããå¯èœæ§ãããã®ã¯éåžžã«é åçã ãšæããŸãããŸããæ¯ãèããå®çŸ©ããéã«ã¯ãã¡ã€ã³åºæèšèªã䜿ã£ãŠæ¯ãèããå®çŸ©ããã®ã§ãå¿ ç¶ãšãã¡ã€ã³ãšåŒ·ãçµã³ã€ããã¯ã©ã¹ãäœãããšããè¯ãå¯äœçšãæåŸ ã§ãããã ãšæããŸããã
ç»å£ã®æåŸã«èšãããŠããããšã§ããããBDDãã¬ãŒã ã¯ãŒã¯ã䜿ãã®ãBDDã§ã¯ãªããæ¯ãèããèããéçºããŒã ã§å ±æãããã¹ãã«èœãšã蟌ãããšãBDDã§ããããšããèšèéããç®çãšææ®µãåãéããããšã ãã¯æ³šæããããšããã§ãã
Java Virtual THreads, Kotlin Coroutines, Go Goroutinesãšã®æ¯èŒ
ãã¡ãã¯LINE Yahooã®Takamichi WadaããïŒXã®ã¢ã«ãŠã³ããèŠã€ããããŸããã§ãã...ããããªããïŒã®ç»å£ã§ããã
ã¿ã€ãã«ã«ããéããJavaã®Virtual ThreadãKotlin Coroutines, Go Goroutinesãã©ã®æ§ã«ããŠäžŠè¡åŠçãå®çŸããŠããã®ãã«æ³šç®ããç»å£ãšãªã£ãŠããŸããã 倿°ã®ãªã¯ãšã¹ãã«å¯ŸããŠã©ã®æ§ã«ããŠå¯Ÿå¿ããã®ãããã®å¯Ÿå¿æ¹æ³ã«çç®ãããŠããŸããã javaã®VTãGoã®Goroutinesã§ã¯ã倿°ã®ãªã¯ãšã¹ãã«å¯ŸããŠå€æ°ã®è»œéã¹ã¬ãããäœãããããäžã€ã®OSã¹ã¬ããã«ã¹ã±ãžã¥ãŒãªã³ã°ããããšã§ãI/Oããããã³ã°ãOSã¹ã¬ããã®äžè¶³ïŒC10Kåé¡ïŒãæ°ã«ããªããŠè¯ããªãæ¹æ³ããšã£ãŠããŸãã Kotilinã§ã¯ã¯ã©ã€ã¢ã³ãããã®ãªã¯ãšã¹ããIOã®å®äºãªã©ããªã¯ãšã¹ããšããŠéç¥ããã€ãã³ãã«ãŒããæ¡çšããŠããŸããããããåæçãªã³ãŒãã§èšè¿°ããŠãã³ã³ãã€ã«æã«ç¶ç¶ãªããžã§ã¯ãã§å®è¡ç¶æ ãä¿æããå®è£ ã«å€æããããšã§éåæã«å®è¡ããããšãå¯èœã«ããŠããããã§ãã
æè¿åŠç¿ããŠããRustã§ã¯ã1ãªã¯ãšã¹ã1OSã¹ã¬ããæ¹åŒããšã£ãŠãããæ°äžåäœã®ã¹ã¬ãããäœæããããšã¯çŸå®çã§ã¯ãããŸããããasync/awaitã䜿çšããããšã§å€§éã®ãªã¯ãšã¹ãã«å¯ŸããéåæåŠçãå®çŸããŠããæ§ã§ããïŒéåæåŠçã«ã€ããŠã¯ãŸã åŠç¿éäž...ïŒ
ãããã£ããäžèŠäŒŒãåäœã«èŠããæ©èœã®èšèªããšã®å®è£ ã®éãããšããã®ã¯ãããããã®èšèªãžã®çè§£ãæ·±ããäžã§éåžžã«éèŠã ãšæããŸããã ãããã®éãã®æ ¹åºã«ã¯ããããããããã®èšèªãæ±ãããã©ãã€ã ã®éããããã¯ããªã®ã§ãæšæºã©ã€ãã©ãªã®äœ¿çšãå®è£ æ¹æ³ãèŠããŠã¿ããšããæ·±ããã®èšèªã®ãã©ãã€ã ãçè§£ããããšãã§ãããã ãšæããŸãã ç¹ã«Goã«é¢ããŠã¯ã䞊è¡åŠçãéåžžã«ç°¡åã«å®è£ ã§ããã®ã§äžŠè¡åŠçãéåæåŠçãæ°ã«ãªã£ãŠããã®ãªãGoã§åŠç¿ããã®ãè¯ãããã§ãã
DDDãšOOPã®äº€å·®ç¹
ãã¡ãã¯ãAmano Gakuããã®ç»å£ã§ããã ã¿ã€ãã«ã«ããéããDDDïŒãã¡ã€ã³é§åèšèšïŒãšOOPïŒãªããžã§ã¯ãæåããã°ã©ãã³ã°ïŒã®äº€å·®ç¹ãèŠã€ãããšããå 容ã§ããã
OOPã¯å®è£ ã¹ã¿ã€ã«ã®äžã€ã§ããã¯ã©ã¹ããªããžã§ã¯ããç¶æ¿ãããªã¢ãŒãã£ãºã ãšãã£ãèŠçŽ ãå ã«å€æŽå®¹ææ§ã®é«ãã³ãŒããšçç£æ§ã®é«ãã³ãŒããèšè¿°ããããã«äœ¿çšãããŸãã 察ããŠDDDã¯ãè€éãªããžãã¹èŠä»¶ãã·ã¹ãã ã«åæ ãããããã¡ã€ã³çè§£ãšå ±åäœæ¥ã®æ¹æ³è«ã®ããšã§ãã äž¡è ã¯è¥å¹²æ¬¡å ã¯éããã®ã®ãç®æããšããã¯å€æŽã«åŒ·ãèšèšãããã°ã©ãã³ã°ããšãã£ããšãããšãªã£ãŠããããããDDDãšOOPã®äº€å·®ç¹ãšåŒãã§ããŸããã ãã®äºã€ã广çã«çžäºã«äœçšãããããšã§ãããè¯ãèšèšãã³ãŒãããããã®ã§ã¯ãªããããšããå 容ã話ã®äž»é¡ã§ããã
話ã®äžã§ãããªããã£ãéå€ãsetterå°çãè²§è¡ãã¡ã€ã³ãšãã£ããããã¡ãªDDDã®ã¢ã³ããã¿ãŒã³ãããšã«ãã©ã®æ§ã«èšèšããã®ããèªãããŠããŸããããéåžžã«ãããããããDDDååŠè ã«ãããããããå 容ã ã£ãã®ã§ã¯ãªãããšæããŸãã
ä»ã®éçºçŸå Žã§ã¯ãããCommonServiceæœè±¡ã¯ã©ã¹ãç¶æ¿ããããServiceãç¶æ¿ãããç»é¢IDServiceã®å®è£
ã§ããç»é¢IDServiceImplãšãã£ããéåžžã«è€éã§çŽ æŽãããïŒïŒã¯ã©ã¹æ¹è£
ãããŠããŸãããã®ããšåºãŠããŸãããå¢ç°ãããèš³ãããŠãããå®è·µãã¡ã€ã³é§åèšèšããšãã£ãæ¬ãèªãã§ããçŸå Žã«å
¥ã£ãã®ã§ãã³ãŒããèŠããšãã«ãã£ããããã®ãèŠããŠããŸãã
ãããã£ãåé¡ã«å¯ŸããŠãã©ã®æ§ã«ã¢ãããŒããããŠããã®ãããååŠè
åãã«èªãããŠãããéåžžã«ããããããããã«ãªããŸããã
DDDãšOOPã¯åæã«èªãããããšãå€ãããŸãOOPã®è§£èª¬æžãjavaã®è§£èª¬æžãèªãã§ããDDDãšæžããŠãªããŠãDDDã®èãæ¹ãå ã«ãªã£ãŠããæ§ãªèšè¿°ãå€ãèŠåããããŸãã ãããã£ãé¢ã§ããã®äºã€ã®ç°ãªãæŠå¿µã®äº€å·®ç¹ãèŠã€ããŠãèšèšãå®è£ ã«æŽ»ãããŠããããè¯ããšæããŸãã
ãšã©ãŒåŠçã®éžæè¢ãå¢ãã ~ try catchããå§ããŠæ®µéçã«åå®å šãž ~
ãã¡ãã¯ã@yoheiyohei4ããã®ç»å£ã§ããã ã¿ã€ãã«ã«ããéããtry catchã ãã§ã¯ãªããä»ã®ãšã©ãŒãã³ããªã³ã°ã®éžæè¢ãèŠãŠã¿ããããšããå 容ã§ããã
try catchã¯éåžžã«åçŽã§èšè¿°ããããã§ãããããšåæã«äœ¿ç𿹿³ããã£ãããšèããªããšãšã©ãŒã®åå ãæ¡ãã€ã¶ããŠããŸãå±éºæ§ã䜵ãæã£ãŠããŸãã
ããã§ãEither<Error, Success>ãšãã£ããçµæãå€ãšããŠè¿ãåã®å©çšãèããŠã¿ãŸãã
ããããããšã§ãæåæãšå€±ææã®åŠçãåããããšãã§ããŸããããšã©ãŒã®çš®é¡ã«ãã£ãŠåŠçãå€ããããšã容æã«ãªããŸãã
Rustã§èšããšResultåã§ããããã£ã±ãnullã§å€ãè¿ããããã·ã¹ãã ãšã©ãŒã埩æ§äžå¯èœãªãšã©ãŒïŒãŠãŒã¶ãŒåŽã«ç¥ãããå¿
èŠããªããšã©ãŒïŒã®å Žå以å€ã§ExceptionãåºããŠåŠçããŠããŸãã®ã¯å¿äœç¡ãããšèšãããšãèšã£ãŠããŸããã
ãã ãããããéã®åŒŸäžžã§ã¯ãªããäœã§ãããã§ãEitherã§è¿ãã°ããããšèšãããšã§ã¯ãããŸãããã·ã¹ãã èšèšã«ãããŠãéã®åŒŸäžžã¯ããåŸãŸããã
ãããã倱æãããåŸãªãåŠçãEitherã§è¿ãå¿
èŠã¯ãããŸããããã·ã¹ãã ãšã©ãŒãªã©ã§åŠçãäžæ¢ããå Žåã«è©³çްãªãšã©ãŒåå ãªã©ã¯èŠããŸããã
ãããã£ãã©ã¡ãã®éžæè¢ãåããã®ææšãšèšã£ããã®ãæããŠããã ããŸããã
ã¬ã€ã€ãŒãã¢ãŒããã¯ãã£ã§èãããšããããããã§ãã
ãã¡ã€ã³å±€ã¯è€éãªæ¥åããžãã¯ãå«ãŸããŠããã®ã§ãããããã®åŠçã«ãããšã©ãŒãEitherã䜿ã£ãŠè±ãã«è¡šããŠããããšãéåžžã«åŠçããããããããªããŸãã
ãŸããã¢ããªã±ãŒã·ã§ã³å±€ããã¬ãŒã³ããŒã·ã§ã³å±€ã«é¢ããŠã¯EitherãšExceptionãçµã¿åãããããšã§ãAPIã®æ¥ç¶ãšã©ãŒãªã©ã«ã¯ExceptionãããŠãŒã¶ãŒåŽã®ãšã©ãŒãªã©ã«å¯ŸããŠã¯Eitherã䜿ã£ãŠãã®ãŸãŸHTTPã¬ã¹ãã³ã¹ã«å€æããŠãããããšã§ãæè»ãªèšèšãæäŸã§ããŸãã
ã€ã³ãã©å±€ã§ã¯åºæ¬çã«ãšã©ãŒåå ã®çç±ãéããããããã®ãšã©ãŒåå ã«é¢ããŠã¯å¯ŸããŠèå³ããªãããšãå€ãã®ã§Exceptionã§äŸå€åŠçãããŠãããã ãã§è¯ãã§ãããã
ãšèšã£ãå
·åã«ãã©ã®å±€ã§ã©ããªåŠçãããã®ãã®ææšãæã£ãŠãããšããšã©ãŒãã³ããªã³ã°ãã©ããã£ãŠå®è£
ãããèããæã®äžå©ã«ãªãããã§ãã
å人çã«æã£ãã®ã¯ãRustãScalaãªã©ã¯OptionãResultããã€ãã£ãã§ãµããŒãããŠããŸããéã«nullãExceptionãšèšã£ããã®ãïŒåºæ¬çã«ã¯ïŒæ±ããŸããã
ãããã£ãèšèªãæ±ã£ãŠãã人ãããããšããããåœããåã§ãããéã«éåæãããå
容ã ã£ãã®ãããããŸããã
RustãScalaãäžéããã£ãŠã¿ãã®ã§ãéåžžã«ã¹ã©ã¹ã©å
容ãå
¥ã£ãŠããŠçè§£ããããã£ãã§ãã
Exceptionãšã®äœ¿ãåãã«é¢ããŠã¯ãä»åŸå°ãæèããŠã¿ãããšæããŸããã
ä¹±éãªã³ãŒãã®æŽçããåŠã¶èšèšã®åæ©
ãã¡ãã¯ã@masuda220ããã®ç»å£ã§ããã ãã®ããã®æžç±ã¯ããã¡ã€ã³é§åèšèšãã¯ãããããããçŸå Žã§åœ¹ç«ã€ã·ã¹ãã èšèšã®ååããšãã«èªãŸããŠããã ããä»åã®JJUG CCCã§äžçªæ¥œãã¿ã«ããŠããã»ãã·ã§ã³ã®äžã€ã§ããã ã¿ã€ãã«ã«ããéããä¹±éãªã³ãŒããã©ããã£ãŠæŽçãããã³ãŒãã«ããŠããã®ãããšèšã£ãããšãéããŠãèšèšã®åæ©ã«ã€ããŠèªãããŠããŸããã
ããœãããŠã§ã¢èšèšã«ãããæŽçãããã³ãŒããšã¯ã倿Žã楜ã§å®å šãªã³ãŒãã®ããšã§ããã å人çã«ã¯ãããå šãŠã ãšæããŸããã ãã®ããšãç®çã«ããªããã³ãŒãã£ã³ã°ãããã³èšèšãè¡ãããšã§å¿ ç¶ãšæŽçæŽé ãããã³ãŒããçãŸããã¯ãã§ãã
éåžžã«ããã«ãªãå 容ãå€ãã£ãã®ã§ãå šãŠãæžããŠããŸããšé·ããªãéããŠããŸãã®ã§ãç§ãç¹ã«éèŠã ãšæã£ãç¹ãããã¯ã¢ããããŠèª¬æããŸãã
æŽçæŽé ã®ããæ¹ã身äœã§èŠãã äœåºŠãç¹°ãè¿ãå®è·µãããŸãããããã¿ãŒã³åãããèšèšããæãåæã«ã·ã§ãŒãã«ããã³ãã³ããæã¡å§ããæ§ã«ãªããŸã§å®è·µããã®ã¿ã§ãã ç§ã«äžçªè¶³ããªããšãããããããŸããã æ¬ãèªãã§çè§£ããæ°ã«ãªã£ãŠããã®ãšãæãåãããªããçè§£ãæ·±ããã®ã¯ãã¯ãã¬ãã«ãéããŸãã ãããæ©ã«ãå®éã®ã³ãŒããå°ããã€ãªãã¡ã¯ã¿ãªã³ã°ããããšãèŠããŠããå¿ èŠãããããã§ãã
ãã®å€æŽã«äŸ¡å€ã¯ããã®ããèãã ãšã³ãžãã¢ãšããŠãæ°ã«ãªãã³ãŒãã¯ä¿®æ£ããããªã£ãŠããŸããŸããããããå ã»ã©èšã£ãéããç®çã¯ãå®å šã«å€æŽã§ããã³ãŒãããäœãããšã§ããå°æ¥å€æŽãããªãã³ãŒãã倿Žããããšã¯ããã«åœãŠã¯ãŸããŸããã ãŸãããããžãã¹çã«ãã®å€æŽã«ãã£ãŠäœã䟡å€ãçãŸããã®ããèããããæ§ã«ãªããªããšãå人åã®ãšã³ãžãã¢ã ããšèšãèšèãããã ããŸããã
å°ããªå€æŽã¯ç©æ¥µçã«è¡ã ããã¯ãTidy FirstïŒãã«æžãããŠããå 容ã«äŒŒãŠããŸãã å°ãã倿Žãšã¯ããã³ã¡ã³ãã¢ãŠããããã³ãŒããæ¶ããããåäœããŠããªãã³ãŒããæ¶ãããã倿°åã颿°åãå€ããŠã¿ããããæ¹è¡ãå ¥ããããšèšã£ãå®éã®åäœã«åœ±é¿ãåãŒããªãããå³å¹æ§ã®ãã倿Žã®ããšã§ãã å®éãTidy First?ãã§ã¯ãæ¹è¡ãå ¥ããããšãæãå°ãã倿Žã ãšèšã話ããããŸãã ããèšã£ã倿Žã¯ç©æ¥µçã«è¡ãã¹ãã ããééãã ãšããŠãå·»ãæ»ãã°ããã®ã ããç©æ¥µçã«è¡ã£ãŠç¶ãã¹ãã§ãã
ä»ã«ãå ·äœçã«ã©ã®ãããªéšåã«ãä¹±éãããæããããšèšã£ã話ãããŠãã ãããŸãããã詳ããå 容ã¯ãæ¬äººæ§ã®Xã«ç»å£è³æãäžãã£ãŠããã®ã§ãã¡ããã芧ãã ããã
å人çã«ããããæ°ããåŠã³ããã£ãããšèšããããšãæ¬ã®å 容ãèžè¥²ããå 容ãå€ãã£ãããããã§ããªãã®ã§ããããæ¬äººããçŽæ¥è¬çŸ©ãããŠãã ãããšãã¯ãçè§£ãäžæ®µéæ·±ãŸã£ãæ°ãããŸãã ãããŠå®éã«æãåãããŠã³ãŒããæžããŠã¿ãããšããæ°æã¡ãæ¹§ããŠããã»ãã·ã§ã³ã§ãããïŒã»ãã·ã§ã³çµããã«ãããã£ã¡ãã³ãŒãæžããããªã£ãããšäŒè©±ããŠããåå è ã®æ¹ãããŸããïŒ
ãã¯ãç§ã«ã¯å®è·µãè¶³ããŠããªãã®ã§ãèªåã§ã³ãŒããæžããŠãéçšãä¿å®ãŸã§è¡ã£ãŠåããŠãã®èšèšãæ£è§£ã ã£ãã®ãããããšæãã®ã§ãã©ãã©ãå®è·µçµéšãç©ãã§ãããããšæããŸãã
æåŸã«
ä»ååå ããã»ãã·ã§ã³ã¯ä»¥äžã§ãããïŒæéã®é¢ä¿äžæåŸãŸã§åå ã§ããŸããã§ãã...ããã®åŸã«ãéåžžã«æ¥œãã¿ãªã»ãã·ã§ã³ããã£ãã®ã§ããéåžžã«æ®å¿µã§ããïŒ æ¬¡åã¯æ¥ã ãšæããŸããããŸãåå ããããšæãããææçŸ©ãªæéã§ããã ãã ãã€ã³ãã£ãããŠèª°ã«ã話ãããããããäžç·ã«è¡ã人ãããªãã£ãã®ã§æ¬¡ã¯èª°ãèªã£ãŠã誰ãã«è©±ããããŠä»²è¯ããªã£ãŠãããããã®æ°æã¡ã§è¡ãããšæããŸãã çãããè¯ãJavaã©ã€ããïŒïŒïŒ