1. ãªãScalaãç¬åŠããã®ã
Scalaãšããèšèªãç¬åŠããããšæãããã®èšäºãèªãã§ããèªè ã®çããããŸãã¯ããªãã®ãã®æèã称è³ããŸããç¬åŠãšããã®ã¯èªå·±åçºã®ç©¶æ¥µåœ¢ãšãèšããŸããä»åã¯ãã®ã¹ãããã®äžå©ã«ãªãã¹ããScalaãç¬åŠã§åŠã¶æ¹æ³ã«ã€ããŠè§£èª¬ããŸãã
äžäœãªãScalaãªã®ãããã®çç±ã¯å€å²ã«ããããŸããããã¯ãã®ç¹æ§ãå©ç¹ã倧ãã圱é¿ããŠããŸããããã«Scalaãæ±ããããçç±ãScalaã䜿ãã¡ãªããã«ãè¿«ã£ãŠã¿ãŸãããã
ããã§ã¯Scalaã®ç¥ç§ã«äžç·ã«è¿«ã£ãŠãããŸãããã
1.1 Scalaã®ç¹æ§ãšå©ç¹
ãŸãåãã«Scalaãæã€ç¹æ§ãšãã®å©ç¹ã«ã€ããŠèå¯ããŸããScalaã¯ãªããžã§ã¯ãæåãšé¢æ°åããã°ã©ãã³ã°ã®ç¹æ§ãå Œãåããããã°ã©ãã³ã°èšèªã§ããããã«ããè€æ°ã®ãã©ãã€ã ã掻çšã§ãããããæè»ãªãœãããŠã§ã¢èšèšãå¯èœãšãªããŸãã
ãŸãScalaã¯JVMïŒJava Virtual MachineïŒäžã§åäœããŸããããã«ããJavaãšã®é«ãäºææ§ãä¿ã€ããšãã§ããŸããã€ãŸããçŸåããè±å¯ãªJavaã©ã€ãã©ãªãå©çšããããšãå¯èœãšãªããéçºå¹çã倧ããåäžãããããšãã§ããŸãã
æŽã«Scalaã¯é«åºŠãªåæšè«ãæã£ãŠããŸããã³ã³ãã€ã«æã«åå®å šãä¿èšŒããããšã§ãã©ã³ã¿ã€ã ãšã©ãŒãå€§å¹ ã«åæžã§ããŸãã
1.2 Scalaãæ±ããããçç±
次ã«Scalaããªãæ±ããããã®ãã«ã€ããŠè§£èª¬ããŸããScalaã¯ãã®è¡šçŸåã®é«ããšãç¬ç¹ã®ææ³ã«ãããJavaã§ç¹éã«ãªããã¡ãªã³ãŒããäžæ°ã«ã·ã³ãã«åã§ããŸããããã«ãããéçºè ãããçŽæçã«ã³ãŒããèªãã ãæžãããããããšãã§ããã³ãŒãããŒã¹ãã¹ãªã åãããŸãã
ãŸããScalaã¯å€§èŠæš¡ãªããŒã¿åŠçãè¡ãããã°ããŒã¿åŠçã®ãã¬ãŒã ã¯ãŒã¯ãApache Sparkã§æ¡çšãããŠããããšã倧ããªé åã§ããããã°ããŒã¿ã®é åã§ã®éèŠãå¢ããŠããä»æ¥ãScalaã¯äžå±€æ³šç®ãéããŠããŸãã
ããã«ãScalaã¯éçåä»ãèšèªã§ãããªããåæšè«æ©èœãæã£ãŠããŸããåãæ瀺ãããšãåæšè«ã«ããã³ã³ãã€ã©ãåã決å®ããŸããããã«ãããRubyãPythonã®ããã«åãæžããªãããšã§åŸãããã³ãã£ã³ã°ã®é床ãç¶æãã€ã€ãJavaã®ãããªåå®å šæ§ãä¿ã€ããšãã§ããŸãã
1.3 Scalaã䜿ãã¡ãªãã
æåŸã«Scalaã䜿ãã¡ãªããã«é¢ããŠçèããŸããScalaã®æ倧ã®ã¡ãªããã¯ãè€æ°ã®ããã°ã©ãã³ã°ãã©ãã€ã ããã©ã³ã¹è¯ãçµã¿åãããããšãã§ããç¹ã§ããããã¯éçºè ã«ãåé¡è§£æ±ºã®èŠéã倧ããåºããå¹æããããããŸãããªããªããéçºè ã¯æãé©ãããã©ãã€ã ã䜿ã£ãŠåé¡ã解決ããããšãå¯èœãšãªãããã§ãã
ãŸããScalaã¯JavaãšåããããšJVMäžã§åäœãããããJavaã®åªãããšã³ã·ã¹ãã ããã«ã«æŽ»çšã§ããŸããJavaã®æ¢åã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã®æ°ã ããScalaãããçŽæ¥äœ¿çšããããšãã§ããŸãã
æåŸã«ãScalaã¯ç¬ç¹ãªãããæŽç·Žãããææ³ãæã£ãŠããŸããããã«ããã³ãŒããç°¡æœã«ãªããããå¯èªæ§ãé«ãŸããŸãããã®ããåå¿è ã§ãæ¯èŒçæ©ãScalaã®ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã身ã«ä»ããããšãå¯èœã§ãã
2. Scalaã®åºæ¬çãªææ³
Scalaã¯ãåŸæ¥ã®ã¯ã©ã¹ããŒã¹ã®ãªããžã§ã¯ãæåèšèªãšãæ©èœããã°ã©ãã³ã°èšèªã®ç¹åŸŽãçµã¿åãããããšã§ãç°¡æœã§å¹ççãªã³ãŒãã£ã³ã°ãå¯èœã«ããŸããScalaã®åºæ¬çãªææ³ãç解ããããšã§ããã®ãã¯ãã«ãªã³ãŒãäœæã¹ãã«ãæã«å ¥ããããšãã§ããŸãã
ããã§ã¯ãScalaã䜿ã£ãŠããã°ã©ã ãæžãããã®åºæ¬çãªææ³ãåŠã³ãŸããããããã«ã¯å€æ°ãšåãã¯ã©ã¹ãšãªããžã§ã¯ããäŸå€åŠçãããã«ã¯ã«ãŒããšæ¡ä»¶åå²ãªã©ãå«ãŸããŸãããããã®èŠçŽ ãç解ããé©åã«äœ¿çšããããšã§ãããªãã®ããã°ã©ã ã¯ãã匷åã§å¹ççã«ãªããŸãã
ããã§ã¯å ·äœçãªææ³ã«ã€ããŠåŠãã§ããåã«ãScalaèšèªãšã¯äœãããŸãScalaãäœãç®æããŠèšèšãããã®ããç解ããŠãããŸããããããã«ãããããªãã¯Scalaã®åºæ¬çãªææ³ãããæ·±ãç解ããããšãã§ããã§ãããã
2.1 å€æ°ãšå
Scalaã§ã¯ãå€æ°ãšå ã¯ã³ãŒãã®åºæ¬çãªæ§æèŠçŽ ã§ããå€æ°ãšã¯ãå€ãä¿æããé åãæããã®ã§ããäžæ¹ãåãšã¯ãã®å€ãäœã§ããããè¡šããã®ã§ããScalaã§ã¯æ§ã ãªåããããŸãã
Scalaã§ã¯ãå€ãå€æŽå¯èœãªå Žå㯠var ããå€æŽäžå¯èœãªå Žå㯠val ã䜿çšããŸããäžæ¹ãåã«ã¯ IntãStringãBoolean ãªã©ã®åºæ¬çãªåããããŸãããããã®ç¥èã掻ããããšã§ãããªãã®Scalaã³ãŒãã¯ããæ確ã§ç解ãããããªããŸãã
ãŸããScalaã§ã¯åæšè«ããµããŒããããŠããŸããããã¯ãããã°ã©ããå€æ°ã®å宣èšãçç¥ããå Žåã§ããScalaã³ã³ãã€ã©ãèªåçã«ãã®å€æ°ã®åãæšè«ããæ©èœã§ããããããåãæ確ãªå Žåã¯ç©æ¥µçã«å®£èšããããšãæšå¥šããŸãã
2.2 ã¯ã©ã¹ãšãªããžã§ã¯ã
Scalaã¯ãªããžã§ã¯ãæåããã°ã©ãã³ã°èšèªã§ããããã®äžå¿ã«ã¯ã¯ã©ã¹ãšãªããžã§ã¯ãã®æŠå¿µããããŸããã¯ã©ã¹ãšã¯ããªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ããã”èšèšå³”ã®ãããªãã®ã§ããªããžã§ã¯ãã®æ¯ãèããšåœ¢ç¶ãå®çŸ©ããŸãã
ãªããžã§ã¯ãã¯ã¯ã©ã¹ããçæããããã®å ·äœçãªäºäŸã§ããåãªããžã§ã¯ãã¯ç¬èªã®ç¶æ ïŒãã£ãŒã«ãïŒãšæ¯ãèãïŒã¡ãœããïŒãæã£ãŠããŸããããããå©çšããããšã§ãããã°ã©ã ãããæ§é åããåå©çšå¯èœã«ããããšãã§ããŸãã
Scalaã§ã¯ãclassããŒã¯ãŒãã䜿çšããŠã¯ã©ã¹ãå®çŸ©ããŸãããŸããnewããŒã¯ãŒãã䜿çšããŠã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹åïŒãªããžã§ã¯ãçæïŒãè¡ããŸãããããã®äœ¿ãæ¹ãç解ããããšã¯ãScalaããã°ã©ãã³ã°ã«ãããéèŠãªã¹ãã«ã§ãã
2.3 äŸå€åŠç
ããã°ã©ã ã¯åžžã«å®ç§ã«åäœãããšã¯éããããšã©ãŒãäºæããªãäºè±¡ãçºçããå¯èœæ§ããããŸãããã®ãããäŸå€åŠçã¯éèŠãªã¹ãã«ãšãªããŸããScalaã§ã¯ãtry/catch/finallyãããã¯ã䜿ã£ãŠäŸå€åŠçãè¡ããŸãã
tryãããã¯ã¯ããšã©ãŒãçºçããå¯èœæ§ãããã³ãŒããå«ã¿ãŸããcatchãããã¯ã¯ãtryãããã¯äžã§çºçãããšã©ãŒããã£ããããé©åãªåŠçãè¡ããŸããæåŸã«ãfinallyãããã¯ã¯ããšã©ãŒã®æç¡ã«é¢ããããå¿ ãå®è¡ãããã³ãŒããå«ã¿ãŸãã
ãããã®ãããã¯ã䜿çšããããšã§ããšã©ãŒçºçæã®ããã°ã©ã ã®æ¯ãèããã³ã³ãããŒã«ããäºæãã¬äºè±¡ããçºçããåé¡ãé²ãããšãã§ããŸãããããScalaã®äŸå€åŠçã®åºæ¬ã§ãã
2.4 ã«ãŒããšæ¡ä»¶åå²
Scalaã§ã¯ãç¹å®ã®ã³ãŒããç¹°ãè¿ãå®è¡ããããç¹å®ã®æ¡ä»¶ã«åºã¥ããŠã³ãŒãã®å®è¡ãã¹ãå¶åŸ¡ããããã«ãã«ãŒããšæ¡ä»¶åå²ã䜿çšãããŸããããã«ã¯ãforãwhileãdo whileã«ãŒãããããŠif elseæ¡ä»¶æãªã©ããããŸãã
forã«ãŒãã¯ãç¹å®ã®åæ°ã ãã³ãŒããããã¯ãç¹°ãè¿ãå®è¡ããããã«äœ¿çšãããŸããwhileã«ãŒããšdo whileã«ãŒãã¯ãç¹å®ã®æ¡ä»¶ãæºãããããŸã§ã³ãŒããããã¯ãç¹°ãè¿ãå®è¡ããŸãããããã®æ©èœãå©çšããããšã§ãå¹ççãªããã°ã©ã ãäœæããããšãå¯èœã§ãã
ãŸããif elseæã¯ãç¹å®ã®æ¡ä»¶ãæºãããããšãã«å®è¡ããã³ãŒããæå®ããããã®ä»çµã¿ã§ããããã«ãããã³ãŒãã®å®è¡çµæãç¹å®ã®æ¡ä»¶ã«å¿ããŠå¶åŸ¡ããããšãå¯èœãšãªããŸãã
3. Scalaã®é«åºŠãªææ³
Scalaã®èšèªèšèšã®ç¹åŸŽã®äžã€ã¯ããããé«åºŠãªææ³æ§é ãæã€ç¹ã§ããããã«ãããéçºè ã¯ããè¿ éãã€å¹ççã«ã³ãŒããèšè¿°ã§ããããã«ãªã£ãŠããŸããããã§ã¯Scalaã®ãã¬ã€ããšããã¯ã¹ã€ã³ããžã§ããªã¯ã¹ãéåæããã°ã©ãã³ã°ãé«éé¢æ°ã«ã€ããŠæ·±ãæãäžããŠãããŸãã
ãããã®ããŒãã¯Scalaã§ã®éçºãè¡ãäžã§å¿ èŠäžå¯æ¬ ãªç¥èãšãããã§ãããããããããããã®ããŒããç解ããããã«ã¯äžå®ã®åºç€ç¥èãå¿ èŠãšãªããŸããåŸã£ãŠããããã®ããŒããç解ã掻çšã§ããããã«ãªããŸã§ã«ã¯äžå®ã®æéãšãšãã«ã®ãŒãå¿ èŠã«ãªãããšãèŠããŠãããŸãããã
ããã§ã¯ãããããã«ã€ããŠè©³ããé²ããŠãããŸãããã
3.1 ãã¬ã€ããšããã¯ã¹ã€ã³
Scalaã®äžã€ã®ç¹åŸŽã¯ã”ãã¬ã€ã(trait)”ãšåŒã°ããã€ã³ã¿ãŒãã§ãŒã¹ãšäŒŒãæ©èœãæã€æŠå¿µãæã£ãŠããããšã§ããããã«ãããScalaéçºè ã¯åå©çšå¯èœãªéšåãäœãåºãããšãå¯èœã«ãªããŸãã
ãŸãããã®ãã¬ã€ãã”ããã¯ã¹ã€ã³(mixin)”ããããšã«ãããè€æ°ã®ãã¬ã€ããäžã€ã®ã¯ã©ã¹ã«åæããããšãã§ããŸããããã«ãããéçºè ã¯ã¯ã©ã¹ã®æ©èœãæè»ã«èª¿æŽããããšãã§ããã³ãŒãã®åå©çšæ§ãåäžããŸãã
ãããã®æŠå¿µã¯ãªããžã§ã¯ãæåããã°ã©ãã³ã°ã«ãããScalaã®é åçãªéšåã®äžã€ã§ãããé©åãªäœ¿ãæ¹ãç解ããã«ã¯å®äŸãšãšãã«åŠç¿ããããšã匷ãæšå¥šããŸãã
3.2 ãžã§ããªã¯ã¹
Scalaã§ã¯ããžã§ããªã¯ã¹ãšããåã®æœè±¡åæŠå¿µãå©çšããããšãã§ããŸãããžã§ããªã¯ã¹ã¯ãã³ãŒãã®åå©çšå¯èœæ§ãé«ããããã®æçšãªéå ·ã§ãã
ç¹ã«ãã³ã¬ã¯ã·ã§ã³ã©ã€ãã©ãªãªã©ã®ããŒã¿æ§é ã«å¯Ÿããæäœãæœè±¡åããã®ã«ãžã§ããªã¯ã¹ã¯ãã䜿ãããŸãããã®ããã«ããŠãåã«äŸåããã«åãæäœãè¡ãããšãå¯èœã«ãªããŸãã
ãžã§ããªã¯ã¹ã¯é«åºŠãªåã·ã¹ãã ãæã€Scalaã®å€§ããªç¹åŸŽã®äžã€ã§ããããã®ç解ã¯Scalaãæ·±ãç解ããããã®éèŠãªã¹ããããšãªãã§ãããã
3.3 éåæããã°ã©ãã³ã°
Scalaã§ã¯ãéåæããã°ã©ãã³ã°ã®æ§æèŠçŽ ãšããŠFutureãPromiseãšãã£ãæœè±¡æŠå¿µãæäŸããŠããŸãããããã®æœè±¡åã«ãããè€æ°ã®ã¿ã¹ã¯ã䞊åã«å®è¡ããããã¿ã¹ã¯ãçµãã£ãããšã®çµæããã³ããªã³ã°ãããããããšã容æã«ãªããŸãã
éåæããã°ã©ãã³ã°ã¯çŸä»£ã®Webãããããã¡ã³ãã«ãããŠäžå¯æ¬ ãªæè¡ã§ãããScalaã®éåæåŠçã«ã€ããŠç解ããããšã¯Webã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããã®éµãšãªããŸãã
ãªããéåæããã°ã©ãã³ã°ã¯ä»ã®ããã°ã©ãã³ã°èšèªã§ããã䜿ãããããŒãã§ããããã®ç解ã¯ç·ããŠããã°ã©ãã³ã°ã®ã¹ãã«ãåäžãããããšã«ã€ãªããã§ãããã
3.4 é«éé¢æ°
Scalaã¯é¢æ°åããã°ã©ãã³ã°å¯Ÿå¿ã®èšèªã§ããã”é«éé¢æ°”ãšãã匷åãªæŠå¿µã䜿çšããããšãã§ããŸããé«éé¢æ°ã¯ä»ã®é¢æ°ãåŒæ°ã«åã£ãããé¢æ°ãçµæãšããŠè¿ãããšãã§ããŸãã
ãã®ç¹æ§ã¯ãã³ãŒãã®åå©çšæ§ãæœè±¡åãä¿é²ããããã«ã¯ã³ãŒãã®èªã¿ããããåäžãããå¹æãæã£ãŠããŸãã
ãã ããé«éé¢æ°ã®ç解ã«ã¯å°ãæéãããããããããŸããããããããããç解ããæãããªãã¯Scalaã®ç䟡ãç解ããããã®å€§ããªäžæ©ãèžã¿åºããããšã«ãªããŸãã
4. ç¬åŠã§ã®ScalaåŠç¿ãªãœãŒã¹
Scalaãç¬åŠã§åŠã¶äžã§å¿ èŠãªãªãœãŒã¹ãã玹ä»ããŸãããããã¯ããªããæ·±ãç解ãåŸãããã®æãéèŠãªæ å ±æºãšãªããŸãã
Scalaã®åŠç¿ãªãœãŒã¹ã¯ãå ¬åŒãªããã¥ã¡ã³ããŒã·ã§ã³ããªã³ã©ã€ã³ã³ãŒã¹ãæè¡æžç±ããå§ãŸãããªãŒãã³ãœãŒã¹ã®ãããžã§ã¯ããšãã£ã圢ã§å€çš®å€æ§ã«ååšããŸãã
ãããããªãœãŒã¹ã掻çšããããšã§ãç¬åŠã§ã確åºãšããã¹ãã«ãç²åŸã§ããŸãããããã«ã¯Scalaã®ãšã³ã·ã¹ãã ã«ã€ããŠãç解ãæ·±ããããšãã§ããŸãã
4.1 å ¬åŒããã¥ã¡ã³ããŒã·ã§ã³
ScalaãåŠã¶äžã§çã£å ã«åç §ãã¹ãã¯å ¬åŒããã¥ã¡ã³ããŒã·ã§ã³ã§ãã
å ¬åŒããã¥ã¡ã³ããŒã·ã§ã³ã«ã¯ãScalaã®åºæ¬çãªæ§æãããèšèšå²åŠãé«åºŠãªé¢æ°åããã°ã©ãã³ã°ã®æŠå¿µãŸã§ã詳ããèšãããŠãããååŠè ããäžçŽè ãŸã§Scalaã®å šãŠãææ¡ããããšãã§ããŸãã
ãŸããææ°ã®æŽæ°æ å ±ãä¿®æ£å 容ãéæå ¬éãããŠãããããåžžã«ææ°ã®æ å ±ãåŸãããŸãã
4.2 ãªã³ã©ã€ã³ã³ãŒã¹
次ã«çŽ¹ä»ãããªãœãŒã¹ã¯ããªã³ã©ã€ã³æè²ãã©ãããã©ãŒã ã®Scalaã³ãŒã¹ã§ãã
ãããã®ãã©ãããã©ãŒã ã¯ãå®è·µçãªææ³ãåŠã³ã€ã€Scalaãç¿åŸããããã®çæ³çãªæ¹æ³ã§ããæ åœè¬åž«èªèº«ãæ¥çã§å¹ã£ãç¥èãå ã«äœæãããã³ãŒã¹ã¯ãå®è·µçãªã·ããªãªã«ç«ã¡äŒãå¯èœæ§ãé«ãã®ã§éåžžã«æçšã§ãã
ã«ãªãã¥ã©ã ã¯èªå·±ããŒã¹ã§é²è¡å¯èœã§ãããã«ãµããŒãäœå¶ãæŽã£ãŠããã®ã§ãäžäººã§è©°ãŸãããšãªãåŠã³ç¶ããããŸãã
4.3 æè¡æž
ãŸããScalaã®åŠç¿ã«ã¯æè¡æžç±ãéåžžã«æå¹ã§ãã
ç¹å®ã®ãããã¯ãæ·±ãæãäžããããScalaã®çè«çãªèæ¯ãç解ãããããã«ã¯ã詳现ã§ç¶¿å¯ã«æžãããæè¡æžã¯éåžžã«åœ¹ç«ã¡ãŸããäžéšã®æžç±ã¯ãªã³ã©ã€ã³ã§ç¡æå ¬éãããŠããããšããããŸãã®ã§ãããªãšãŒã·ã§ã³è±ããªæ å ±ãåŸãããšãã§ããŸãã
è³Œå ¥ããæžç±ãéžã¶éã¯ããã®æžç±ãèªåã®æ¢ç¥ã®ã¹ãã«ã»ãããšç®çã«åã£ãŠãããã確èªããŠãã ããã
4.4 ãªãŒãã³ãœãŒã¹ãããžã§ã¯ã
æåŸã«ããªãŒãã³ãœãŒã¹ãããžã§ã¯ããScalaã®åŠç¿ã«å€§ããªå©ããšãªããŸãã
ãããã®ãããžã§ã¯ãã«åå ããããšã§ãèªåãåŠãã ç¥èãå®éã®ãããžã§ã¯ãã§äœ¿ã£ãŠã¿ããã£ã³ã¹ãåŸãããŸãããŸããä»ã®éçºè ãšååããããšã§ãããŒã ã§ã®éçºãããŒãåŠã¶ããšãå¯èœã§ãã
ããã«ã¯ãå€æ°ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããScalaã§æžãããŠãããããå®éã®ãœãŒã¹ã³ãŒããèªãããšã§æŽã«åŠã³ãæ·±ããããšãã§ããŸãã
5. Scalaã§ã®ãããžã§ã¯ãå®è·µæå
Scalaã¯å®¹æã«éå§ããããšãã§ããé¢æ°åããã³ãªããžã§ã¯ãæåèšèªã®ç¹æ§ãåããŠããŸãã以äžã«ãScalaã§ã®ãããžã§ã¯ãéå§ããéçšãŸã§ã®å®è·µçãªã¬ã€ãã³ã¹ãæäŸããŸãã
5.1 ãããžã§ã¯ãæ§æã®ãã¹ããã©ã¯ãã£ã¹
Scalaãããžã§ã¯ãã®åæèšå®ã¯ãæåãžã®éçãæãéèŠãªéšåã§ãããŸãã¯ãããžã§ã¯ãã®æ§é ã«ã€ããŠç解ããŸããããæšæºçãªæ§é ã«åŸãããšã§ãä»ã®Scalaéçºè ã容æã«ããªãã®ãããžã§ã¯ãã«è²¢ç®ããããšãã§ããŸãã
ãããžã§ã¯ãã®ãã£ã¬ã¯ããªæ§é ã¯ã‘/src/main/scala/’ã«æ¥œåã®Scalaæºã³ãŒãã眮ãã‘/src/test/scala/’ ã«ã¯åäœãã¹ããé 眮ããŸããå ¬å ±ã®ãªãœãŒã¹ãèšå®ãã©ã€ãã©ãªäŸåé¢ä¿ã¯ããããé©åãªå Žæã«çœ®ãããšãæ±ããããŸãã
次ã«ããã«ãããŒã«ãéžæããŸããScalaã®äžçã§ã¯‘sbt’ãæãããã¥ã©ãŒãªéžæã§ãã¢ãžã¥ãŒã«ç®¡çããã«ãã®èªååããã¹ãå®è¡ãªã©ããµããŒãããŠããŸããsbtã®ã»ããã¢ãããšäœ¿ãæ¹ãç解ããããšããããžã§ã¯ãã®æ§æã«ãããéèŠãªã¹ãããã§ãã
5.2 ãããã°ãã¯ããã¯
åå¿è ã§ãçç·Žè ã§ããã°ãçããå¯èœæ§ã¯ãããŸãããåé¡æ€åºãšè§£æ±ºã®é床ãéçºè ã®çç£æ§ã決å®ããŸããScalaã§ã®ãããã°ã«ã¯è€æ°ã®æ¹æ³ããããŸãã
æãäžè¬çãªãããã°ã®ææ³ã¯ãããã°ã©ã ã«ãã°ãæ¿å ¥ããããšã§ããScalaã§ã¯ãscala-loggingãLog4jãªã©ã®ã©ã€ãã©ãªã䜿çšããŠãã°ã®åºåãã§ããŸããããã«ãããå®è¡æã®ç¶æ ç£èŠãåé¡ã®ç¹å®ã«åœ¹ç«ã¡ãŸãã
ããäžã€ã®ãããã°ææ³ã¯ãIDEAãªã©ã®çµ±åéçºç°å¢ã§æäŸããããããã¬ã䜿çšããããšã§ãããã¬ãŒã¯ãã€ã³ãã®èšå®ãå€æ°ã®å€ã®ç£èŠãªã©ãè¡ããã³ãŒãã®æåã詳现ã«è¿œè·¡ããããšãå¯èœã§ãã
5.3 ãã¹ãæŠç¥
ãœãããŠã§ã¢ã®å質ã確ä¿ããããã«ãScalaãããžã§ã¯ãã§ã¯ãã¹ããå¿ èŠã§ããScalaã§ã¯ãScalaTestãSpecs2ãšãã£ããã¹ããã¬ãŒã ã¯ãŒã¯ããããŸãã
åäœãã¹ãã§ã¯ãäžã€äžã€ã®é¢æ°ããªããžã§ã¯ãã®æåã確èªããæåŸ éãã«åäœããŠãããããã§ãã¯ããŸããé¢æ°ã®å ¥åãšåºåããã¹ãããããšã§ãé¢æ°ãæ£ããåããŠãããã確èªããŸãã
çµ±åãã¹ãã§ã¯ãããã€ãã®ã³ã³ããŒãã³ããé£æºããŠåäœããæ§åããã§ãã¯ããŸããã¢ããªã±ãŒã·ã§ã³å šäœã®åäœã確èªããããã«ãEnd-to-Endã®ãã¹ããè¡ãããšããããŸãã
5.4 ãœãŒã¹ã³ãŒã管ç
Scalaãããžã§ã¯ããéå§ããéã«ã¯ããœãŒã¹ã³ãŒãã®ããŒãžã§ã³ç®¡çãéèŠã§ããGitã¯æãæ®åããããŒãžã§ã³ç®¡çã·ã¹ãã ã§ããããžã§ã¯ãã®ææç©ãå®å šã«ä¿ç®¡ããå€æŽå±¥æŽã容æã«è¿œè·¡ã§ããŸãã
ã³ãŒãã®äžè²«æ§ãä¿ã€ããã«ãã³ãŒãã£ã³ã°èŠçŽãéèŠã§ããScalaã³ãã¥ããã£ã§ã¯ãäžè¬çãªScalaã¹ã¿ã€ã«ã¬ã€ããæäŸãããŠãããããã«åŸãããšãæšå¥šããŸãã
ãŸãããããžã§ã¯ããæé·ããã«ã€ããŠãã³ãŒãã®å質ãä¿ã€ããã«ã³ãŒãã¬ãã¥ãŒãå¿ èŠã«ãªã£ãŠããŸããGitHubãªã©ã®ãã©ãããã©ãŒã ã¯ãã³ãŒãã¬ãã¥ãŒæ©èœãæäŸããŠããŸãã
6. ãŸãšããšæ¬¡ã®ã¹ããã
ä»ãŸã§ãScalaãç¬åŠã§åŠã¶æ¹æ³ã«ã€ããŠè©³ãã解説ããŠããŸãããããã§ã¯ããã®åŸã«è¿°ã¹ãå 容ã«ã€ããŠç°¡åã«ãŸãšãã次ã®ã¹ãããã«ç§»ãããã®ã¢ããã€ã¹ãæèšããŸãã
6.1 ç¬åŠã®ã¬ãã¥ãŒãšè©äŸ¡
ãŸãã¯ããããŸã§ã®ç¬åŠã®ã¬ãã¥ãŒãšè©äŸ¡ãå¿
èŠã§ããScalaã®åºæ¬çãªææ³ãæŠå¿µãç解ã§ããããå®éã«ããã°ã©ã ãäœæããããšãã§ããããã«ãªã£ããçãèªåèªèº«ã®ã¬ãã«ãå¶éããããšãªãæ£ç¢ºã«è©äŸ¡ããŸãããã
ãŸãã匷ã¿ãšåŒ±ã¿ãæ確ã«ããããšã§ã次ã«ã©ã®ãããªã¹ãã«ã匷åããã¹ããç解ããã®ãæ©ãŸããŸãã
æåŸã«ãç¿åŸããæèæ³ã解決çãå©çšããŠæ¥åããããžã§ã¯ãã«é©å¿ããããšãã§ãããè©äŸ¡ããããšãéèŠã§ãã
6.2 å ·äœçãªåŠç°ãã©ã³äœæ
次ã«ãå
·äœçãªåŠç¿ãã©ã³ãäœæããŸããããScalaã®æ·±ãç解ã«äžå¯æ¬ ãªãããã¯ã«çŠç¹ãåœãŠããããã«ã€ããŠæãäžããŠåŠã³ãŸãã
äºå®ããåŠç¿èšç»ã¯ãæ¯é±ãŸãã¯æ¯æãã§ãã¯ããŠãå¿
èŠã«å¿ããŠä¿®æ£ããŸãã
ãŸããç¶ç¶çãªåŠç¿ãšãã芳ç¹ãããã€ã¯ãåŠç¿ãåãå
¥ããããååŠç¿ãè¡ã£ãããã¹ãã«ã»ãããæ¡å€§ããŠããããšã念é ã«çœ®ããšè¯ãã§ãããã
6.3 ããŒããã©ãªãªã®äœæãšã¢ããããŒã
Scalaã¹ãã«ã®èšŒæãšããŠãèªåã®ããŒããã©ãªãªãäœæããåžžã«ã¢ããããŒãããŠããããšãéèŠã§ããScalaã䜿çšãããããžã§ã¯ããäžã€äžã€ãªã¹ãã¢ããããéæããçµæã詳现ã«èª¬æããŸãã
ãŸããGitHubãªã©ã®ãã©ãããã©ãŒã ãå©çšããèªèº«ã®ã³ãŒããå
¬éãããã£ãŒãããã¯ãåŸãã®ãæå¹ãªæ段ã§ãã
ãããŠãScalaã®ææ°ã®ååã«è¿œãã€ãããã«ã¯ãèªåãéçºããã¢ããªã±ãŒã·ã§ã³ãå®æçã«ã¢ããããŒãããããšãå¿
èŠã§ãã
6.4 æ°ããªèª²é¡ãžã®ææŠ
æåŸã«ãæ°ããªèª²é¡ãžã®ææŠãæšå¥šããŸããScalaèšèªã¯æè»æ§ããããæ§ã
ãªã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšã§ããŸãããããã£ãŠãæ°ããªé åãžææŠããããšã§Scalaã®å¯èœæ§ãããã«åºããããšãã§ããŸãã
ãŸããScalaã䜿ã£ãŠè§£æ±ºã§ããªãã£ã課é¡ã«å床åãçµã¿ãããšã倱æããŠããã®çµéšãå
ã«ã¹ãã«ãç ãæŸãŸããããšãéèŠã§ãã
ãã®ããã«ããåžžã«æ°ãããã¬ã³ãã«ã€ããŠåŠã³ããããèªåã®ã¹ãã«ã»ããã«åã蟌ãããšãæšå¥šããŸãã