ãšã³ã¿ãŒãã©ã€ãºScalaã³ãŒãããŒã¹ã¯ã颿°åæœè±¡åãJVMçžäºéçšæ§ããããŠé·æã«ãããããžãã¹ããžãã¯ã®äº€å·®ç¹ã§åäœããããšããŸããŸãå¢ããŠããŸããScalaã®è¡šçŸåè±ããªåã·ã¹ãã ã¯è€éãªãã¡ã€ã³ãã³ã³ãã¯ãã«è¡šçŸããããšãå¯èœã«ããŸãããåæã«éæ¥çãªã¬ã€ã€ãŒãå°å ¥ãããããå€§èŠæš¡ãªã·ã¹ãã åäœã®æšè«ãè€éã«ãªããŸããå€§èŠæš¡ãªçµç¹ã§ã¯ãScalaãåç¬ã§äœ¿çšãããããšã¯çšã§ãJavaãµãŒãã¹ãããŒã¿ãã©ãããã©ãŒã ããããŠã¬ã¬ã·ãŒã³ã³ããŒãã³ããšå ±åãããããããŒã«ã«ã³ãŒãã®æ±ºå®ã忣å®è¡ãã¹ã«ã©ã®ããã«äŒæããããçè§£ããããšãããã«å°é£ã«ãªããŸãã
ãã®ãããéçã³ãŒãè§£æã¯å質åäžãšããããã¯ãæ§é çãªèŠä»¶ãšãªã£ãŠããŸãããšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããè§£æã¯ãã¹ã¿ã€ã«ã®åŒ·å¶ã衚é¢çãªæ¬ 饿€åºã«éå®ãããŸãããè€æ°ã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãã©ã³ã¿ã€ã ã®ä»®å®ãçžäºäœçšããå Žåã«ã®ã¿çŸãããé ããå¶åŸ¡ãããŒãæé»ã®äŸåé¢ä¿ããããŠæ éã¢ãŒããæããã«ããããšãæåŸ ãããŠããŸããããããæåŸ ã¯ãããåºç¯ãªæžå¿µäºé ãšå¯æ¥ã«é¢é£ããŠããŸãã ãœãããŠã§ã¢ç®¡çã®è€éãèŠæš¡ã寿åœãçµç¹ã®å¢çã«ãã£ãŠãã³ãŒãã®é²åæ¹æ³ãšãªã¹ã¯ã®èç©æ¹æ³ã決ãŸããŸãã
ã³ãŒãã®è€éããããã²ãŒã
Smart TS XL ã䜿çšãããšãScala ã®å€æŽãäžæµã®ã·ã¹ãã ãšå ±æãšã³ã¿ãŒãã©ã€ãº ã¯ãŒã¯ããŒãã«ã©ã®ããã«åœ±é¿ããããå¯èŠåã§ããŸãã
ä»ããæ¢çŽ¢ããScalaã¯ãã®æèã«ãããŠç¹æã®èª²é¡ãæç€ºããŸãããã¯ããæé»çãªè§£æ±ºãé«ã«ã€ã³ãåããããŠã³ã³ãã€ã©ãã©ã°ã€ã³ã¯ãã³ã³ãã€ã«æã®ä¿èšŒãšå®è¡æã®åäœã®å¢çãææ§ã«ããŸããéçšäžéèŠãªæ¬ é¥ã®å€ãã¯ãã³ã³ãã€ã«ãšã©ãŒãšããŠé¡åšåããããã¹ãã ãã§ã¯å®¹æã«çºèŠã§ããŸããããã®çµæãäŒæ¥ã¯éåããã©ã°ä»ãããã ãã§ãªããæå³ãæšæž¬ããé²åãå¶éããããŒã ããªãªãŒã¹ãµã€ã¯ã«å šäœã«ããããªãã¡ã¯ã¿ãªã³ã°äœæ¥ãå®å®åãããããã«ãéçè§£æããŒã«ã«ãŸããŸãäŸåããããã«ãªã£ãŠããŸãã
ã¢ããã€ãŒãŒã·ã§ã³ããã°ã©ã ã«ãããŠã¯ããããããã¬ãã·ã£ãŒã¯ããã«åŒ·ãŸããŸããScalaã¯ããµãŒãã¹ã®åè§£ããã©ãããã©ãŒã ã®ç§»è¡ããããã¯æ°ããããŒã¿ãã€ãã³ãã¢ãã«ãšã®çµ±åãªã©ãã¢ãŒããã¯ãã£ã®ç§»è¡ãé²ãã·ã¹ãã ã§ããå©çšãããŸãããã®ãããªã·ããªãªã§ã¯ãéçè§£æã¯æ¢åã®åäœãå°æ¥ã®å€æŽãã©ã®ããã«å¶çŽããŠããããçè§£ããã¬ã³ãºãšãªããããåºç¯ãªåæãè£å®ãã圹å²ãæãããŸãã ã¢ããªã±ãŒã·ã§ã³ã®ã¢ããã€ãŒãŒã·ã§ã³ 以äžã®ã»ã¯ã·ã§ã³ã§ã¯ãScalaã®éçã³ãŒãè§£æããŒã«ããããã®äŒæ¥åºæã®èŠæ±ã«ã©ã®ããã«å¯Ÿå¿ããŠãããããããŠå€§èŠæš¡ã§ç°æ©ç𮿷·åšã®ã³ãŒãããŒã¹ã«é©çšããå Žåã«æ©èœãã©ã®ããã«ç°ãªããã«ã€ããŠèå¯ããŸãã
Scala éçã³ãŒãè§£æã«ãããåäœå¯èŠæ§ã®ã®ã£ãããš Smart TS XL ã®åœ¹å²
åŸæ¥ã®Scalaéçã³ãŒãè§£æããŒã«ã¯ã屿çãªæ¬ é¥ã®ç¹å®ãèšèªèŠåŸã®åŒ·åããããŠå¶åŸ¡ããããªãã¡ã¯ã¿ãªã³ã°ã®ãµããŒãã«åªããŠããŸãããããããšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã«ãããŠãæãé倧ãªãªã¹ã¯ã¯ãåç¬ã®éåããçºçããããšã¯ã»ãšãã©ãããŸãããã¢ãžã¥ãŒã«éã®çžäºäœçšãè€æ°ã®ãµãŒãã¹ã«ãŸãããå®è¡ãã¹ããããŠæéã®çµéãšãšãã«ç¬ç«ããŠé²åããäŸåé¢ä¿ãã§ãŒã³ããçããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãåŸæ¥ã®Scalaéçè§£æã®éçãšãSmart TS XLãåäœäžå¿ããã³äŸåé¢ä¿äžå¿ã®è§£æãéããŠãããã®ã®ã£ãããã©ã®ããã«è§£æ¶ããããæ€èšŒããŸãã
ãšã³ã¿ãŒãã©ã€ãºScalaã·ã¹ãã ãã«ãŒã«ããŒã¹åæã®ç¯å²ãè¶ ããçç±
å€§èŠæš¡çµç¹ã«ãããScalaã¢ããªã±ãŒã·ã§ã³ã¯ãèªå·±å®çµåã®ã·ã¹ãã ãšããŠã§ã¯ãªãããã©ãããã©ãŒã éã®èª¿æŽã¬ã€ã€ãŒãšããŠéçšãããããšããããããŸãããã¡ã€ã«ã¬ãã«ãŸãã¯ã¢ãžã¥ãŒã«ã¬ãã«ã®æ§æãæå³ã®æ£ç¢ºæ§ã«éç¹ã眮ãéçè§£æããŒã«ã§ã¯ããã®çŸå®ãåæ ããããšãå°é£ã§ãã
äžè¬çãªæ§é äžã®ç¹åŸŽã¯æ¬¡ã®ãšããã§ãã
- å ±æãã¡ã€ã³ã¢ãã«ãåãããã«ããªããžããªã¢ãŒããã¯ãã£
- 颿°åæã«ãã£ãŠé§åãããæé»çãªå®è¡ãã¹
- JVMãã¡ãã»ãŒãžã³ã°ãããŒã¿å±€ã«ãŸãããéåæã¯ãŒã¯ãããŒ
- ãªãªãŒã¹ãµã€ã¯ã«ãç°ãªãããŒã éã§ã®éšåçãªæææš©
ãã®ãããªç¶æ³ã§ã¯ãéçã«ãŒã«ã¯å®è¡æã®ããžãã¯ã®æ§æãèæ ®ããã«ãããŒã«ã«ã§æ£åœæ§ãæ€èšŒã§ããŸããåäžã®Scalaã¢ãžã¥ãŒã«å ã§ã¯å®å šã«èŠãã倿ã§ãã忣å®è¡ã³ã³ããã¹ãã«ãããã€ããããšãé åºä¿èšŒããšã©ãŒäŒæããŸãã¯ããŒã¿æŽåæ§ãå€åããå¯èœæ§ããããŸãã
Smart TS XLã¯ãScalaè§£æã«ç°ãªãèŠç¹ããã¢ãããŒãããŸããã³ãŒããåå¥ã«è©äŸ¡ããã®ã§ã¯ãªããå¢çãè¶ããŠå®è¡åäœãåæ§ç¯ããããšã§ããšã³ã¿ãŒãã©ã€ãºããŒã ã¯Scalaããžãã¯ããšã³ãããŒãšã³ãã®ã·ã¹ãã ãããŒã«ã©ã®ããã«é¢äžããŠããããçè§£ã§ããããã«ãªããŸãã
Scalaèšèªæ§é ãè¶ ããå®è¡äžå¿ã®åæ
Scalaã®è¡šçŸåã¯ç·»å¯ãªæœè±¡åãå¯èœã«ããŸããããã®æœè±¡åã«ãã£ãŠå®è¡ã®å®æ ãææ§ã«ãªãããšããããããŸãããã¿ãŒã³ãããã³ã°ãã¢ããåæããããŠæé»çãªè§£æ±ºã«ãã£ãŠããžãã¯ãç°¡æœãªåœ¢åŒã«å§çž®ãããã·ã¹ãã ãã¹ã±ãŒã«ãããšçè§£ãå°é£ã«ãªããŸãã
Smart TS XL ã¯ãèšèªæ©èœã§ã¯ãªãå®è¡ã»ãã³ãã£ã¯ã¹ã«éç¹ã眮ãããšã§ãã®åé¡ã«å¯ŸåŠããŸãã
äž»ãªåææ©èœã¯æ¬¡ã®ãšããã§ãã
- Scala ãš JVM ã®å¢çãè¶ããã¯ãã¹ã¡ãœããå®è¡ãã¹ã®åæ§ç¯
- 颿°é£éã«ãã£ãŠå°å ¥ãããæé»çãªå¶åŸ¡ãããŒã®ãããã³ã°
- é«é颿°ã«ãã£ãŠå°å ¥ãããé ããå®è¡åå²ã®èå¥
- Scala ããžãã¯ãšäžæµã®ãµãŒãã¹ããžã§ããããŒã¿ã¹ãã¢ãšã®çžé¢é¢ä¿
ãã®å®è¡äžå¿ã®ãã¥ãŒã«ãããã¢ãŒããã¯ãããã©ãããã©ãŒã ãªãŒããŒã¯ãéçãªã«ãŒã«ã®ã³ã³ãã©ã€ã¢ã³ã¹ã ãã«é Œãã®ã§ã¯ãªããè² è·ãé害ãéšåçãªãããã€ã¡ã³ãã®ç¶æ³äžã§ Scala ã³ãŒããå®éã«ã©ã®ããã«åäœããããè©äŸ¡ã§ããŸãã
ScalaãJVMããã©ãããã©ãŒã å¢çãè¶ããäŸåæ§åæ
ãšã³ã¿ãŒãã©ã€ãºScalaã·ã¹ãã ã¯ãåç¬ã§ååšããã±ãŒã¹ã¯çšã§ããJavaã©ã€ãã©ãªãå ±æã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ããããã¯ãŒã¯ããŒããå€éšAPIãªã©ã«äŸåããŠããŸããåŸæ¥ã®Scalaéçè§£æããŒã«ã¯ãèšèªã®å¢çã§åäœã忢ããããšãå€ããã¯ãã¹ãã©ãããã©ãŒã ã®äŸåé¢ä¿ã¯æé»çã«æ®ãããŸãã
Smart TS XL ã¯ãScala åºæã®ããŒã«ãè¶ ããäŸåé¢ä¿ã®å¯èŠæ§ãæäŸããŸãã
åæã«ããæ¬¡ã®ããšãæããã«ãªããŸããã
- å ±æã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ãéããŠå°å ¥ãããæšç§»çãªäŸåé¢ä¿
- Scala ãµãŒãã¹ãšã¬ã¬ã·ãŒã³ã³ããŒãã³ãéã®é ããçµå
- åæ Scala ãããŒãšéåæãžã§ãéã®å®è¡äŸåé¢ä¿
- å ±æãã¡ã€ã³ãªããžã§ã¯ããŸãã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®å€æŽã«ãã£ãŠåŒãèµ·ãããã圱é¿ãã§ãŒã³
ãã®ã¬ãã«ã®äŸåé¢ä¿èªèã¯ãéšåçãªãªãã¡ã¯ã¿ãªã³ã°ã段éçãªç§»è¡ã«ãã£ãŠäžæµã®ã·ã¹ãã ãæå³ããäžå®å®ã«ãªãå¯èœæ§ãããã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã«ãããŠéåžžã«éèŠã§ããSmart TS XLã¯ããããã®é¢ä¿ãæç€ºçã«å ¬éããããšã§ãä»®å®ã«åºã¥ããªãã¡ã¯ã¿ãªã³ã°ã§ã¯ãªãããªã¹ã¯ãèæ ®ãã倿Žèšç»ãå¯èœã«ããŸãã
ãªãã¡ã¯ã¿ãªã³ã°ãšã¢ããã€ãŒãŒã·ã§ã³ã®ã·ããªãªã«ããããªã¹ã¯äºæž¬
éçã³ãŒãè§£æããŒã«ã¯ãªãã¡ã¯ã¿ãªã³ã°ãæ¯æŽããããã«ãã䜿çšãããŸããããã®ãã£ãŒãããã¯ã¯éåžžãã«ãŒã«éåããã¿ãŒã³ãããã«éå®ãããŠããã倿Žãã·ã¹ãã ã¬ãã«ã®åäœãé害ã®ãã€ããã¯ã¹ã«ã©ã®ãããªå€åããããããã説æãããã®ã§ã¯ãããŸããã
Smart TS XL ã¯ãåäœãªã¹ã¯ãäžå¿ãšãããªãã¡ã¯ã¿ãªã³ã°åæãåæ§ç¯ããŸãã
ããŒã ã¯ä»¥äžãå¯èœã«ãªããŸãã
- Scala ãªãã¡ã¯ã¿ãªã³ã°ã«ãã£ãŠåœ±é¿ãåããå®è¡ãã¹ãäºæž¬ãã
- 圱é¿ã®å€§ããããžãã¹ãããŒã«é¢äžããããžãã¯ãç¹å®ãã
- å±éåã«æœåšçãªéå®³äŒæãã¹ãæ€åºãã
- å®éã®å®è¡äŸåé¢ä¿ã«åºã¥ããŠã¢ããã€ãŒãŒã·ã§ã³ã®å€æŽãè©äŸ¡ãã
ãã®æ©èœã¯ãScalaãµãŒãã¹ãèŠå¶å¯Ÿè±¡ãåçéèŠããŸãã¯å®å šæ§ãéèŠãããã·ã¹ãã ã®äžéšãšãªã£ãŠãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ç¹ã«æå¹ã§ããSmart TS XLã¯ããªãã¡ã¯ã¿ãªã³ã°ã屿çãªäœæ¥ãšããŠæ±ãã®ã§ã¯ãªããæž¬å®å¯èœãªåœ±é¿ã䌎ãã·ã¹ãã ã¬ãã«ã®å€æŽãšããŠäœçœ®ä»ããŸãã
ãšã³ã¿ãŒãã©ã€ãºScalaã¹ããŒã¯ãã«ããŒã«ãšã£ãŠã®æŠç¥ç䟡å€
Smart TS XL ã®äŸ¡å€ã¯ãScala éçã³ãŒãåæããŒã«ã眮ãæããããšã§ã¯ãªããåæã¢ãã«ã忢ããéšåãè£å®ããããšã«ãããŸãã
äŒæ¥ã®å©å®³é¢ä¿è ã«ãšã£ãŠãããã¯æ¬¡ã®ããšãæå³ããŸãã
- Scala ã³ãŒããå®éã®éçšã«åãããã¢ãŒããã¯ãã£ã®æŽå¯
- å€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ãšã¢ããã€ãŒãŒã·ã§ã³äžã®äžç¢ºå®æ§ã®äœæž
- çžäºäŸåããã·ã¹ãã ã«åãçµãããŒã éã®é£æºã®æ¹å
- ã¬ããã³ã¹ãšãªã¹ã¯è©äŸ¡ããµããŒãããå ±æè¡åã¢ãã«
Smart TS XLã¯ãåŸæ¥ã®Scalaéçã³ãŒãè§£æã«å®è¡ããã³äŸåé¢ä¿ã€ã³ããªãžã§ã³ã¹ã远å ããããšã§ãã«ãŒã«æºæ ããçã®åäœçè§£ãžãšç§»è¡ããããšãå¯èœã«ããŸãããã®ç§»è¡ã¯ãScalaãåãªãèšèªéžæè¢ãšããŠã§ã¯ãªããè€éã§é²åãããšã³ã¿ãŒãã©ã€ãºãã©ãããã©ãŒã ã®åºç€ãšããŠæŽ»çšããçµç¹ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ãšã³ã¿ãŒãã©ã€ãºã³ãŒãããŒã¹åã Scala éçã³ãŒãè§£æããŒã«
ãšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã§ã¯ã察åŠãã¹ãå ·äœçãªãªã¹ã¯ã«å¿ããŠãç°ãªãã«ããŽãªã®éçè§£æãå¿ èŠã§ããã³ã³ãã€ã«æã®å®å šæ§åŒ·åããã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ããã©ãããã©ãŒã ã¬ãã«ã®å質ã¬ããã³ã¹ã«è³ããŸã§ãããããæžå¿µäºé ãç¶²çŸ ããåäžã®ããŒã«ã¯ååšããŸããããã®ãããå€ãã®çµç¹ã¯éå±€åãããããŒã«ãã§ãŒã³ãæ§ç¯ããæ©èœã®å¹ åºãã ãã§ãªããæç¢ºã«å®çŸ©ãããè§£æç®æšã«åºã¥ããŠããŒã«ãéžæããŠããŸãã
以äžã®éžå®ã°ã«ãŒãã¯ãScalaã®éçã³ãŒãè§£æããŒã«ããããããã®äŒæ¥ãæ±ããåé¡è§£æ±ºã«æãé©ããçšéå¥ã«åºãæ¡çšããŠããŸãã人æ°ãéçºè ã®å©äŸ¿æ§ã§ã¯ãªããæç床ããšã³ã·ã¹ãã ãžã®é©åæ§ãã¹ã±ãŒã©ããªãã£ãéèŠããŠããŸãã
ç®çå¥ã«æé©ãª Scala éçã³ãŒãè§£æããŒã«ã®éžæ
- ã³ã³ãã€ã«æã®å®å
šæ§ãšèšèªå¶éã®åŒ·å¶
WartRemoverãScalaã³ã³ãã€ã©ãã©ã°ã€ã³ - ã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ãšå€§èŠæš¡ãªã³ãŒãé²å
ScalafixãSemanticDBããŒã¹ã®ããŒã« - ãã°æ€åºãšã³ãŒãèã®ç¹å®
ã¹ã±ãŒããŽãŒãããšã©ãŒãçºçããããïŒJVM çµ±åã³ã³ããã¹ãïŒ - éäžåãããã³ãŒãå質ã¬ããã³ã¹ãšã¬ããŒã
SonarQube (Scala ã¢ãã©ã€ã¶ãŒ) - CI/CD ãã€ãã©ã€ã³ã®çµ±åãšãã£ãŒãããã¯ã®èªåå
sbtãã€ãã£ãã¢ãã©ã€ã¶ãŒãSonarQubeãã€ãã©ã€ã³ - JVM ããŒã¹ã®ã·ã¹ãã ã«ãããèšèªéã®å¯èŠæ§
SonarQubeãJVM å šäœã®åæãã©ãããã©ãŒã - è€æ°ããŒã ã®ã³ãŒãããŒã¹ã«ãããããªã·ãŒäž»å°ã®é©çš
ã«ã¹ã¿ã ã«ãŒã«ã»ãããåããSonarQube
ã¹ã«ã©ãã£ãã¯ã¹
å ¬åŒãµã€ãïŒ ã¹ã«ã©ã
Scalafixã¯ãè€éãªã³ãŒãããŒã¹ã«ãããå€§èŠæš¡ãªã³ãŒãé²åããµããŒãããããã«æ§ç¯ããããScalaãã€ãã£ãã®éçè§£æããã³ã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ãã¬ãŒã ã¯ãŒã¯ã§ããæ§ææšã®ã¿ã«åºã¥ããŠåäœããã«ãŒã«ãšã³ãžã³ãšã¯ç°ãªããScalafixã¯ã³ã³ãã€ã«æã«çæãããSemanticDBã¡ã¿ããŒã¿ãå©çšããããšã§ãScalaãããžã§ã¯ãå šäœã«ãããã·ã³ãã«ãåãã¡ãœããåç §ãããã³äœ¿çšé¢ä¿ãæšè«ã§ããŸãããã®ã»ãã³ãã£ãã¯åºç€ã«ãããScalaã·ã¹ãã ãå€§èŠæš¡ãªæžãæãã§ã¯ãªããé·ãã©ã€ããµã€ã¯ã«ãéããŠæ®µéçã«é²åãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ãScalafixã¯ç¹ã«æå¹ã§ãã
å®éã«ã¯ãScalafix ã¯æ§é çãªå€åã®ææã«å°å ¥ãããããšãæãå€ããªã£ãŠããŸããäžè¬çãªå°å ¥ã®ãã£ãããšããŠã¯ããã¬ãŒã ã¯ãŒã¯ã®ã¢ããã°ã¬ãŒããå éšAPIã®éæšå¥šåãè€æ°ã®ããŒã ããªããžããªéã§ã®ãã¿ãŒã³æšæºåã®å¿ èŠæ§ãªã©ãæããããŸããScalafix ã®ã«ãŒã«ã¯ã³ãŒãã®æ€åºãšèªåæžãæãã®äž¡æ¹ãå¯èœãªãããç§»è¡æã«äžè²«æ§ã確ä¿ããããã«é »ç¹ã«å©çšãããŸããç§»è¡ã¯ãéåžžã§ããã°èšå€§ãªæäœæ¥ãå¿ èŠã«ãªããŸãããã®ãããScalafix ã¯åŸæ¥ã®æ¬ 饿€åºããŒã«ãšããããããé²å管çã¡ã«ããºã ã«è¿ãäœçœ®ã¥ããšãªã£ãŠããŸãã
ã¢ãŒããã¯ãã£ã®èгç¹ããèŠããšãScalafix ã¯ã³ãŒã倿ããã³æ€èšŒã¬ã€ã€ãŒã®ã¿ã§åäœããŸããã©ã³ã¿ã€ã å®è¡ããããã€ã¡ã³ãããããžãéçšäžã®åäœãšãã£ãæŠå¿µã¯æã¡ãŸãããScalafix ã®äŸ¡å€ã¯ãScala ã³ãŒãã®å€æŽæ¹æ³ãå¶éããããšã«ããããããã€åŸã®ã³ãŒãã®åäœã説æããããšã§ã¯ãããŸãããScalafix ãå°å ¥ããäŒæ¥ã¯ãéåžžãã©ã³ã¿ã€ã ãããã©ãŒãã³ã¹ããµãŒãã¹é飿ºã«é¢ããæžå¿µäºé ã«å¯Ÿå¿ããããã«ãä»ã®ããŒã«ãšçµã¿åãããŠäœ¿çšââããŸãã
ã³ã¢æ©èœ
- 解決ãããã·ã³ãã«ãšåæ å ±ã«åºã¥ãæå³è§£æ
- APIç§»è¡ããã³ãªãã¡ã¯ã¿ãªã³ã°ãã£ã³ããŒã³ã®ããã®èªåã³ãŒãæžãæã
- çµç¹åºæã®å¶çŽããšã³ã³ãŒãããããã®ã«ã¹ã¿ã ã«ãŒã«ã®éçº
- ãã¡ã€ã«éããã³ã¢ãžã¥ãŒã«éã®åç §æ€èšŒ
- sbt ããã³æšæº CI ãã€ãã©ã€ã³ãšã®ãã€ãã£ãçµ±å
äŸ¡æ Œèšå®ã¢ãã«
- ãªãŒãã³ãœãŒã¹ã§ç¡æã§å©çšå¯èœ
- ã©ã€ã»ã³ã¹ã䜿çšéã«åºã¥ãã³ã¹ãã¯çºçããŸãã
- ã«ãŒã«ã®äœæãç¶æãæ€èšŒã«å¿ èŠãªãšã³ãžãã¢ãªã³ã°äœæ¥ã«ãã£ãŠæ±ºãŸãç·ææã³ã¹ã
äŒæ¥å°å ¥ã®èæ ®äºé
- SemanticDBçæãå¿ èŠãšãªããã³ã³ãã€ã«ã®è€éããå¢ã
- ããŒã ããªããžããªãæ¡å€§ããã«ã€ããŠã«ãŒã«ã¬ããã³ã¹ã¯å¿ èŠã«ãªã
- èªåæžãæãã¯èŠå¶ãããç°å¢ã§ã¯æ éã«æ€èšããå¿ èŠããã
å¶éãšæ§é çå¶çŽ
- å®è¡æã®å®è¡ãã¹ãããã©ãŒãã³ã¹ã®åäœãå¯èŠåãããªã
- åæå®è¡ã®åé¡ã忣é害ãç°å¢ã®èª€ã£ãæ§æãæ€åºã§ããªã
- æå¹æ§ã¯ã«ãŒã«ã®å質ãšç¶æèŠåŸã«å€§ããäŸåãã
- Scala ã®å¢çãè¶ ããèšèªéã®äŸåé¢ä¿ã«é¢ããæŽå¯ãéãããŠãã
ãšã³ã¿ãŒãã©ã€ãº Scala ã³ãŒãããŒã¹ã«ãããŠãScalafix ã¯ã»ãã³ãã£ãã¯ãšã³ãã©ãŒã¹ã¡ã³ãããã³é²åããŒã«ãšããŠæãããçè§£ãããŠããŸããScalafix ã¯ãå€§èŠæš¡ãã€å調çãªå€æŽãããå®å šãã€å埩çã«è¡ãããšã«åªããŠããŸããã忣å®è¡ãéåæåŠçããããã¯ãã©ãããã©ãŒã ã¬ãã«ã®çµ±åããçãããããæ·±å»ãªåäœãªã¹ã¯ã«ã¯å¯ŸåŠã§ããŸããã
ããŒåã
å ¬åŒãµã€ãïŒ ãŠã©ãŒãã¬ã¢ããŒ
WartRemoverã¯ãç¹å®ã®Scalaæ§æã®äœ¿çšãçŠæ¢ããããšã§ã峿 Œãªèšèªäœ¿çšå¶çŽã匷å¶ããã³ã³ãã€ã«æéçè§£æããŒã«ã§ããScalaã³ã³ãã€ã©ãã©ã°ã€ã³ãšããŠåäœãããããã³ã³ãã€ã«æã«éåãæ€åºããããã«ããå³åº§ã«å€±æãããããã«èšå®ã§ããŸãããã®åŒ·å¶åªå ã¢ãã«ã¯ãèšèªè¡šçŸåã®è±ãããããäºæž¬å¯èœæ§ãé²åŸ¡çã³ãŒãã£ã³ã°ãé·æçãªä¿å®æ§ãåªå ãããšã³ã¿ãŒãã©ã€ãºç°å¢ã«é©ããŠããŸãã
å€§èŠæš¡ãªçµç¹ã§ã¯ãããŒã éã§ã®Scalaã®èšè¿°æ¹æ³ã®ã°ãã€ããæžããããã«ãWartRemoverãå°å ¥ãããããšããããããŸããnullãå¯å€ç¶æ ãæé»ã®å€æãå®å šã§ãªããªãã¬ã¯ã·ã§ã³ãšãã£ãæ§é ãçŠæ¢ããããšã§ãã¢ãŒããã¯ãã£äžã®æå³ããã«ãããã»ã¹ã«çŽæ¥åæ ããŸããããã¯ãéçºè ã®é¢è·çãé«ãããŸãã¯çµéšã¬ãã«ããŸã¡ãŸã¡ãªã³ãŒãããŒã¹ã§ã¯ç¹ã«æå¹ã§ããããããã³ãŒãããŒã¹ã§ã¯ãéå ¬åŒãªã¬ã€ãã©ã€ã³ãæéã®çµéãšãšãã«èããŠããåŸåããããŸãã
WartRemoverã¯ã³ã³ãã€ã«æã«åäœãããããè¿ éãªãã£ãŒãããã¯ãæäŸããåé¡ã®ãããã¿ãŒã³ãäžæµã®ç°å¢ãžäŒæããã®ãé²ããŸãããã®æ©æé©çšã«ãããäŒæ¥ã¯ãã¹ããã³ã³ãã€ã«åŸã®åæã§ã¯æ€åºãå°é£ãªçš®é¡ã®æ¬ é¥ãåé¿ã§ããŸããããããWartRemoverã®æå¹æ§ãé«ããå³å¯ãã¯ãç¶¿å¯ãªããŒã«ã¢ãŠãèšç»ãªãã«æçããã·ã¹ãã ãã¬ã¬ã·ãŒã·ã¹ãã ã«é©çšããå Žåãæ··ä¹±ãæãå¯èœæ§ããããŸãã
ã³ã¢æ©èœ
- èš±å¯ãããŠããªã Scala èšèªæ§é ã®ã³ã³ãã€ã«æã®åŒ·å¶
- èš±å¯ãã¿ãŒã³ãšçŠæ¢ãã¿ãŒã³ã®ãã现ããªèšå®
- ããªã·ãŒéåã«ãã峿ãã«ã倱æ
- ã³ã³ãã€ã©ãã§ãŒãºå®è¡ã«ããæå°éã®å®è¡æãªãŒããŒããã
äŸ¡æ Œèšå®ã¢ãã«
- ãªãŒãã³ãœãŒã¹ã§ç¡æã§äœ¿çšã§ããŸã
- åçšã©ã€ã»ã³ã¹ã®éå±€ã䜿çšéããŒã¹ã®æéã¯ãããŸãã
äŒæ¥å°å ¥ã®èæ ®äºé
- åºç¯å²ã«ããããã«ãã®å€±æãåé¿ããããã«æ®µéçãªæå¹åãå¿ èŠã«ãªãããšãå€ã
- ã¬ã¬ã·ãŒã¢ãžã¥ãŒã«ã§ã¯éžæçãªæå¶ãå¿ èŠã«ãªãå ŽåããããŸã
- å®å šæ§ãšéçºè ã®çç£æ§ã®ãã©ã³ã¹ããšãã«ã¯åŒ·åãªã¬ããã³ã¹ãå¿ èŠ
å¶éãšæ§é çå¶çŽ
- ãã€ããªåŒ·å¶ã¢ãã«ã¯æèçãªãã¥ã¢ã³ã¹ãã»ãšãã©æäŸããªã
- æ§æããã³åã¬ãã«ã®ãã§ãã¯ãè¶ ããåæã®æ·±ããéãããŠãã
- è«ççãªæ¬ é¥ãã¢ãŒããã¯ãã£éåãã©ã³ã¿ã€ã ãªã¹ã¯ãæ€åºããŸãã
- ã¢ãžã¥ãŒã«éã®å®è¡ãã·ã¹ãã ã¬ãã«ã®åäœã®å¯èŠæ§ããªã
ãšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã«ãããŠãWartRemoverã¯åæãšã³ãžã³ãšãããããäºé²ââçãªå¶åŸ¡ãšããŠæ©èœããŸããããã¯ã亀æžäžå¯èœãªèšèªå¶çŽã匷å¶ããããã«äœ¿çšãããšæã广çã§ãããã»ãã³ãã£ã¯ã¹ã®æ£ç¢ºæ§ãã¢ãŒããã¯ãã£ã®æŽåæ§ãéçšãªã¹ã¯ã«å¯ŸåŠããããã«ã¯ãä»ã®ããŒã«ãšã®é£æºãå¿ èŠã§ãã
ã¹ã±ãŒããŽãŒã
å ¬åŒãµã€ãïŒ ã¹ã±ãŒããŽãŒã
Scapegoatã¯ãScalaã³ãŒãããŒã¹ã«ããããã°ãã³ãŒãã®èããä¿å®æ§ã®åé¡ãç¹å®ããããšã«éç¹ã眮ããéçè§£æããŒã«ã§ããã³ã³ãã€ã«åŸã«åäœããæœè±¡æ§ææšãæ€æ»ããããšã§ãè«çãšã©ãŒãå®å šã§ãªãæ§æãé·æçãªä¿å®ãªã¹ã¯ã«å ±éãããã¿ãŒã³ãæ€åºããŸããäŒæ¥ã®Scalaç°å¢ã§ã¯ãScapegoatã¯éåžžããªãã¡ã¯ã¿ãªã³ã°ã匷å¶ã¡ã«ããºã ã§ã¯ãªããæ¬ é¥çºèŠã¬ã€ã€ãŒãšããŠäœçœ®ä»ããããŸãã
ãã®ããŒã«ã¯ãå€§èŠæš¡ããŒã å šäœã®ããŒã¹ã©ã€ã³ã³ãŒãè¡çãæ¹åããããã«ããæ¡ââçšãããŠããŸããäºåå®çŸ©ãããäžé£ã®æ€æ»ã¯ãæªäœ¿çšã®å€ãå®å šã§ãªãç䟡æ§ãã§ãã¯ãäžé©åãªäŸå€åŠçãé床ã«è€éãªåŒãšãã£ãåé¡ã察象ãšããŠããŸãããããã®çºèŠã¯é倧床å¥ã«åé¡ããããããçµç¹ã¯æ å ±èŠåãšå³æã®ä¿®æ£ãå¿ èŠãªæ¬ é¥ãåºå¥ããããšãã§ããŸãããã®åªå é äœä»ãã¯ã培åºçãªã¯ãªãŒã³ã¢ãããäžå¯èœãŸãã¯æãŸãããªãå€§èŠæš¡ãªã³ãŒãããŒã¹ã§ç¹ã«åœ¹ç«ã¡ãŸãã
Scapegoatã¯sbtãšãã€ãã£ãã«çµ±åãããHTMLãCIãã€ãã©ã€ã³ã«é©ããæ©æ¢°å¯èªåºåãªã©ãè€æ°ã®åœ¢åŒã§ã¬ããŒããçæããŸããäŒæ¥ã§ã¯ããããã®ã¬ããŒãã峿 Œãªã²ãŒãã£ã³ã°åºæºãšããŠã§ã¯ãªããçµæçãªæ¬ é¥ã®åŸåãå¯èŠåããããã«ããå©çšããŠããŸãããã®å©çšãã¿ãŒã³ã¯ãScapegoatã峿 ŒãªåŒ·å¶ãšã³ãžã³ã§ã¯ãªããã³ãŒãå質ã®èŠ³æž¬ããŒã«ãšããŠã®åŒ·ã¿ãåæ ããŠããŸãã
ã¢ãŒããã¯ãã£ã®èгç¹ããèŠããšãScapegoatã¯åã ã®Scalaãããžã§ã¯ãã®å¢çå ã§åäœããŸãããªããžããªéã®äŸåé¢ä¿ã忣å®è¡ãå®è¡æã®åäœã«ã€ããŠã¯æšè«ããŸãããåæã¯éçãã€ãã¿ãŒã³ããŒã¹ã§ãããããæ¢ç¥ã®åé¡ã®æ€åºã«ã¯å¹æçã§ãããã³ã³ããŒãã³ãéã®è€éãªçžäºäœçšããçããæ°ããªãªã¹ã¯ãç¹å®ããèœåã¯äœããªããŸãã
ã³ã¢æ©èœ
- äžè¬ç㪠Scala ã®ãã°ãšã³ãŒãèã®æ€åº
- æèŠã®éç床ã«åºã¥ãåé¡
- å¹ åºãç¯å²ãã«ããŒããããã«äœ¿ããã«ãŒã«ã»ãã
- CI 察å¿ã®ã¬ããŒã圢åŒãšã® sbt çµ±å
äŸ¡æ Œèšå®ã¢ãã«
- ãªãŒãã³ãœãŒã¹ã§ç¡æã§äœ¿çšã§ããŸã
- ã©ã€ã»ã³ã¹ã䜿çšéã«åºã¥ãã³ã¹ãã¯çºçããŸãã
- ãªãã·ã§ã³ã®åçšãµããŒãã¯ãšã³ã·ã¹ãã ãããã€ããŒãéããŠå©çšå¯èœ
äŒæ¥å°å ¥ã®èæ ®äºé
- 峿 Œãªãã«ã匷å¶ãããåŸååæã«æé©
- é«åºŠã«æœè±¡åãããã³ãŒãããŒã¹ã§ã¯ãã€ãºãæžããããã®ãã¥ãŒãã³ã°ãå¿ èŠ
- 調æ»çµæã¯ãçµéšè±å¯ãªãšã³ãžãã¢ã«ããæèçãªã¬ãã¥ãŒãå¿ èŠãšããããšãå€ã
å¶éãšæ§é çå¶çŽ
- ã»ãã³ãã£ãã¯ããŒã«ãšæ¯èŒããã«ãŒã«ã»ããã®æ¡åŒµæ§ãéãããŠãã
- 颿°åã³ãŒããæ±çšæ§ã®é«ãã³ãŒãã§ã¯èª€æ€åºçãé«ããªã
- ã©ã³ã¿ã€ã å®è¡ã忣åäœã«é¢ããçè§£ããªã
- ã¢ãŒããã¯ãã£ãäŸåé¢ä¿ã¬ãã«ã®æŽå¯ã¯æäŸãããªã
ãšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®Scalaã³ãŒãããŒã¹ã«ãããŠãScapegoatã¯ãç¹°ãè¿ãçºçããæ¬ é¥ãã¿ãŒã³ãä¿å®æ§ã«é¢ããæžå¿µäºé ã衚é¢åãããããã®å®çšçãªã¡ã«ããºã ãšããŠæ©èœããŸããScapegoatã®äŸ¡å€ã¯ã詳现ãªã»ãã³ãã£ãã¯è§£æãæåè§£æã§ã¯ãªããåºç¯ãªå¯èŠæ§ã𿩿èŠåã«ãããŸãããã®ãããScapegoatã¯ã¹ã¿ã³ãã¢ãã³ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããããå€§èŠæš¡ãªéçè§£æããŒã«ãã§ãŒã³å ã®è£å®çãªã³ã³ããŒãã³ããšããŠæ©èœããŸãã
SonarQube (Scala ã¢ãã©ã€ã¶ãŒ)
å ¬åŒãµã€ãïŒ ãœããŒãã¥ãŒã
SonarQubeã¯ãå€§èŠæš¡ãã€å€èšèªã®ã³ãŒãããŒã¹å šäœã«ãããäžå çãªå¯èŠæ§ãæäŸããããã«èšèšãããããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®éçè§£æããã³ã³ãŒãå質ã¬ããã³ã¹ãã©ãããã©ãŒã ã§ããScalaç°å¢ã§ã¯ãèšèªåºæã®è©³çŽ°ãªæ å ±ã§ã¯ãªããäžè²«ããå質ããªã·ãŒã®é©çšãæè¡çè² åµã®åŸåã®è¿œè·¡ããããŠããŒã ããªããžããªå šäœã«ãããç£æ»å¯Ÿå¿ã¬ããŒãã®æäŸãšãã£ãæ©èœã®ããã«ãSonarQubeã¯æãäžè¬çã«æ¡çšãããŠããŸããSonarQubeã®Scalaã¢ãã©ã€ã¶ãŒã¯ãã¹ã¿ã³ãã¢ãã³ã®è§£æãšã³ãžã³ãšããŠã§ã¯ãªãããã®åºç¯ãªã¬ããã³ã¹ãã¬ãŒã ã¯ãŒã¯å ã§åäœããŸãã
ãšã³ã¿ãŒãã©ã€ãºçµç¹ã«ãããŠãSonarQubeã¯ãšã³ãžãã¢ãªã³ã°ããªã¹ã¯ç®¡çãã³ã³ãã©ã€ã¢ã³ã¹ã®äº€å·®ç¹ã«äœçœ®ããããšããããããŸããScalaãããžã§ã¯ãã¯JavaãKotlinããã®ä»ã®JVMèšèªãšäžŠè¡ããŠåæãããããããã©ãããã©ãŒã ãªãŒããŒã¯çµ±äžãããå質ã²ãŒããšã¬ããŒãæšæºãé©çšã§ããŸãããã®èšèªæšªæçãªå¯èŠæ§ã¯ãScalaãµãŒãã¹ãJavaããŒã¹ã®ãã©ãããã©ãŒã ãå ±æã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã³ããŒãã³ããšå¯æ¥ã«é£æºããç°çš®ç°å¢ã«ãããŠç¹ã«æçšã§ãã
æ©èœçãªèгç¹ããèŠããšãSonarQubeã®Scalaã¢ãã©ã€ã¶ãŒã¯ãã³ãŒãã®èããåºæ¬çãªãã°ãã¿ãŒã³ããããŠJVMèšèªå šäœã«å ±éããã»ãã¥ãªãã£é¢é£ã®åé¡ã®æ€åºã«éç¹ã眮ããŠããŸããæ€åºçµæã¯ããã·ã¥ããŒãã«éçŽãããä¿å®æ§ãä¿¡é Œæ§ãã»ãã¥ãªãã£ã®åŽé¢ãæç³»åã§ç¢ºèªã§ããŸããSonarQubeã¯ãæ¥ã ã®ãªãã¡ã¯ã¿ãªã³ã°ã®æææ±ºå®ãä¿ããšããããããããŒããã©ãªãªã¬ãã«ã®è©äŸ¡ããªãªãŒã¹æºåã«é¢ããè°è«ã«æŽ»çšãããããšãå€ãã§ãã
çµ±åæ§ã¯SonarQubeã®æå€§ã®åŒ·ã¿ã®äžã€ã§ããäžè¬çãªCI/CDã·ã¹ãã ããœãŒã¹ç®¡çãã©ãããã©ãŒã ããšã³ã¿ãŒãã©ã€ãºIDãããã€ããŒãšé£æºããŸããScalaäžå¿ã®çµç¹ã§ã¯ãããã«ãããããŒã å šäœã§Scalaç¹æã®æ·±ãå°éç¥èãå¿ èŠãšããã«ãåæã¯ãŒã¯ãããŒãæšæºåããããšã容æã«ãªããŸãããããããã®æœè±¡åã¬ã€ã€ãŒã«ãã£ãŠãSonarQubeãScalaèšèªã®é«åºŠãªæ©èœã«ã€ããŠæšè«ã§ããç¯å²ãå¶éãããŸãã
ã³ã¢æ©èœ
- è€æ°ã®èšèªã«ãããäžå åãããã³ãŒãå質ããã·ã¥ããŒã
- CI/CD ãã€ãã©ã€ã³ã«çµ±åãããå質ã²ãŒã
- æè¡çè² åµã𿬠é¥ã®åŸåã®å±¥æŽè¿œè·¡
- Scala ããã³ JVM ããŒã¹ã®ã·ã¹ãã ã®çµ±åã¬ããã³ã¹
- ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹ãšç£æ»ã«é©ããã¬ããŒã
äŸ¡æ Œèšå®ã¢ãã«
- æ©èœãå¶éãããã³ãã¥ããã£ãšãã£ã·ã§ã³ãå©çšå¯èœ
- åæããã³ãŒãè¡æ°ã«å¿ããŠäŸ¡æ Œã決ãŸãåçšç
- ãšã³ã¿ãŒãã©ã€ãºæ©èœã«ã¯äžäœã®ãµãã¹ã¯ãªãã·ã§ã³ãå¿ èŠã§ã
äŒæ¥å°å ¥ã®èæ ®äºé
- ããªã·ãŒã®æœè¡ãšçµå¶å¹¹éšã¬ãã«ã®å ±åã«å¹æç
- äžè¬çãªææšã®é床ãªåŒ·èª¿ãé¿ããããã®èª¿æŽãå¿ èŠ
- Scalaãã€ãã£ãããŒã«ã®è£å®ãšããŠå°å ¥ãããããšãå€ã
å¶éãšæ§é çå¶çŽ
- é«åºŠãª Scala æ§é ãšã€ãã£ãªã ã®çè§£ãéãããŠãã
- Scalaåºæã®ã¢ãã©ã€ã¶ãšæ¯èŒããŠæå³ã®æ·±ããæµ ã
- å®è¡æã®åäœãå®è¡äŸåé¢ä¿ã®å¯èŠæ§ããªã
- ã¢ãŒããã¯ãã£ã®æŽå¯ã§ã¯ãªãã³ã³ãã©ã€ã¢ã³ã¹ã·ã°ãã«ã«çŠç¹ãåœãŠã
ãšã³ã¿ãŒãã©ã€ãºScalaã³ãŒãããŒã¹ã«ãããŠãSonarQubeã¯äž»èŠãªåæãšã³ãžã³ã§ã¯ãªããã¬ããã³ã¹ãšå¯èŠæ§ã®ã¬ã€ã€ãŒãšããŠæ©èœããŸããäžè²«æ§ããã¬ãŒãµããªãã£ããããŠçµç¹çãªé£æºãæäŸããŸãããæ·±ãã»ãã³ãã£ã¯ã¹çè§£ããªãã¡ã¯ã¿ãªã³ã°ã®å®å šæ§ãæ±ããããå ŽåãScalaãã€ãã£ãããŒã«ã®ä»£æ¿ã«ã¯ãªããŸããã
Scala ã³ã³ãã€ã©ãã©ã°ã€ã³ãšãã©ã°
å ¬åŒãµã€ãïŒ ã¹ã«ã©
Scalaã³ã³ãã€ã©ãã©ã°ã€ã³ãšçµã¿èŸŒã¿ã³ã³ãã€ã©ãã©ã°ã¯ãScalaãšã³ã·ã¹ãã ã§å©çšå¯èœãªéçè§£æã®æãåºæ¬çãªåœ¢æ ã§ãããããã®ã¡ã«ããºã ã¯å€éšããŒã«ãšããŠåäœããã®ã§ã¯ãªããã³ã³ãã€ã«ããã»ã¹ã«çŽæ¥çµã¿èŸŒãŸããŠãããã³ãŒãã®æ€èšŒãšå€ææ¹æ³ãäœã¬ãã«ã§å¶åŸ¡ããŸãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ããã¹ãŠã®Scalaãããžã§ã¯ãã«æäœéã®å質ãšå®å šæ§ã®åºæºãé©çšããããã®ããŒã¹ã©ã€ã³å¶åŸ¡ãšããŠãã䜿çšãããŸãã
å³å¯ãªèŠåèšå®ãæªäœ¿çšã³ãŒãã®æ€åºãéæšå¥šã³ãŒãã®é©çšãšãã£ãã³ã³ãã€ã©ãã©ã°ã掻çšããããšã§ãéçºã©ã€ããµã€ã¯ã«ã®æ©ã段éã§æœåšçãªåé¡ãç¹å®ã§ããŸããèŠåããšã©ãŒã«ææ Œãããããšã§ãåé¡ã®ãããã¿ãŒã³ãæ¬çªç°å¢ã®ææç©ã«æ··å ¥ããã®ãé²ãããšãã§ããŸããã³ã³ãã€ã©ãã©ã°ã€ã³ã¯ãç¹å®ã®ã³ã³ãã€ã«ãã§ãŒãºã§ã«ã¹ã¿ã åæã倿ããžãã¯ãæå¹ã«ããããšã§ãã®æ©èœãæ¡åŒµããã³ã³ãã€ã©ã®å éšã³ãŒã衚çŸãžã®è©³çްãªã¢ã¯ã»ã¹ãæäŸããŸãã
ãšã³ã¿ãŒãã©ã€ãºã¢ãŒããã¯ãã£ã®èгç¹ããèŠããšãã³ã³ãã€ã©ããŒã¹ã®åæã¯ã远å ã®ããŒã«ãããããªã³ããå¿ èŠãšããªãããé åçã§ããæ¢åã®ãã«ããã€ãã©ã€ã³ã«èªç¶ã«çµ±åãããåå¥ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãããã·ã¥ããŒããã¬ããŒãã·ã¹ãã ãå¿ èŠãšããŸããããã®ã·ã³ãã«ãã«ãããã³ã³ãã€ã©ãã©ã°ãšãã©ã°ã€ã³ã¯ãããŒã«ãã§ãŒã³ã®ç¡ç§©åºãªæ¡æ£ãæå°éã«æããåçŸæ§ãéèŠãšãªããèŠå¶ã®å³ããç°å¢ã«ç¹ã«é©ããŠããŸãã
ãããããã®äœã¬ãã«ã®çµ±åã«ã¯ãå®çšäžã®å¶çŽã䌎ããŸããã³ã³ãã€ã©ããã®ãã£ãŒãããã¯ã¯æ¬è³ªçã«ç²åºŠã现ããã屿çã§ããã¡ãã»ãŒãžã¯éåžžããã¡ã€ã«ããšããŸãã¯ã·ã³ãã«ããšã«åºåãããé«ã¬ãã«ã®éçŽãã³ã³ããã¹ãã¯èæ ®ãããŸããããã®çµæãã³ã³ãã€ã©ããŒã¹ã®åæã¯ã«ãŒã«ã®é©çšã«ã¯å¹æçã§ãããããåºç¯ãªã¢ãŒããã¯ãã£ãåäœã«é¢ããæžå¿µã説æããã«ã¯é©ããŠããŸããã
ã³ã¢æ©èœ
- èŠåãšãšã©ãŒã«ãã峿 Œãªã³ã³ãã€ã«ã«ãŒã«ã®é©çš
- æªäœ¿çšã³ãŒããéæšå¥šã® APIãå®å šã§ãªãæ§é ã®æ€åº
- ç¹æ®ãªãã§ãã¯ã倿ã®ããã®ã«ã¹ã¿ã ã³ã³ãã€ã©ãã©ã°ã€ã³
- å®è¡æã®ãªãŒããŒãããã¯ãŒããå€éšããŒã«ãžã®äŸåããããŸãã
äŸ¡æ Œèšå®ã¢ãã«
- ScalaããŒã«ãã§ãŒã³ã®äžéšãšããŠå«ãŸããŠããŸã
- ã©ã€ã»ã³ã¹ããµãã¹ã¯ãªãã·ã§ã³ã®è²»çšã¯ããããŸãã
- ã«ã¹ã¿ã ãã©ã°ã€ã³éçºã«å¿ èŠãªãšã³ãžãã¢ãªã³ã°ã®åŽå
äŒæ¥å°å ¥ã®èæ ®äºé
- ãã¹ãŠã® Scala ãããžã§ã¯ãã®ããŒã¹ã©ã€ã³ã³ã³ãããŒã«ãšããŠæé©ã§ã
- é«åºŠãªã«ã¹ã¿ãã€ãºã«ã¯ã³ã³ãã€ã©ã«é¢ããæ·±ãç¥èãå¿ èŠ
- ãã£ãŒãããã¯ã¯çµéšè±å¯ãªãšã³ãžãã¢ã«ãã£ãŠè§£éãããå¿ èŠããã
å¶éãšæ§é çå¶çŽ
- éåžžã«äœã¬ãã«ã§æçåãããåæåºå
- éèšãã·ã¹ãã å šäœã®å¯èŠæ§ããªã
- ã¢ãžã¥ãŒã«éã®å®è¡ãå®è¡æã®åäœãæšè«ã§ããªã
- ã«ã¹ã¿ã ãã©ã°ã€ã³ã¯æéã®çµéãšãšãã«ã¡ã³ããã³ã¹ã®è² æ ãå¢å€§ããã
ãšã³ã¿ãŒãã©ã€ãºScalaã³ãŒãããŒã¹ã§ã¯ãã³ã³ãã€ã©ãã©ã°ã€ã³ãšãã©ã°ã¯åæããŒã«ãšããããããåºç€ãšãªãå®å šçãšããŠæ©èœããŸãããããã¯æ©æã®é©çšãšäžè²«æ§ãæäŸããŸãããã·ã¹ãã å šäœã®ãªã¹ã¯ãé²åãéçšã®è€éãã«å¯ŸåŠããããã«ã¯ãããé«ã¬ãã«ã®åæãè£å®ããå¿ èŠããããŸãã
SemanticDB ããŒã«ãšã³ã·ã¹ãã
å ¬åŒãµã€ãïŒ ã»ãã³ãã£ãã¯DB
SemanticDBã¯ãã¹ã¿ã³ãã¢ãã³ã®éçè§£æããŒã«ã§ã¯ãªããã»ãã³ãã£ãã¯æ å ±ã¬ã€ã€ãŒã§ããScalaãœãŒã¹ã³ãŒãããã³ã³ãã€ã«æã«æœåºãããã·ã³ãã«ãåãåç §ã®æ§é åããã衚çŸãæäŸããŸãããšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã«ãããŠãSemanticDBã¯ãã³ãŒãæ§é ãšæå³ãããæ·±ãçè§£ããäžã§ãããé«åºŠãªéçè§£æããŒã«ããªãã¡ã¯ã¿ãªã³ã°ããŒã«ãåäœãããããã®åºç€æè¡ãšããŠæ©èœããŸãã
SemanticDBã¯ããã®æ žå¿ã«ãããŠãçã®æ§ææšãšæå³çã«æå³ã®ããåæãšã®éã®ã®ã£ãããåãã圹å²ãæãããŸããå®å šã«è§£æ±ºãããã·ã³ãã«æ å ±ãååŸããããšã§ãããŒã«ã¯éçã«è§£æ±ºããããšãå°é£ãŸãã¯äžå¯èœãªçåã«çããããšãå¯èœã«ããŸããäŸãã°ããã«ãã¢ãžã¥ãŒã«ã·ã¹ãã ã«ãããŠã¡ãœãããå®éã«åŒã³åºãããå Žæããåãæœè±¡åã¬ã€ã€ãŒãã©ã®ããã«äŒæããããšãã£ãçåã§ãããã®æ©èœã¯ãæé»çãªè§£æ±ºãåæšè«ã«ãã£ãŠå¶åŸ¡ãããŒãäžæçã«ãªãå€§èŠæš¡ãªã³ãŒãããŒã¹ã«ãããŠç¹ã«æçšã§ãã
äŒæ¥ã¯éåžžãSemanticDB ãšéæ¥çã«ããåãããŸããScalafixãIDE ã¢ãã©ã€ã¶ãŒãã«ã¹ã¿ã å éšãã©ãããã©ãŒã ãªã©ã®ããŒã«ã¯ãSemanticDB ã®ææç©ãå©çšããŠé«ã¬ãã«ã®åæãå®è¡ããŸããã¢ããã€ãŒãŒã·ã§ã³ããªãã¡ã¯ã¿ãªã³ã°ã®åãçµã¿ã«ãããŠãSemanticDB ãåºç€ãšããããŒã«ã¯ãæšæž¬ãããä»®å®ã§ã¯ãªãå®éã®äœ¿çšãã¿ãŒã³ãå°éãã倿Žã確å®ã«å®è¡ããããšã§ãããå®å šãªå€æãå®çŸããŸãã
éçšã®èгç¹ããèŠããšãSemanticDB ãæå¹ã«ãããšãã«ãããã»ã¹ãè€éã«ãªããŸããã»ãã³ãã£ãã¯ã¡ã¿ããŒã¿ãåºåããããã«ã³ã³ãã€ã«ãèšå®ããå¿ èŠãããããã«ãæéãšã¢ãŒãã£ãã¡ã¯ã管çã®ãªãŒããŒããããå¢å ããŸããå€§èŠæš¡ãªçµç¹ã§ã¯ãäžè²«ããèšå®ãšäºææ§ã確ä¿ããããã«ãããŒã éã®èª¿æŽãå¿ èŠã«ãªãããšããããããŸãã
ã³ã¢æ©èœ
- ã³ã³ãã€ã«äžã«è±å¯ãªã»ãã³ãã£ãã¯ã¡ã¿ããŒã¿ãçæãã
- ãã¡ã€ã«ãšã¢ãžã¥ãŒã«å šäœã«ãããæ£ç¢ºãªã·ã³ãã«ãšåã®è§£æ±º
- é«åºŠãªãªãã¡ã¯ã¿ãªã³ã°ãšéçè§£æããŒã«ã®åºç€
- sbtãIDEãã«ã¹ã¿ã åæãã€ãã©ã€ã³ãšã®äºææ§
äŸ¡æ Œèšå®ã¢ãã«
- ãªãŒãã³ãœãŒã¹ã§ç¡æã§å©çšå¯èœ
- ã©ã€ã»ã³ã¹è²»çšãªã
- äžæµã®ããŒã«ãæ§ç¯ãŸãã¯çµ±åããããã«å¿ èŠãªãšã³ãžãã¢ãªã³ã°æè³
äŒæ¥å°å ¥ã®èæ ®äºé
- éåžžããŠãŒã¶ãŒåãã®ããŒã«ã§ã¯ãªãã€ã³ãã©ã¹ãã©ã¯ãã£ãšããŠäœ¿çšãããŸã
- 䟡å€ãæäŸããã«ã¯ãããžã§ã¯ãå šäœã§ã®æšæºåãå¿ èŠ
- ã³ãŒãããŒã¹ã®ãµã€ãºãšè€éããå¢ãã«ã€ããŠãã¡ãªãããå¢å€§ããŸã
å¶éãšæ§é çå¶çŽ
- ããŒã«ã䜿ããã«åç¬ã§å®è¡ããããšã¯ã§ããŸãã
- çµã¿èŸŒã¿ã®ã¬ããŒãæ©èœãèŠèŠåæ©èœãã¬ããã³ã¹æ©èœã¯ãããŸãã
- ãã«ãã®è€éããšã¡ã³ããã³ã¹ã®ãªãŒããŒããããå¢å ãã
- å®è¡æãåäœã«é¢ããæŽå¯ã¯æäŸãããªã
ãšã³ã¿ãŒãã©ã€ãºScalaãšã³ã·ã¹ãã ã«ãããŠãSemanticDBã¯çŽæ¥çãªãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããã»ãã³ãã£ãã¯åæãå®çŸããäžã§äžå¯æ¬ ãªèŠçŽ ãšããŠæ©èœããŸããSemanticDBã®äŸ¡å€ã¯ãåç¬ã§æäŸãããæ©èœã§ã¯ãªããSemanticDBãå®çŸããæ©èœã«ãããŸãããããŠãããåºç¯ãªåææŠç¥ã«çµã¿èŸŒãŸããããšã§ãSemanticDBã¯æã广çã«æ©èœããŸãã
ãšã©ãŒãçºçããããïŒJVM çµ±åã·ããªãªïŒ
å ¬åŒãµã€ãïŒ èµ·ããããããšã©ãŒ
Error Proneã¯ãããšããšJavaã³ã³ãã€ã©ãæ¡åŒµããããšã§Javaã«ãããäžè¬çãªããã°ã©ãã³ã°ãã¹ãæ€åºããããã«éçºãããéçè§£æããŒã«ã§ããäŒæ¥ã®Scalaç°å¢ã§ã¯ãScalaãã€ãã£ãã¢ãã©ã€ã¶ãŒãšããŠã§ã¯ãªããScalaãšJavaãå ±åããæ··åèšèªã·ã¹ãã ã«é©çšãããJVMã¬ãã«ã®æ£ç¢ºæ§æ€èšŒããŒã«ãšããŠå°å ¥ãããããšããããŸããError Proneã®é¢é£æ§ã¯ãScalaãµãŒãã¹ãå ±æJavaã©ã€ãã©ãªã«å€§ããäŸåããŠããçµç¹ããJVMå šäœã®ãã«ããã€ãã©ã€ã³ã«åå ããŠããçµç¹ã§ç¹ã«é¡èã§ãã
ã¢ãŒããã¯ãã£ã®èгç¹ããèŠããšãError Proneã¯Scalaåºæã®ããŒã«ãšã¯ç°ãªãæœè±¡åã¬ã€ã€ãŒã§åäœããŸããJavaãã€ãã³ãŒããšã³ã³ãã€ã©æ§é ãè§£æããJVMã¬ãã«ã§æ£ç¢ºæ§ãå®å šæ§ããŸãã¯ä¿å®æ§ã®åé¡ãåŒãèµ·ããããšãç¥ãããŠãããã¿ãŒã³ãç¹å®ããŸããScalaãå€çšããã³ãŒãããŒã¹ã§ã¯ãError Proneã¯éåžžéæ¥çã«äœ¿çšãããScalaãœãŒã¹ã³ãŒãèªäœã§ã¯ãªããScalaãµãŒãã¹ãæ¯ããJavaã³ã³ããŒãã³ãã察象ãšããŸãã
äŒæ¥ã¯ãå ±æJavaã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãã£ãŠçããã·ã¹ãã ãªã¹ã¯ã軜æžããããã«Error Proneãå°å ¥ããŠããŸããScalaã¢ããªã±ãŒã·ã§ã³ãå ±éã®JavaãŠãŒãã£ãªãã£ããã¬ãŒã ã¯ãŒã¯ããŸãã¯ããŒã¿ã¢ã¯ã»ã¹å±€ã«äŸåããŠãããã©ââãããã©ãŒã ã§ã¯ãJVMã¬ãã«ã®æ¬ é¥ãè€æ°ã®ãµãŒãã¹ã«äŒæããå¯èœæ§ããããŸããError Proneã¯ããããã®æ¬ é¥ãScalaããŒã¹ã®ã¯ãŒã¯ããŒãã«åœ±é¿ãäžããæ¬çªç°å¢ã®é害ãšããŠé¡åšåããåã«ãæ©æã«çºèŠããã®ã«åœ¹ç«ã¡ãŸãã
çµ±åã¯ãæ¢ã«çµ±åJVMãã«ãããŒã«ã䜿çšããŠããçµç¹ã§æãäžè¬çã§ããError Proneã¯Javaã³ã³ãã€ã©ãMavenãGradleãªã©ã®ãã«ãã·ã¹ãã ãšçµ±åãããŠãããããå€èšèªç°å¢ã§ã®éäžçãªé©çšã«é©ããŠããŸãããã ãããã€ãã£ãScalaã«å¯Ÿå¿ããŠããªããããScalaæ§æãã³ãŒãããŒã¹ã®å€§éšåãå ããå Žåã«ã¯é©çšç¯å²ãéãããŸãã
ã³ã¢æ©èœ
- äžè¬ç㪠JVM ã¬ãã«ã®ãã°ãã¿ãŒã³ã®æ€åº
- æ©æãã£ãŒãããã¯ãåããã³ã³ãã€ã©çµ±ååæ
- æ£ç¢ºæ§ãšå®å šæ§ã®åé¡ã«éç¹ã眮ããŠããŸã
- Scalaã·ã¹ãã ã§äœ¿çšãããå ±æJavaã©ã€ãã©ãªã«æå¹
äŸ¡æ Œèšå®ã¢ãã«
- ãªãŒãã³ãœãŒã¹ã§ç¡æã§å©çšå¯èœ
- ã©ã€ã»ã³ã¹æããµãã¹ã¯ãªãã·ã§ã³æéã¯ããããŸãã
- çµ±åãšæ§æã«é¢é£ããéçšã³ã¹ã
äŒæ¥å°å ¥ã®èæ ®äºé
- ScalaãšJavaãæ··åšããç°å¢ã§æã䟡å€ããã
- JVMå šäœã®ãã«ãæšæºã«æºæ ããå¿ èŠããã
- Scalaãã€ãã£ãããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
å¶éãšæ§é çå¶çŽ
- Scalaèšèªã®æ§é ããã€ãã£ãã«çè§£ããŠããªã
- æ©èœçæœè±¡åãæé»ã®åäœãåæã§ããªã
- çŽç²ãªScalaã³ãŒãããŒã¹ã§ã¯æçšæ§ãéãããŠãã
- 忣å®è¡ãå®è¡æã®åäœãå¯èŠåãããªã
ãšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããŠãError Prone 㯠Scala åæãœãªã¥ãŒã·ã§ã³ãšããããããJVM ã®ã»ãŒããã£ããããšããŠæ©èœããŸãããã®äŸ¡å€ã¯ãScala ã·ã¹ãã ãäŸåããå ±éã® Java åºç€ãä¿è·ããããšã«ãããŸããçµç¹ã¯ãããæ·±ã Scala åºæã®åäœåæã«ã¯è¿œå ã®ããŒã«ãå¿ èŠã§ããããšãèªèãã€ã€ãèšèªéãªã¹ã¯ã軜æžã§ããŸãã
Scala éçã³ãŒãè§£æããŒã«ã®æ¯èŒæŠèŠ
以äžã®æ¯èŒè¡šã¯ãäžèšã§èª¬æããScalaã®éçã³ãŒãè§£æããŒã«éã®å®è³ªçãªéãããŸãšãããã®ã§ããããŒã«ãå質ã§ã©ã³ã¯ä»ãããã®ã§ã¯ãªãã以äžã®ç¹ã匷調ããŠããŸãã åæç¯å²ãæœè¡ã¢ãã«ãäŒæ¥é©åæ§ãæ§é äžã®å¶éãã®ãã¥ãŒã¯ãScala ãã¹ã¿ã³ãã¢ãã³ã®ã³ãŒãããŒã¹ã§ã¯ãªããããå€§èŠæš¡ã§é·æã«ããããã©ãããã©ãŒã ãšã³ã·ã¹ãã ã®äžéšã§ããç°å¢ã§ã®ã¢ãŒããã¯ãã£äžã®æææ±ºå®ããµããŒãããããšãç®çãšããŠããŸãã
åããŒã«ã¯ããããç°ãªãåæåéãæ ã£ãŠããŸããéè€ã¯ååšããŸãããã«ãã¬ããžã®ã®ã£ããã¯å¶çºçãªãã®ã§ã¯ãªãæ§é çãªãã®ã§ããããŒã ããªããžããªããããŠã¢ããã€ãŒãŒã·ã§ã³ãã§ãŒãºããŸããã§æ¡åŒµå¯èœãªããŒã«ãã§ãŒã³ãæ§ç¯ããéã«ã¯ããããã®å¢çãçè§£ããããšãäžå¯æ¬ ã§ãã
| ããŒã« | äž»ãªåæã®çŠç¹ | å®è¡ãã§ãŒãº | äŒæ¥ã®åŒ·ã¿ | äŸ¡æ Œã¢ãã« | äž»ãªå¶éäºé |
|---|---|---|---|---|---|
| ã¹ã«ã©ãã£ãã¯ã¹ | ã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ãšã«ãŒã«ããŒã¹ã®åŒ·å¶ | SemanticDBã«ããã³ã³ãã€ã«æ | å®å šãªå€§èŠæš¡ãªãã¡ã¯ã¿ãªã³ã°ãAPI ç§»è¡ãã¢ãžã¥ãŒã«éã®ã»ãã³ãã£ãã¯äžè²«æ§ | ãªãŒãã³ãœãŒã¹ | å®è¡æãåäœã«é¢ããæŽå¯ããªããã«ãŒã«ã®ã¡ã³ããã³ã¹ã®ãªãŒããŒãããããªã |
| ããŒåã | èšèªå¶éãšå®å šåŒ·å | ã³ã³ãã€ã«æïŒã³ã³ãã€ã©ãã©ã°ã€ã³ïŒ | 匷åãªäºé²ç®¡çã亀æžäžå¯èœãªèšèªå¶çŽã®åŒ·å¶ | ãªãŒãã³ãœãŒã¹ | ãã€ããªåŒ·å¶ãåææ·±åºŠã®å¶éãã¬ã¬ã·ãŒéèŠã®ã·ã¹ãã ãžã®é©åæ§ãäœã |
| ã¹ã±ãŒããŽãŒã | ãã°æ€åºãšã³ãŒãèã®ç¹å® | ãã¹ãã³ã³ãã€ã« | åºç¯ãªæ¬ é¥å¯èŠæ§ãé倧床ããŒã¹ã®æ€åºçµæãCIã«é©ããã¬ããŒã | ãªãŒãã³ãœãŒã¹ | ãã¿ãŒã³ããŒã¹ã®åæãæœè±¡ã³ãŒãã§ã®èª€æ€åºçãé«ããã¢ãŒããã¯ãã£ã«é¢ããæŽå¯ããªã |
| SonarQube (Scala ã¢ãã©ã€ã¶ãŒ) | ã³ãŒãå質ã¬ããã³ã¹ãšã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒã | CI/CDãã€ãã©ã€ã³åæ | å€èšèªå¯Ÿå¿ã®å¯èŠæ§ãäžå åãããããã·ã¥ããŒããç£æ»å¯Ÿå¿ | åçšïŒLOCããŒã¹ïŒ | æµ ã Scala ã®ã»ãã³ãã£ã¯ã¹ãæ±çšçãªã¡ããªã¯ã¹ãå®è¡ã®èªèããªã |
| Scala ã³ã³ãã€ã©ãã©ã°ã€ã³ãšãã©ã° | äœã¬ãã«ã®æ£ç¢ºæ§ãšèŠåã®åŒ·å¶ | ã³ã³ãã€ã©ãã§ãŒãº | æå°éã®ããŒã«ãããããªã³ãã峿 ŒãªããŒã¹ã©ã€ã³ã®åŒ·å¶ | Scalaã«å«ãŸãã | æççãªãã£ãŒãããã¯ãéçŽãããŠããªããé«ãå°éç¥èãå¿ èŠ |
| SemanticDB ããŒã«ãšã³ã·ã¹ãã | ã»ãã³ãã£ãã¯ã¡ã¿ããŒã¿çæ | ã³ã³ãã€ã«æã®ã¢ãŒãã£ãã¡ã¯ã | é«åºŠãªåæãšãªãã¡ã¯ã¿ãªã³ã°ããŒã«ãæå¹ã«ãã | ãªãŒãã³ãœãŒã¹ | åç¬ã§ã¯å®è¡ã§ããããã«ãã®è€éããå¢ã |
| ãšã©ãŒãçºçããããïŒJVM çµ±åïŒ | JVMã¬ãã«ã®æ£ç¢ºæ§ãšå®å šæ§ | Javaã³ã³ãã€ã©ãã§ãŒãº | æ··åèšèªã·ã¹ãã ã«ãããå ±æJavaåºç€ãä¿è·ããŸã | ãªãŒãã³ãœãŒã¹ | Scala ãã€ãã£ãã®çè§£ããªããçŽç²ãª Scala ã³ãŒãããŒã¹ã§ã®é¢é£æ§ãéãããŠãã |
ãã®ä»ã®æ³šç®ãã¹ãScalaéçã³ãŒãè§£æããŒã«ã®ä»£æ¿
äžèšã§èª¬æããäž»èŠãªããŒã«ã«å ããScalaããŒã¹ã®ã·ã¹ãã ã«ãããç¹å®ã®åé¡ã«å¯ŸåŠããããã«ãããããªããŒã«ãé¢é£ããŒã«ãããªãããåºç¯ãªãšã³ã·ã¹ãã ãé »ç¹ã«å©çšãããŠããŸãããããã®ä»£æ¿ããŒã«ã¯ãã³ã¢ãšãªãåæãã©ãããã©ãŒã ãšããŠã§ã¯ãªããéå®çã«å®çŸ©ãããåé¡ã解決ããããã«å°å ¥ãããã®ãäžè¬çã§ãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ããããã®ä»£æ¿ããŒã«ã¯ãå°éçãªã«ãã¬ããžãå¿ èŠãªæ¢åã®ããŒã«ãã§ãŒã³ãè£å®ãã圢ã§ãæ©äŒãæããŠå°å ¥ãããããšãã»ãšãã©ã§ãã
以äžã«ãªã¹ããããŠããããŒã«ã¯ãäž»èŠãª Scala éçã³ãŒãåæããŒã«ãçŽæ¥çœ®ãæãããã®ã§ã¯ãããŸãããããã©ãŒãããã®æšæºåããã¹ãæåã®åæãJVM å šäœã®æ€æ»ãªã©ã®å¯Ÿè±¡ãšãªãã·ããªãªã§äŸ¡å€ãæäŸã§ããŸãã
ãããå¥ã«ãã䜿ããã代æ¿ããŒã«
- ã¹ã«ã©ã¹ã¿ã€ã«
ã¹ã¿ã€ã«ãšãã©ãŒãããã®ã«ãŒã«ã«éç¹ã眮ããŠããŸããäžè²«ããã³ãŒãã¬ã€ã¢ãŠããšåœåèŠåã匷å¶ããã®ã«åœ¹ç«ã¡ãŸãããã»ãã³ãã£ã¯ã¹ãåäœã®åæã¯æäŸããŠããŸããã - sbtã«ãã¬ããž
éçè§£æã§ã¯ãªãã³ãŒãã«ãã¬ããžã¡ããªã¯ã¹ãæäŸããŸããç¹ã«ã¬ã¬ã·ãŒScalaã·ã¹ãã ã«ãããŠããã¹ããããŠããªãããžãã¯ãã¹ãç¹å®ããããã«éçããŒã«ãšäœµçšãããããšããããããŸãã - IntelliJ Scala ãã©ã°ã€ã³æ€æ»
éçºäžã®ããŒã«ã«ãªåé¡ã衚é¢åããIDEããŒã¹ã®æ€æ»ãéçºè ã®ãã£ãŒãããã¯ã«ãŒãã«ã¯å¹æçã§ãããéäžç®¡çãCIã®é©çšã«ã¯é©ããŠããŸããã - Checkstyle (JVM ã³ã³ããã¹ã)
æ··åèšèªç°å¢ã«ãããŠãJVMãããžã§ã¯ãå šäœã«ããã£ãŠãã©ãŒããããšæ§é ã®ã«ãŒã«ãé©çšããããã«é©çšãããŸããScalaåºæã®ã»ãã³ãã£ã¯ã¹ãšã®é¢é£æ§ã¯éå®çã§ãã - PMD (JVM ã³ã³ããã¹ã)
äž»ã«Javaã察象ãšãããã¿ãŒã³ããŒã¹ã®éçè§£æãScalaãšJavaã®çžäºéçšæ§ãé«ãå Žåã«ãæã 䜿çšãããŸãããScalaã®é©çšç¯å²ã¯éãããŠããŸãã - FindBugs / SpotBugs
JVMã®æ¬ 饿€åºã«ç¹åãããã€ãã³ãŒãã¬ãã«ã®è§£æããŒã«ãçæãŸãã¯å ±æã³ã³ããŒãã³ãã®åé¡ã衚é¢åãããããšãã§ããŸãããScalaèšèªã®èªèã«ã¯å¯Ÿå¿ããŠããŸããã - ScalametaããŒã¹ã®ã«ã¹ã¿ã ã¢ãã©ã€ã¶ãŒ
çµç¹åºæã®ãã§ãã¯çšã«Scalametaäžã«æ§ç¯ãããå éšããŒã«ã匷åã§ãããéçºãšä¿å®ã«ã³ã¹ããããããããéåžžã¯éåžžã«å€§èŠæš¡ãªã³ãŒãããŒã¹ã§ã®ã¿æå¹ã§ãã
ãšã³ã¿ãŒãã©ã€ãºScalaãšã³ã·ã¹ãã ã«ãããŠããããã®ä»£æ¿ææ®µã¯æŠç¥çãªåºç€ãšããããããæŠè¡çãªè¿œå æ©èœãšããŠæããã®ãé©åã§ããéçºè ã®ãšã«ãŽããã¯ã¹ããã©ãŒãããã®äžè²«æ§ãJVMã¬ãã«ã®ã€ã³ã¹ãã¯ã·ã§ã³ãšãã£ãç¹å®ã®ã®ã£ããã«å¯ŸåŠãããã®ã§ã¯ãããŸãããè€éãªåæ£Scalaã·ã¹ãã ã«é©çšããå Žåãéçè§£æã®å šäœçãªè§£æéçã«å®è³ªçãªå€åããããããã®ã§ã¯ãããŸããã
Scala éçã³ãŒãè§£æããŒã«ãçµã¿åãããéã®ã¢ãŒããã¯ãã£äžã®ãã¬ãŒããªã
ãšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã¯ãåäžã®éçè§£æããŒã«ã«äŸåããããšã¯ã»ãšãã©ãããŸãããçµç¹ã¯ãç°ãªãè§£æç®æšãé©çšã¢ãã«ããããŠçµç¹çå¶çŽãåæ ããéå±€åãããããŒã«ãã§ãŒã³ãæ§ç¯ããŸãããã®ã¢ãããŒãã¯ã«ãã¬ããžãåäžãããäžæ¹ã§ãããŒã«éžå®æã«ãã°ãã°éå°è©äŸ¡ãããã¢ãŒããã¯ãã£äžã®ãã¬ãŒããªãããããããŸãããããã®ãã¬ãŒããªãã¯ãè§£æçµæã ãã§ãªããéçºè ã®è¡åããã€ãã©ã€ã³ã®å®å®æ§ããããŠã¢ããã€ãŒãŒã·ã§ã³ã®é床ã«ã圱é¿ãäžããŸãã
è€æ°ã®Scalaéçã³ãŒãè§£æããŒã«ã䞊åã«åäœããããšããããã®è§£æã¢ãã«ãäºæãã¬åœ¢ã§çžäºäœçšããå¯èœæ§ããããŸããã³ã³ãã€ã«æã®åŒ·å¶ãã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ãã³ã³ãã€ã«åŸã®æ€æ»ããããŠãã©ãããã©ãŒã ã¬ãã«ã®ã¬ããã³ã¹ã¯ãããããç°ãªãçš®é¡ã®åé¡ãæµ®ã圫ãã«ããŸãããã·ã¹ãã æ§é ã«é¢ããçµ±äžçãªçè§£ãå ±æããŠããŸããããã®çµæãäŒæ¥ã¯ããŒã«ã®çµã¿åãããè©äŸ¡ããéã«ãæ€åºå 容ã ãã§ãªããåºåãã©ã®ããã«éè€ãç«¶åããããã¯ç²ç¹ãçã¿åºãããšããç¹ãèæ ®ããå¿ èŠããããŸãããããããã€ããã¯ã¹ã¯ãããåºç¯ãªæžå¿µäºé ãšå¯æ¥ã«é¢é£ããŠããŸãã äŸåã°ã©ãã®ãªã¹ã¯åæéšåçãªå¯èŠæ§ã«ãããã¢ãŒããã¯ãã£äžã®æææ±ºå®ãæªããããå¯èœæ§ããããŸãã
峿 Œãã®å·è¡ãšçµç¹ã®é©å¿æ§
Scalaã®éçè§£æã¹ã¿ãã¯ãçµã¿åãããéã«æãé倧ãªãã¬ãŒããªãã®äžã€ã¯ã峿 Œãªé©çšãšçµç¹ãžã®é©å¿æ§ãšã®éã®ç·åŒµé¢ä¿ã«ãããŸããã³ã³ãã€ã©ãã©ã°ã€ã³ãWartRemoverãªã©ã®ããŒã«ã¯ãã³ã³ãã€ã«æã«ã«ãŒã«ãé©çšããå®çŸ©ãããå¶çŽã«éåããã³ãŒãããã€ãã©ã€ã³ãééã§ããªãããã«ããŸãããã®ã¢ãã«ã¯ãæ§ã ãªçš®é¡ã®æ¬ é¥ãå®å šã«æé€ããã®ã«éåžžã«å¹æçã§ãããã¬ã¬ã·ãŒã³ãŒããéšåçãªæææš©ã段éçãªã¢ããã€ãŒãŒã·ã§ã³ãæ±ããããç°å¢ã§ã¯æè»æ§ãäœäžããŸãã
å€§èŠæš¡äŒæ¥ã§ã¯ãScalaã®ã³ãŒãããŒã¹ã¯ãã¢ãŒããã¯ãã£äžã®æå³ã«åºã¥ãè€æ°äžä»£ã«ãŸãããããšããããããŸããã¢ãžã¥ãŒã«ã®äžã«ã¯çŸä»£çãªæ©èœèšèšãåæ ããŠãããã®ãããã°ãäžæµããã³äžæµã®ã·ã¹ãã ã«å¯æ¥ã«çµåããæŽå²çãªãã¿ãŒã³ãç¶æ¿ããŠãããã®ããããŸãããã®ãããªç°å¢ã«å³æ Œãªã³ã³ãã€ã«æã®åŒ·å¶é©çšãå°å ¥ãããšãæ°åãã®éåãåæã«è¡šé¢åããããŒã ã®è² æ ã倧ãããªããããªããªãŒã¹ã±ãžã¥ãŒã«ã«æ¯éããããå¯èœæ§ããããŸããããã軜æžããããã«ãçµç¹ã¯åŒ·å¶ããŒã«ãæ£æçã«é©çšããããšãå€ããã«ãŒã«ã®é©çšã«äžåäžãçããäžè²«æ§ãæãªãããŸãã
å¯Ÿç §çã«ãScapegoatãSonarQubeã¢ãã©ã€ã¶ãŒãšãã£ãã³ã³ãã€ã«åŸã«åäœããããŒã«ã¯ããããœãããªã·ã°ãã«ãæäŸããŸãããããã®ããŒã«ã¯ãã«ããçŽã¡ã«ãããã¯ããããšãªãåé¡ã衚é¢åããããããããŒã ã¯ç¶æ³ã«å¿ããŠä¿®åŸ©ã®åªå é äœã決å®ã§ããŸãããã®ã¢ãããŒãã¯é©å¿æ§ãç¶æããäžæ¹ã§ãææ§ããçã¿åºããŸããçºèŠãç¡æéã«å»¶æãããå¯èœæ§ãããã峿 Œãªé©çšãæ¬ åŠããŠãããããæéã®çµéãšãšãã«ã¢ãŒããã¯ãã£ã®èŠåŸãæãªãããå¯èœæ§ããããŸãã
ãããã®ã¢ãã«ãå ±åãããšãæ©æŠãçããŸããéçºè ã¯ã峿 ŒãªããŒã«ãéå®³ãšæããæè»ãªããŒã«ããªãã·ã§ã³ãšæãããã®çµæãæ¡çšã«åããçããŸããæéã®çµéãšãšãã«ããã®ä¹é¢ã¯ã¬ããã³ã¹ãè€éåããã³ãŒãå質ã®çã®ç¶æ ã倿ããããšãå°é£ã«ããŸãããã®ååŠã¯ã以äžã®è°è«ã§è¿°ã¹ãããŠãã課é¡ãåæ ããŠããŸãã ãœãããŠã§ã¢ç®¡çã®è€éãã®ãã€ããã¯ã¹äžè²«æ§ã®ãªã管çã«ãããã·ã¹ãã ãªã¹ã¯ã¯è»œæžãããã©ãããããããå¢å€§ããŸãã
éè€ããä¿¡å·ãšåæãã€ãº
ã¢ãŒããã¯ãã£äžã®ãã¬ãŒããªãã¯ãè€æ°ã®åæããŒã«ããçæãããã·ã°ãã«ãéè€ããããšã§çºçããŸããScalafixãScapegoatãSonarQubeã¯ããããé¢é£ããåé¡ããã©ã°ä»ãããŸãããããããç°ãªãåæèŠç¹ãããã©ã°ä»ããè¡ããŸããããããŒã«ã§ã¯ã»ãã³ãã£ãã¯éåãšããŠè¡šç€ºããããã®ããå¥ã®ããŒã«ã§ã¯ã³ãŒãã®èããšããŠãããã«å¥ã®ããŒã«ã§ã¯æè¡çè² åµãšããŠè¡šé¢åããå¯èœæ§ããããŸãããããã®ã·ã°ãã«ã®éè€ã¯ãæ³šææ·±ãè§£éããªããã°ããªã¹ã¯ã®èªèãé倧è©äŸ¡ããæ ¹æ¬åå ãææ§ã«ããå¯èœæ§ããããŸãã
ãšã³ã¿ãŒãã©ã€ãºScalaç°å¢ã§ã¯ããã®ãã€ãºã¯æœè±¡åã®å¯åºŠã«ãã£ãŠå¢å¹ ãããŸãã颿°ååæãæé»çãªè§£æ±ºããžã§ããªãã¯åã¯ããã¿ãŒã³ããŒã¹ã®ããŒã«ãæå³ã誀ã£ãŠè§£éããå¯èœæ§ãé«ããŸããããŒã«ã远å ãããã«ã€ããŠã誀æ€ç¥ãèç©ããããšã³ãžãã¢ãªã³ã°ã®æ³šæåã奪ãããåæçµæã®ä¿¡é Œæ§ãäœäžããŸããããŒã ã¯ã«ãŒã«ãåºç¯å²ã«æå¶ããããšã§å¯Ÿå¿ããå¯èœæ§ããããããã¯ããŒã«ãã§ãŒã³å šäœã®äŸ¡å€ãäœäžãããŸãã
課é¡ã¯éã ãã§ãªããäžæŽåã§ããåããŒã«ã¯ããªã¹ã¯ãæ£ç¢ºæ§ãä¿å®æ§ãæ§æããèŠçŽ ã«ã€ããŠãããããåæãå®ããŠããŸãããããã®åæãç°ãªãå Žåãçµ±åãããåºåã¯äžè²«æ§ãæ¬ ããŸãããã®çµæãã¢ãŒããã¯ããšãã©ãããã©ãŒã ãªãŒããŒã¯ã調æ»çµæãæäœæ¥ã§èª¿æŽããããåŸãªããªããã·ã¹ãã ãããŒã ã®èп𡿡倧ã«åãããŠæ¡åŒµããããšãã§ããŸããã
ãã®åé¡ã¯ãåæçµæãæèçãªæ£èŠåãªãã«ããã·ã¥ããŒãã«éçŽããããšããã«æ·±å»ã«ãªããŸããç°æ©çš®ããŒã«ããæœåºãããææšã¯äžèŠåçã«èŠãããããããŸããããå®éã«ã¯æ ¹æ¬çã«ç°ãªãçŸè±¡ã衚ããŠããŸããå ±éã®åæåºæºããªããã°ãæææ±ºå®è ã¯æŽå¯ãããå¯èŠæ§ãéèŠããŠæé©åããŠããŸããªã¹ã¯ããããããã¯å€ãã®äŒæ¥ã§ããèŠããããã¿ãŒã³ã§ãã éçè§£æã¡ããªãã¯ã®è§£é.
ã·ã¹ãã ã©ã€ããµã€ã¯ã«å šäœã«ãããæçåãããå¯èŠæ§
æçµçãªãã¬ãŒããªãã¯ãScalaã®éçè§£æããŒã«ãçµã¿åãããå Žåãã·ã¹ãã ã©ã€ããµã€ã¯ã«å šäœã«ããã£ãŠæççãªå¯èŠæ§ããæäŸãããªããšããç¹ããçããŸããã»ãšãã©ã®ããŒã«ã¯ãã³ã³ãã€ã«æãã³ã³ãã€ã«åŸãCIå®è¡ãšãã£ãç¹å®ã®ãã§ãŒãºã®ãœãŒã¹ã³ãŒãã«çŠç¹ãåœãŠãŠããŸããèšèšæå³ãã³ãŒãã®é²åããããã€ã¡ã³ãããããžãéçšäžã®æåãªã©ãããããæ®µéã«ãããç¶ç¶çãªãã¥ãŒãæäŸããããŒã«ã¯ãããŸããã
ãšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ããªã¹ã¯ããã§ãŒãºãè¶ ããŠèç©ãããããããã®æçåãåé¡ãšãªããŸããã³ã³ãã€ã«æã®åŒ·å¶ãšã»ãã³ãã£ãã¯ãªãã¡ã¯ã¿ãªã³ã°ã®ãã§ãã¯ãééãã倿Žã§ãã£ãŠãããããã€åŸã«ã¯å®è¡é åºããªãœãŒã¹äœ¿çšéããŸãã¯é害ã®äŒæãå€åããå¯èœæ§ããããŸããéçè§£æããŒã«ãçµã¿åãããŠãããããã®åœ±é¿ãã¢ãã«åããããã«å¿ èŠãªã³ã³ããã¹ããäžè¶³ããŠããããšãå€ããç¹ã«åæ£ã·ã¹ãã ãéåæã·ã¹ãã ã§ã¯ãã®åŸåãé¡èã§ãã
ãã®çµæãçµç¹ã¯ããŒã«ãã§ãŒã³ã®ä¿è·ç¯å²ãé倧è©äŸ¡ããŠããŸãå¯èœæ§ããããŸããè€æ°ã®ããŒã«ãååšããããšã§ãéèŠãªå®è¡ãã¹ãæªæ€èšŒã®ãŸãŸã§ããã«ããããããã培åºããŠãããšããå°è±¡ãäžããŠããŸããŸãããã®ã®ã£ããã¯ãScalaã³ã³ããŒãã³ãããªãã¡ã¯ã¿ãªã³ã°ããããé²åããã¢ãŒããã¯ãã£å ã§åé 眮ãããããã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã«ãããŠæãé¡èã«ãªããŸããå šäœçãªå¯èŠæ§ããªããã°ãéçè§£æã®ç¥èŠã¯å±æçãªæ¹åã«åœ¹ç«ã¡ãã·ã¹ãã å šäœã®ãªã¹ã¯ã¯æªè§£æ±ºã®ãŸãŸã«ãªãå¯èœæ§ããããŸãã
ãããã®ãã¬ãŒããªããçè§£ããããšã¯ãå³å¯ããšå®çšæ§ã®ãã©ã³ã¹ã远æ±ããäŒæ¥ã«ãšã£ãŠäžå¯æ¬ ã§ããScalaã®éçã³ãŒãè§£æããŒã«ãçµã¿åãããããšã§ãã³ãŒãã®å質ãšäžè²«æ§ãå€§å¹ ã«åäžãããããšãã§ããŸããããã®éçãšçžäºäœçšãæç¢ºã«èªèããããŒã«ã®è©³çްã§ã¯ãªãã¢ãŒããã¯ãã£äžã®æžå¿µäºé ãšããŠç®¡çããããšãäžå¯æ¬ ã§ãã
忣ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«ããã Scala éçã³ãŒãè§£æã®éç
Scalaã®éçã³ãŒãè§£æããŒã«ã¯ããœãŒã¹ã³ãŒãæ§é ãèšèªäœ¿çšæ³ããããŠç¹å®ã®è«ççæ¬ é¥ã®èª¿æ»ã«éåžžã«å¹æçã§ããå¢çãå®ããããã³ãŒãããŒã¹å ã§ã¯ããªãã¡ã¯ã¿ãªã³ã°ãäžè²«æ§ããããŠé·æçãªä¿å®æ§ãæ¯æŽããææçŸ©ãªã·ã°ãã«ãæäŸããŸããããããScalaã·ã¹ãã ã忣åãšã³ã¿ãŒãã©ã€ãºç°å¢ã«æ¡å€§ããã«ã€ããŠãéçè§£æã®åºç€ãšãªãåæçä»®å®ã¯éçšäžã®çŸå®ããä¹é¢ãå§ããŸãã
çŸä»£ã®ãšã³ã¿ãŒãã©ã€ãºã¢ãŒããã¯ãã£ã§ã¯ãScalaã³ã³ããŒãã³ããåç¬ã§å®è¡ãããããšã¯ã»ãšãã©ãããŸãããéåæã¯ãŒã¯ãããŒã«åå ããç°çš®ãµãŒãã¹ãšé£æºãããœãŒã¹ã¬ãã«ã§ã¯èŠããªãã©ã³ã¿ã€ã ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æ±ºå®ã«äŸåããŸããéçè§£æã¯ãã®ãããªç¶æ³ã§ãäŸç¶ãšããŠäŸ¡å€ããããŸããããã®éçã¯å¶çºçãªãã®ã§ã¯ãªããæ§é çãªãã®ã«ãªããŸãããããã®éçãã©ãã§çºçããããçè§£ããããšã¯ãããŒã«ã®é©çšç¯å²ã«å¯Ÿãã誀ã£ãä¿¡é Œãé¿ããéçè§£æãã·ã¹ãã ã¬ãã«ã®ãªã¹ã¯è©äŸ¡ã«ãããå€ãã®å ¥åé ç®ã®äžã€ãšããŠäœçœ®ä»ããããã«äžå¯æ¬ ã§ãã
å®è¡æã®åäœãšå®è¡é åºã®ç²ç¹
忣ã·ã¹ãã ã«ãããScalaã®éçã³ãŒãè§£æã«ãããæãé倧ãªå¶çŽã®äžã€ã¯ãå®è¡æã®æåãšå®è¡é åºãæ£ç¢ºã«ã¢ãã«åã§ããªãããšã§ããScalaã¯é¢æ°ååæãé å»¶å®è¡ãéåæåŠçãæšå¥šããŠããŸããããããã¯ãã¹ãŠããããã€åŸã®ããžãã¯ã®å®éã®å®è¡é åºãææ§ã«ããŸããéçããŒã«ã¯å®£èšãããå¶åŸ¡ãããŒãè§£æããŸãããå®éã®ã¯ãŒã¯ããŒãæ¡ä»¶äžã§ãã®ãããŒãã©ã®ããã«å®çŸããããã確å®ã«æšæž¬ããããšã¯ã§ããŸããã
ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã§ã¯ãå®è¡é åºã¯ã¡ãã»ãŒãžãããŒã«ãŒã®ã»ãã³ãã£ã¯ã¹ãã¹ã¬ããããŒã«ã®èšå®ãããã¯ãã¬ãã·ã£ãŒã¡ã«ããºã ãšãã£ãå€éšèŠå ã«å·Šå³ãããããšããããããŸããScalaãµãŒãã¹ã¯ããœãŒã¹ã¬ãã«ã§ã¯æ±ºå®è«çã«èŠãããã®ã®ãå®è¡æã«ã¯å€§ããå€åããåäœã瀺ãããšããããŸããéçè§£æã§ã¯ãã¹ã¬ããã®ç«¶åãã¹ã±ãžã¥ãŒãªã³ã°ã®é å»¶ããããã¯æ¬çªç°å¢ã§çºçããéæ±ºå®è«çãªã€ã³ã¿ãŒãªãŒãã³ã°ã芳å¯ããããšã¯ã§ããŸããããã®çµæãããã©ãŒãã³ã¹ã®åé¡ãã¿ã€ãã³ã°é¢é£ã®æ¬ é¥ã¯ãéçšäžåé¡ãçºçãããŸã§æ€åºãããªãããšããããããŸãã
ãã®éçã¯ãçµç¹ãéçè§£æçµæãã·ã¹ãã ã®å¥å šæ§ã®ä»£çææšãšããŠå©çšããããšããå Žåã«ç¹ã«é¡èã«ãªããŸãããœãŒã¹ã³ãŒãè§£æããåŸãããææšã¯ãè² è·å¢å¹ ã調æŽãªãŒããŒãããã«ãã£ãŠå®è¡æã®åäœãå£åããŠããã«ãããããããå®å®æ§ãåçŽãã瀺åããå ŽåããããŸããããããççŸã¯ãéçšç£èŠãšåæãéããŠã®ã¿æããã«ãªãããšããããããŸãã ãœãããŠã§ã¢ããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã®è¿œè·¡ã¯ãæ ¹æ¬çã«ç°ãªãåæå±€ã§åäœããŸãã
éçæ§é ãšåçåäœã®éã«ã¯ã®ã£ãããããããã忣Scalaã·ã¹ãã ã§ã¯éçè§£æãæ éã«è§£éããå¿ èŠããããŸããéçè§£æã¯è€éæ§ãååšããç®æã瀺ãããšã¯ã§ããŸããããã®è€éæ§ãã¹ãã¬ã¹äžã§ã©ã®ããã«åäœãããã説æããããšã¯ã§ããŸããããããã®èŠç¹ãæ··åããäŒæ¥ã¯ãã³ãŒãã®çŸèгãæé©åããªããããå®è¡æã®äžå ·åãæªè§£æ±ºã®ãŸãŸã«ããŠããŸããªã¹ã¯ããããŸãã
éåæéä¿¡ãšé ããéå®³äŒæ
忣Scalaã·ã¹ãã ã¯ãFutureãã¹ããªãŒã ãã¡ãã»ãŒãžé§åååŠçãšãã£ãéåæéä¿¡ãã¿ãŒã³ã«å€§ããäŸåããŠããŸããéçè§£æã§ã¯éåææ§é ã®ååšãç¹å®ã§ããŸããããããã¯ãŒã¯å¢çãè¶ããŠãµãŒãã¹ãçžäºäœçšããéã«ããããã®ã¡ã«ããºã ãéããŠé害ãã©ã®ããã«äŒæããããã¢ãã«åããããšã¯ã§ããŸããããã®ãããã·ã¹ãã ã®ã¬ãžãªãšã³ã¹ïŒå埩åïŒã«é¢ããç²ç¹ãçããŸãã
å®éã«ã¯ã忣ã·ã¹ãã ã«ãããé害ã®äŒæã¯ããªãã©ã€ããžãã¯ãã¿ã€ã ã¢ãŠãèšå®ããµãŒããããã¬ãŒã«ãŒããããŠåªçæ§ã®ä¿èšŒã«ãã£ãŠåœ¢äœãããŸãããããã®åäœã¯ãå€ãã®å ŽåãScalaã®ãœãŒã¹ã³ãŒãå€ãã€ãŸãèšå®ãã¡ã€ã«ãã€ã³ãã©ã³ã³ããŒãã³ãå ã§å®çŸ©ãããŸããéçè§£æããŒã«ã¯ããããã³ã³ããã¹ãæ å ±ã«ã¢ã¯ã»ã¹ã§ãããå®è¡æã«çºçããéšåçãªé害ãé£éçãªãªãã©ã€ãã·ãã¥ã¬ãŒãããããšãã§ããŸããã
ãã®çµæãåäœã§ã¯å ç¢ã«èŠããScalaã³ãŒãã§ãããããã€åŸã«ã¯å¢å¹ ãããé害ã¢ãŒããåŒãèµ·ããå¯èœæ§ããããŸããåäžã®äŸå€åŠçãã¿ãŒã³ããµãŒãã¹éã§ç¹°ãè¿ããããšãç¹å®ã®ç¶æ³äžã§ã¯ãªãã©ã€ã¹ããŒã ããªãœãŒã¹æ¯æžãåŒãèµ·ããå¯èœæ§ããããŸããéçè§£æããŒã«ã¯å±æçãªäŸå€ã®èª€çšãæ€ç¥ã§ããŸãããé害çºçæã«ãã®ãããªãã¿ãŒã³ããµãŒãã¹éã§ã©ã®ããã«çžäºäœçšããããäºæž¬ããããšã¯ã§ããŸããããããããã€ããã¯ã¹ã¯éåžžãã€ã³ã·ãã³ãåŸã®åæã 忣åã€ã³ã·ãã³ãå ±åã®å®è·µéçæ€æ»ã§ã¯ãªãã
ãã®å¶éã¯æ ¹æ¬çãªéçãæµ®ã圫ãã«ããŠããŸããéçè§£æã¯ãã·ã¹ãã ãã©ã®ããã«æ éãããã§ã¯ãªããã©ã®ãããªã³ãŒããæžãããŠããããè©äŸ¡ãããã®ã§ãã忣Scalaç°å¢ã§ã¯ãæ éãæ³å®ãããåäœã¢ãŒãã§ããããããã®åºå¥ã¯éåžžã«éèŠã§ããã¬ãžãªãšã³ã¹è©äŸ¡ãéçè§£æã®ã¿ã«é ŒãäŒæ¥ã¯ãçŸå®äžçã®æ··ä¹±æã«æãéèŠãªæ¡ä»¶ãèŠéããŠããŸãå¯èœæ§ããããŸãã
ã·ã¹ãã éããŒã¿ãããŒãšç¶æ ã®äžè²«æ§ã®èª²é¡
Scalaã®éçã³ãŒãè§£æã«ãããããäžã€ã®æ§é çãªéçã¯ãã·ã¹ãã å¢çãè¶ããããŒã¿ãããŒã®æ±ãã«ãããŸããåäžã®ã³ãŒãããŒã¹å ã§ã¯ãããŒã«ã¯å€æ°ã®äœ¿çšãã¡ãœããåŒã³åºãã远跡ã§ããŸãããããããµãŒãã¹éã§ã¯ãããŒã¿ãããŒã¯ã·ãªã¢ã«å圢åŒããã©ã³ã¹ããŒããããã³ã«ãå€éšã¹ãã¬ãŒãžã·ã¹ãã ã«ãã£ãŠåªä»ããããããéçè§£æã§ã¯å®å šã«ã¯èŠ³æž¬ã§ããŸããã
ãšã³ã¿ãŒãã©ã€ãºScalaã·ã¹ãã ã¯ãã€ãã³ãã¹ããªãŒã ãããŒã¿ããŒã¹ããããŠäžæµã®ã³ã³ã·ã¥ãŒããŒãå«ãè€éãªããŒã¿ãã€ãã©ã€ã³ã«é¢äžããããšããããããŸããéçè§£æããŒã«ã¯ããŒã«ã«ãªå€æãæ€èšŒã§ããŸãããæ å ±ãããã»ã¹å¢çãè¶ããåŸã®ããŒã¿ã®é®®åºŠãé åºãäžè²«æ§ã«é¢ããä»®å®ãæ€èšŒããããšã¯ã§ããŸããããããã®ç¹æ§ã¯ããœãŒã¹ã³ãŒãã ãã§ãªããã€ã³ãã©ã¹ãã©ã¯ãã£ã®æåãçµ±åãã¿ãŒã³ã«ãã£ãŠåœ¢æããããåµçºçãªç¹æ§ã§ãã
ãã®ã®ã£ããã¯ãScalaãµãŒãã¹ã®ãªãã¡ã¯ã¿ãªã³ã°ããé²åããã¢ãŒããã¯ãã£å ã§ã®åé 眮ãšãã£ãã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã«ãããŠç¹ã«é¡èã§ããããŒã«ã«ãªã»ãã³ãã£ã¯ã¹ãç¶æãã倿Žã§ãã£ãŠãããšã³ãããŒãšã³ãã®ããŒã¿åäœãå€åãã埮åŠãªæ¬ é¥ãçããå¯èœæ§ããããŸããéçè§£æã§ã¯ãããããå€åãæããããšãã§ããŸãããããã¯ããã坿¥ã«é¢é£ããŠããŸãã 忣ããŒã¿åæãã¿ãŒã³ èšèªã¬ãã«ã®æ£ç¢ºããããã
äŒæ¥ã«ãšã£ãŠãããã¯éçè§£æã«å ããŠãããŒã¿ãããŒããªã¢ã«ã¿ã€ã ã§èгå¯ããã·ã¹ãã ã¬ãã«ã®æ€èšŒæè¡ãå°å ¥ããå¿ èŠãããããšãæå³ããŸããScalaã®éçè§£æã¯ã³ãŒãã®æå³ãšæ§é ãçè§£ããããã®åŒ·åãªããŒã«ã§ããã忣å¢çãè¶ããããŒã¿ã®æåãå¯èŠåãã代ããã«ã¯ãªããŸããã
ãããã®éçãèªèãããšããŠããScalaã®éçã³ãŒãè§£æã®äŸ¡å€ãæãªãããããã§ã¯ãããŸããããããããã®åœ¹å²ãæç¢ºã«ãªããŸãã忣ãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«ãããŠãéçè§£æã¯ã³ãŒãã®åè³ªãšæ§é ã«é¢ããåºç€çãªæŽå¯ãæäŸããŸãããå®è¡æã®åäœãé害ã®ãã€ããã¯ã¹ãã·ã¹ãã éã®ããŒã¿ãããŒãèæ ®ãããããåºç¯ãªè§£æãã¬ãŒã ã¯ãŒã¯ã®äžã«äœçœ®ä»ããããå¿ èŠããããŸãã
ã¢ããã€ãŒãŒã·ã§ã³ããã°ã©ã ã«ãããScalaéçã³ãŒãåæã®äœçœ®ä»ã
Scala ãå«ãã¢ããã€ãŒãŒã·ã§ã³ã»ããã°ã©ã ã¯ãèšèªãã®ãã®ã«çŠç¹ãçµãããšã¯ã»ãšãã©ãããŸãããScala ã¯ãã¢ãŒããã¯ãã£ã®åè§£ããã©ãããã©ãŒã ã®ç§»è¡ãéçšã®åç·šãšãã£ããããåºç¯ãªå€é©ã€ãã·ã¢ããã®äžã«çµã¿èŸŒãŸããããšããããããŸããããããç¶æ³ã«ãããŠãéçã³ãŒãè§£æã¯ãåç¬ã®åè³ªææšã§ã¯ãªããæŠç¥çãªããŒã«ãããã®äžéšãšãªããŸãããã®åœ¹å²ã¯ãã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã®ç®æšãå¶çŽããããŠé åºä»ããšç §ããåãããŠçè§£ããå¿ èŠããããŸãã
äŒæ¥ã®ã¢ããã€ãŒãŒã·ã§ã³ã¯æ®µéçã«å±éãããŸããã·ã¹ãã ã¯éçšãç¶ç¶ããªããé²åããããŒã ã¯å€åããªããããµãŒãã¹ã¯äŸ¡å€ãæäŸãç¶ããæè¡çè² åµã¯äžåŸã«è§£æ¶ãããã®ã§ã¯ãªããéžæçã«å¯ŸåŠãããŸããScalaã®éçã³ãŒãè§£æã¯ãæ¢åã®ã³ãŒãããŒã¹ã®æ§é çãªæŽå¯ãæäŸããããšã§ãã®ããã»ã¹ã«è²¢ç®ããŸããããã®å¹æã¯ã¢ããã€ãŒãŒã·ã§ã³ã®åãã§ãŒãºãšã©ãã ãé©åã«é£æºããŠãããã«å·Šå³ãããŸããåæçµæã®äœçœ®ã¥ããé©åã§ãªãå Žåããã€ãºã誀ã£ãç·æ¥æ§ãçããå¯èœæ§ããããŸããé©åã«é£æºãããŠããã°ããªã¹ã¯ã軜æžããæ å ±ã«åºã¥ãã倿Žãå°ãã®ã«åœ¹ç«ã¡ãŸãã
éçåæã䜿çšããŠå¢å倿Žãå®å®åãã
挞é²çãªã¢ããã€ãŒãŒã·ã§ã³æŠç¥ã¯ãæ¬çªç°å¢ã®å®å®æ§ãæãªãããšãªããå¶åŸ¡ããã倿Žãå®è¡ã§ããèœåã«äŸåããŸããScalaç°å¢ã§ã¯ãããã¯å€ãã®å ŽåããµãŒãã¹ã®æ®µéçãªãªãã¡ã¯ã¿ãªã³ã°ãæ©èœã®æœåºããŸãã¯åäœãç¶æããªããã€ã³ã¿ãŒãã§ãŒã¹ã®é©å¿ãæå³ããŸããéçã³ãŒãè§£æã¯ã挞é²çãªé²æã劚ããå¯èœæ§ã®ããæ§é çãªäŸåé¢ä¿ãå¶çŽéåãæããã«ããããšã§ãå®å®åã®åœ¹å²ãæãããŸãã
Scalafixãã³ã³ãã€ã©ããŒã¹ã®ãã§ãã¯ããŒã«ãªã©ã®ããŒã«ã¯ãã³ãŒãå ã®ã©ãã«ä»®å®ãèšè¿°ãããŠããããçè§£ããäžã§åœ¹ç«ã¡ãŸããã¢ãžã¥ãŒã«éã®çµåãéæšå¥šAPIãžã®äŸåããããŠå€æŽãé»ããã¿ãŒã³ãæããã«ããŸãããã®æ å ±ã¯ãã¢ããã€ãŒãŒã·ã§ã³ãå®å šãªæžãæãã§ã¯ãªã段éçãªã¢ãããŒãããšãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã æ®µéçãªè¿ä»£åæŠç¥éçåæã¯ãå®å šãªãªãã¡ã¯ã¿ãªã³ã°ã®å¢çãç¹å®ãã倿Žã«ãã£ãŠäžåè¡¡ãªãªã¹ã¯ãçããé åã匷調衚瀺ããããšã§ããããã®æŠç¥ããµããŒãããŸãã
ãã ããéçè§£æã®é©çšç¯å²ã¯æ éã«èšå®ããå¿ èŠããããŸãããã¹ãŠã®ã¢ãžã¥ãŒã«ã«å³æ Œãªé©çšãè¡ããšãããŒã ãã¬ã¬ã·ãŒåé¡ãžã®å¯Ÿå¿ãææå°æ©ã«è¿«ãããããšã«ãªããã¢ããã€ãŒãŒã·ã§ã³ã®é²è¡ãé ããå¯èœæ§ããããŸãã广çãªããã°ã©ã ã§ã¯ãå€ãã®å Žåãè§£æãå³éžããçæçãªå€æŽã®å¯Ÿè±¡ãšãªãã³ã³ããŒãã³ãã«éç¹çã«é©çšããŸãããã®ã¢ãŒãã§ã¯ãéçè§£æã¯ã°ããŒãã«ãªã²ãŒãããŒããŒãšããŠæ©èœããã®ã§ã¯ãªããã·ãŒã±ã³ã¹ã®æ±ºå®ã«åœ¹ç«ã€æ å ±ãæäŸããŸãã
ããäžã€ã®èæ ®äºé ã¯ãçµç¹ã®æºåç¶æ³ã§ããæ®µéçãªã¢ããã€ãŒãŒã·ã§ã³ã¯ãScalaã®å°éç¥èã¬ãã«ãç°ãªãè€æ°ã®ããŒã ã«ãŸããã£ãŠè¡ãããŸããéçè§£æã®åºåã¯ããããã®ããŒã ã«ãšã£ãŠè§£éå¯èœã§ãªããã°ãç¡èŠãããŠããŸãå¯èœæ§ããããŸãããã®åéã§æåãåããŠããäŒæ¥ã¯ãéçè§£æããæ£ç¢ºæ§ãèªåçã«å€æããããŒã«ãšããŠã§ã¯ãªããæè¡çå¶çŽãè°è«ããããã®å ±éèšèªãšããŠæ±ã£ãŠããŸãã
éçè§£æãšã¢ãŒããã¯ãã£åè§£ã®é£æº
ã¢ããã€ãŒãŒã·ã§ã³ã®äžè¬çãªç®æšã¯ãã¢ãŒããã¯ãã£ã®åè§£ã§ããããã¯ãã¢ããªã·ãã¯ãªScalaãµãŒãã¹ããããå°ãããããèªåŸçãªã³ã³ããŒãã³ãã«åå²ãããã®ã§ããéçã³ãŒãåæã¯ãåè§£äœæ¥ãè€éã«ããå éšå¢çãå ±éã®æœè±¡åããããŠé ããäŸåé¢ä¿ãæããã«ããããšã§ããã®å®çŸã«è²¢ç®ããŸãã
ã»ãã³ãã£ãã¯è§£æããŒã«ã¯ã¢ãžã¥ãŒã«éã®ã·ã³ãã«ã®äœ¿çšç¶æ³ã远跡ã§ãããããã¢ãŒããã¯ãã¯åæã«å€æŽãããæ©èœçŸ€ãç¹å®ã§ããŸãããã®ç¥èŠã¯ããµãŒãã¹å¢çãšæææš©ã«é¢ããæææ±ºå®ããµããŒãããŸããã³ã³ãã€ã«åŸã®ããŒã«ã¯ãé床ã«è€éãªã¯ã©ã¹ããåé¢ãé£ããæ·±ããã¹ããããããžãã¯ãªã©ãã¢ãŒããã¯ãã£äžã®ã¢ã³ããã¿ãŒã³ãšçžé¢ããã³ãŒãã®èããæ€ç¥ããŸãã
ãããã®å©ç¹ã«ãããããããéçè§£æã«ã¯ãã®æèã«ãããŠéçããããŸããæ§é çãªçµåãèšè¿°ããããšã¯ã§ããŸãããææ¡ãããåè§£ãå®è¡æã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãã¿ãŒã³ãããžãã¹ã¯ãŒã¯ãããŒã«é©åããŠãããã©ããã倿ããããšã¯ã§ããŸããããããã£ãŠãã¢ãŒããã¯ãã£äžã®æ±ºå®ã¯ãéçãªæŽå¯ãšéçšããŒã¿ããããŠãã¡ã€ã³çè§£ãçµã¿åãããå¿ èŠããããŸããéçè§£æã¯ã³ãŒãã絡ã¿åã£ãŠããç®æãæããã«ããŸããããããã®ã€ãªãããååšããçç±ã説æããããšã¯ã§ããŸããã
éçè§£æãåè§£äœæ¥ã«çµ±åããäŒæ¥ã¯ãå€ãã®å Žåã圱é¿ã«çŠç¹ãåœãŠãææ³ãšçµã¿åãããŠã 圱é¿åæã®å®è·µãã®çµã¿åããã«ãããããŒã ã¯æ§é 倿Žãã·ã¹ãã å šäœãã¹ããŒã¯ãã«ããŒã«åãŒãæ³¢å广ãäºæž¬ã§ããããã«ãªããŸããéçè§£æã¯ã³ãŒãéã®é¢ä¿æ§ã瀺ãããããæäŸãã圱é¿åæã¯ãããã®é¢ä¿æ§ã倿Žã«ãã圱é¿ã®èгç¹ããæããŸãã
ãã©ãããã©ãŒã ãšãã¯ãããžãŒã®ç§»è¡ã«ããããªã¹ã¯ç®¡ç
Scalaã®ã¢ããã€ãŒãŒã·ã§ã³ã¯ãã¯ã©ãŠããã€ãã£ãã»ã€ã³ãã©ã¹ãã©ã¯ãã£ãžã®ç§»è¡ãæ°ããããŒã¿ãã©ãããã©ãŒã ãšã®çµ±åãšãã£ããã©ãããã©ãŒã ã®ç§»è¡ãšéãªãããšããããããŸããããããã·ããªãªã§ã¯ãéçã³ãŒãè§£æã«ãã£ãŠå€ãç°å¢ã«çµã³ã€ããåæãæããã«ããããšã§ããªã¹ã¯ç®¡çã«åœ¹ç«ã¡ãŸããããããåæã«ã¯ãã¹ã¬ããã¢ãã«ããªãœãŒã¹ç®¡çãã¿ãŒã³ããããã¯æ°ãããã©ãããã©ãŒã ã«ã¹ã ãŒãºã«ç§»è¡ã§ããªãçµ±åã¡ã«ããºã ãªã©ãå«ãŸããå ŽåããããŸãã
éçè§£æããŒã«ã¯ããã©ãããã©ãŒã ç§»è¡æã«åé¡ãšãªãéæšå¥šã®æ§æèŠçŽ ãå®å šã§ãªããã¿ãŒã³ãæŽãåºãããšãã§ããŸãããŸããScalaã³ãŒãããã©ãããã©ãŒã åºæã®åäœã«äŸåããŠããç®æãç¹å®ããç§»è¡åã«é©åãªä¿®æ£ãè¡ãã®ã«åœ¹ç«ã¡ãŸãããã®ããã«è§£æãç©æ¥µçã«æŽ»çšããããšã§ãåŸææ®µéã§äºæãã¬äºæ ãçºçããã¢ããã€ãŒãŒã·ã§ã³ã®ã¿ã€ã ã©ã€ã³ãé å»¶ããå¯èœæ§ã軜æžã§ããŸãã
ããããªãããéçè§£æã ãã§ã¯ãã©ãããã©ãŒã ã®äºææ§ãåç¬ã§æ€èšŒããããšã¯ã§ããŸãããå±éæ§æããããã¯ãŒã¯ã®æåãéçšäžã®å¶çŽãã·ãã¥ã¬ãŒãããããšãã§ããŸããããã®ãããéçè§£æã®åœ¹å²ã¯æ±ºå®çãªãã®ã§ã¯ãªããæºåçãªãã®ã§ããéçè§£æãæ£ããäœçœ®ä»ããŠããäŒæ¥ã¯ãéçè§£æã掻çšããŠäžç¢ºå®æ§ãçµã蟌ã¿ããªã¹ã¯ãæãé«ãç®æã«ãã¹ããšæ€èšŒã®åãçµã¿ãéäžãããŠããŸãã
ã¢ããã€ãŒãŒã·ã§ã³ã»ããã°ã©ã ã«ãããŠãScalaã®éçã³ãŒãè§£æã¯ããã²ãŒã·ã§ã³ããŒã«ãšããŠæ±ãããšã§æã广çã§ããæ§é ãå¶çŽãæœåšçãªå±éºæ§ãæç¢ºã«ããŸãããã¢ãŒããã¯ãã£äžã®å€æãéçšäžã®æ€èšŒã«åã£ãŠä»£ãããã®ã§ã¯ãããŸãããè§£æãã¢ããã€ãŒãŒã·ã§ã³ã®åãã§ãŒãºã«åãããããšã§ãäŒæ¥ã¯ãããã®ããŒã«ããæ°žç¶çãªäŸ¡å€ãåŒãåºããšåæã«ãæ¬æ¥æäŸããããšãæå³ããŠããªãã·ã°ãã«ãžã®é床ã®äŸåãé¿ããããšãã§ããŸãã
ãªã¹ã¯ãåãåºãåã«ãã®åœ¢ãäºæž¬ãã
Scalaã®éçã³ãŒãè§£æããŒã«ã¯ããšã³ã¿ãŒãã©ã€ãºãœãããŠã§ã¢ç°å¢ã«ãããŠéèŠãã€æ°žç¶çãªåœ¹å²ãæãããŠããŸããè€éãªã³ãŒãã«æ§é ãäžããæœåšçãªèšèšäžã®åæãæããã«ããããŒã éã§ã³ãŒãå質ãè°è«ããããã®å ±éã®èªåœãæäŸããŸããæ éã«é©çšããããšã§ããªãã¡ã¯ã¿ãªã³ã°ã«ãããäžç¢ºå®æ§ã軜æžããæ®µéçãªã¢ããã€ãŒãŒã·ã§ã³ãæ¯æŽããããã§ãªããã°äžéæã«ãªãå€§èŠæš¡ãªã³ãŒãããŒã¹ã«ã€ããŠçµç¹ãè«ççã«çè§£ããã®ã«åœ¹ç«ã¡ãŸãããã®äŸ¡å€ã¯ç¢ºãã«ååšããŸããããã®å¹æã¯ãããããåäœããåæã¬ã€ã€ãŒã«ãã£ãŠå¶éãããŸãã
ãšã³ã¿ãŒãã©ã€ãºScalaã·ã¹ãã å šäœã«ãããŠãæãé倧ãªãªã¹ã¯ã¯ãåç¬ã®èšèªéåã§ã¯ãªããçžäºäœçšããçºçããåŸåããããŸãããããã®çžäºäœçšã¯ãã¢ãžã¥ãŒã«ããµãŒãã¹ããã©ãããã©ãŒã ããããŠéçšã³ã³ããã¹ãã«ãŸããããŸããéçè§£æã¯ã³ãŒãã®å éšæ§é ãæããã«ããŸãããå®éã®ã¯ãŒã¯ããŒããé害ããããŠå€æŽã«ãããããåŸã«ãã®æ§é ãã©ã®ããã«åäœããããå®å šã«èª¬æããããšã¯ã§ããŸããããããã£ãŠãéçè§£æã®çµæãã·ã¹ãã ã®å¥å šæ§ã®æ±ºå®çãªè©äŸ¡ãšããŠæ±ããšãã€ã³ã·ãã³ãçºçåŸã«åããŠæããã«ãªãç²ç¹ãçããå¯èœæ§ããããŸãã
ãã®èšäºå šäœãéããŠã®åæã«ãããScalaã®éçã³ãŒãè§£æããŒã«ã¯ãå質ã®éããããç®çã®éããé¡èã§ããããšã瀺ãããŸãããããŒã«ã«ãã£ãŠã¯èŠåŸã匷å¶ãããã®ãé²åãä¿ããã®ãã¬ããã³ã¹ãšå¯èŠæ§ãæäŸãããã®ããããŸãããããã®ããŒã«ãçµã¿åãããããšã§ã«ãã¬ããžã¯åäžããŸããã匷å¶ã®å³å¯ããã·ã°ãã«ã®äžè²«æ§ãçµç¹ãžã®å°å ¥ã«ãããŠãã¬ãŒããªããçããŸãããããã®ãã¬ãŒããªãã¯æ¬è³ªçã«ã¢ãŒããã¯ãã£çãªãã®ã§ãããããŒã«ãéçºè ã®è¡åãæææ±ºå®ã«é·æã«ããã£ãŠã©ã®ããã«åœ±é¿ãäžããããçè§£ããäžã§ãæ éã«ç®¡çããå¿ èŠããããŸãã
äŒæ¥ã«ãšã£ãŠæŠç¥çãªåé¡ã¯ãã©ã®Scalaéçã³ãŒãè§£æããŒã«ãåç¬ã§æé©ã§ããããšããããšã§ã¯ãããŸãããéçè§£æããã·ã¹ãã çè§£ãžã®ããåºç¯ãªã¢ãããŒãã«ã©ã®ããã«äœçœ®ä»ããããããšããããšã§ããéçããŒã«ã¯ãå®è¡æã®çå®ã®ãããã·ãšããŠã§ã¯ãªããæ§é çãªæŽå¯ã®ããã®ããŒã«ãšããŠäœçœ®ä»ããããå Žåã«æã匷åã«ãªããŸãããã®ããã«äœ¿çšããããšã§ãçµç¹ã¯å€æŽãå°é£ãªç®æãåæãè匱ãªç®æããããŠã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ãåæ»ããå¯èœæ§ãæãé«ãç®æãäºæž¬ããã®ã«åœ¹ç«ã¡ãŸãã
Scalaãé·æéçšãããããã·ã§ã³ã¯ãªãã£ã«ã«ãªã·ã¹ãã ã§äœ¿çšããç¶ããéããéçè§£æãšããåéã¯ä»åŸãäžå¯æ¬ ãªãã®ãšãªãã§ãããããã®æå€§ã®è²¢ç®ã¯ãäŒæ¥ããªã¹ã¯ã®èŠæš¡ã忣ããããŠæéã«ãã£ãŠãªã¹ã¯ãå¢å¹ ãããåã«ããã®èŒªéãæ©æã«ææ¡ã§ããããã«ããããšã§ãã
