CI/CD ãã€ãã©ã€ã³ (ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çãããã€ã¡ã³ã ãã€ãã©ã€ã³) ã¯ããœãããŠã§ã¢éçºã®éèŠãªæ®µéãèªååããå¹çãäžè²«æ§ãè¿ éãªé ä¿¡ãåäžããããæŽç·Žãããäœç³»çãªããã»ã¹ã§ãã CI/CD ã®ã³ã³ããã¹ãã§ã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã¯ãå°ããªå¢å倿ŽãŸãã¯éçºäœæ¥ãäžè²«ããŠå ±æãªããžããªã«ããŒãžããŠç«¶åã®å¯èœæ§ãç¹å®ããå®è·µãæããŸããäžæ¹ãç¶ç¶çãããã€ã¡ã³ãã¯ãå質ãã¹ãæžã¿ã§æ¬çªç°å¢ã«å¯Ÿå¿ãããªãªãŒã¹ã®èªååã«çŠç¹ãåœãŠãŠããŸããã¢ããªã±ãŒã·ã§ã³ã CI/CD ãã€ãã©ã€ã³ã䜿çšãããšãéçºè ã¯ãœãããŠã§ã¢ ã¢ããªã±ãŒã·ã§ã³ãè¿ éãã€ç¢ºå®ã«æ§ç¯ããã¹ããå±éã§ãããããäŒæ¥ã¯åžå Žã®å€åã«é©å¿ãã顧客ã®èŠä»¶ãæºãããçæéã§é«å質ã®è£œåãæäŸã§ããããã«ãªããŸãã
CI/CD ãã€ãã©ã€ã³ã¯ããã€ãã®ã¹ããŒãžã§æ§æãããŠãããåã¹ããŒãžã¯ãœãããŠã§ã¢ã®å質ãåäžãããéçºããã»ã¹ãè¿ éåããããã«èšèšãããŠããŸãããããã®æ®µéã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ããã¹ããå±éãç£èŠããã£ãŒãããã¯ãå«ãŸããŸãããã«ã段éã§ã¯ãéçºè ã¯ã³ãŒããäœæããGit ã SVN ãªã©ã®å ±æãªããžããªã«å€æŽãã³ãããããŸãã CI ãµãŒããŒã¯ãããã®å€æŽãæ€åºããæŽæ°ãããã³ãŒã ãªããžããªãååŸãããœãŒã¹ ã³ãŒããå®è¡å¯èœãªã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãã€ããªã«ã³ã³ãã€ã«ããŠããã€ãã©ã€ã³ã®æ¬¡ã®æ®µéã§äœ¿çšã§ããã¢ãŒãã£ãã¡ã¯ããçæããŸããæ³šç®ãã¹ã CI ããŒã«ã«ã¯ãJenkinsãGitlab CIãCircleCI ãªã©ããããŸãã
ãã«ã段éã«ç¶ããŠããã€ãã©ã€ã³ã¯ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠäžé£ã®èªåãã¹ããå®è¡ããã³ãŒãã®å質ãšä¿å®æ§ã確ä¿ããŸãããã¹ãã¯åäœãã¹ããçµ±åãã¹ããã·ã¹ãã ãã¹ããåãå ¥ããã¹ããªã©ã®ããŸããŸãªã¬ãã«ã§è¡ãããæ©èœäžã®æ¬ é¥ãããã©ãŒãã³ã¹ã®ããã«ããã¯ãã»ãã¥ãªãã£ã®è匱æ§ããŠãŒã¶ããªãã£ã®æžå¿µãªã©ã®æœåšçãªåé¡ã«å¯ŸåŠããŸããäžè¬çãªãã¹ã ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãJUnitãSeleniumãXCTest ãªã©ãå«ãŸããŸããéèŠãªç¹ã¯ãéçºé床ã®å¶çŽã«ãªããã«ãœãããŠã§ã¢ã®å質ãä¿èšŒãã广çãªãã¹ã ã¹ã€ãŒããç¶æããããšã«ãããŸãã
ãã¹ããæåãããšãã¢ããªã±ãŒã·ã§ã³ã¯ãããã€ããããã€ãã©ã€ã³ã«ãã£ãŠã¹ããŒãžã³ã°ç°å¢ãå®çšŒååç°å¢ãå®çšŒåç°å¢ãªã©ã®è€æ°ã®ç°å¢éã§ã¢ããªã±ãŒã·ã§ã³ãç§»åãããŸãããã®ããã»ã¹ã«ããããœãããŠã§ã¢ãçµç¹ã®ã€ã³ãã©ã¹ãã©ã¯ãã£èŠä»¶ãšæ§æã«ç¢ºå®ã«æºæ ããå°å ¥é¢é£ã®ãªã¹ã¯ã軜æžãããå®çšŒåç°å¢ã§ã®å©çšã®æºåãæŽã£ãŠãããã©ãããæ€èšŒãããŸãããããã€ã¡ã³ã段éã«ã¯ãAnsibleãPuppetãmacOS ãªã©ã®æ§æç®¡çããŒã«ãçµã¿èŸŒãŸããŠãããããŸããŸãªãã©ãããã©ãŒã ãç°å¢ã«ãããã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ããèªååããã³ç®¡çããŸãã
ãããã€ãå®äºãããšãã¢ããªã±ãŒã·ã§ã³ã¯ç£èŠãšãã£ãŒãããã¯ã®æ®µéã«å ¥ããŸããããã§ã¯ãPrometheusãGrafanaãNew Relic ãªã©ã®ããŒã«ãéèŠãªããã©ãŒãã³ã¹ ã¡ããªã¯ã¹ãåéããç°åžžãæ€åºããã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ã䜿ãããããå¯çšæ§ãåäžãããããã®è²ŽéãªæŽå¯ãæäŸããŸãããã®æ å ±ã«ãããéçºããŒã ã¯ããŒã¿ã«åºã¥ããæææ±ºå®ãè¡ããé¡§å®¢ã®æžå¿µã«å¯ŸåŠããå°æ¥ã®æ©èœåŒ·åã«åªå é äœãä»ããããšãã§ããŸãã
CI/CD ãã€ãã©ã€ã³å®è£ ã®äŸãšããŠã¯ãããã¯ãšã³ããWebãããã³ã¢ãã€ã« ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®åŒ·åãªno-codeãã©ãããã©ãŒã ã§ããAppMasterãã©ãããã©ãŒã ããããŸãã AppMasterãŠãŒã¶ãŒãããŒã¿ ã¢ãã«ãããžãã¹ ããžãã¯ãREST APIãããã³ WSS endpointsèŠèŠçã«äœæã§ããããã«ããããšã§ãã·ãŒã ã¬ã¹ã§å¹çç㪠CI/CD ãã€ãã©ã€ã³ãæäŸããŸããããã«ã顧客ã¯ã·ã³ãã«ãªdrag-and-dropã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠå¿çæ§ã®é«ã UI ãèšèšããã¢ããªã±ãŒã·ã§ã³ ããžãã¯ãå®åŒåããå®çšŒåã°ã¬ãŒãã®ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ ã³ãŒããçæã§ããŸãã AppMaster ãçæããããœãŒã¹ ã³ãŒããèªåçã«ã³ã³ãã€ã«ããã¹ããããã±ãŒãžåããDocker ã³ã³ãããŒã«ãããã€ããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®éçºãé ä¿¡ãã¡ã³ããã³ã¹ãå€§å¹ ã«å éããŸãã
éçºããã»ã¹ã« CI/CD ãã€ãã©ã€ã³ãæ¡çšãããšããœãããŠã§ã¢ ãããžã§ã¯ãã®å質ãé床ãæè»æ§ãå€§å¹ ã«åäžããŸããããã«ãããããŒã ã¯æ°ãã倿Žãã·ãŒã ã¬ã¹ã«çµ±åããæœåšçãªåé¡ãæ©æã«äºæž¬ããããŸããŸãªç°å¢ã«ã¢ããªã±ãŒã·ã§ã³ãç°¡åã«å°å ¥ã§ããããã«ãªããŸãã CI/CD ãã€ãã©ã€ã³ãéããŠéèŠãªéçºæ®µéãèªååããããšã§ãçµç¹ã¯ã³ã¹ãã®åæžãæéã®ççž®ãç¶ç¶çãªã€ãããŒã·ã§ã³ã®ç¹ã§å€å€§ãªã¡ãªãããåŸãããšãã§ããæçµçã«ã¯ããŒã¹ãéããæ¥éã«é²åãããã¯ãããžãŒç°å¢ã«ãããŠç«¶äºåãåŸãããšãã§ããŸãã