ããã«ã¡ã¯ãHabrïŒ Badoo ã§ã¯PHPèšèªã®ããã©ãŒãã³ã¹ã«ç©æ¥µçã«åãçµãã§ããŸãããã®èšèªã«ã¯ããªã倧ããªã·ã¹ãã ããããããã©ãŒãã³ã¹ã®åé¡ã¯ãéãç¯çŽããããã§ãã 10幎以äžåãç§ãã¡ã¯ãã®PHP-FPMçšã«äœæããŸãããããã¯ãæåã¯PHPã®ãããã»ããã§ããããåŸã«å ¬åŒãã£ã¹ããªãã¥ãŒã·ã§ã³ã«å ¥ããŸããã
è¿å¹ŽãPHPã¯å€§ããªé²æ©ãéããŸãããã¬ããŒãžã³ã¬ã¯ã¿ãŒãæ¹åãããå®å®æ§ã®ã¬ãã«ãæ¹åãããŸãããä»æ¥ãPHPã§æªéãé·åœã®ã¹ã¯ãªãããåé¡ãªãæžãããšãã§ããŸãã ããã«ãããã¹ãã€ã©ã«ã¹ã«ãŠãã¯ããã«å ãžé²ãããšãã§ããŸãããPHP-FPMãšã¯ç°ãªããRoadRunnerã¯ãªã¯ãšã¹ãéã®ã¡ã¢ãªãã¯ãªã¢ããªããããããã©ãŒãã³ã¹ãåäžããŸãïŒãã ãããã®æ¹æ³ã§ã¯éçºããã»ã¹ãè€éã«ãªããŸãïŒã çŸåšããã®ããŒã«ãè©ŠããŠããŸãããå ±æã§ããçµæã¯ãŸã ãããŸããã 圌ããåŸ ã€ã®ããã£ãšæ¥œããã£ãã®ã§ã ã¹ãã€ã©ã«ã¹ã«ãŠãããã®RoadRunnerã®çºè¡šã®ç¿»èš³ãå ¬éããŸãã
ãã®èšäºã®ã¢ãããŒãã¯ç§ãã¡ã«è¿ããã®ã§ããåé¡ã解決ãããšããå€ãã®å ŽåãPHPãšGoã®æã䜿çšããäž¡æ¹ã®èšèªã掻çšããäžæ¹ãæŸæ£ããã«ä»æ¹ãåªå ããŸãã
ã楜ãã¿ãã ããïŒ
éå»10幎éã§ã ãã©ãŒãã¥ã³500äŒæ¥ãšããŠãŒã¶ãŒæ°ã500人以äžã®äŒæ¥åãã®ã¢ããªã±ãŒã·ã§ã³ãäœæããŸããã ãã®éãã£ãšãåœç€Ÿã®ãšã³ãžãã¢ã¯äž»ã«PHPã§ããã¯ãšã³ããéçºããŸããã ããã2幎åãäœãã補åã®ããã©ãŒãã³ã¹ã ãã§ãªãããã®ã¹ã±ãŒã©ããªãã£ã«ã倧ãã圱é¿ããŸãããGolangïŒGoïŒãæè¡ã¹ã¿ãã¯ã«å°å ¥ããŸããã
ããã«ãGoã䜿çšãããšãæ倧40åã®ããã©ãŒãã³ã¹ã§ãã倧ããªã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããšãããããŸããã ããã«ãããPHPã§äœæãããæ¢åã®è£œåãæ¡åŒµããäž¡æ¹ã®èšèªã®å©ç¹ãçµã¿åãããŠè£œåãæ¹åããããšãã§ããŸããã
GoãšPHPã®çµã¿åãããå®éã®éçºåé¡ã®è§£æ±ºã«ã©ã®ããã«åœ¹ç«ã¡ã PHPã®ãæ»ã«ãããŠãããã¢ãã«ã«é¢é£ããåé¡ã®äžéšã軜æžã§ããããŒã«ã«ãªã£ãããšã説æããŸã ã
æ¯æ¥ã®PHPéçºç°å¢
GoãPHPã®ãæ»ã«ãããã¢ãã«ãã©ã®ããã«æŽ»æ°ã¥ããã®ãã説æããåã«ãæšæºã®PHPéçºç°å¢ãèŠãŠã¿ãŸãããã
ã»ãšãã©ã®å Žåãnginx WebãµãŒããŒãšPHP-FPMãµãŒããŒã®çµã¿åããã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åããŸãã 1ã€ç®ã¯éçãã¡ã€ã«ãæäŸããç¹å®ã®ãªã¯ãšã¹ããPHP-FPMã«ãªãã€ã¬ã¯ãããPHP-FPMèªäœãPHPã³ãŒããå®è¡ããŸãã ãããããApacheãšmod_phpããããŸã人æ°ã®ãªããã³ãã«ã䜿çšããŠããã®ã§ãããã ãã ããåäœã¯å°ãç°ãªããŸãããååã¯åãã§ãã
PHP-FPMãã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è¡ããæ¹æ³ãæ€èšããŠãã ããã ãªã¯ãšã¹ããå°çãããšãPHP-FPMã¯åPHPããã»ã¹ãåæåãããªã¯ãšã¹ãã®è©³çŽ°ããã®ç¶æ ã®äžéšïŒ_GETã_POSTã_SERVERãªã©ïŒãšããŠæž¡ããŸãã
PHPã¹ã¯ãªããã®å®è¡äžã«ç¶æ ãå€æŽããããšã¯ã§ããŸããããã®ãããå ¥åããŒã¿ã®æ°ããã»ãããååŸããæ¹æ³ã¯1ã€ãããããŸãããããã»ã¹ã¡ã¢ãªãã¯ãªã¢ããå床åæåããããšã§ãã
ãã®å®è¡ã¢ãã«ã«ã¯å€ãã®å©ç¹ããããŸãã ã¡ã¢ãªã®æ¶è²»ã«ã€ããŠããŸãå¿é ããå¿ èŠã¯ãããŸããããã¹ãŠã®ããã»ã¹ã¯å®å šã«åé¢ãããŠããããã®ãã¡ã®1ã€ãåæ¢ããŠãèªåçã«åäœæãããä»ã®ããã»ã¹ã«ã¯åœ±é¿ããŸããã ãããããã®ã¢ãããŒãã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°ãè©Šã¿ããšãã«çŸããæ¬ ç¹ããããŸãã
éåžžã®PHPç°å¢ã®æ¬ ç¹ãšéå¹çæ§
PHPã§ãããã§ãã·ã§ãã«ãªéçºã«æºãã£ãŠããå Žåããã¬ãŒã ã¯ãŒã¯ãéžæããããšã§ãæ°ãããããžã§ã¯ããã©ãããéå§ããããããããŸãã äŸåæ§æ³šå ¥ãORMã翻蚳ããã³ãã¬ãŒãçšã®ã©ã€ãã©ãªã§ãã ãããŠãã¡ããããã¹ãŠã®ãŠãŒã¶ãŒå ¥åã¯1ã€ã®ãªããžã§ã¯ãïŒSymfony / HttpFoundationãŸãã¯PSR-7ïŒã«äŸ¿å©ã«é 眮ã§ããŸãã ãã¬ãŒã ã¯ãŒã¯ã¯ã¯ãŒã«ã§ãïŒ
ãããããã¹ãŠã«äŸ¡æ ŒããããŸãã ãšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãåçŽãªãŠãŒã¶ãŒãªã¯ãšã¹ããåŠçããããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ãããããã«ã¯ãå°ãªããšãæ°åã®ãã¡ã€ã«ãããŠã³ããŒãããå€æ°ã®ã¯ã©ã¹ãäœæããããã€ãã®æ§æãäœæããå¿ èŠããããŸãã ããããææªã®éšåã¯ãåã¿ã¹ã¯ãå®äºããåŸããã¹ãŠããªã»ããããŠåèµ·åããå¿ èŠãããããšã§ããéå§ããã°ããã®ã³ãŒãã¯åœ¹ã«ç«ããªããªããå¥ã®ãªã¯ãšã¹ããåŠçã§ããªããªããŸãã ä»ã®èšèªã§æžããŠããããã°ã©ããŒã«ããã«ã€ããŠè©±ããšã圌ã®é¡ã«æžæããèŠããŸãã
PHPãšã³ãžãã¢ã¯ãé·å¹Žãé 延èªã¿èŸŒã¿ããã€ã¯ããã¬ãŒã ãæé©åãããã©ã€ãã©ãªããã£ãã·ã¥ãªã©ã®ããèããããæ¹æ³ã䜿çšããŠããã®åé¡ã解決ããæ¹æ³ãæ¢ããŠããŸããã ïŒç¿»èš³è ã®ã¡ã¢ïŒãã®åé¡ã¯ãPHP 7.4ã®ããªããŒãã®åºçŸã«ããéšåçã«è§£æ±ºãããŸãïŒ
PHPã¯ãGoã䜿çšããŠè€æ°ã®èŠæ±ãä¹ãåãããšãã§ããŸããïŒ
ããšãã°ãcronã¿ã¹ã¯ãCSVããŒãµãŒããã¥ãŒãã¬ãŒã«ãŒãªã©ãæ°åïŒæ倧æ°æéãŸãã¯æ°æ¥ïŒããé·ãåç¶ããPHPã¹ã¯ãªãããäœæã§ããŸãã ãããã¯ãã¹ãŠã1ã€ã®ã·ããªãªã«åŸã£ãŠæ©èœããŸããã¿ã¹ã¯ãæœåºããå®äºãã次ã®ã·ããªãªãåŸ ã¡ãŸãã ã³ãŒãã¯åžžã«ã¡ã¢ãªå ã«ããã貎éãªããªç§ãç¯çŽããŸãããã¬ãŒã ã¯ãŒã¯ãšã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããã«ã¯å€ãã®è¿œå æé ãå¿ èŠã«ãªãããã§ãã
ãã ããé·å¯¿åœã®ã¹ã¯ãªããã®éçºã¯ããã»ã©åçŽã§ã¯ãããŸããã ãšã©ãŒãçºçãããšããã»ã¹ãå®å šã«çµäºããã¡ã¢ãªãªãŒã¯ã®èšºæãè ¹ç«ããããªããF5ã䜿çšãããããã°ãã§ããªããªããŸãã
PHP 7ã®ãªãªãŒã¹ã«ããç¶æ³ã¯æ¹åãããŸãããä¿¡é Œã§ããã¬ããŒãžã³ã¬ã¯ã¿ãŒãç»å Žãããšã©ãŒã®åŠçã容æã«ãªããã«ãŒãã«æ¡åŒµæ©èœããªãŒã¯ããä¿è·ãããããã«ãªããŸããã 確ãã«ããšã³ãžãã¢ã¯ã¡ã¢ãªãæ éã«åŠçããã³ãŒãå ã®ç¶æ ã®åé¡ãèŠããå¿ èŠããããŸãïŒããããç¡èŠã§ããèšèªã¯ãããŸããïŒïŒã ããã«ãããããããPHP 7ã§ã¯ãé©ãã¯ã»ãšãã©ãããŸããã
åç¶æéã®é·ãPHPã¹ã¯ãªãããæäœããããã®ã¢ãã«ãæ¡çšããHTTPãªã¯ãšã¹ãã®åŠçãªã©ã®ããäºçŽ°ãªã¿ã¹ã¯ã«åãããŠããã¹ãŠã®ãªã¯ãšã¹ãã§ãã¹ãŠããŒãããããŠã³ããŒãããå¿ èŠããªããããšã¯å¯èœã§ããïŒ
ãã®åé¡ã解決ããã«ã¯ãæåã«HTTPãªã¯ãšã¹ããåãå ¥ããæ¯åPHPã¯ãŒã«ãŒã«æ®ºãããšãªãããããã1ã€ãã€ãªãã€ã¬ã¯ãã§ãããµãŒããŒã¢ããªã±ãŒã·ã§ã³ãå®è£ ããå¿ èŠããããŸããã
çŽç²ãªPHPïŒPHP-PMïŒãŸãã¯Cæ¡åŒµïŒSwooleïŒã䜿çšããŠWebãµãŒããŒãäœæã§ããããšã¯ããã£ãŠããŸããã ãããŠãããããã®æ¹æ³ã«ã¯ã¡ãªããããããŸãããã©ã¡ãã®ãªãã·ã§ã³ãç§ãã¡ã«ã¯åããŠããŸããã§ããã åãªãWebãµãŒããŒä»¥äžã®ãã®ãå¿ èŠã§ãããPHPã®ãããŒãã¹ã¿ãŒããã«é¢é£ããåé¡ããç§ãã¡ãæããœãªã¥ãŒã·ã§ã³ãæã«å ¥ããããšæã£ãŠããŸããã ã€ãŸããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãå¿ èŠã§ããã
Goã¯ãããæ¯æŽã§ããŸããïŒ ãã®èšèªã¯ã¢ããªã±ãŒã·ã§ã³ãåäžã®ãã€ããªãã¡ã€ã«ã«ã³ã³ãã€ã«ããããããããã§ããããšã¯ããã£ãŠããŸããã ã¯ãã¹ãã©ãããã©ãŒã ã§ãã ç¬èªã®éåžžã«ãšã¬ã¬ã³ããªåæå®è¡ã¢ãã«ãšãHTTPãæäœããããã®ã©ã€ãã©ãªã䜿çšããŸãã ãããŠæåŸã«ãäœåãã®ãªãŒãã³ãœãŒã¹ã®ã©ã€ãã©ãªãšçµ±åãå©çšå¯èœã«ãªããŸãã
2ã€ã®ããã°ã©ãã³ã°èšèªã®çµã¿åããã®é£ãã
ãŸãã2ã€ä»¥äžã®ã¢ããªã±ãŒã·ã§ã³ãçžäºã«éä¿¡ããæ¹æ³ã決å®ããå¿ èŠããããŸããã
ããšãã°ã Alex Palaestrasã®åªããã©ã€ãã©ãªã䜿çšããŠãPHPããã³Goããã»ã¹ã«ããã¡ã¢ãªå ±æãå®è£ ããããšãã§ããŸããïŒApacheã®mod_phpãšåæ§ïŒã ãããããã®ã©ã€ãã©ãªã«ã¯ãåé¡ã解決ããããã®äœ¿çšãå¶éããæ©èœããããŸãã
ãœã±ãã/ãã€ãã©ã€ã³ãä»ããŠããã»ã¹éã®çžäºäœçšãæ§ç¯ããããã«ãå¥ã®ããäžè¬çãªã¢ãããŒãã䜿çšããããšã«ããŸããã ãã®ã¢ãããŒãã¯ãéå»æ°å幎ã«ããã£ãŠä¿¡é Œæ§ãå®èšŒãããŠããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã§ååã«æé©åãããŠããŸãã
ãŸããããã»ã¹éã§ããŒã¿ã亀æããäŒéãšã©ãŒãåŠçããããã®åçŽãªãã€ããªãããã³ã«ãäœæããŸããã æãåçŽãªåœ¢åŒã§ã¯ããã®ã¿ã€ãã®ãããã³ã«ã¯ããã±ããã®ã¿ã€ãããµã€ãºãããã³ããŒã¿ã®æŽåæ§ããã§ãã¯ããããã®ãã€ããªãã¹ã¯ã«é¢ããæ å ±ãå«ããåºå®ãµã€ãºã®ãã±ããããã㌠ïŒãã®å Žåã¯17ãã€ãïŒãæã€ãããã¹ããªã³ã°ã«äŒŒãŠããŸãã
PHPåŽã§ã¯packé¢æ°ã䜿çšããGoåŽã§ã¯ãšã³ã³ãŒãã£ã³ã°/ãã€ããªã©ã€ãã©ãªã䜿çšããŸããã
1ã€ã®ãããã³ã«ã§ã¯ååã§ã¯ãªãããã«æãããŸããããŸããPHPããçŽæ¥net / rpc Go-servicesãåŒã³åºãæ©èœãè¿œå ããŸããã åŸã§ãGoã©ã€ãã©ãªãPHPã¢ããªã±ãŒã·ã§ã³ã«ç°¡åã«çµ±åã§ãããããããã¯éçºã«å€§ãã«åœ¹ç«ã¡ãŸããã ãã®äœæ¥ã®çµæã¯ãããšãã°ãä»ã®ãªãŒãã³ãœãŒã¹è£œåGoridgeã§èŠãããšãã§ããŸãã
è€æ°ã®PHPã¯ãŒã«ãŒéã®ã¿ã¹ã¯ã®åæ£
çžäºäœçšã¡ã«ããºã ãå®è£ ããåŸãã¿ã¹ã¯ãPHPããã»ã¹ã«æé©ã«è»¢éããæ¹æ³ã«ã€ããŠèãå§ããŸããã ã¿ã¹ã¯ãå°çãããšãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã¯ç¡æã®ã¯ãŒã«ãŒãéžæããŠã¿ã¹ã¯ãå®äºããå¿ èŠããããŸãã ã¯ãŒã«ãŒ/ããã»ã¹ããšã©ãŒã§çµäºããããæ»äº¡ãããå Žåããããåãé€ãã代ããã«æ°ãããã®ãäœæããŸãã ãããŠãã¯ãŒã«ãŒ/ããã»ã¹ãæ£åžžã«æ©èœããå Žåãã¿ã¹ã¯ãå®äºããããã«å©çšå¯èœãªã¯ãŒã«ãŒã®ããŒã«ã«ãããè¿ããŸãã
ã¢ã¯ãã£ããªã¯ãŒã«ãŒã®ããŒã«ãä¿åããããã«ãããã¡ä»ããã£ãã«ã䜿çšããŸãã;ããŒã«ããäºæãããæ»ãã ãã¯ãŒã«ãŒãåé€ããããã«ããšã©ãŒãšã¯ãŒã«ãŒã®ç¶æ ã远跡ããã¡ã«ããºã ãè¿œå ããŸããã
ãã®çµæããã€ããªåœ¢åŒã§æ瀺ããããªã¯ãšã¹ããåŠçã§ããæ©èœçãªPHPãµãŒããŒãååŸããŸããã
ã¢ããªã±ãŒã·ã§ã³ãWebãµãŒããŒãšããŠåäœãããã«ã¯ãçä¿¡HTTPãªã¯ãšã¹ãã衚瀺ããããã®ä¿¡é Œã§ããPHPæšæºãéžæããå¿ èŠããããŸããã ç§ãã¡ã®ã±ãŒã¹ã§ã¯ãGoããnet / httpãªã¯ãšã¹ããPSR-7圢åŒã«å€æããã ãã§ãçŸåšå©çšå¯èœãªã»ãšãã©ã®PHPãã¬ãŒã ã¯ãŒã¯ãšäºææ§ããããŸãã
PSR-7ã¯äžå€ã§ãããšèŠãªãããããïŒæè¡çã«ã¯äžå€ã§ãããšèšã人ãããŸãïŒãéçºè ã¯ååãšããŠèŠæ±ãã°ããŒãã«ãšã³ãã£ãã£ãšããŠåŠçããªãã¢ããªã±ãŒã·ã§ã³ãäœæããå¿ èŠããããŸãã ããã¯ãé·å¯¿åœã®PHPããã»ã¹ã®æŠå¿µã«ããåããŸãã ãŸã ååãåãåã£ãŠããªãæçµçãªå®è£ ã¯ã次ã®ããã«ãªããŸããã
é«æ§èœPHPã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã§ããRoadRunnerã®çŽ¹ä»
æåã®ãã¹ãã¿ã¹ã¯ã¯APIããã¯ãšã³ãã§ãããããã«ããå®æçã«äºæž¬ã§ããªãèŠæ±ã®ããŒã¹ããçºçããŸããïŒéåžžãããã¯ããã«é »ç¹ã«çºçããŸããïŒã ã»ãšãã©ã®å Žåãååãªnginxæ©èœããããŸããããäºæ³ãããè² è·ã®å¢å ã«å¯ŸããŠã·ã¹ãã ã®ãã©ã³ã¹ãååã«åããªãã£ãããã502ãšã©ãŒãå®æçã«çºçããŸããã
ãã®ãœãªã¥ãŒã·ã§ã³ã眮ãæããããã«ã2018幎ã®åãã«ãæåã®PHP / Goã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãå±éããŸããã ãããŠããã«ä¿¡ããããªãã»ã©ã®å¹æãåŸãŸããïŒ ãšã©ãŒ502ãå®å šã«åãé€ããã ãã§ãªãããµãŒããŒã®æ°ã3åã®2ã«åæžãããšã³ãžãã¢ãšãããã¯ããããŒãžã£ãŒã®é çã®çš®ãå€§å¹ ã«ç¯çŽããŸããã
幎ã®åã°ãŸã§ã«ãç§ãã¡ã¯ãœãªã¥ãŒã·ã§ã³ãæ¹åããMITã©ã€ã»ã³ã¹ã®äžã§GitHubã«å ¬éãã RoadRunnerãšããååãä»ããä¿¡ããããªãã»ã©ã®é床ãšå¹çæ§ã匷調ããŸããã
RoadRunnerãéçºã¹ã¿ãã¯ãæ¹åããæ¹æ³
RoadRunnerã䜿çšãããšãGoåŽã®ããã«ãŠã§ã¢ããã/ httpã䜿çšããŠããªã¯ãšã¹ããPHPã«å°éããåã«JWTæ€èšŒãå®è¡ããWebSocketãåŠçããPrometheusã§ç¶æ ãã°ããŒãã«ã«éçŽããããšãã§ããŸããã
ãã«ãã€ã³RPCã®ãããã§ãæ¡åŒµã©ãããŒãäœæããã«PHPã®Goã©ã€ãã©ãªã®APIãéãããšãã§ããŸãã ããã«éèŠãªããšã¯ãRoadRunnerã¯HTTP以å€ã®æ°ãããµãŒããŒãå±éã§ããããšã§ãã äŸã«ã¯ãPHPã§ã®AWS Lambdaãã³ãã©ãŒã®å®è¡ãå ç¢ãªãã¥ãŒãªãŸã«ããŒã®äœæãããã«ã¢ããªã±ãŒã·ã§ã³ãžã®gRPCã®è¿œå ãå«ãŸããŸãã
PHPããã³Goã³ãã¥ããã£ã®å©ããåããŠããœãªã¥ãŒã·ã§ã³ã®å®å®æ§ãåäžãããäžéšã®ãã¹ãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæ倧40åã«é«ãããããã°ããŒã«ãæ¹åããSymfonyãã¬ãŒã ã¯ãŒã¯ãšã®çµ±åãå®è£ ããHTTPSãHTTP / 2ããã©ã°ã€ã³ãPSR-17ã®ãµããŒããè¿œå ããŸããã
ãããã«
ããã€ãã¯ãWordPressãã©ã°ã€ã³ã®äœæã«ã®ã¿é©ãããé ããŠæ±ãã«ããèšèªãšããŠã®PHPã®æ代é ãã®æŠå¿µã«ãŸã é äºãããŠããŸãã ãããã®äººã ã¯ãPHPã«ã¯ãã®ãããªå¶éããããšããèšãããšãã§ããŸããã¢ããªã±ãŒã·ã§ã³ãååã«å€§ãããªã£ããããããæçãããèšèªãéžæããé·å¹Žã«ããã£ãŠèç©ããã³ãŒãããŒã¹ãæžãæããå¿ èŠããããŸãã
ç§ã¯ããã«ãã¹ãŠçããããšæãïŒããäžåºŠèããªããã ããªãã ããPHPã®å¶éãèšå®ããŠãããšä¿¡ããŠããŸãã ããèšèªããå¥ã®èšèªã«åãæ¿ããŠç涯ãéãããããŒãºãšã®å®ç§ãªçµã¿åãããèŠã€ããããšããããèšèªãããŒã«ãšããŠèªèãå§ããããšãã§ããŸãã PHPã®ãããªèšèªã®æ³åäžã®æ¬ é¥ã¯ãå®éã«ãã®æåã®çç±ã«ãªãåŸãŸãã ãŸããGoãªã©ã®å¥ã®èšèªãšçµã¿åããããšã1ã€ã®èšèªã®äœ¿çšã«å¶éãããŠããå Žåãããã¯ããã«åŒ·åãªè£œåãäœæã§ããŸãã
ããããã®GoãšPHPã§äœæ¥ããåŸãç§ãã¡ã¯ããããæããŠãããšèšããŸãã ç§ãã¡ã¯äžæ¹ãä»æ¹ã«æå©ã«ç ç²ã«ããã€ããã¯ãããŸãã-å察ã«ããã®äºéã¹ã¿ãã¯ããããã«å€ãã®å©çãåŒãåºãæ¹æ³ãæ¢ããŸãã
UPDïŒRoadRunneräœæè ããã³å ã®èšäºã®å ±èè ãžãããã-Lachezis