ããã«æé«ã¯ã©ã¹ã®éçºè åãã®çµ¶åŠãªããã«ãã£ãç»å ŽããŸã-ã ãªã¢ã¯ãã£ããã¶ã€ã³ãã¿ãŒã³ ãã
ãã®æ¬ã®èè ã§ããããŒã©ã³ãã»ã¯ãŒã³ã¯ãåæ£ã·ã¹ãã ã®åéã§ç¬¬äžçŽã®ã¹ã¿ãŒã§ãããAkkaã®éçºè ã®äžäººã§ãã ã«ããã®äžã§ãåæ£ã·ã¹ãã ã«é¢ããããã°ã©ããã£ãã¯èšäºãšGitHub Webãµã€ãã«æ²èŒãããŠããã¢ã¯ã¿ãŒã¢ãã«ã®ç¿»èš³ãæäŸããŸã
ã¢ã¯ã¿ãŒã¢ãã«ã«ã€ããŠç§ã奜ããªããšãå°ãããããšããç§ã¯éåžžãååžãæ£ç¢ºã«ã¢ãã«åããŸãããšçããŸãã ããã¯ãåæ£ã³ã³ãã¥ãŒãã£ã³ã°ãšã¯äœããå ·äœçã«èª¬æãããã®äžã«èŠæãåãããªããéèŠãªç¹æ§ãé ãããŠããªãããšãæå³ããŸãã ãã®èšäºã§ã¯ãåæ£ã¢ãã«ã«ã€ããŠåŠãã ããšããäŒãããããšæããŸããã 圌女ãèªè ã«ãèå³ãããããšãé¡ã£ãŠããŸãã
å 責äºé ïŒãããã誰ãããããã®éèŠãªãã€ã³ãã80幎代ã«ãã§ã«è¿°ã¹ãŠããã§ãããã ç³ãèš³ãããŸãããããã®ç¹ã«ã€ããŠè©³ãã調ã¹ãæéã¯ãããŸããã§ãããç§ã¯èªåã§å匷ããããšã奜ã¿ãŸãã
##éå§ïŒAkkaåãªãã¢ã¯ã¿ãŒ
ããŒãžã§ã³1.3ãš2.0ã®éã§Akkaã®ãã¡ã€ãã©ã€ãºã«åå ããŸããã ãã®æéäžãããã€ã¹ããŒã«ããããšãããæäŸããäžé£ã®ä¿èšŒã®äž¡æ¹ã§ããã€ãã®åºæ¬çãªå€æŽãè¡ããŸããã ãã¹ãŠã®å€æŽã«å¯ŸããŠã圌ãã¯ããã®æ©èœã確å®ã«åæ£ã³ã³ããã¹ãã§æ©èœããããšãä¿èšŒããããšãäžå¯èœãªå Žåããããè¡ããªãããšããé»éåŸã䜿çšããŸããã ç§ãã¡ã¯ã以äžã®ç²Ÿç¥ã§ãååžãäœã§ããããçŽæçã«ç解ããŸããã
- ã¡ãã»ãŒãžã®éä¿¡è ãšåä¿¡è ã¯ïŒéä¿¡é 延ã®èŠ³ç¹ããïŒéåžžã«ãªã¢ãŒãã·ã¹ãã ã«é 眮ã§ããããããäžéšã®èŠæ±ãæ¢ã«åŠçãããŠãããããšãç¥ãããšã¯ã»ãšãã©æå³ããããŸããã
- ãã¹ãŠã®éä¿¡ã¯ä¿¡é Œã§ããŸããããã¹ãŠã®ã¡ãã»ãŒãžã¯å€±ãããé 延ããããã»ã¹ïŒã¢ã¯ã¿ãŒïŒã¯äºãã«ç¬ç«ããŠå€±æããå¯èœæ§ããããŸããããã«ãããã¯1ã€ã®ãã·ã³ãšãããã¯ãŒã¯ã®ç°ãªãéšåã®äž¡æ¹ã§çºçããŸãã
åœæãAkkaéçºããŒã ã¯ããã¹ãŠã®ã¢ã¯ã¿ãŒéã®äžè²«æ§ã«åé¡ããããšãã信念ã«æ·±ãæ ¹ãããŠãããå¯èœã§ããã°ããã®ãããªèª¿æŽã®å¿ èŠæ§ãåé¿ããå¿ èŠããããŸããã äžè²«æ§ãå®çŸããã«ã¯å€ãã®æéãããããŸããã€ã³ã¹ããŒã«ããããšãã·ã¹ãã èŠçŽ ã¯ãã§ã«ãä¿¡å·ã®äŒææéããèæ ®ããŠããã°ã©ã ãããŠããªãéããäœæ¥äžã®ã調æŽãã€ã³ããããé ãé¢ããŠçµæãå°ç¡ãã«ããå¯èœæ§ããããŸãã
ãŠãŒã¶ãŒAPIãã©ã®ããã«é 眮ãããã®ãããªå³ããå¶éã®æ¡ä»¶ã§åã ã®æ©èœãé 眮ã§ããŸããïŒ ã¢ã¯ã¿ãŒã¢ãã«ã§ã¯ã3ã€ã®ç¹æ§ãå®çŸ©ããã4çªç®ã®ç¹æ§ãæ瀺ãããŠããŸãïŒãã®æé»ã®ç¹æ§ã«æ»ããŸãïŒã
- ã¡ãã»ãŒãžãéä¿¡ãã
- ã¡ãã»ãŒãžãå°çãããšåäœãå€åããïŒã€ãŸããé 次åŠçïŒ
- è¿œå ã®ä¿³åªã®äœæ
Akkaã¯ããã3ã€ã®æ©èœããã¹ãŠå®è£ ããŠããŸãããç¬èªã®æ¹æ³ã§ã¡ãã»ãŒãžé ä¿¡ã®ä¿èšŒãæäŸããŸãã ä¿¡é Œæ§ã®ããé ä¿¡ã®ä»£ããã«ããªãã·ã§ã³ã®é ä¿¡ãç·šæãããŠããŸãã ãŠãŒã¶ãŒãå¿ èŠãªä¿¡é Œæ§ã®ã¬ãã«ã決å®ããããšããå§ãããŸãã ã€ãŸããåäžã®é»æºé害ã§ååã§ãããããïŒé床ã®ïŒä¿æããªããã°ãé ä¿¡ã¯çã«ä¿¡é Œã§ãããã®ã§ã¯ãªããšèããããŸããä¿¡é Œæ§ã®åé¡ã¯ãããŸããã ãã ããå®éã«ããã€ãã®ããŒã«ã«ã¢ã¯ã¿ãŒãå®è¡ããããã ãã«é·æã¹ãã¬ãŒãžãå¿ èŠãšããã®ã¯éåžžã«å°é£ã§ãã ããã«ã¯éèŠãªå¶éããããŸãïŒ1察1ã®ãŠãŒã¶ãŒAPIã¯æäœäžã®ã»ãã³ãã£ã¯ã¹ã«å¯Ÿå¿ããŸããã€ãŸããActorRefã¯åžžã«åãããã«åäœããå¿ èŠããããŸããrefã«ã¯ä¿¡é Œæ§ããªããããèšå®ããŒã«ã ãã§ã¯å€§ããªä¿¡é Œæ§ãæäŸããããšã¯äžå¯èœ
ref ! msg
ref ! msg
æšæž¬ãããŸããã
AkkaãæäŸãããã®ä»ã®ãªãã·ã§ã³ã次ã«ç€ºããŸãã
- å¿ é ã®ãã¢ã¬ã³ã¿ã«ã³ã³ãããŒã«ïŒç¹ã«ãå圹ã®å¯¿åœã¯èŠªã®å¯¿åœã«å¶éãããŸãïŒ
- å¥åDeathWatchã©ã€ããµã€ã¯ã«ç£èŠ
ã¢ã¯ã¿ãŒã¢ãã«ã®å¶éãè¶ ããããšã¯ããã»ã©åçŽã§ã¯ãããŸããããã®ããã«ã¯ãã¢ã¯ã¿ãŒããã¹ããããŠããããŒãã®ã¯ã©ã¹ã¿ãŒå ã§äžè²«æ§ãå®çŸããå¿ èŠããããŸãã ã©ã®ç¶æ³ãããŒãã®èŽåœçãªé害ãšèŠãªããããã«ã€ããŠã³ã³ã»ã³ãµã¹ã«éããããšã«ãã£ãŠã®ã¿ããããã®æ©èœããã¹ãŠã®æ¡ä»¶ã§åãã»ãã³ãã£ã¯ã¹ã§æ©èœããããšãä¿èšŒã§ããŸãã ç§ããã¥ãŒã¹ã¬ã¿ãŒãèªããšãããã®ãããªåé¡ãåè«ãèšãããšãã§ããªãããšã¯ééããããŸããã çåãåžžã«çºçããŸãïŒãªãããŒããã¯ã©ã¹ã¿ãŒããããã¯ã¢ãŠãããããªãããããåŸã§è¿ããªãã®ãïŒèª¬æïŒããŒããæ»ãã§ãããšå®£èšããããšããã«ããã¹ãŠã®ç£èŠãšæ»ã®ç£èŠã¯åãæ¶ãããŸãã ã
##æåã®åæ¢ïŒAkka Typed
ã¢ãã«ã¢ã¯ã¿ãŒéã®çžäºäœçšã¯åä»ããããŠããããæåããã€ã©ã€ã©ãããããŸããã ã¡ãã»ãŒãžã®éä¿¡ã¯ããªãã¬ãŒã¿ãŒã«ãã£ãŠä»²ä»ãããŸã
!
æ¬è³ªçã«ãããã¯ãäžè¬ããç¹å®ãžãã®æ©èœã§ã-å®å šã«ç¡å¶éã§ããã£ãŒãããã¯ã¯ãããŸããã ãã£ãŒãããã¯ã®æ¬ åŠã¯ãæ å ±ã®äº€æã«ã¯è²»çšãããããããåæ£ã·ã¹ãã ãã¢ãã«åãããšãã«è¡ãå¿ èŠãããè²æ©ã§ãã ããããã¿ã€ãã³ã°ã«é¢é£ããå¶éã¯å¶ç¶èŠéãããããã§ããã¢ã¯ã¿ãŒãã©ã®ããã«å®çŸ©ãããŠããããèãããšãåãåé¡ãèŠãããŸããããã¯ãäžè¬ããç¹å®ã«æ©èœããéšåé¢æ°ã§ãã ãããã£ãŠãã¢ã¯ã¿ãŒã¯ãã©ãã¯ããã¯ã¹ã«å€ãããŸããããã¯ãã¡ãã»ãŒãžãéä¿¡ãããšæ©èœããå Žåãšæ©èœããªãå ŽåããããŸãã ãããã£ãŠãã¢ã¯ã¿ãŒã¯ã¢ã¯ã·ã§ã³ã®å€§å¹ ãªèªç±ãåãåããŸãããã€ãã³ãã®ãã€ããã¯ã¹ãšã¯å¥ã«å€æããããšã¯å°é£ã«ãªããŸããJavaScriptã§ããã«ãã¿ã€ãã»ãŒããªJavaã®äžçã«æ³šå ¥ããŠããããã§ãã
ããŒãžã§ã³2.4 Akkaã«ã¯Akka Typedãä»å±ããŠããã®ã§ããã®æ¹æ³ã§3åç®ã®èŠæãæ確ã«ããŸããã¢ã¯ã¿ãŒãåä¿¡ããã¡ãã»ãŒãžã®ã¿ã€ããå¶éããã³ã³ãã€ã©ãŒããããå€ããæããã«äžæ£ãªããã°ã©ã ãæåŠã§ããããã«ããŸãã å®éãã¢ã¯ã¿ãŒã®å®çŸ©ã¯ãããã¿ã€ãã®å ¥åã¡ãã»ãŒãžããç¹å®ã®åäœïŒåãã¿ã€ãã«ãã£ãŠå¶éãããïŒãžã®ãã¹ãèšè¿°ããäžå¯æ¬ ãªé¢æ°ã§ãã ãããã£ãŠãäžé©åãªå ¥åæ å ±ãæåŠããŠãåãã¿ã€ãã®ã¢ã¯ã¿ãŒãžã®ãªã³ã¯ãæ£åœã«ãã©ã¡ãŒã¿ãŒåããããšãå¯èœã«ãªããŸããã
// -Scala dotty type ActorRef[-T] = T => Unit type Behavior[T] = (T | Signal) => Behavior[T] // , ,
ãã®ãããªå€æŽã¯ãå éšããã³è£å©æ©èœã®æŽç·Žã®ç¹°ãè¿ãã«è§ŠçºãããŸãããéçã¿ã€ãã®ã¢ã¯ã¿ãŒã ãã§ãªããã¡ãã»ãŒãžã«æ£ããã¿ã€ããããActorRefãå«ãããšãã¢ã¯ã¿ãŒéã®éä¿¡äžã«è¡šç€ºãããã¿ã€ããæéãšãšãã«å€åããå¯èœæ§ããããŸãïŒäœæ¥ã®ç°ãªã段éã§ïŒã
case class Authenticate(token: Token, replyTo: ActorRef[AuthResponse]) sealed trait AuthResponse case class AuthSuccess(session: ActorRef[SessionCommand]) extends AuthResponse case class AuthFailure(reason: String) extends AuthResponse
ãã®ããã«ãããã³ã«ãã·ãã¥ã¬ãŒãããã¯ã©ã€ã¢ã³ãã«
ActorRef[Authenticate]
ã®ã¿ãæäŸããå Žåãã¯ã©ã€ã¢ã³ããå®å šã«ééã£ãã¿ã€ãã®ã¡ãã»ãŒãžãéä¿¡ããã®ãé²ãã ãã§ãªããèªèšŒã®æåã«å¯Ÿããã»ãã·ã§ã³ã®äŸåæ§ãè¡šçŸããŸãã å®éã
ActorRef[Sessioncommand]
ããªããã°ãã³ã³ãã€ã©ã¯ãã®ãããªã¡ãã»ãŒãžã®éä¿¡ãèš±å¯ããŸããã
##é¢é£ãããã¯ïŒãããã³ã«
åã®äŸã§ã¯ãäœæ¥ã®ã©ã®æ®µéã察å¿ãããããã³ã«ã§èšè¿°ãããŠãããã«å¿ããŠãããŸããŸãªã¿ã€ãã®ã¡ãã»ãŒãžã䜿çšããŸãããã®ãããªã¢ãããŒãã¯ãæéã®çµéãšãšãã«å°é£ã«ãªãå¯èœæ§ããããŸãã å¥ã®é°æ¹¿ãªç¬éã¯ãäœæ¥ã®å段éã§éä¿¡ãããã¡ãã»ãŒãžã®æ°ãéçã«ãã§ãã¯ããªãããšã§ããã¯ã©ã€ã¢ã³ãã¯åãã¡ãã»ãŒãžãç¹°ãè¿ãéä¿¡ã§ããã ãã§ãªãããã®æ®µéããActorRefãä¿åããŠäžã®æ®µéã«ããŒã«ããã¯ã§ããŸãã ãã¡ããããã®ãããªã¹ããŒã ã¯ãç°ãªãæç¹ã§åãã¿ã€ããç¹°ãè¿ã䜿çšãããããã³ã«ã«ãµã€ã¯ã«ãçŸãããšããã«ç Žæ£ãããŸãã
ãããã®åé¡ã«å¯ŸåŠããã«ã¯ãå€æ®µéãããã³ã«ããã®æ§é ã®ã³ã³ããã¹ãã§èšè¿°ããå¿ èŠããããŸãã ææãªã¢ãããŒãã®1ã€ã¯ã ã»ãã·ã§ã³ã¿ã€ã ããšåŒã°ããŸãããããã§ã¯ãã¹ãŠã®è³ªåã«çããŠããããã§ã¯ãããŸããã ããšãã°ãããã°ã©ãã³ã°èšèªã§æäœã®ç·åœ¢æ§ïŒã€ãŸããæéãããã®ãŒã£ãŠä»¥åã«å©çšããæ å ±ã䜿çšã§ããªãããšïŒãè¡šçŸããããšã¯äŸç¶ãšããŠåé¡ã§ãã ãã®çš®ã®è¿äŒŒã®1ã€ã¯ã Alcesteã®Scalaã«ããIchannelsã©ã€ãã©ãªã§ãã
##æ§æå¯èœæ§ãžã®é
ã¢ã¯ã¿ãŒã®æŠå¿µã®å®åŒåã¯ããã¹ãŠã®ã¡ãã»ãŒãžã«å¯ŸããŠåäžã®ãšã³ããªãã€ã³ãããªããã°ãªããªãããšãæèçã«æ瀺ããŠããŸãã ãã®ãããªãšã³ããªãã€ã³ãã¯ã
context.become(...)
ã䜿çšããŠåæå®ãããŠããªãAkkaã§äœæããããErlangãŸãã¯Akka Typedã§åŠçãããåã¡ãã»ãŒãžãæé ã§ããŸãã ããŸããŸãªã¿ã€ãã®è¡åããã¢ã¯ã¿ãŒãæ§æããå ŽåïŒã€ãŸããã¢ã¯ã¿ãŒã¯ä»²ä»è ã«ãã£ãŠç°ãªãåäœãããïŒããã®ãããªãšã³ããªãã€ã³ããä»ããŠå°çãããã¹ãŠã®ã¡ãã»ãŒãžã¯éå€éåããå¿ èŠããããŸã-ãã®æ¹æ³ã§ã®ã¿ãå éšããžãã¯ã«åŸã£ãŠæ£ããå®å ã«å°çããŸãã ãã®ç¶æ³ã¯ã
SessionCommand
ãããŠããªãã¢ã¯ã¿ãŒãæäœããå Žåã¯å°ãé¢åã§ãããAkka Typedã¯å®éã®èŠçã«ãªããŸããããã§ã¯ã
Authenticate
ãš
SessionCommand
äž¡æ¹ã
SessionCommand
ãããªåäœãå®åŒåãããã£ã¹ãæäœãå¿ èŠã§ãã å³å¯ã«åæå®ãããããžãã¯ã«ã¯ãå³å¯ãªã¬ã€ã¢ãŠãã«ãŒã«ãå¿ èŠã§ããããã¯ãçŽç²ãªé¢æ°ã®ã¬ã€ã¢ãŠãã§ãããåæ£ã³ã³ãã¥ãŒãã£ã³ã°ã§ãããæ®éçãªçå®ã®ããã§ãã
Alex Prokopetsã¯ããã«ãªã³ã§éå¬ãããScalaDays 2016ã«ã³ãã¡ã¬ã³ã¹ã§ã®ãã¬ãŒã³ããŒã·ã§ã³ã§ãæåéãç§ã®ç®ãéãããã®ãžã¬ã³ãããæãåºãæ¹æ³ãææããŸããã ã¢ã¯ã¿ãŒã¢ãã«ã®æ¬è³ªã¯ãç°ãªãç®çã®ããã«ç°ãªãããŒãžã§ã³ã®ã¢ã¯ã¿ãŒïŒããããžã®ãªã³ã¯ïŒã®å²ãåœãŠãå¿ èŠãšãããããªãã®ã§ãã ããããããç°ãªããããã³ã«ã䜿çšããŠå仲ä»è ãšéä¿¡ã§ãããã倧ããªãªããžã§ã¯ããçµã¿ç«ãŠãããšãã§ããŸãã ç¬ç«ããã¢ã¯ã¿ãŒãäœæããå Žåã次ã®æ¬ ç¹ã«çŽé¢ããŸããå éšã®äžè²«æ§ã倱ãããŸãã 俳åªã¯ãåæ£ããã«ãªã¹ã®æµ·ã®äžã§ãæ€æ»ãããåäžã®å³¶ã«å€ãããŸãã ãããã£ãŠãã³ãã¯ã¢ã¯ã¿ãŒãä»®æ³åããããããã«ç¬èªã®èå¥åãæã€è€æ°ã®å ¥åãã€ã³ããäœæããããšã§ãã ã¢ã¬ãã¯ã¹ã¯RxJavaã®ããã«ã¹ããªãŒãã³ã°åŠçã®ã»ãã³ãã£ã¯ã¹ã䜿çšããŸãããÏèšç®ã䜿çšããŠãã®ãããªè€åã¢ã¯ã¿ãŒã®å éšã¬ã€ã¢ãŠããæŽçãããšããã¢ã€ãã¢ã«ããã«æ¹ãããŸããã
Akka Typedã®äžã«ããçš®é¡ã®ã»ãã·ã§ã³DSLã®æåã®ããŒãžã§ã³ã¯ãããªããã£ãã¢ã¯ã·ã§ã³ãšèšç®ã®äžè²«ãã競äºåã®ããé 眮ã®ã¢ããèšè¿°ã«åºã¥ããŠããã«äœæãããŸããã
val server = toBehavior(for { backend â initialize server â register(backend) } yield run(server, backend)) private def initialize: Process[ActorRef[BackendCommand]] = { val getBackend = channel[Receptionist.Listing[BackendCommand]](1) actorContext.system.receptionist ! Receptionist.Find(BackendKey)(getBackend.ref) for (listing â readAndSeal(getBackend)) yield { if (listing.addresses.isEmpty) timer((), 1.second).map(_ â initialize) else unit(listing.addresses.head) } } ...
äž»ãªæœè±¡åã¯ãæå®ãããã¿ã€ãã®å€ãæçµçã«èšç®ããããã»ã¹ã§ãã é 次ãªã³ã¯ã«ã¯ãflatMapãŸãã¯mapã䜿çšããforkïŒããã»ã¹ïŒã¢ã¯ã·ã§ã³ã䜿çšããŠç«¶åããå®è¡ã¹ã¬ãããäœæããŸãã çµæãšããŠçããå®å šãªããã»ã¹ã¯ãåäžã®ã¢ã¯ã¿ãŒå ã§è©äŸ¡ãããŸãïŒtoBehavioré¢æ°ã¯ãé©åãªã€ã³ã¿ãŒããªã¿ãŒã§ãããã©ããããŸãïŒã å°çãããšå ¥åã«å¿çããŸããããããã¹ãããšã§ããreadAndSealãªãã¬ãŒã·ã§ã³ã¯ãåæåããã»ã¹ã®äžéšãšããŠäœæãããgetBackendãã£ãã«ã«å©çšå¯èœãªã¡ãã»ãŒãžã衚瀺ããããŸã§ããã»ã¹ãäžæåæ¢ããŸãã
ãã®ã©ã€ãã©ãªã®ãã©ããããŒãžã§ã³ã§ææ¡ãããŠããããªããã£ãã¯ãÏèšç®ã®ã¢ã¯ã·ã§ã³ãšæ§ææ©èœã«å¯Ÿå¿ããŠããŸãã
- ãã£ã³ãã«äœæ
- éã
- ååŸ
- ã·ãŒã±ã³ã¹
- éžæè¢
- 䞊åå
ç§ã®é ã®äžã§ããã¹ãŠãããã«èª¿æŽããå§ãããŸãã§ããèªäœã§ãå®å šã«åå©çšå¯èœãªè¡åãæ§æããäžçãåºçŸãå§ããŸããã
##æ·±ãïŒã¯ããæ·±ãïŒå€±æ
次ã®è³ªåããããšããã«å€¢ã厩ããŸããã éèŠãªã¡ãã»ãŒãž-ããã»ã¹ã®å¥ã®èŠçŽ ã®æ¬¡ã®ãããã³ã«ãžã®éãéããã®-ãäœããã®çç±ã§å€±ãããå Žåãã©ããªããŸããã ä¿¡é Œã§ããé ä¿¡ãä¿èšŒããŠã次ã®åé¡ã¯è§£æ±ºããŸããïŒä»ã®ã¢ã¯ã¿ãŒã¯æåã®ã¢ã¯ã¿ãŒããå®å šã«ãç¬ç«ããŠãæåŠããããšãã§ããŸãããŸãããã£ã³ãã«ã®é²é³çµäºãActorRefã«å¯Ÿå¿ããå Žåããã±ãŒã·ã§ã³ã®ééæ§ã¯éåžžã«åŒ·åãªã»ãã³ãã£ãã¯çŸè±¡ã§ããããããã¹ãŠã®äœæ¥ã®é²è¡ã¯ãªã¢ãŒãã·ã¹ãã ã«äŸåããããšã¯è«ççã§ãã ãã®åé¡ãä¿®æ£ããã«ã¯ãåä¿¡æäœã®ã¿ã€ã ã¢ãŠãã«äžéãèšå®ã§ããŸããããã®å ŽåãããŒã«ã«ããã»ã¹ã倱æããã®ãåŸ ã€å¿ èŠããããŸãã ããŒã«ã«ããã»ã¹ããã£ãã«ãä»ããŠäœæ¥ã調æŽãããšããäºå®ã«åºã¥ããŠããã£ãã«ããã³ã°ããããšãæå³ããŸãã ããã¯ãïŒåæ£ïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã䜿çšããŠè§£æ±ºã§ããã»ãã¥ãªãã£åé¡ã§ãã ïŒåœç¶ãããã°ã©ããŒã®ãšã©ãŒã«ãããã£ã³ãã«ããã³ã°ããå¯èœæ§ãããããããããã«ããŠããèŽåœçãªãªãœãŒã¹ãªãŒã¯ããå®å šã«åçããããšãè³¢æãªããã§ãïŒã
ãŸããçŽã§Ïèšç®ãè¡šçŸãããšãããããã©ãã«ã移åããªããããªåŒã§æ»ãã ããã»ã¹ãåé¢ããŠæé€ããããšãå¯èœã§ããããšã«æ°ä»ããŸããïŒçµå±ã®ãšããã圌ãã¯ä»ã®ããã»ã¹ã«ç¥ãããŠããªããã£ãã«ã§éä¿¡ãŸãã¯åä¿¡ãåŸ ã£ãŠããŸãã å®è£ ãScalaãã¡ãžãŒã¯ããŒãžã£ã«åºã¥ããŠããå Žåããããããã»ã¹ãæé€ãããã®ãããªæäœã¯å®éã«ã¯éæã§ããŸããã
ããããæ倧ã®é£ç¹ã¯ãÏèšç®ã®å®çŸ©æ©èœãã€ãŸããã£ãã«ã亀æããæ©èœãå®éã«å®è£ ããã®ãéåžžã«é£ãããšããäºå®ã«é¢é£ããŠããŸãã éä¿¡åŽã§ã¯ãåé¡ã¯ç°¡åã«è§£æ±ºãããŸãããã£ã³ãã«ã¯åã«ActorRefãšããŠæäŸãããŸãã ãã ããåä¿¡è åŽã§ã¯ãéä¿¡ãããã¡ãã»ãŒãžã1ã€ã®å®çŸ©ç¹æ§ã®ã¿ãæã€å€ãã®åä¿¡è ã«é ä¿¡ãããããã«ããå¿ èŠããããŸãïŒçŸæç¹ã§ã¯ãååä¿¡è ã¯ãã£ãã«ãžã®ãªã³ã¯ãæã¡ãåä¿¡è ã¯æ å ±ãåä¿¡ããæºåãã§ããŠããŸãã å®éã«ã¯ãã¡ãã»ãŒãžãåä¿¡ããåä¿¡è ã1人ã ãã«ãªãããã«ããå¿ èŠããããŸãã
éåžžã«é«äŸ¡ãªã®ã§ãAkkaã¯å°ãªããšãåºæ¬çãªããªããã£ãã§äœæ¥ããå Žåã¯æ§ããªããã°ãªããªããããªã°ããŒãã«ãªèª¿æŽããã§ãã æãåçŽãªãœãªã¥ãŒã·ã§ã³ã¯ãååãšããŠ-ç¡éã«å®è³ªçã«å¶éãªãã«ã¹ã±ãŒãªã³ã°ããå¿ èŠããããšæ³å®ãããŠããŸãã ç§ãã¡ã¯ãã®ãããªçæ³ã«è¿ã¥ãããåªããŠããŸãã ç¡éã®ã¹ã±ãŒã©ããªãã£ã¯å¿ ãããå¿ èŠã§ã¯ãªããäžè²«æ§ã®ããããŒã¿ããŒã¹ãç§ãã¡ã«é©ããŠãã絶察çãªçŸå®ã®ç¶æ³ããããŸãããããã¯ç§ãã¡ãåè¶æ§ãè¿œæ±ããããšã劚ãããã®ã§ã¯ãããŸããã
##äžãç»ã
ãã£ãã«ã®äœ¿çšã¯ãã¬ã·ãŒããŒãã·ãªã¢ã«åã§ããªãããã«ããïŒã€ãŸãããããã¯ãŒã¯ãä»ããŠéä¿¡ããããšãèš±å¯ããªãïŒããšã§ãä¿®æ£ãã§ããåä¿¡æäœãããã«é©ããªãã¢ã¯ã¿ãŒã®ã³ã³ããã¹ãããè¡ãããå Žåã¯äŸå€ãã¹ããŒããŸãã ãã®ãããªè§£æ±ºçã¯ãÏèšç®ãšåŒ·ãççŸããã ãã§ãªããã³ãŒããŸãã¯åã¬ãã«ã§èŠããªãç¶æ³ã«äŸåããæ©èœããŠãŒã¶ãŒAPIãšããŠã©ãã§ãå®çŸ©ãããé¢æ°ãæäŸããããšã¯æšå¥šãããªããããèŠèŠããã§ãããã
人ãèªããã£ã³ãã«ãéžæããã®ã¯äŸ¿å©ãªããã§ãïŒçµå±ãç§ãã¡ã¯ã³ãã¥ãã±ãŒã·ã§ã³ããŸãã ç§ãã¡ã¯ã©ããã«è¡ã£ãŠãèªåèªèº«ã§èšå®ããç®æšãéæããããã«å¿ èŠãªé åºã§ããŸããŸãªäººã ãšè©±ããŸãã 俳åªã¯æ¬¡ã«æ¥ãã¡ãã»ãŒãžã«å¯ŸåŠããããåŸãŸãããå®éã«ã¯ãããã¯ãåžžã«æ°ãæ£ããããŠãããããšãæå³ããŸãã æ®å¿µãªããããã£ãã«ãèªç±ã«éžæã§ããããšãæãåé¡ããããšç§ãã¡ã¯ç¢ºä¿¡ããŠããã®ã§ãå¥ã®ã¢ãããŒããèŠãŠã¿ãŸãããã
代æ¿æ¡ã®1ã€ã¯ãååçã«ã€ããŠèª¬æããã¢ã¬ãã¯ã¹ã«ãã£ãŠææ¡ãããŸããã ãã£ãã«APIã䜿çšãããšãã¹ããªãŒãã³ã°ã³ã³ããŒãžã§ã³ããã®ä»ã®åå¿ãæ·»ä»ã§ããŸãã ããã¯åªããŠããŸããããã£ãã«ãžã®ãªã³ã¯ãå¥ã®ãªã¢ã¯ã¿ãŒã«è»¢éãããééã£ãã³ã³ããã¹ãããã®æ å ±ã®åä¿¡ã«ããã·ã¹ãã å ã§ã«ãªã¹ãæ¯é ããå¯èœæ§ãæ®ããŸãã
ãããã£ãŠããŠãŒã¶ãŒã³ãŒãããç°¡åã«ã¢ã¯ã»ã¹ã§ããªãAPIã®æé»çãªããããã£ãååŸããæäœãããã°ã©ã ããããšãããã«æçã§ããããèªèããŸããã ããããŸãã«ãã¢ã¯ã¿ãŒã¢ãã«ã§ãã®ãããªãã©ãããåé¿ããæ¹æ³ã§ããããã§ã¯ãã¡ãã»ãŒãžã«å¿çããŠå®è¡ã§ããã¢ã¯ã·ã§ã³ã®3ã€ã®ãªãã·ã§ã³ãå®çŸ©ããŸãããã¢ã¯ã¿ãŒã¯çä¿¡ã¡ãã»ãŒãžãç©æ¥µçã«èŠæ±ããããšã¯ã§ããŸããã
ãã1ã€ã®éžæè¢ã¯...ã¢ã¯ã¿ãŒã§ãã åãã£ãã«ã¯ãçä¿¡ã¡ãã»ãŒãžãžã®å¿çæ¹æ³ãèšè¿°ããåäœã«åºã¥ããŠäœæãããŸãã ç¹ã«ãã¡ãã»ãŒãžããšã«åäœãå€æŽã§ããŸãã ãããã£ãŠãå¥ã®ã¢ã¯ã¿ãŒãšã®å¯Ÿè©±ãç¶ç¶ããç¶ç¶æ§ã®ãããã£ãã«ãäœæããŠã仲ä»è ã«éãè¿ããŸãã ã«ãŒã«ã»ãã¥ãŒã€ãããšã®ã£ã«ã»ã¢ã¬ã¯ã競äºããã®ã¢ãã«ã®äžå¯æ¬ ãªéšåãšã¯èããŠããªãã£ããããã®ã³ã³ã»ãããæåããèããæšé²ããŠããæ¹æ³ã§ãã
## 2çªç®ã®åæ¢ïŒãµãã¢ã¯ã¿ãŒ
æ¹åãããã¢ãã«ã¯ãããã»ã¹äœææäœãšèªã¿åãæäœãžã®åŒæ°ã®åé€ã䌎ããã£ãã«äœææäœã®æé»çãªããã±ãŒãžåãšããŠèª¬æã§ããŸã-ããã»ã¹ã®1ã€ã®å ¥åãã£ãã«ã®ã¿ãžã®èªã¿åãã¢ã¯ã»ã¹ãä¿æãããŸãã ã·ãŒã±ã³ã·ã£ã«ã³ã³ããžã·ã§ã³ã§ã¯ãåããã£ã³ãã«ãåå©çšãããªãã·ã§ã³ãããããã©ã¬ã«ã³ã³ããžã·ã§ã³ã§ã¯ãäºåã«äœæãããç¶ç¶ãã£ã³ãã«ãéããŠçµæãéä¿¡ããããšãã§ããŸãïŒå¿ èŠãªå ŽåïŒã
裞ã®Akka Typedãè¶ ããå©ç¹ã¯ãç¶ç¶æäœã®äœæãšèšå®ã«å¿ èŠãªç»é¢ã³ãŒããåãé€ãããšãããã³åäžã®ã¢ã¯ã¿ããã£ã¹ãããã¢ãžã¥ãŒã«ãšããŠåå©çšããããšã§ãã ãããã£ãŠããã®ãããªããã®çŽ°ããå¶åŸ¡ã¯ãã¢ã¯ã¿ãŒã®äœæãšã¹ã¬ããééä¿¡ã«äžå®ã®æ³å€ãªã³ã¹ãããããããšãªãæäŸãããŸãã ã¢ã¯ã¿ãŒã®åäœã«é¢ãããã®ãããªæ®µéçãªèšè¿°ã«ãããã¢ã¯ã¿ãŒãåå©çšããŠæ§æã§ãããšèããããŠããŸãã
##ãããŠããã ãã§ããïŒ
åé ã§ãã俳åªã¯ååžãæ£ç¢ºã«ã¢ãã«åããããšããã¹ããŒãã¡ã³ãã«ã€ããŠäœããç解ãããšè¿°ã¹ãŸããã åé¡ã解決ããäžã§ãã®ã¢ãã«ãæ£ç¢ºã«ã©ã®ããã«æ©èœããããå®æããã ãã§ããæããã«ãã¢ã¯ã¿ãŒã¢ãã«ã®ãã¹ãŠã®è©³çŽ°ãšåæ£ã·ã¹ãã ã®ã»ãã³ãã£ã¯ã¹ã¯å®éã«ã¯1ã€ã®å šäœã«çµåãããŠããŸãã ãããã£ãŠãããã»ã¹ä»£æ°ã«é¢ããWikipediaã®èšäºã§ã¯ãÏèšç®ãšã¢ã¯ã¿ãŒã¢ãã«ã¯å®éã«ã¯2åã§ãããšè¿°ã¹ãŠããŸãããç§ã¯ããããã¯æããŸããã ç§ã®æèŠã§ã¯ãÏèšç®ã§ã¯ããããã£ãå€ããããããç¡éã«ã¹ã±ãŒã©ãã«ãªå®è£ ãäœæã§ããŸããã ç¹ã«ã éåæÏèšç®ã®è¡šçŸåã«é¢ããChris Makeclejonã®ç 究ã«ã€ããŠããã®ããŒãã«é¢ããŠããã€ãã®æ°ããç 究ãç»å ŽããŸããã ãŸãããªããããé©çšãã¹ããã説æããéåžžã«æçšãªÏèšç®FAQãèŠã€ããŸããã Ïèšç®ã®ããŒã«ã¯ããããã³ã«ã®åœ¢åŒçãªèšè¿°ãšæ€èšŒã«ãšã£ãŠèå³æ·±ããã®ã§ããããã®å Žåããã®èšç®ã®è¡šçŸåã¯å®å šã«ã¯äœ¿çšãããŠããŸãã-ãããŠããã®ãããªèšç®ã«åºã¥ããŠïŒé©å¿ãªãã§ïŒãšã³ããŠãŒã¶ãŒåãã®APIãæžãããšã¯ã§ããŸããã
äžæ¹ãã¢ã¯ã¿ãŒã¢ãã«ã埮ç©åã®åœ¢åŒã§å®å šã«åœ¢åŒåããæ¹æ³ã¯èŠã€ãããŸããã§ããïŒæ°åŠçã«é©åã«ä»ã®ã¿ã€ãã®åŸ®ç©åã«å€æããããšã¯äžå¯èœã§ããããããã¹ãŠã®çŸããå®çãæºããããããã«ããã¹ãŠã®ç䟡ããã³ååé¢ä¿ã芳å¯ããŸãïŒã ãã®ãããªåœ¢åŒåã¯å¿ èŠãªããããããŸããããå€éšãããã³ã«ã§èšè¿°ãããã¢ã¯ã¿ãŒã®åäœã«å¶éãå ããã³ãŒãçæã䜿çšããŠãœãŒã¹ã¬ãã«ã«äžããŸãïŒãŸãã¯ãAlcesteã§è¡ãããããã«ã»ãã·ã§ã³å šäœãã³ãŒãã£ã³ã°ããããé©åã«æ¥ç¶ãããã¡ãã»ãŒãžã¯ã©ã¹ãçæããŸãïŒãç¹å®ã®ãšã³ããŠãŒã¶ãŒAPIã§éæå¯èœãªã»ãã¥ãªãã£ã®ã¬ãã«ã«å¿ããŠïŒã ãŸãã¯ãÏèšç®ããã»ã¹ãšããŠè¡šçŸã§ããããªãŒã®å€éšã§åæã§ããåäœã®æœè±¡çãªããªãŒã§ãã¢ã¯ã¿ãŒã®åäœãæœåºããå¿ èŠããããŸãã æŠå¿µçãªèŠ³ç¹ããã次ã®ããšãæãé£ããããã«æãããŸãããä»»æã®é ä¿¡ã§ä¿¡é Œæ§ã®äœãã¡ãã»ãŒãžãéä¿¡ãããšããåºæ¬çãªåäœã¯ãèªæã§ã¯ãªãÏããã»ã¹ã«å¯Ÿå¿ããçµã¿åããã®ççºã«ã€ãªãããå¯èœæ§ã®æ°ãå€§å¹ ã«æžãããŸãã (?) : , .
â - , . â .