ã³ãŒã¹ããã®å²ãåœãŠã®äŸïŒ
ãã®èšäºã§ã¯ãStepicã®æ°ããã¿ã€ãã®å²ãåœãŠã®åºç€ã圢æãããããžã§ã¯ãã«ã€ããŠã話ããããšæããŸãã ãŸããã·ã¹ãã ã®æ§æèŠçŽ ãã³ã³ããŒãã³ãã®çžäºäœçšããªã¢ãŒããµãŒããŒã®äœææ¹æ³ãšå ŽæãWeb端æ«ãšèªåæ€èšŒã·ã¹ãã ã®åäœã«ã€ããŠã説æããŸãã
ã²ããã
ç§ã¯ãä»äºãæ¢ããšãã«ãå±¥æŽæžãæžããããITäŒæ¥ã«äœåãã®åæ©ä»ãã®æçŽãæžãããããŠãHRã¹ãã·ã£ãªã¹ãã®ãã£ã«ã¿ãŒãçªç Žããæçµçã«åœŒãããã®é¢æ¥ãžã®å€§äºãªæåŸ ç¶ãåãåãããšã奜ãŸãªã人ã®1人ã§ãã ãã£ãšèªç¶ã«ãããªãèªèº«ã«ã€ããŠç§°è³ã«å€ããèšèãæžã代ããã«ãæ¥åžžã®åé¡ã解決ããããšã§ããªãã®æ¬åœã®çµéšãšã¹ãã«ã瀺ããŠãã ããã
2012幎ãMatmekh SPbUã®åŠçã ã£ãé ãåŸã«HackerRankãããžã§ã¯ãã«çºå±ããInterviewStreetãããžã§ã¯ãã«è§ŠçºãããŸããã ITäŒæ¥ããªã³ã©ã€ã³ããã°ã©ãã³ã°ã®ã³ã³ãã¹ããå®æœã§ãããã©ãããã©ãŒã ãéçºããŸããã ãã®ãããªç«¶äºã®çµæã«åºã¥ããŠãäŒæ¥ã¯æé«ã®åå è ãé¢æ¥ã«æåŸ ããŸãã æ¡çšã«å ããŠãHackerRankãããžã§ã¯ãã®ç®æšã¯ãã¢ã«ãŽãªãºã çè«ã人工ç¥èœãæ©æ¢°åŠç¿ãªã©ãã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã®ããŸããŸãªåéã®åé¡ã解決ããããšã§ã誰ã§ãããã°ã©ãã³ã°ã¹ãã«ãéçºã§ãããµã€ããäœæããããšã§ããã ãã§ã«ããã°ã©ããŒã®ããã®ç«¶äºãè¡ãããä»ã®å€ãã®ãã©ãããã©ãŒã ããããŸããã CodecademyãCode Schoolãªã©ã®ã€ã³ã¿ã©ã¯ãã£ããªãªã³ã©ã€ã³ããã°ã©ãã³ã°åŠç¿ãã©ãããã©ãŒã ã¯ãç©æ¥µçã«äººæ°ãéããŠããŸãã ãã®æãŸã§ã«ãLinuxã·ã¹ãã 管çè ãšããŠã®ååãªçµéšããããã·ã¹ãã ãšã³ãžãã¢ã®æ¡çšãLinux管çã³ã³ãã¹ãã®ãã¹ããããã³ãã®åéã®å®éã®åé¡ã解決ããã·ã¹ãã 管çã®ãã¬ãŒãã³ã°ã®ããã®ãªãœãŒã¹ãç°¡çŽ åããããã®åæ§ã®ãªãœãŒã¹ãæ¢ããŠããŸããã
åæ§ã®ãããžã§ã¯ãã培åºçã«æ€çŽ¢ããçµæããšãžã³ãã©å€§åŠã§åŠè¡ç®çã®ããã«èšèšãããLinuxZooã®ã¿ãèŠã€ãããŸããã ãã€ãã¢ïŒãšãžã³ãã©ãã€ãã¢å€§åŠïŒã ãŸããã®ã«ãã«ããè³Œå ¥åŸã«ãã§ã«æŸæ£ããããéåžžã«æåããéå¿çãªCoderloopãããžã§ã¯ãã®ããã¢ãŒã·ã§ã³ãããªã«ç®ãçããŸããã ãã®ãããªã§ã¯ãç§ã倢èŠãŠãããã®ãæ£ç¢ºã«èŠãŸããã æ®å¿µãªãããã·ã¹ãã 管çã«é¢ããã€ã³ã¿ã©ã¯ãã£ããªæŒç¿ãäœæããããã«Coderloopãéçºãããã¯ãããžãŒã¯ãªãªãŒã¹ãããŠããŸããã Coderloopãããžã§ã¯ãã®åµèšè ã®äžäººãšã®ããåãã®éã«ãç§ã¯å€ãã®èŠªåãªèšèãåãåãããã®ã¢ã€ãã¢ã®éçºãšãããªãçºå±ãæã¿ãŸããã ç§ã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ã«ã¯éçããããŸããã§ããã ããã§ãç§ã¯Root'n'Rollãã©ãããã©ãŒã ã®éçºãéå§ããã»ãšãã©ãã¹ãŠã®æãªæéã«ãããè²»ããå§ããŸããã
ã«ãŒãã³ããŒã«ã®ç®æš
ãã®ãããžã§ã¯ãã®äž»ãªç®æšã¯ããã¬ãŒãã³ã°ãã³ã³ãã¹ãã®å®æœãã·ã¹ãã ãšã³ãžãã¢ã®åéã®ããã®ç¹å®ã®ãªãœãŒã¹ãäœæããããšã§ã¯ãªãããããã®åéã®ãããããæ§ç¯ããã³éçºããããã®åºæ¬çãªæè¡ãã©ãããã©ãŒã ãäœæããããšã§ããã
åºæ¬ãã©ãããã©ãŒã ã®äž»èŠãªèŠä»¶ã¯æ¬¡ã®ãšããã§ãã
- æå°éã®Linuxã·ã¹ãã ã§å¯èœãªéãè¿ éãã€å®äŸ¡ã«æ°çŸãŸãã¯æ°åã®ä»®æ³ãã·ã³ãå®è¡ã§ããããã«ããããšãããã¯ãã«ãŒãæš©éãæã€ãŠãŒã¶ãŒã«ãã£ãŠå®å šã«ç Žæããå¯èœæ§ããããŸãã å®äŸ¡ãšã¯ãä»®æ³ãã·ã³ããšã«æ¶è²»ãããã·ã¹ãã ãªãœãŒã¹ã®éãæå°éã«æããããšãæå³ããŸãã å®è³ªçãªäºç®ããªãããšã¯ãã1ã€ã®ä»®æ³ãã·ã³ã=ã1ã€ã®ã¯ã©ãŠãã€ã³ã¹ã¿ã³ã¹ãã®ååã«åºã¥ããŠãAmazon EC2ãRackspaceãªã©ã®ã¯ã©ãŠããã¹ãã£ã³ã°ã®äœ¿çšãæåŠããããšãæå³ããŸãã
- ãã©ãŠã¶ãŠã£ã³ããŠã§Webã¿ãŒããã«ãä»ããŠä»®æ³ãã·ã³ãçŽæ¥æäœã§ããŸãã ããã«ã¯å€éšããã°ã©ã ã¯äžèŠã§ãWebãã©ãŠã¶ã®ã¿ãå¿ èŠã§ãã
- æåŸã«ãä»®æ³ãã·ã³ã®æ§æããã¹ãããããã®ã€ã³ã¿ãŒãã§ãŒã¹ãçšæããŸãã æ§æã®ãã¹ãã«ã¯ããã¡ã€ã«ã·ã¹ãã ã®ç¶æ ã®ç¢ºèªïŒå¿ èŠãªãã¡ã€ã«ããã®å Žæã«ãããã©ãããå 容ãæ£ãããã©ããïŒãããã³ãµãŒãã¹ãšãããã¯ãŒã¯ã¢ã¯ãã£ããã£ã®ç¢ºèªïŒäžéšã®ãµãŒãã¹ãå®è¡ãããŠããããæ£ããæ§æãããŠããããæ£ããå¿çããŠãããïŒã®äž¡æ¹ãå«ããããšãã§ããŸãç¹å®ã®ãããã¯ãŒã¯èŠæ±ãªã©ïŒã
ãããã®èŠä»¶ã¯ãã¹ãŠãããçšåºŠãŸã§ãã§ã«å®è£ ãããŠããŸãã ãŸãæåã«ã
ä»®æ³ãã·ã³ã®èµ·å
ä»®æ³ãã·ã³ãèµ·åããã«ã¯ããŸãä»®æ³åãã¯ãããžãŒã決å®ããå¿ èŠããããŸããã ãã€ããŒãã€ã¶ãŒä»®æ³åã®ãªãã·ã§ã³ïŒããŒããŠã§ã¢ïŒKVMãVMware ESXiïŒããã³æºä»®æ³åïŒXenïŒ-ããã«æ¶ããŸããã ãããã®ã¢ãããŒãã«ã¯ãã·ã¹ãã ãªãœãŒã¹ãç¹ã«ã¡ã¢ãªã«å¯Ÿããããªã倧ããªãªãŒããŒãããããããŸãã ãã·ã³ããšã«ç¬èªã®ã«ãŒãã«ãèµ·åãããããŸããŸãªOSãµãã·ã¹ãã ãèµ·åããŸãã ãã®ã¿ã€ãã®ä»®æ³åã«ã¯ãå°çšã®ç©çãµãŒããŒãå¿ èŠã§ããããã«ãéåžžã«åªããããŒããŠã§ã¢ãåããæ°çŸå°ã®ä»®æ³ãã·ã³ãå®è¡ããããšããèŠæããããŸãã æ確ã«ããããã«ãLinuxZooãããžã§ã¯ãã§äœ¿çšããããµãŒããŒã€ã³ãã©ã¹ãã©ã¯ãã£ã®æè¡ä»æ§ã確èªã§ããŸãã
ããã«ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã¬ãã«ã®ä»®æ³åã·ã¹ãã ïŒOpenVZããã³Linux ContainersïŒLXCïŒïŒã«çŠç¹ãåœãŠãããŸããã ã³ã³ããä»®æ³åã¯ãéé¢ãããchrootç°å¢ã§ããã»ã¹ãå®è¡ããããšãšéåžžã«å€§ãŸãã«æ¯èŒã§ããŸãã ãããå«ãããŸããŸãªä»®æ³åã·ã¹ãã ã®æ¯èŒãšæè¡çç¹æ§ã«ã€ããŠããã§ã«å€æ°ã®èšäºãå·çãããŠãããããå®è£ ã®è©³çŽ°ã«ãšã©ãŸããŸããã ãã¹ãŠã®ã³ã³ããããã¹ãã·ã¹ãã ã®1ã€ã®ã³ã¢ãå ±æãããããã³ã³ããåã«ã¯å®å šä»®æ³åãªã©ã®ãªãŒããŒãããã¯ãããŸããã
ä»®æ³åã®éžæã«éã«åãããã«ãç§ã¯ãªããšããªãŒãã³ãœãŒã¹ã«å ¥ããLXCã³ã³ãããŒãäœæããã³ç®¡çããããã®ããŒã«ãšç°å¢ãæäŸããDockerãããžã§ã¯ãã«ã€ããŠååãä»ããŸããã Dockerãå®è¡ããLXCã³ã³ãããŒïŒä»¥éãDockerã³ã³ãããŒãŸãã¯åã«ã³ã³ãããŒãšåŒã³ãŸãïŒãå®è¡ããããšã¯ãLinuxã§ããã»ã¹ãå®è¡ããããšã«å¹æµããŸãã éåžžã®Linuxããã»ã¹ã®ããã«ãã³ã³ããã¯äºåã«RAMãäºçŽããå¿ èŠã¯ãããŸããã ã¡ã¢ãªãŒã¯äœ¿çšæã«å²ãåœãŠãããã¯ãªã¢ãããŸãã å¿ èŠã«å¿ããŠãã³ã³ããã§äœ¿çšãããã¡ã¢ãªã®æ倧éã«æè»ãªå¶éãèšå®ã§ããŸãã ã³ã³ããã®å€§ããªå©ç¹ã¯ãã¡ã¢ãªããŒãžïŒã³ããŒãªã³ã©ã€ãã¡ã«ããºã ãå ±æããŒãžãå«ãïŒã管çããããã«å ±éã®ãã¹ããµãã·ã¹ãã ã䜿çšããŠã¡ã¢ãªãå¶åŸ¡ããããšã§ãã ããã«ãããã³ã³ããã®å¯åºŠãé«ããããšãã§ããŸããã€ãŸãããã€ããŒãã€ã¶ãŒä»®æ³åã·ã¹ãã ã䜿çšããå Žåãããã¯ããã«å€ãã®linux-machinesã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ã§ããŸãã ããã«ããããµãŒããŒãªãœãŒã¹ã®å¹ççãªå©çšãå®çŸããŸãã Amazon EC2ã¯ã©ãŠãã®ãã€ã¯ãã€ã³ã¹ã¿ã³ã¹ã§ãããå éšã«bashããã»ã¹ãããæ°çŸã®dockerã³ã³ãããŒã®èµ·åãç°¡åã«åŠçã§ããŸãã å¥ã®çŽ æŽãããããŒãã¹ã¯ãã³ã³ãããèµ·åããããã»ã¹ãããªç§ãããããšã§ãã
ãããã£ãŠãäžèŠããã ãã§ãDockerã¯å€æ°ã®ãã·ã³ïŒã³ã³ãããŒïŒãèµ·åããåé¡ãå®äŸ¡ã«è§£æ±ºããŸããããã®ãããæåã®æŠå¿µå®èšŒãœãªã¥ãŒã·ã§ã³ã«ã€ããŠã¯ãããã«å°å¿µããããšã«ããŸããã ã»ãã¥ãªãã£ã®åé¡ã¯å¥ã®è°è«ã«å€ããã®ã§ãä»ã¯çç¥ããŸãããã ãšããã§ãCoderloopã®é£äžã¯ãæŒç¿ã§LXCã³ã³ããã䜿çšããŠä»®æ³ç°å¢ãäœæããŸããã
ã³ã³ãã管ç
Dockerã¯ãã³ã³ãããŒãäœæããã³å®è¡ããããã®ãœãããŠã§ã¢RESTã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãDockerãµãŒãã¹ãå®è¡ãããŠããåããµãŒããŒäžã«ããã³ã³ããã®ã¿ã管çã§ããŸãã
äžæ©å ãèŠããšãæ°Žå¹³æ¹åã«æ¡åŒµã§ããããšãã€ãŸãã1ã€ã®ãµãŒããŒã§ã¯ãªããã¹ãŠã®ã³ã³ãããŒãèµ·åããããããããè€æ°ã®ãµãŒããŒã«åæ£ã§ãããšäŸ¿å©ã§ãã ãããè¡ãã«ã¯ãDockerãã¹ãã®éäžç®¡çãšãè€æ°ã®ãµãŒããŒéã§è² è·ãåæ£ã§ããã¹ã±ãžã¥ãŒã©ãå¿ èŠã§ãã ã¹ã±ãžã¥ãŒã©ãŒãæã€ããšã¯ããµãŒããŒã®ä¿å®äžïŒäŸãã°ãåèµ·åãå¿ èŠãªæŽæ°ã®ã€ã³ã¹ããŒã«äžïŒã«éåžžã«åœ¹ç«ã¡ãŸãã ãã®å ŽåããµãŒããŒã¯ã皌åäžããšããŠããŒã¯ããããã®çµæãæ°ããã³ã³ãããŒã¯äœæãããŸããã
éäžå¶åŸ¡ã·ã¹ãã ã®è¿œå èŠä»¶ã¯ãã³ã³ããã®ãããã¯ãŒã¯èšå®ãšã·ã¹ãã ãªãœãŒã¹ïŒããã»ããµãã¡ã¢ãªããã£ã¹ã¯ïŒã®ã¯ã©ãŒã¿ç®¡çã§ãã ãããããããã®èŠä»¶ã¯ãã¹ãŠãã¯ã©ãŠãïŒ IaaS ïŒã«ãã£ãŠæ£åžžã«è§£æ±ºãããã¿ã¹ã¯ã«ä»ãªããŸããã 2013幎å€ã«ãDockerãOpenStackã¯ã©ãŠããã©ãããã©ãŒã ã«çµ±åããããšã«é¢ããæçš¿ãDockeréçºè ãããªãªãŒã¹ãããŸããã æ°ããnova- dockerãã©ã€ããŒã«ãããopenstackã¯ã©ãŠãã䜿çšããŠãããã«ãŒãã¹ãã®èŠéã管çã§ããŸãïŒã³ã³ãããŒã®èµ·åããããã¯ãŒã¯ã®åŒ·åãã·ã¹ãã ãªãœãŒã¹ã®æ¶è²»ã®ç£èŠãšãã©ã³ã¹-ãŸãã«å¿ èŠãªãã®ïŒ
æ®å¿µãªãããä»æ¥ã§ããnova-dockerãã©ã€ããŒã¯ãŸã ããªãç²éã§ãã å€ãã®å Žåãopenstackã®ææ°ã®å®å®ããŒãžã§ã³ãšããäºææ§ã®ãªãå€æŽããããŸãã ç¬ç«ããå®å®ãããã©ã€ããã©ã³ããåå¥ã«ç¶æããå¿ èŠããããŸãã ãŸããããã©ãŒãã³ã¹ãæ¹åããããã«ããã€ãã®ããããäœæããå¿ èŠããããŸããã ããšãã°ã1ã€ã®Dockerã³ã³ããã®ã¹ããŒã¿ã¹ãååŸããããã«ããã©ã€ããŒã¯å®è¡äžã®ãã¹ãŠã®ã³ã³ããã®ã¹ããŒã¿ã¹ããªã¯ãšã¹ãããŸããïŒNåã®httpãªã¯ãšã¹ããdockerãã¹ãã«éä¿¡ããŸããNã¯ãã¹ãŠã®ã³ã³ããã®æ°ã§ãïŒã æ°çŸã®ã³ã³ãããèµ·åãããå Žåãããã«ãŒãã¹ãã«äžèŠãªè² è·ãäœæãããŸããã
å€å°ã®äžäŸ¿ã¯ãããŸãããç§ã®å Žåãã³ã³ãããªãŒã±ã¹ãã¬ãŒã¿ãŒãšããŠOpenStackãéžæããããšã«ã¯äŸ¡å€ããããŸããä»®æ³ãã·ã³ïŒã³ã³ãããŒïŒãšåäžã®APIãåããã³ã³ãã¥ãŒãã£ã³ã°ãªãœãŒã¹ã®éäžç®¡çã·ã¹ãã ãç»å ŽããŸãã ã åäžã®ã€ã³ã¿ãŒãã§ã€ã¹ã®å€§ããªå©ç¹ã¯ã KVMã«åºã¥ããæ¬æ Œçãªä»®æ³ãã·ã³ã®Root'n'RollãµããŒããè¿œå ããŠãããã©ãããã©ãŒã èªäœã®ã¢ãŒããã¯ãã£ãšã³ãŒããå€§å¹ ã«å€æŽããå¿ èŠããªãããšã§ãã
OpenStackã®æ¬ ç¹ã®ãã¡ããã©ã€ããŒãã¯ã©ãŠãã®å±éãšç®¡çã®ããªãé«ãè€éãã®ã¿ã«æ³šæããããšãã§ããŸãã å°ãåã«ãOpenStackã®åçŽåããã代æ¿æ¡ã§ããVirtkickãããžã§ã¯ããçºè¡šããŸããã éçºãæåããããšã楜ãã¿ã«ããŠããŸãã
Web端æ«ã®éžæ
Root'n'Rollãã©ãããã©ãŒã ã®èŠä»¶ãã³ã³ãã€ã«ããåæ段éã§ããããŸãæåã«èŠããã£ãäž»ãªæ©èœã¯ããã©ãŠã¶ãŒã®Webã¿ãŒããã«ãŠã£ã³ããŠãä»ããŠãªã¢ãŒãLinuxãµãŒããŒãæäœã§ããããšã§ããã éçºãéå§ãããã®ã¯ã¿ãŒããã«ã®éžæããŸãã¯ãã©ãããã©ãŒã ã®æè¡çãœãªã¥ãŒã·ã§ã³ã®ç 究ãšéžæã§ããã Webã¿ãŒããã«ã¯ãã·ã¹ãã å šäœã§ãŠãŒã¶ãŒã®ã»ãšãã©å¯äžã®ãšã³ããªãã€ã³ãã§ãã ããããŸãã«åœŒãæåã«ç®ã«ãããã®ã§ããã圌ãåãçµãã§ãããã®ã§ãã
åœæãWebã¿ãŒããã«ã䜿çšããæ°å°ãªããªã³ã©ã€ã³ãããžã§ã¯ãã®1ã€ã¯PythonAnywhereã§ãã ã 圌ã¯ç§ãå®æçã«èŠãæšæºã«ãªããŸããã çŸåšãã¿ãŒããã«ãèŠãããšãã§ããèšå€§ãªæ°ã®Webãããžã§ã¯ããšã¯ã©ãŠãéçºç°å¢ãç»å ŽããŠããŸãïŒ Koding ã Nitrous ã Codebox ã Runnableãªã©ã
Webã¿ãŒããã«ã¯ã2ã€ã®äž»èŠéšåã§æ§æãããŠããŸãã
- ã¯ã©ã€ã¢ã³ãïŒããŒã¹ãããŒã¯ãã€ã³ã¿ãŒã»ããããŠãµãŒããŒããŒãã«éä¿¡ãããµãŒããŒããŒãããããŒã¿ãåä¿¡ããŠââããŠãŒã¶ãŒã®Webãã©ãŠã¶ãŒã§ã¬ã³ããªã³ã°ããåçãªJavaScriptã¢ããªã±ãŒã·ã§ã³ã
- ãµãŒããŒåŽïŒã¯ã©ã€ã¢ã³ãããããŒã¹ãããŒã¯ã«é¢ããã¡ãã»ãŒãžãåä¿¡ããbashãªã©ã®ç«¯æ«ããã»ã¹ã«é¢é£ä»ããããŠããå¶åŸ¡ç«¯æ«ããã€ã¹ïŒ æ¬äŒŒç«¯æ«ãŸãã¯PTYïŒã«éä¿¡ããWebãµãŒãã¹ã ptyããã€ã¹ããã®çã®ç«¯æ«åºåã¯ãå€æŽãããã«ã¯ã©ã€ã¢ã³ãåŽã«éä¿¡ããããããµãŒããŒåŽã§åŠçãããŸãããã®å Žåãããšãã°HTML圢åŒã§å€ææžã¿ã®ã¯ã©ã€ã¢ã³ãåŽã«è»¢éãããŸãã
Anyterm ã Ajaxterm ã Shellinabox ïŒ PythonAnywhereã§äœ¿çšïŒã Secure Shell ã GateOneãtty.jsãªã©ãå€ãã®ç«¯æ«ãšãã¥ã¬ãŒã¿ãŒãæ€èšãããŸããã æåŸã®2ã€ã¯ãæãæ©èœçã§ç©æ¥µçã«éçºãããŠããããšãå€æããŸããã ããç¡æã®MITã©ã€ã»ã³ã¹ã®äžã§ã®é åžã®ãããéžæã¯tty.jsã«éå®ãããŠããŸããã Tty.jsã¯ãã¯ã©ã€ã¢ã³ãåŽã®ã¿ãŒããã«ãšãã¥ã¬ãŒã¿ãŒã§ãïŒå¶åŸ¡ã·ãŒã±ã³ã¹ãå«ãæªå å·¥ã®ã¿ãŒããã«åºåã¯ãJavaScriptã䜿çšããŠã¯ã©ã€ã¢ã³ãäžã§è§£æãããŸãïŒã
Node.jsã§èšè¿°ãããtty.jsã®ãµãŒããŒåŽã¯å®¹èµŠãªãå£ããPythonã§æžãçŽãããŸããã Socket.IOãã©ã³ã¹ããŒãã¯SockJSã«çœ®ãæããããŸãããåæ§ã®çµéšãPythonAnywhere ããã°ã«ãã§ã«èšèŒãããŠããŸãã
ããã¿ã«ãã®é£è¡
æåŸã«ãRoot'n'Rollãã©ãããã©ãŒã ãšã³ãžã³ã«å°éããŸããã ãã®ãããžã§ã¯ãã¯ã ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã®ååã«åºã¥ããŠæ§ç¯ãããŠããŸãã ã¡ã€ã³ã®ãµãŒããŒåŽéçºèšèªã¯Pythonã§ãã
Root'n'Rollãã©ãããã©ãŒã ãµãŒãã¹æ¥ç¶å³ïŒ
ãã€ã¯ããµãŒãã¹ã¯ãSFãã¬ãã·ãªãŒãºFireflyã®äž»äººå ¬ã«ã¡ãªãã§åœåãããŠããŸãã æ ç»ã®äž»äººå ¬ã¯ããã¿ã«ã¯ã©ã¹ã®ã»ã¬ããã£ææéå®å®è¹ã®ä¹çµå¡ã§ãã è¹äžã®ãã£ã©ã¯ã¿ãŒã®ç®çãšå Žæã¯ã圌ã®ååã«å¯Ÿå¿ãããµãŒãã¹ã®ç®çãšæ©èœãããçšåºŠåæ ããŠããŸãã
Mal-ããã¯ãšã³ãAPI
ãã«ã¯è¹ã®ææè ã§ããè¹é·ã§ãã ç§ãã¡ã®è¹ã§ã¯ãMalã¯ä»ã®ãã¹ãŠã®ãµãŒãã¹ã®äœæ¥ã調æŽããéèŠãªãµãŒãã¹ã§ãã ããã¯ãRoot'n'Rollãã©ãããã©ãŒã ã®ããžãã¹ããžãã¯ãå®è£ ããDjangoã¢ããªã±ãŒã·ã§ã³ã§ãã Malã¯ãã©ã€ããŒãOpenStackã¯ã©ãŠãã®APIã¯ã©ã€ã¢ã³ããšããŠæ©èœãã次ã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã®é«ã¬ãã«ã®RESTã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããŸãã
- ä»®æ³ãã·ã³ïŒã³ã³ããïŒãäœæ/åé€ããŸãã èŠæ±ã¯å€æãããã¯ã©ãŠãã«å§ä»»ãããŸãã
- ã¿ãŒããã«ã®äœæãšã³ã³ãããžã®æ¥ç¶ã
- ãã¹ãã¹ã¯ãªãããå®è¡ããŠãä»®æ³ãã·ã³ã®æ§æã確èªããŸãã èŠæ±ã¯ããã§ãã¯ã·ã¹ãã ã®ãã€ã¯ããµãŒãã¹ã«å§ä»»ãããŸãã
- æ§æãã§ãã¯ã®çµæãååŸããŸãã
- ã¯ã©ã€ã¢ã³ãã®èªèšŒãšããŸããŸãªã¢ã¯ã·ã§ã³ã®æ¿èªã
Kaylee-ã¿ãŒããã«ãã«ããã¬ã¯ãµãŒ
ã±ã€ãªãŒã¯è¹ã®æŽå士ã§ãã KayleeãµãŒãã¹ã¯ãWeb端æ«ããªã¢ãŒãä»®æ³ãã·ã³ãšéä¿¡ããããã»ã¹ã®ãšã³ãžã³ã§ãã ããã¯ãtty.jsã®ãµãŒããŒåŽãå®è£ ããPythonããã³Tornadoã®éåæWebãµãŒããŒã§ãã
äžæ¹ã§ã¯ãtty.jsã®ã¯ã©ã€ã¢ã³ãéšåïŒã¿ãŒããã«ãŠã£ã³ããŠïŒã¯ãSockJSãããã³ã«ãä»ããŠKayleeãšã®æ¥ç¶ã確ç«ããŸãã äžæ¹ãKayleeã¯ãä»®æ³ãã·ã³ã®ç«¯æ«ããã€ã¹ãšã®æ¥ç¶ã確ç«ããŸãã Dockerã³ã³ãããŒã®å Žåãã³ã³ãããŒã§å®è¡ãããŠããããã»ã¹ã®å¶åŸ¡ptyããã€ã¹ãšã®HTTPSãããã³ã«ãä»ããŠæ¥ç¶ã確ç«ãããŸããããã¯éåžžãbashããã»ã¹ã§ãã 次ã«ãKayleeã¯ã確ç«ããã2ã€ã®æ¥ç¶éã§åçŽãªãããã·æ©èœãå®è¡ããŸãã
ã¯ã©ã€ã¢ã³ããèªèšŒããä»®æ³ãã·ã³ã«é¢ããããŒã¿ãååŸããããã«ãKayleeã¯REST APIãä»ããŠMalãšéä¿¡ããŸãã
Zoe-ãã§ãã¯ã·ã¹ãã
ãŸãŒã€-ç¡æ¡ä»¶ã«ä¿¡é Œãããã¹ãŠã«ãããŠãè¹äžã®å©æã Zoeã¯ãä»®æ³ãã·ã³ã®æ§æããã¹ãããèªåæ€èšŒã·ã¹ãã ã§ãã ã»ããªã¿ã¹ã¯ã®åœ¢åŒã®ZoeãµãŒãã¹ã¯ããã¹ãã¹ã¯ãªãããèµ·åããã¿ã¹ã¯ãMalããåãåããŸãã ãã¹ãã®æåŸã«ãREST APIãä»ããŠãã¹ãçµæãMalã«å ±åããŸãã ååãšããŠãZoeã¯ééããèš±ããŸããïŒStepicã®Linuxã³ãŒã¹ã®å€ãã®åå è ã¯ãã§ã«ãããèŠãŠããŸãïŒã
ãã¹ãã¹ã¯ãªããã¯ã py.testãã¹ããã¬ãŒã ã¯ãŒã¯ã䜿çšããŠèšè¿°ãããäžé£ã®ãã¹ããå«ãPythonã¹ã¯ãªããã«ãããŸããã py.testçšã«ç¹å¥ãªãã©ã°ã€ã³ãéçºãããŸãããããã¯ããã¹ãã®å®è¡çµæãåŠçããREST APIãä»ããŠMalã«éä¿¡ããŸãã
Django Webãã¬ãŒã ã¯ãŒã¯ã§ç°¡åãª1ããŒãžã®Webãµã€ããäœæããŠå®è¡ããå¿ èŠãããæŒç¿ã®ã·ããªãªäŸïŒ
import re import requests def test_connection(s): assert s.run('true').succeeded, "Could not connect to server" def test_is_django_installed(s): assert s.run('python -c "import django"').succeeded, "Django is not installed" def test_is_project_created(s): assert s.run('[ -x /home/quiz/llama/manage.py ]').succeeded, "Project is not created" def test_hello_lama(s): try: r = requests.get("http://%s:8080/" % s.ip) except: assert False, "Service is not running" if r.status_code != 200 or not re.match(".*Hello, lama.*", r.text): assert False, "Incorrect response"
ãã¹ã察象ã®ä»®æ³ãã·ã³ã§ã³ãã³ãããªã¢ãŒãã§å®è¡ããããã«ãZoeã¯Fabricã©ã€ãã©ãªã䜿çšããŸãã
ãããã«
ãŸããªãã Stepicãã©ãããã©ãŒã ã§ã¯ããã®èšäºã§èª¬æãããã¹ãŠã®ãã¯ãããžãŒã䜿çšããŠã誰ã§ãLinuxã§äœæ¥ããããã®ç¬èªã®ã³ãŒã¹ãšã€ã³ã¿ã©ã¯ãã£ããªæŒç¿ãäœæã§ããŸãã
次ã®èšäºã§ã¯ã JetBrains EdTechããã«ãœã³ãžã®åå ã®æåãRoot'n'RollãStepicã«çµ±åããæ©èœãšåé¡ã«ã€ããŠèª¬æããŸããå¿ èŠã«å¿ããŠãã«ããŒãããŠãããããã¯ãããã«è©³ãã説æããŸãã