Webéçºã®äžçã¯çµ¶ããé²åããŠãããããžãã¹ããŒãœã³ãææ°ã®ãã¯ãããžãŒãç解ã掻çšããããšã¯å¿ é ã§ããä»åã®ããŒãã¯ãChatGPTãPlay Frameworkã®ãããªå é²çãªããŒã«ãããã«ããŠçµã¿åããããã¯ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããã«ã€ããŠã§ãããã®ã¬ã€ãã¯ãPlay Frameworkã®åºç€ããå§ããChatGPTãšã®çµ±åãåã³ãã®å®è·µç掻çšæ³ããããã€ãŸã§ã®å šäœãããããããèŠçŽããŠããŸããçæ§ã®æ¬¡ãªãããžãã¹ãããžã§ã¯ãã«ãããŠããã®åŒ·åãªçµã¿åãããã©ã®ããã«æ©èœæ¡åŒµãå®çŸã§ãããããã®ãã³ããæäŸããŸãã
1. ChatGPT Play Frameworkãžã®ã€ã³ãããã¯ã·ã§ã³
1.1 Play Frameworkãšã¯äœãïŒ
Play Frameworkã¯ã¢ãã³ãªWebã¢ããªã±ãŒã·ã§ã³ãéçºããããã®é«æ©èœãã€é«æ§èœãªãã¬ãŒã ã¯ãŒã¯ã§ããMVCã¢ãŒããã¯ãã£ãæ¡çšããŠãããéçºè ãçŽæçãã€è¿ éã«ã¢ããªã±ãŒã·ã§ã³ãéçºããããšãå¯èœã«ããŸããç°¡æœã§ã·ã³ãã«ãªAPIãšããããªããŒãã£ã³ã°æ©èœã«ãããéçºããã»ã¹ãå€§å¹ ã«å éãããŸãã
ãªãŒãã³ãœãŒã¹ã§ãããªããã匷åãªã³ãã¥ããã£ã®ãµããŒããåããŠãããäžçäžã§å€ãã®äŒæ¥ã«ãã£ãŠæ¡çšãããŠããŸãããã®äººæ°ã®ç§å¯ã¯ãã¹ã±ãŒã©ãã«ã§ã¡ã³ããã³ã¹ãããããã³ãŒãããŒã¹ãå®çŸã§ããç¹ã«ãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãé«ããããã«ãéåæåŠçã第äžçŽã®åžæ°ãšããŠæ±ãããããã³ããšã³ããšããã¯ãšã³ãã®äž¡æ¹ã§å©çšã§ããè±å¯ãªã©ã€ãã©ãªãšã®äºææ§ã«ãã£ãŠãæè»ãªã¢ããªã±ãŒã·ã§ã³æ§ç¯ãå¯èœã§ãã
1.2 Reactiveã·ã¹ãã ã®ç解
Reactiveã·ã¹ãã ãšã¯ããªã¢ã¯ãã£ãããã°ã©ãã³ã°ã®ååã«åºã¥ããŠèšèšãããã·ã¹ãã ã§ãããã®äž»ãªç¹åŸŽã¯ã¬ã¹ãã³ã·ããã¬ãžãªãšã³ãããšã©ã¹ãã£ãã¯ãã¡ãã»ãŒãžé§åãšããïŒã€ã®ç¹æ§ãåããŠããŸããããã«ãããã·ã¹ãã ã¯è² è·ã®å€åã«å¯Ÿå¿ãããããé害ããã®å埩åãé«ãŸããæè»ãªã¹ã±ãŒãªã³ã°ãå¯èœã«ãªããŸãã
Play Frameworkãå©çšããéçºè ã¯ããããã®ååã掻ãããŠé«åºŠã«å¯Ÿè©±çãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã«ãã°ãã察å¿ããã·ã¹ãã å šäœãããŠã³ã¿ã€ã ãå°ãªãç¶ç¶ããŠåäœããããã®èšèšãç°¡åã«ãªããŸãã
ãŸããReactiveã·ã¹ãã ã¯æµãããããªããŒã¿åŠçãå¯èœã§ããªã¢ã«ã¿ã€ã ã®Webã¢ããªã±ãŒã·ã§ã³ã倧容éã®ããŒã¿ãåŠçããã¢ããªã±ãŒã·ã§ã³ã®éçºã«æé©ã§ããPlay Frameworkã¯ããããã®èŠä»¶ã«åãããéçºã匷åã«æ¯æŽããŸãã
1.3 ScalaãšJavaã®äž¡äžçãå©çšããPlay
Play Frameworkã¯ScalaãšJavaã®äž¡æ¹ã®èšèªã§å©çšããããšãã§ããããããã®èšèªã®é·æãçãããéçºãè¡ããŸããScalaã䜿ãããšã§é¢æ°åããã°ã©ãã³ã°ã®ç¹åŸŽã掻ãããã³ã³ã·ã¹ãªã³ãŒããæžããJavaã䜿çšããå Žåã¯åºç¯ãªãšã³ã·ã¹ãã ãšæ¢åã®ã©ã€ãã©ãªã掻çšããããšãã§ããŸãã
åå®å šæ§ããã¿ãŒã³ãããã³ã°ãªã©ã®Scalaã®åŒ·åãªæ©èœã«ããããã°ã®å°ãªãã¡ã³ããã³ã¹æ§ã®é«ãã³ãŒãã®çæãå¯èœã§ããäžæ¹ãJavaã䜿ãããšã§éçºããŒã ãæ¢ã«æ £ã芪ããã§ããããŒã«ããã©ã¯ãã£ã¹ãåŒãç¶ãå©çšã§ãã移è¡ã³ã¹ããæãã€ã€æ°ãããã¬ãŒã ã¯ãŒã¯ãžãšã¹ã ãŒãºã«ç§»è¡ããããšãã§ããŸãã
ãã®ããã«ãPlay Frameworkã¯è€æ°ã®èšèªãªãã·ã§ã³ãæäŸããããšã§ãæè»ãªéçºç°å¢ãæäŸãããããžã§ã¯ãã®èŠä»¶ã«å¿ããŠæé©ãªèšèªãéžæããããšãå¯èœã«ããŠããŸãã
1.4 Play Frameworkã®äž»èŠæ©èœ
Play Frameworkã«ã¯éçºã容æã«ããçç£æ§ãé«ããæ°å€ãã®æ©èœããããŸãããã®äžã§ããã«ãŒãã£ã³ã°ã®å®çŸ©ãã·ã³ãã«ã§ããããããç¹ãçµã¿èŸŒã¿ã®ãã¹ãæ©èœã«ããéçºã®å¹çåãããã«ã»ãã¥ã¢ãªã»ãã·ã§ã³ç®¡çæ©èœãæããããŸãã
ãŸããéåæããã°ã©ãã³ã°ãå®å šã«ãµããŒãããŠãããFutureãPromiseã®æŠå¿µãå©çšããŠå¹ççãªäžŠè¡åŠçãè¡ãããšãã§ããŸããããã«ãããIOæäœããããã¯ãŒã¯åŒã³åºãã®éã«ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãèœã¡ãããšããããŸããã
ããã«ãæŠç¥çãªãã£ãã·ã¥æ©æ§ãåœéåãç°å¢ã«å¿ããèšå®ã®å®¹æããªã©ã®æ©èœãæäŸãããŠããŸãããããã®æ©èœã掻çšããããšã§ãéçºè ã¯ãŠãŒã¶ãŒã«ãšã£ãŠæãåççãªæ¹æ³ã§é«å質ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæäŸã§ããŸãã
2. Play Frameworkã®ã»ããã¢ãããšåºæ¬
2.1 éçºç°å¢ã®æ§ç¯
Play Frameworkãå¹çãã掻çšããããã«ã¯ãé©åãªéçºç°å¢ã®æ§ç¯ãå¿ èŠäžå¯æ¬ ã§ãããŸããJava Development Kit (JDK) ã®ã€ã³ã¹ããŒã«ãå¿ èŠãšãªããŸãã察å¿ããŠããJDKã®ããŒãžã§ã³ã«æ³šæããªãããå ¬åŒã®ãŠã§ããµã€ãããããŠã³ããŒãããã·ã¹ãã ã«ã€ã³ã¹ããŒã«ããŸãã
次ã«ãPlay Frameworkæ¬äœãããŠã³ããŒãããå¿ èŠããããŸããå ¬åŒãµã€ãããææ°çã®PlayãããŠã³ããŒãããé©åãªãã£ã¬ã¯ããªã«å±éããŸããç°å¢å€æ°ãèšå®ããããšã§ãPlayã³ãã³ããã·ã¹ãã ã®ä»»æã®äœçœ®ããå®è¡ã§ããããã«ãªããŸãã
æåŸã«ãIntegrated Development Environment (IDE) ãèšå®ããŸããEclipseãIntelliJ IDEAãªã©ã®IDEã¯Play Frameworkã«å¯Ÿå¿ããŠãããå¹ççãªéçºããµããŒãããŸããIDEã®èšå®ã«ã¯ãPlayã®ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããããšããå§ãããŸãã
2.2 æ°èŠãããžã§ã¯ãã®äœæãšæ§æ
æ°èŠãããžã§ã¯ããäœæããã«ã¯ãã³ãã³ãã©ã€ã³ã§ãplay new ãããžã§ã¯ãåããšå ¥åããŸããããã«ãããåºæ¬çãªãã¡ã€ã«æ§æãšèšå®ãå«ãŸãããããžã§ã¯ãã®é圢ãçæãããŸãããããžã§ã¯ãåã¯é©åœã«éžã³ãŸãããæå³ã®ããååãã€ããããšã§ç®¡çãããããªããŸãã
çæããããããžã§ã¯ããã£ã¬ã¯ããªã«ã¯ãæ§ã ãªèšå®ãã¡ã€ã«ãå«ãŸããŠããŸããäž»èŠãªèšå®ãã¡ã€ã«ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ§æãå®çŸ©ãããapplication.confãããããŒã¿ããŒã¹æ¥ç¶ã®èšå®ãè¡ããconf/evolutions/default/1.sqlããªã©ããããŸãããããã®ãã¡ã€ã«ãç·šéããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®æ¯ãèããã«ã¹ã¿ãã€ãºã§ããŸãã
ãŸããã«ãŒãã£ã³ã°ããã£ãã³ãã³ã·èšå®ãå«ããããžã§ã¯ãã®ãbuild.sbtããã¡ã€ã«ãé©åã«ç®¡çããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœè¿œå ãã¡ã³ããã³ã¹ã®éã«éèŠã§ãã
2.3 ã«ãŒãã£ã³ã°ã®åºæ¬
ã«ãŒãã£ã³ã°ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®URLãšãã®åŠçãçŽã¥ããéèŠãªæ©èœã§ããPlay Frameworkã§ã¯ãconf/routesããšãããã¡ã€ã«ã§ã«ãŒãã£ã³ã°ã管çããŠããŸãããã®ãã¡ã€ã«ã«ã¯ãURLãã¿ãŒã³ãHTTPã¡ãœããã察å¿ããã³ã³ãããŒã©ã®ã¢ã¯ã·ã§ã³ãå®çŸ©ããŸãã
äŸãã°ããGET /home controllers.HomeController.index()ãã®ããã«èšè¿°ããããšã§ãã/homeããšãããã¹ã«GETãªã¯ãšã¹ãããã£ãéãHomeControllerã®indexã¡ãœãããåŒã³åºãããããã«ã«ãŒãã£ã³ã°ãèšå®ã§ããŸããæ確ãªã«ãŒãã£ã³ã°ã¯ããŠãŒã¶ãçŽæçã«ã¢ããªã±ãŒã·ã§ã³ãå©çšã§ããããã«ããããã«éèŠã§ãã
ã«ãŒãã£ã³ã°ã®èšå®ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ¡åŒµæ§ãšã¡ã³ããã³ã¹æ§ã«çŽæ¥é¢ããããããŠãŒã¶ã®äºæãã¬æäœãã»ãã¥ãªãã£ãªã¹ã¯ã«å¯Ÿå¿ããããã«ããæ éã«æ€èšããå¿ èŠããããŸãã
2.4 ã³ã³ãããŒã©ãšã¢ã¯ã·ã§ã³ã®å®çŸ©
ã³ã³ãããŒã©ã¯ãŠãŒã¶ã®ãªã¯ãšã¹ãã«å¿çããããžãã¹ããžãã¯ãå«ãã¯ã©ã¹ã§ããPlay Frameworkã§ã¯MVCã¢ãŒããã¯ãã£ã«åŸããã¢ãã«(View)ãšãã¥ãŒ(Controller)ã®éãåãæã€åœ¹å²ãæ ããŸããã³ã³ãããŒã©å ã§ãã¢ã¯ã·ã§ã³ãšåŒã°ããã¡ãœãããå®çŸ©ããŠããªã¯ãšã¹ãã«å¿çããŸãã
ã¢ã¯ã·ã§ã³ã¯publicã¡ãœãããšããŠã³ã³ãããŒã©å ã«å®çŸ©ãããã®ã¡ãœãããè¿ãResultãªããžã§ã¯ãã«ãã£ãŠãHTTPã¬ã¹ãã³ã¹ãçæããŸããã¢ã¯ã·ã§ã³ã¡ãœããã¯ããªã¯ãšã¹ãããŒã¿ã®åŠçãããžãã¹ããžãã¯ã®å®è¡ãé©åãªãã¥ãŒãã³ãã¬ãŒãã®éžæãªã©è€æ°ã®ã¿ã¹ã¯ãæ ããŸãã
å¹æçãªã³ã³ãããŒã©ãšã¢ã¯ã·ã§ã³ã®èšèšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ãç¶æããåå©çšæ§ããã¹ã容ææ§ãé«ãããšãšãã«ãä¿å®ãšæ¡åŒµã容æã«ããŸããé©åãªã¢ã¯ã·ã§ã³ã®å®çŸ©ã¯ããšã³ããŠãŒã¶ã«è¿ éãã€æ£ç¢ºãªã¬ã¹ãã³ã¹ãæäŸããããã«äžå¯æ¬ ã§ãã
3. ChatGPTãšã®çµ±åã®æŠèŠ
ChatGPTã¯é©æ°çãªèªç¶èšèªåŠçæè¡ãåãå ¥ããAIã§ããŠãŒã¶ãŒãšã®å¯Ÿè©±ãéããŠæ§ã ãªè³ªåã«çããããã³ã³ãã³ããçæããããšãã§ããŸããPlay Frameworkã䜿çšããŠChatGPTãšçµ±åããããšã§ããã€ãããã¯ãªWebã¢ããªã±ãŒã·ã§ã³ã«è±ããªå¯Ÿè©±åœ¢åŒã®æ©èœãæäŸã§ããŸãã
ããã°ã©ãã³ã°èšèªScalaãJavaã«å¯Ÿå¿ããPlayã¯MVCã¢ãŒããã¯ãã£ã«åºã¥ãã軜éã§ã¹ã±ãŒã©ãã«ãªãã¬ãŒã ã¯ãŒã¯ã§ããChatGPTã®èœåããã«ã«æŽ»çšãããšã³ããŠãŒã¶ãŒã«ç¶ç¶çãªã€ã³ã¿ã©ã¯ã·ã§ã³ãæäŸããããšãç®æšã§ãã
ãã®èšäºã§ã¯ãPlay Frameworkã§RESTful APIãæ§ç¯ããChatGPTã®APIãšã®é£æºæ¹æ³ãããŠãŒã¶ãŒã®å ¥åãã¬ã¹ãã³ã¹ãå¹æçã«ãã³ããªã³ã°ããã¢ãããŒãã«ã€ããŠè©³ãã解説ããŸãã
3.1 ChatGPTã®åºç€ç¥è
ChatGPTã¯ã倧éã®ããã¹ãããŒã¿ããåŠç¿ããèªç¶èšèªã«ããã³ãã¥ãã±ãŒã·ã§ã³ãè¡ãããšãã§ããã¢ãã«ã§ãããã®æè¡ã¯ããŠãŒã¶ãŒãå ¥åããããã¹ãã«åºã¥ããŠã人éã®ãããªã¬ã¹ãã³ã¹ãçæããèœåãç¹åŸŽã§ãã
ãã®AIã¢ãã«ã®å¿çšç¯å²ã¯åºããã«ã¹ã¿ããŒãµãŒãã¹ãã³ã³ãã³ãäœæãæè²ãªã©å€æ§ãªåéã§ã®æŽ»çšãèŠèŸŒãŸããŠããŸãããã®ãããChatGPTãã¢ããªã±ãŒã·ã§ã³ã«çµ±åããããšã¯ããšã³ããŠãŒã¶ãŒã«æ°ããªäŸ¡å€ãæäŸãã絶奜ã®æ©äŒãšãªããŸãã
ChatGPTã®APIã¯ãå€éšã®ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«æ¥ç¶ã§ããããã«èšèšãããŠããŸãããã®APIã掻çšããããšã§ãPlay Frameworkã䜿çšããã¢ããªã±ãŒã·ã§ã³ã«ChatGPTã®åãçµã¿èŸŒãããšãã§ããã®ã§ãã
3.2 Playã§ã®RESTful APIã®æ§ç¯
Play Frameworkã䜿ã£ãŠRESTful APIãæ§ç¯ããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã«ãããããŒã¿ã®æµããæŽçããå€éšãµãŒãã¹ãšã®é£æºã容æã«ããããã§éèŠã§ããPlayã§ã¯ã³ã³ãããŒã©ãŒã䜿çšããŠãšã³ããã€ã³ããå®çŸ©ãããªã¯ãšã¹ãã«å¯ŸããåŠçãé 眮ããŸãã
APIãšã³ããã€ã³ãã®èšèšã«ããã£ãŠã¯ãHTTPã¡ãœããã®é©åãªäœ¿çšïŒGETãPOSTãPUTãDELETE çïŒãæ±ããããŸããããã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³å ã§ã®åãªãœãŒã¹ãžã®CRUDæäœãæ確ã«ãªããŸãã
ããã«ãPlay Frameworkã®éåæåŠçæ©èœã掻çšããããšã§ãã¹ã±ãŒã©ãã«ãªAPIãå®çŸãã倧éã®ãŠãŒã¶ãŒããã®åæãªã¯ãšã¹ãã«ãè¿ éã«å¿çããããšãå¯èœã§ãã
3.3 ChatGPTã®APIãšã®é£æºæ¹æ³
ChatGPTã®APIãšã®é£æºãå®çŸããããã«ã¯ããŸãã¢ããªã±ãŒã·ã§ã³ãµãŒããšChatGPTãµãŒãéã§ããŒã¿ã亀æããã¡ã«ããºã ãå®è£ ããå¿ èŠããããŸããããã«ã¯HTTPã¯ã©ã€ã¢ã³ãã©ã€ãã©ãªã䜿çšããå¿ èŠãªãªã¯ãšã¹ããã©ã¡ãŒã¿ãå«ããAPIãªã¯ãšã¹ããéä¿¡ããŸãã
Play Frameworkã«ãããŠã¯ãWSã¯ã©ã€ã¢ã³ãïŒPlayã®çµã¿èŸŒã¿éåæHTTPã¯ã©ã€ã¢ã³ãïŒãå©çšããŠãå€éšã®APIãšéä¿¡ããããšãã§ããŸãããããçšããŠChatGPTã®ãšã³ããã€ã³ãã«ãªã¯ãšã¹ããéããJSONçã®åœ¢åŒã§ã¬ã¹ãã³ã¹ãåãåãããšãå¯èœã§ãã
APIããŒãšãšã³ããã€ã³ãURLãå«ãèšå®æ å ±ãé©åã«ç®¡çããã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒã確ä¿ããããšããå®å šãªé£æºãå®çŸããããã§æ¬ ãããŸããã
3.4 ãŠãŒã¶ãŒå ¥åãšã¬ã¹ãã³ã¹ã®ãã³ããªã³ã°
ãŠãŒã¶ãŒããã®å ¥åãé©åã«åŠçããChatGPTããã®ã¬ã¹ãã³ã¹ãå¹ççã«ãŠãŒã¶ãŒã«æäŸããããšãã·ã¹ãã çµ±åã®éµãæ¡ããŸããPlay Frameworkã掻çšããããšã§ããããã®ããã»ã¹ãã¹ã ãŒãºãã€å¹ççã«è¡ãããšãã§ããŸãã
ãŠãŒã¶ãŒããã®ãªã¯ãšã¹ãã¯Playã®ã«ãŒãã£ã³ã°ã¡ã«ããºã ãéããŠé©åãªã³ã³ãããŒã©ãŒã®ã¢ã¯ã·ã§ã³ãžãšå°ãããããã§ããžãã¹ããžãã¯ãå®è¡ãããã¹ãã§ããPlayã®åŒ·åãªãã©ãŒã ãã³ããªã³ã°ãšãŽã¡ãªããŒã·ã§ã³æ©èœãå©çšããŠããŠãŒã¶ãŒå ¥åãé©åã«æ€èšŒãåŠçããŸãã
æçµçã«ãChatGPTããåŸãããã¬ã¹ãã³ã¹ã¯JSONãHTML圢åŒã§æŽåœ¢ããPlayã®ã¬ã³ããªã³ã°ãšã³ãžã³ãçšããŠãŠãŒã¶ãŒã®ãã©ãŠã¶ã«è¡šç€ºãããŸããåæ»ãªãŠãŒã¶ãŒäœéšãæäŸããããšãã§ãããããã¬ã¹ãã³ã¹ã®ãã©ãŒããããšã¿ã€ãã³ã°ã«ã泚æãæããŸãã
4. Play Frameworkã«ããå®è·µç掻çšè¡
4.1 ãã©ãŒã ããŒã¿ãšããªããŒã·ã§ã³
Webã¢ããªã±ãŒã·ã§ã³ã«ãããŠãã©ãŒã ã®åŠçã¯åºæ¬äžã®åºæ¬ã§ããPlay Frameworkãå©çšããããšã§ãã·ã³ãã«ãã€å¹ççã«ãã©ãŒã ããŒã¿ã®åŠçãè¡ãããšãã§ããŸãããã©ãŒã ããŒã¿ãæ±ããšãã¯ãå©çšè ãé©åãªããŒã¿ãå ¥åããŠãããã®ç¢ºèªãããªãã¡ããªããŒã·ã§ã³ãäžå¯æ¬ ã§ãã
Play Frameworkã§ã¯ããã©ãŒã ã©ã€ãã©ãªã䜿çšããŠãç°¡åã«ããªããŒã·ã§ã³ãå®è£ ã§ããŸããJavaãScalaãªã©ã®èšèªã䜿çšããæ§ã ãªããªããŒã·ã§ã³ã«ãŒã«ãç¬èªã«å®çŸ©ããããšãã§ããèŠéãã®è¯ãã³ãŒãã§å¹æçãªããªããŒã·ã§ã³ãå¯èœãšãªããŸãã
ãŸãããšã©ãŒã¡ãã»ãŒãžãæè»ã«èšå®ã§ããããããšã³ããŠãŒã¶ãŒã«ãšã£ãŠç解ãæããã£ãŒãããã¯ãæäŸããããšãã§ããŸããããã«ãããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå®çŸãã€ã€ããã©ãŒã ã®å®å šæ§ãé«ããããšãå¯èœã§ãã
4.2 ããŒã¿ããŒã¹ãšã¢ãã«ã®é£æº
Play Frameworkã§ã¯ãã¢ãã«ãšããŒã¿ããŒã¹ã®é£æºãã·ãŒã ã¬ã¹ã«è¡ãããšãã§ããŸããORMïŒObject-Relational MappingïŒã©ã€ãã©ãªã®EbeanãJPAãéããŠãããŒã¿ããŒã¹æäœãæœè±¡åããããçŽæçãªã³ãŒãã§ããŒã¿ã®ç®¡çãè¡ããããã«ãªã£ãŠããŸãã
ããŒã¿ããŒã¹èšå®ã¯ã¢ãžã¥ã©ãŒãªèšèšããããŠãããæ§ã ãªçš®é¡ã®ããŒã¿ããŒã¹ã«å¯Ÿå¿ããŠããŸããããã«ããã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ãé«ããããšãã§ããéçºæ®µéã ãã§ãªããå®éã®éçšç°å¢ã«ãããŠãæè»ãªããŒã¿ç®¡çãå®çŸããŸãã
ã¢ãã«ã¯ã©ã¹ãå©çšããŠããŒã¿ãæäœããããšã¯ãçæããæŽæ°ãã¯ãšãªãåé€ãŸã§ã®äžéãã®CRUDæäœãçŽèŠ³çã«è¡ãããããããŒã¿ããŒã¹ã«é¢ããã³ãŒãã®è€éæ§ã軜æžããéçºå¹çãåäžãããŸãã
4.3 éåæåŠçã®å®è£
é«ãã©ãã£ãã¯ãªWebã¢ããªã±ãŒã·ã§ã³ã§ã¯ãéåæåŠçã¯æ¬ ãããªããã¯ããã¯ã§ããPlay Frameworkã¯ãéåæåŠçã容æã«å®è£ ããããã®æ©èœãå å®ãããŠããŸããããã«ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
å ·äœçã«ã¯ãCompletableFutureãReactive Streamsãªã©ã®æŠå¿µãå©çšããããšã§ããªã¯ãšã¹ããéããããã³ã°ã§åŠçããããšãå¯èœã§ããããã«ãããã¹ã±ãŒã©ãã«ã§ãªã¢ã¯ãã£ããªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšãã§ããŸãã
Play Frameworkã®éåæãµããŒãã掻çšããã°ããµãŒããŒã®ãªãœãŒã¹ãæå¹ã«äœ¿ãã€ã€ããŠãŒã¶ãŒã«ãšã£ãŠå¿çæ§ã®é«ãäœéšãæäŸããããšãå¯èœã§ããããã¯ç¹ã«ãªã¢ã«ã¿ã€ã ããŒã¿åŠçãå¿ èŠãšãããã¢ããªã±ãŒã·ã§ã³ã«ãããŠå©ç¹ãšãªããŸãã
4.4 ã»ãã¥ãªãã£ãšèªèšŒ
ã»ãã¥ãªãã£ã¯Webã¢ããªã±ãŒã·ã§ã³ã§ã¯é¿ããŠã¯éããªã課é¡ã§ããPlay Frameworkã«ã¯ãã»ãã¥ãªãã£é¢ã§ã®å ç¢ãªèšèšããªãããŠããŸããããã©ã«ãã§å€ãã®ã»ãã¥ãªãã£å¯Ÿçãå«ãŸããŠãããCSRFïŒCross-Site Request ForgeryïŒå¯Ÿçãã»ãã·ã§ã³ç®¡çãªã©ãç°¡åã«èšå®ã§ããŸãã
èªèšŒæ©èœã«é¢ããŠããPlay Frameworkã¯SilhouetteãDeadbolt 2ãšãã£ãã©ã€ãã©ãªããµããŒãããŠããŸãããããã®ã©ã€ãã©ãªã䜿çšããããšã§ãSecure SocialãOAuthãšãã£ãèªèšŒã¡ãœãããç°¡åã«çµã¿èŸŒãããšãã§ããŸãã
Play Frameworkã®ã»ãã¥ãªãã£æ©èœãé©åã«å©çšããããšã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã¯å®å šãªç¶æ ãç¶æã§ããŸããèªèšŒãåçš®ã»ãã¥ãªãã£å¯Ÿçãçµ±åãããšã³ããŠãŒã¶ãŒã«å®å šãªãµãŒãã¹ãæäŸããåºç€ã確ç«ããããšãå¯èœã§ãã
5. ãã¥ãŒãã³ã°ãšãããã€
é«æ§èœãªã¢ããªã±ãŒã·ã§ã³ã®æäŸã¯ããŠãŒã¶ãŒã®æºè¶³åºŠãäžããããžãã¹ã®æåã«çŽçµããŸããç¹ã«ChatGPTãPlay Frameworkãçšããéçºã«ãããŠã¯ããã¥ãŒãã³ã°ãšãããã€ã®éçšããã®æ§èœã倧ããå·Šå³ããããšããããŸãã以äžã«ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããå¹ççã«ã¯ã©ãŠããµãŒãã¹ãžãããã€ããç¶ç¶çã«ãã®ã³ã°ãšç£èŠãè¡ããªããã¹ã±ãŒã©ããªãã£ã管çããæ¹æ³ã«ã€ããŠè§£èª¬ããŸãããã
5.1 ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹æé©å
Play Frameworkã§äœæãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããããã«ã¯ããŸãã³ãŒãã®ãããã¡ã€ãªã³ã°ãå®æœããããšãéèŠã§ãããªã¯ãšã¹ãã®åŠçæéãççž®ããããã«ãéåæåŠçãç©æ¥µçã«å©çšããããŒã¿ããŒã¹ã®ã¯ãšãªãèŠçŽãããšã§ãäžèŠãªåŠçæéã®åæžã«åªããŸãããã
次ã«ããã£ãã·ã¥æŠç¥ãå©çšããããšãããã©ãŒãã³ã¹åäžã«ã¯äžå¯æ¬ ã§ããPlay Frameworkã«ã¯çµã¿èŸŒã¿ã®ãã£ãã·ã¥APIããããé »ç¹ã«å©çšãããããŒã¿ããã£ãã·ã¥ã«ä¿æããŠããããšã§ãããŒã¿ååŸåŠçãæžããã¬ã¹ãã³ã¹æéãæ¹åããããšãå¯èœã§ãã
æåŸã«ããããã¯ã·ã§ã³ç°å¢ã«ãããŠã¯ãJVMã®ãã¥ãŒãã³ã°ãèŠéããŸãããé©åãªã¡ã¢ãªå²ãåœãŠãšã¬ãŒããŒãžã³ã¬ã¯ã·ã§ã³ã®èšå®ã«ãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã ãŒãºãªå®è¡ãä¿èšŒããŸãããã
5.2 ã¯ã©ãŠããµãŒãã¹ãžã®ãããã€
ã¯ã©ãŠããµãŒãã¹ãžã®ãããã€ã¯ãPlay Frameworkãçšããã¢ããªã±ãŒã·ã§ã³ã®å¯çšæ§ãšæ¡åŒµæ§ãé«ããŸããAWSãAzureãGoogle Cloud Platformãªã©ã®ã¯ã©ãŠããããã€ããŒã¯ãæ軜ã«ã°ããŒãã«ãªé ä¿¡ãå¯èœãªã€ã³ãã©ãæäŸããŠããŸãã
ã¯ã©ãŠããžãããã€ããéã«ã¯ãç°å¢å€æ°ã®ç®¡çãã»ãã¥ãªãã£èšå®ãªã©ãé©åã«è¡ãããšãéèŠã§ãããŸããCI/CDãã€ãã©ã€ã³ãå°å ¥ããããšã«ãããèªåçãªãã¹ãããã«ãããããã€ãå¯èœãšãªããéçºããã»ã¹ãå¹çåããããšãã§ããŸãã
ããã«ãã¯ã©ãŠãã€ã³ãã©ã®äœ¿çšã¯è²»çšå¯Ÿå¹æã«ãé æ ®ãå¿ èŠã§ãããªãœãŒã¹ã®ç£èŠãè¡ãã䜿çšç¶æ³ã«å¿ããã¹ã±ãŒãªã³ã°èšå®ãé©çšããŠãã³ã¹ããæå¶ãã€ã€ãå¿ èŠãªããã©ãŒãã³ã¹ã確ä¿ããŸãããã
5.3 ãã®ã³ã°ãšç£èŠ
ã¢ããªã±ãŒã·ã§ã³ã®å¥å šæ§ãç¶æããããã«ã¯ããã®ã³ã°ãšç£èŠãæ¬ ãããŸãããç¹ã«ãšã©ãŒãã°ã¯éçºè ã«ãšã£ãŠæçšãªæ å ±ãæäŸããåé¡è§£æ±ºã®æããããšãªããŸãã
Play Frameworkã«ã¯ãã®ã³ã°ãç°¡åã«èšå®ã§ããæ©èœããããŸãããã°ã¬ãã«ã®èª¿æŽããå€éšã®ãã°ç®¡çã·ã¹ãã ãšã®çµ±åãè¡ãããšã§ãããå¹ççãªãã°ç®¡çãå®çŸããããšãå¯èœã§ãã
ç£èŠã«é¢ããŠã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ããªã¯ã¹ããªã¢ã«ã¿ã€ã ã§ææ¡ããç°åžžããã£ãå Žåã«ã¯è¿ éã«å¯Ÿå¿ã§ããããã«ããå¿ èŠããããŸããããŒã«ã䜿çšããŠã·ã¹ãã ã®ãªãœãŒã¹å©çšç¶æ³ãã¬ã¹ãã³ã¹æéãç£èŠãã皌åç¶æ ãææ¡ããŠããããšã倧åã§ãã
5.4 ã¹ã±ãŒã©ããªãã£ã®ç®¡ç
ã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ã管çããããšã¯ãæ¥æ¿ãªãã©ãã£ãã¯ã®å¢å ãè² è·ã®å€åã«æè»ã«å¯Ÿå¿ããããã«éèŠã§ããPlay Frameworkã䜿çšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¹ã±ãŒã«ã¢ããïŒåçŽã¹ã±ãŒã©ããªãã£ïŒãšã¹ã±ãŒã«ã¢ãŠãïŒæ°Žå¹³ã¹ã±ãŒã©ããªãã£ïŒã®ã©ã¡ãã®æŠç¥ãå©çšå¯èœã§ãã
èªåã¹ã±ãŒãªã³ã°æ©èœãããã¯ã©ãŠããµãŒãã¹ã掻çšããããšã§ããã©ãã£ãã¯ã®å¢æžã«å¿ããŠã€ã³ã¹ã¿ã³ã¹ãèªåçã«èª¿æŽã§ããŸããããã«ãããéèŠã«åãããŠå¹ççã«ãªãœãŒã¹ãé©çšããããã©ãŒãã³ã¹ãä¿ã¡ãªããã³ã¹ãã管çããããšãã§ããŸãã
ãŸãããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®æ¡çšã«ãããã¢ããªã±ãŒã·ã§ã³ã®åã³ã³ããŒãã³ããç¬ç«ããŠã¹ã±ãŒã«ããããšãäžã€ã®æ¹æ³ã§ããèŠæ±ã«å¿ããŠåã ã®ãµãŒãã¹ãç¬ç«ããŠæ¡åŒµã»çž®å°ããããšã«ãããã·ã¹ãã å šäœã®æè»æ§ãšå¹çãæ倧åã§ããŸãã
6. Play Frameworkã䜿çšããéçºã®ãã¹ããã©ã¯ãã£ã¹
6.1 ãããžã§ã¯ãã®æ§é ãšåœåèŠå
Play Frameworkã§éçºããéãæŽã£ããããžã§ã¯ãã®æ§é ã¯ã¡ã³ããã³ã¹ãããŒã éã®ååã容æã«ããŸãããããžã§ã¯ãã®ãã£ã¬ã¯ããªæ§é ã¯æ確ã«æŽçãããåãããããåœåèŠåã«åŸãã¹ãã§ããäŸãã°ããcontrollersããmodelsããviewsããšããåºç€çãªã³ã³ããŒãã³ãã¯é©åãªãã©ã«ãå ã§ç®¡çãã圹å²ã«å¿ããŠããã«ãµãã«ããŽãªã«åããããšãæšå¥šãããŸãã
ãŸããã¯ã©ã¹ãã¡ãœããã®åœåã«ãããŠãããã®æ©èœãç°¡æœã«è¡šãååãã€ããããšãèå¿ã§ããåœåã¯äžè²«æ§ããã£ãŠãããæ°ããã¡ã³ããŒããããžã§ã¯ãã«åå ããéã«ãç解ããããããå¿ãããŸããããååãããã®ã³ã³ããŒãã³ãã®è²¬åãèªã¿åããããã«ããããšã¯ãå¹ççãªããŒã ã¯ãŒã¯ã«ç¹ãããŸãã
ãã¡ã€ã«æ§é ãåœåèŠåã¯ãããã¥ã¡ã³ãåããŠãããžã§ã¯ãåå è å šå¡ãã¢ã¯ã»ã¹ã§ããããã«ããŠããããšãäžã€ã®ãã¹ããã©ã¯ãã£ã¹ã§ããããã«ãããæ°ããªéçºè ãåãåºæºã«æ²¿ã£ãã³ãŒãã®æžãæ¹ã容æã«åŠã¹ãããã«ãªããŸãã
6.2 ãã¹ãé§åéçº(TDD)ãšPlay
ãã¹ãé§åéçºã¯ãå質ã®é«ããœãããŠã§ã¢ãæ§ç¯ããããã®éèŠãªã¢ãããŒãã§ããPlay Frameworkã掻çšããŠããéããTDDãå°å ¥ããããšã§ãã°ãæ©æã«çºèŠããå ç¢ãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšãå¯èœã§ããPlayã¯ScalaTestãJUnitãªã©ãè€æ°ã®ãã¹ããã¬ãŒã ã¯ãŒã¯ãšçµã¿åãããŠäœ¿çšã§ããæè»æ§ãæã£ãŠããŸãã
ãã¹ãã±ãŒã¹ãæåã«æžãããšã§ãããããŽãŒã«ãšãªããéçºéçšãå°ããŠãããŸããããã¯å®è£ åã«ä»æ§ãæ確ã«ãããšãã芳ç¹ã§ãæçšã§ãã確ãã«åææè³ãšããŠã¯æéãããããŸãããé·æçã«ã¯ãããã°æéã®ççž®ã«ã€ãªãããéçºãµã€ã¯ã«å šäœã®ã³ã¹ããåæžã§ããŸãã
Play Frameworkã®ç°å¢ã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ïŒCIïŒããããã€ã¡ã³ãã®èªååã®ããã«ããã¹ãã䜿çšã§ããããã«ãªã£ãŠããŸããéçºè ã¯ãã³ãŒããã³ããããããã³ã«ãã¹ããèªåçã«å®è¡ããåé¡ãçºçããåã«ããããæããããšãã§ããŸãã
6.3 ã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšå質ä¿èšŒ
ãªãã¡ã¯ã¿ãªã³ã°ã¯ãã³ãŒãã®å質ãç¶æãããã¯åäžãããéçšã§ããç¹ã«Play Frameworkã®ãããªã¢ãã³ãªãã¬ãŒã ã¯ãŒã¯ã䜿çšããå Žåãå€ãå®è·µæ¹æ³ãéå¹çãªã³ãŒãããæ°ãããã©ãã€ã ãžãšç§»è¡ãããªãã¡ã¯ã¿ãªã³ã°ã¯äžå¯æ¬ ã§ããã³ãŒãã®èªã¿ããããšã¡ã³ããã³ã¹ã容æã«ãªããããå®æçã«ãªãã¡ã¯ã¿ãªã³ã°ãè¡ãããšãæšå¥šãããŸãã
å質ä¿èšŒã®ããã«ã¯ãéçã³ãŒã解æããŒã«ã䜿çšããŠã³ãŒãã£ã³ã°åºæºã«æºæ ããŠããããšã確èªããããšãéèŠã§ããäŸãã°ãPlay Frameworkã§ããç¥ãããŠããããŒã«ã«ã¯’Scalastyle’ã’SBT’ããããŸãããããã®ããŒã«ã¯ãããžã§ã¯ãã®å質ãäžå®ã®åºæºã«ä¿ã¡ã倧ããªãšã©ãŒãæªç¶ã«é²ãã®ã«åœ¹ç«ã¡ãŸãã
ãŸããã³ãŒãã¬ãã¥ãŒã¯ä»ã®éçºè ããªãã¡ã¯ã¿ãªã³ã°ãããã³ãŒãã粟æ»ãããã®æå¹æ§ã確ãããããã®ããã»ã¹ã§ããããã¯å質ä¿èšŒã ãã§ãªããããŒã å ã®ç¥èå ±æãä¿é²ããæ©äŒã«ããªããŸããå¹æçãªã³ãŒãã¬ãã¥ãŒã¯ãäžè²«æ§ã®ããé«å質ãªã³ãŒãããŒã¹ã®ä¿å®ã«ç¹ãããŸãã
6.4 ã³ãã¥ããã£ãŒãšãªãœãŒã¹
Play Frameworkã®éçºè ã«ãšã£ãŠã³ãã¥ããã£ãŒã¯ãåŠç¿ãšãµããŒãã®æºã§ããçåãåé¡ãçãããšãã«ã¯ããªã³ã©ã€ã³ãã©ãŒã©ã ããã£ããã°ã«ãŒãã掻çšããŠãä»ã®éçºè ãšçµéšãå ±æããããšãæçšã§ããPlayã®å ¬åŒã³ãã¥ããã£ããŒãžãStack OverflowãGitHubãªã©ãè€æ°ã®ãã©ãããã©ãŒã ã掻çºãªæ å ±äº€æã®å Žãšãªã£ãŠããŸãã
ããã«ãPlay Frameworkã«é¢ããŠã¯å€æ°ã®ãã¥ãŒããªã¢ã«ãšããã¥ã¡ã³ããå ¬éãããŠããããããã¯ååŠè ããäžçŽè ãŸã§å¹ åºã察å¿ããŠããŸããå ¬åŒããã¥ã¡ã³ãã¯éåžžã«å å®ããŠãããæ°ãããªãªãŒã¹å 容ãæ©èœã䜿çšæ¹æ³ãªã©ãéææŽæ°ãããŠããŸããäžçŽè 以äžã«ãšã£ãŠã¯ãããé«åºŠãªãã¯ããã¯ãã¢ãŒããã¯ãã£ã¹ã¿ã€ã«ãåŠã¶ããã®å°éæžãåžå Žã«åºåã£ãŠããŸãã
çµå±ã®ãšãããPlay Frameworkã¯ãã®ã³ãã¥ããã£ãŒãšå©çšå¯èœãªãªãœãŒã¹ã®å å®ãã«ãã£ãŠãéçºè ã®åŠã³ãšæé·ãæ¯æŽããŠããŸããæ°ããããšãåŠã³ç¶ããä»ã®éçºè ãšã®ç¹ãããç¶æããããšã¯ãæè¡ã®è¿ éãªé²åã«ãããŠèªèº«ã®ã¹ãã«ãææ°ã®ç¶æ ã«ä¿ã€éµãšãªãã§ãããã