ææ°ã®ã³ã³ãããã«ãã«ããCI/CDã®åçå
ããã«ã¡ã¯ãDockerã®ã±ãã³ã§ãã ç§ã¯ãã«ãããŒã ã§åããŠããã仿¥ã¯ãã«ãããŒã«ã®ã¿ã䜿çšããCIç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã«ã€ããŠã®ãã¬ãŒã³ããŒã·ã§ã³ã§ãã
æŠèŠ
ãŸãã話ããããã®ã¯ãCI(ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³)ãããã€ããšGitHub Actionsã§ãã ããã¯ç§ãã¡ãæã£ãŠãã人æ°ã®ãããããã€ããŒã§ãããç°¡åãªç޹ä»ãšGitHub Actionsã§ããã«çŠç¹ãåœãŠãããšæããŸãã äž»ãªã³ã³ããŒãã³ãã¯ãç§ãã¡ãæäŸããŠããDockerã¢ã¯ã·ã§ã³ã«é¢ãããã®ã§ã仿¥ãããŒã±ãããã¬ã€ã¹ã«ã¯ãã®ãã¡ã®6ã€ããããŸãã
ãŸããäœæ¥ãéå§ã§ããåºæ¬çãªã¯ãŒã¯ãããŒãèŠãŠã¿ãŸãããã ããã¯åºæ¬çãªæé ã§ããããããã®åºæ¬çãªã¯ãŒã¯ãããŒããã©ã®ããã«é²åã§ãããããŸããã«ããã£ãã·ã¥ã䜿çšããŠæé©åããæ¹æ³ãçè§£ã§ããŸãã ãåç¥ã®ããã«ãDockerã€ã¡ãŒãžã§ã¯è€æ°ã®ãã©ãããã©ãŒã ããµããŒããããŠããŸãã ããã¯æè¿äººæ°ã®ãããã¬ã³ãã§ãããããããŸããŸãªã¢ãŒããã¯ãã£ã«æé©åãããã³ã³ããã€ã¡ãŒãžãäœæããæ¹æ³ã確èªã§ããŸãã ãã®ç« ã«ç¶ããŠããããªã¢ã«ãå ¬éããããããŸãã¯ã¿ã°ãšã©ãã«ã®èªååã䜿çšããŠç»åãå ¬éããããã®ãªã³ã¯ã衚瀺ãããŸãã ãããç§ãã¡ã®å ¬åŒã®è¡åã䜿çšããŠããŸãã
ããã«ç¶ããŠã Bake ã䜿çšããŠã¯ãŒã¯ãããŒãè§£ãæŸã¡ãç°¡çŽ åããæ¹æ³ã«ã€ããŠèª¬æããŸããããããã«ãããŒã«ã§ããããŸã人æ°ã¯ãããŸãããããã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ããã«çŠç¹ãåœãŠãŠãæ°ããå®çŸ©ã䜿çšããŠãã«ããè¡ãå©ç¹ãçè§£ããããšæããŸãã
ãããããããäžã€å°ããªéšåãããã§ãããããæ¬åœã«éèŠãªããšã ãšæããŸãããªããªãã仿¥ãCIã§æªããã¿ãŒã³ã䜿ãããŠãããããããŸããããã·ãŒã¯ã¬ããã¯éèŠãªéšåã§ãããç¬èªã®ç« ã«å€ãããšæããŸãã æåŸã«ãã³ã³ããããŒã¹ã®ã¯ãŒã¯ãããŒã䜿çšããŠãå éšã«ãŒããšCIãããã倧ããªåçæ§ãéæããæ¹æ³ãèŠãŠãããŸãã
GitHub ã¢ã¯ã·ã§ã³
GitHub Actions ãå§ããŸããããGitHub Actionsãšã¯æåã«ã¯ãŒã¯ãããŒèªäœãããã®ã§ãããã§ãã€ãã©ã€ã³ã¯ã€ãã³ããã©ã³ããŒããžã§ããªã©ã§å®çŸ©ãããŸãããã®ä»æ§æžã§ã¯èª¬æããŸãããããã®è¬æŒã§ã¯å€ãã®ã¯ãŒã¯ãããŒã玹ä»ããããããã®ä»çµã¿ãããããçè§£ããŠããã ãããã«èª¬æããŸãã
ãŸããã€ãã³ããéå¬ããŠããŸãã ããã¯ãã¯ãŒã¯ãããŒã®å®è¡ãããªã¬ãŒãããªããžããªäžã®ç¹å®ã®ã¢ã¯ãã£ããã£ã§ãã ããã·ã¥ãã«ãªã¯ãšã¹ãã®ãããªãã®ããããããããŸãã ã¯ãŒã¯ãããŒãã£ã¹ãããã¯ãã¯ãŒã¯ãããŒãæåã§ããªã¬ãŒããããã«äžè¬çã«äœ¿çšããããã®ã§ãã ã©ã³ããŒããããŸãã ã€ãŸããããã¯ãUbuntuã®ææ°ãmacOSã®ææ°ãããã³ã»ã«ããã¹ãã©ã³ããŒ(ããå Žå)ãªã©ã®ã¯ãŒã¯ãããŒãå®è¡ãããµãŒããŒã§ãã ãŸããåã©ã³ããŒã¯äžåºŠã« 1 ã€ã®ãžã§ããå®è¡ã§ããŸãã
ä»äºããããŸãã ããã¯ãã¯ãŒã¯ãããŒå ã§å®è¡ãããäžé£ã®ã¹ãããã§ãããåãã€ã³ã¹ã¿ã³ã¹å ã§å®è¡ãããŸãã ãããŠãã¢ã¯ã·ã§ã³ã¯ãããã¯ãç§ãèšãããã«ãããªããæ§ç¯ã§ããã«ã¹ã¿ã ã¢ããªã±ãŒã·ã§ã³ã§ãã ã³ã³ããã«ããããšããJavaScript ã¢ã¯ã·ã§ã³ã«ããããšããè€åã¢ã¯ã·ã§ã³ã«ããããšãã§ããŸãã ããã¯ãäœãã®ã³ãã³ããå®è¡ããŠããŸãã ãããããã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ãç§ãã¡ãæäŸããŠãããã¹ãŠã®æ¥ç¶ã«ã€ããŠåãäžããã®ã§ããã®ãã¡ã®6ã€ããããŸãã
仿¥ã®æ¥ç¶ã®çŸç¶ãèŠãŠã¿ãŸãããããã€ãã©ã€ã³ã容æã«ããããšèããŠããããã®ããã«ãã¯ãŒã¯ãããŒã«ã·ãŒã ã¬ã¹ã«çµ±åã§ããããã«ããããã® GitHub Actions ãæäŸããŠããŸãããã®äžã§æã人æ°ãããã®ã¯ããããããã«ã-ããã·ã¥-ã¢ã¯ã·ã§ã³ã§ããããããã¯åºæ¬çã«ã€ã¡ãŒãžãããã·ã¥ããŠãã«ãããããšã§ãããã«ãããŒã«ã䜿çšããŠãããããããã¯ãã«ããã©ãããã©ãŒã ãã«ããã·ãŒã¯ã¬ããã®äœ¿çšããã£ãã·ã¥ã®ãšã¯ã¹ããŒããªã©ãå®å šã«ãµããŒããã buildx ãš BuildKit ã§ããBuildKitã®ãããã§ãããŸããŸãªãã«ããŒããããã€ãééãªãã·ã§ã³ã䜿çšããããšãã§ããŸãããã¡ãããããã§ã®ä»ã®è¡åã«ã€ããŠã話ããŸããããšãã°ãã€ã¡ãŒãžãããã·ã¥ã§ããããã«ããããã«ãã°ã€ã³ã¢ã¯ã·ã§ã³ãå¿ èŠã«ãªããªã©ãããã«å€ãã®ãµãã©ã€ãã¢ã¯ã·ã§ã³ããããŸããæåã«ãã°ã€ã³ã¢ã¯ã·ã§ã³ãããªã¬ãŒããŠãããbuild-push-action ã䜿çšããå¿ èŠããããŸãã
ã芧ã®ãšãããactions-toolkitããããŸãã ããã¯ããèªäœãè¡åã§ã¯ãããŸããã ããã¯ããã¹ãŠã®æäœã«äœ¿çšããŠããã©ã€ãã©ãªã«ãããŸããã ããã¯ããã«ãããŒã«ã«é¢ããããã€ãã®ãŠãŒãã£ãªãã£ãšå ±éã®ããžãã¯ãæäŸããŸãã ããã¯ãå¿ èŠã«å¿ããŠäœ¿çšã§ããæå°éã®ã©ãããŒã§ãããç§ãã¡ãããããšå¯Ÿè©±ããã®ã容æã«ããAPIã§ãã ãããŠãã¡ããããã®ããŒã«ãããã¯ã仿¥ã®ç§ãã¡ã®ãã¹ãŠã®è¡åã«ãã£ãŠæ¶è²»ãããŸãã
åºæ¬çãªã¯ãŒã¯ãããŒ
åºæ¬çãªã¯ãŒã¯ãããŒãèŠãŠã¿ãŸãããã ãŸãããã®ã¯ãŒã¯ãããŒã¯ã¯ãŒã¯ãã㌠ãã£ã¹ããã ã€ãã³ãã§ããªã¬ãŒãããŸãã æåã§åŒã³åºãããã ãã§ããªããžããªã«ç§»åããã ãã§æžã¿ãŸãã ãã®ã¯ãŒã¯ãããŒã¯ãç¹å®ã®ã€ãã³ããªãã§æåã§æ§æããããã«ã¯ 2 ã€ã®å ¬åŒã¢ã¯ã·ã§ã³ã䜿çšãããŸãã login-action ãš build-push-action ããããŸãã ãããã£ãŠãlogin-actionã¯Docker Hubã§ããã«ãã°ã€ã³ããŸãã ãã®åŸãbuild-push-action ã䜿çšããŠã€ã¡ãŒãžã«ã¿ã°ãä»ããã€ã¡ãŒãžãããã·ã¥ã§ããŸãã ã ãããããã¯æ¬åœã«ç°¡åã§ãã ç§ã¯åŸã§ãã«ããã©ãããã©ãŒã ã«ã€ããŠè©±ãããã®ã§ããã®ãããªãããžã§ã¯ããæã€ã®ã¯ç°¡åãªã®ã§ãåçŽãªGoãããžã§ã¯ãã䜿çšããŠããŸãã ããã¯åçŽãªWebãµãŒããŒã§ãã ãã®èåŸã«ã¯æŽŸæãªãã®ã¯äœããããŸããã
ãã«ããå®è¡ãã
ãã®ãã«ããå®è¡ããŠã¿ãŸãããã å®éã«ãããå®éã«èŠãããã«ã©ã€ããã¢ãè¡ãããã£ãã®ã§ããããã®ãã¬ãŒã³ããŒã·ã§ã³ã®ã¹ã¯ãªãŒã³ã·ã§ããã«ãªããŸãã ã芧ã®éããçŽ 24 ç§ããããŸããã äœããæ§ç¯ããã®ã¯æªããããŸããããå®éã«ãã£ãã·ã¥ã掻çšãããšãã¯ããã«ããŸãããããšãã§ããŸãã ãããã£ãŠãããã«ãã«ããã°ãèŠããšããã®ã¹ããŒãžããã£ãã·ã¥ãããŠããªãããšãããããŸãã ãã®ã¯ãŒã¯ãããŒãå®è¡ãããã³ã«å®è¡ãããŸãã ãã®ã¹ããŒãžã¯å®è¡ããããã£ãã·ã¥ãããå¶éã¯ãããŸããã ãããã£ãŠãããã«ãã£ãã·ã³ã°ã掻çšã§ããŸãã
ãã£ãã·ã¥ã®æé©å
ãã£ãã·ã¥ã䜿çšããŠã¯ãŒã¯ãããŒãããé©åã«æé©åã§ããŸãã ãŸãããã£ãã·ã¥ããšã¯ã¹ããŒãããããã®ãã£ãã·ã¥å®è£ ã®èгç¹ãããBuildKitãæäŸãããã®ã確èªã§ããŸãã 仿¥ããã«ããããã§å©çšã§ããå€ãã®ããã¯ãšã³ãããããŸãã ãåç¥ã®ããã«ãBuildKitã¯ããã«ããè¡ããšããã«ãçµæãèªåçã«ç¬èªã®å éšãã£ãã·ã¥ã«ãã£ãã·ã¥ããŸãã ããããGitHubã©ã³ããŒãããç¥ã£ãŠããããã«ããã®ãã£ãã·ã¥ã¯ååšãããæ°žç¶åãããŠããŸããã BuildKitã®èãæ¹ã¯ããã«ããã£ãã·ã¥ãå€éšã®å Žæã«ãšã¯ã¹ããŒãããå°æ¥ã®ãã«ãã§ã€ã³ããŒãã§ããããã«ããããšã§ãã ãããã£ãŠãå®è¡ã®éã«ã¯ã次ã®ãã£ãã·ã¥ããã¯ãšã³ããå©çšå¯èœã§ããã仿¥äœ¿çšãããã®ããããŸãã
ããã¯ãGitHub APIã䜿çšããŠããGHA1ãGitHub Action1 ã§ãã åºæ¬çã«ã¯å ¬åŒã®GitHubãã£ãã·ã¥ã¢ã¯ã·ã§ã³ãšåãã§ãã ããã¯åãçš®é¡ã®APIã䜿çšããŠããŸãã ã¯ãŒã¯ãããŒã§ãã®ãã£ãã·ã¥ãæå¹ã«ããã«ã¯ãäžé£ã® buildx ã¢ã¯ã·ã§ã³ã远å ããã ãã§ãã ãã®äžé£ã® buildx ã¢ã¯ã·ã§ã³ã¯ãçŸåšå©çšå¯èœãªãã¹ãŠã® BuildKit æ©èœã掻çšããããã®ã³ã³ãããã«ããŒãäœæããŸãã ãã®ãããDockerãšã³ãžã³å ã«åã蟌ãŸããBuildKitã§ã¯çŸåšå©çšã§ããªãBuildKitã®ææ°ã®ããŒãã«ã䜿çšããŠããŸãã
ããã§ããã£ãã·ã¥åœä»€ãèšå®ããŠãããã®ãã£ãã·ã¥ã䜿çšãããããšèšãããšãã§ããŸãã ãã®ãã£ãã·ã¥ãGHAã«ãšã¯ã¹ããŒãããããã«ããã·ã¥ããŸãã ãã®ãã£ãã·ã¥ã¯ãGitHub Actionsããã¯ãšã³ããããèªã¿åãããšãã§ããŸãã ãããã£ãŠããã®ã³ãŒãããã«ããããšããã®ãã£ãã·ã¥ã¯ãã£ãã·ã¥ã¡ã¿ããŒã¿ãšã¬ã€ã€ãŒã®äž¡æ¹ã GitHub ãã£ãã·ã¥ãµãŒãã¹ã«ä¿åããŸãã ããã¯ãå éšçã«ã¯ Azure Blob ã¹ãã¬ãŒãžã§ãã ãã®äžã圌ãã¯ç¬èªã®APIãæã£ãŠãããããã¯ãã¡ããå ¬åŒã®GitHub Actionsã§äœ¿çšãããŠããã®ãšåãããã¯ãšã³ãã§ãã
ãã®ãããžã§ã¯ãããã«ãããå Žåãæ°ãããªãã·ã§ã³ã§ã©ã®ããã«æ©èœããããèŠãŠã¿ãŸãããã ã芧ã®ãšããããã£ãã·ã¥ãèšå®ããŠãã8ç§ããããããããã¯ã¯ããã«åªããŠããŸãã ãã«ãæéã 67%ç¯çŽããã®ã§ãããã¯ããªãçŽ æŽãããããšã§ãã ãã°ãèŠããšããã«ãã¹ããŒãžããã®åœä»€ããã£ãã·ã¥ãããŠããããšãããããŸãã GitHub ãã£ãã·ã¥ ããã¯ãšã³ããš GitHub Actions ã䜿çšãããšããã® CI ã䜿çšãããšãã«çŸåšäœ¿çšã§ããæãç°¡åãªãªã¢ãŒã ãã£ãã·ã¥ã§ãã å¥ã® CI ãããã€ããŒã䜿çšããŠããå Žåã¯ãããšãã°ãS3 ããã¯ãšã³ããAZ BLOB ããã¯ãšã³ãããŸãã¯å¿ èŠã«å¿ããŠå¥ã®ã¹ãã¬ãŒãžããã¯ãšã³ãã䜿çšã§ããŸãã ãã ããèªèšŒã¬ã€ã€ãŒãå¿ èŠã§ãã ãã®ãããªãã®ãå¿ èŠã§ãã GitHub Actions ã䜿çšãããšããããããã«å©çšã§ãããããä»ã«äœãå¿ èŠãããŸããã
å ã«é²ãåã«ããã£ãã·ã¥ãšGitHub Actionã«ã€ããŠæ³šæããªããã°ãªããªãããšããããŸãã ãã£ãã·ã¥ã«ã¯ããªããžããªå šäœã§å ±æããã 10 ã®ã¬ãã€ãã®ãµã€ãºå¶éããããŸãã ãã®ãããGitHubã¯ãã£ãã·ã¥ãä¿åããŸããããµã€ãºãè¶ ãããšãã£ãã·ã¥ã®åé€ãéå§ããŸãã ãã£ãã·ã¥ããªãµã€ã¯ã«ãããšãå šäœçã«å®è¡æéãé ããªãå¯èœæ§ããããããæ³šæãå¿ èŠã§ãã ãšã¯ã¹ããŒãããå¿ èŠããããã®ã¯ãããã©ã«ãã§ã¯ãDockerãã¡ã€ã«ã®æåŸã®ã¹ããŒãžããšã¯ã¹ããŒãããã ãã§ãã ããããäŸãã° mode=max ã®ããã«ãã¹ãŠããšã¯ã¹ããŒããããå Žåã¯ãããã«æ³šæããå¿ èŠããããŸãã
ã¹ã³ãŒãããŒããããŸãã ãããã£ãŠãã¹ã³ãŒã ããŒã¯ããã©ã«ãã§ BuildKit ãšããååã«ãªã£ãŠãããããããããã£ãã·ã¥ãå±ããããŒã§ãã ããšãã°ãã¢ãã©ã«ãªããžããªã«å€ãã®ãããžã§ã¯ããå«ãŸããŠããå Žåã«äŸ¿å©ã§ãã ããšãã°ããã®ãã£ãã·ã¥ãfooã«ãä»ã®ãã£ãã·ã¥ãbarã«é 眮ããŠãäžç·ã«åã«ãªããªãããã«ããããšèšãããšãã§ããŸãããŸããã¢ããªããžããªã䜿çšããŠè€æ°ã®ãããžã§ã¯ãã«å¶éããããšãã§ããŸãã ããã©ã«ãã§ã¯ã仿¥ã® BuildKit 㯠GitHub Actions ãã£ãã·ã¥å ã®ãã£ãã·ã¥ ããŠã³ãããšã¯ã¹ããŒãããŸããã ãããè¡ãå Žåã¯ããã® GitHub Actions ã䜿çšããŠåé¿çãããããããã£ãã·ã¥ ããŠã³ãããšã¯ã¹ããŒãã§ããŸãã
ãã«ããã©ãããã©ãŒã ãã«ã
次ã«ããã«ããã©ãããã©ãŒã ãã«ãã«ã€ããŠå°ãã話ãããŸãããã ãåç¥ã®ããã«ãDockerã€ã¡ãŒãžã¯è€æ°ã®ãã©ãããã©ãŒã ããµããŒãããŠããããã1ã€ã®ã€ã¡ãŒãžã«è€æ°ã®ããªã¢ã³ããšOSäžã®è€æ°ã®ãã©ãããã©ãŒã ãå«ããããšãã§ããŸãã ããã¯ç¹ã«CIã§äººæ°ã®ãããã¬ã³ããªã®ã§ã仿¥ã¯ããããèŠãããããšæããŸãã
ãã«ããã©ãããã©ãŒã ãã«ããè¡ãã«ã¯ãåºæ¬çã«ã¯åäžã®å ¥åãæäŸããã ãã§ãã ãã®å Žåãç§ã¯ãã x96ãArmãã«ããæ¬²ãããšèšããŸãã ãããè¡ãã«ã¯ããããæå®ããã ãã§ãå Žåã«ãã£ãŠã¯ãDockerfileã®èšè¿°æ¹æ³ã«å€§ããäŸåããŸãã ãããã£ãŠããšãã¥ã¬ãŒã¿ãŒãã€ã³ã¹ããŒã«ããå¿ èŠãããããã®ããã«ãç§ãã¡ãæäŸããã»ããã¢ããQEMUã¢ã¯ã·ã§ã³ã䜿çšããããšãã§ããŸãã ããã¯ããªãã®ãã«ãã®ãšãã¥ã¬ãŒã¿ãã€ã³ã¹ããŒã«ããã ãã§ãã ã芧ã®ãšããã«ãã®ãã«ããå®è¡ãããšãã¯ãã3åã§ãããããã¯è¯ããããŸãã
远å ã®ãã©ãããã©ãŒã ãæ§ç¯ããã ãã§ã倧å€ãªããšã§ãããã¢ã€ãã¢ã¯ãããŸãã? 誰ãããªããããªã«æéããããã®ãèããŠããŸãã? ãããããã¶ããããããŸãããç§èªèº«ãèããæã£ãŠããã®ã§ããã°ãçããããããããããŸããã èŠãŠã¿ãŸãããã ã ãããã¯ããç§ãã¡ã¯ç¯äººãèŠã€ãããšæããŸãã ã芧ã®ãšãããArm ã® 1 ã€ã¯ãã®ãããžã§ã¯ãã®ãã«ãã ãã§çŽ 3 åãããããã 1 ã€ã¯ 30 ç§ããããŸãã ã§ããããã¯ãããããåé¡ã§ãã ãšãã¥ã¬ãŒã·ã§ã³ã¯æçœªã§ãã åºæ¬çã«ããåç¥ãããããŸããããGitã€ãã³ãã€ã³ãã©ã¹ãã©ã¯ãã£ã§ã¯ãUbuntuã®ææ°ã®ã©ã³ããŒã¯x96 ã¢ãŒããã¯ãã£ã§ãã ãããã£ãŠãArmãã«ããè¡ããšãã¯ããšãã¥ã¬ãŒã·ã§ã³ã®ã¿ã䜿çšããŸãã ãŸãããšãã¥ã¬ãŒã·ã§ã³ã¯ãã«ããè¡ãéã®å€§ããªããã«ãã£ã§ãããããéåžžã«æéãããããŸãã ã§ã¯ãã©ãããã°ããã解決ã§ããã®ã§ãããã? ãã®åé¡ã解決ããã«ã¯2ã€ã®è§£æ±ºçããããããããèŠãŠããã®ã¯ããšãã¥ã¬ãŒã·ã§ã³ã䜿çšããŠãã®ããã«ãã£ãåãé€ãããã«Dockerfileã§ã¯ãã¹ã³ã³ãã€ã«ã䜿çšããæ¹æ³ã§ãã
ãŸããDockerfileã«æ»ããŸãããã ãã°ã§ç¢ºèªããããã«ããã«ãç¶æ ã¯ããããã®ãã©ãããã©ãŒã ã«å¯ŸããŠãã«ããããŸãã ãããŠãã®å ŽåãGoã§ã¯ãã¹ã³ã³ãã€ã«ã䜿çšããã®ã¯éåžžã«ç°¡åã§ãã äžé£ã®å€æ°ãæž¡ãã ãã§ãã¿ãŒã²ããã¢ãŒããã¯ãã£ã䜿çšããããšãã§ããŸãã Dockerfile ã®ã°ããŒãã« ã¹ã³ãŒãã§åŒæ°ãæäŸããŸãã ãããã£ãŠãããã³ããšã³ãã§ã¯ããã®åŒæ°ã®ã»ããã䜿çšãããšãç¹å®ã®ã¿ãŒã²ããã䜿çšãããŸãã ãã®å Žåãã¯ãã¹ã³ã³ãã€ã«ã䜿çšããŠããã€ãã£ããã©ãããã©ãŒã ã䜿çšããŠãã«ããè¡ããã¿ãŒã²ããåŒæ°ã䜿çšããŠGoã³ã³ãã€ã©ã§ã¯ãã¹ã³ã³ãã€ã«ãè¡ããŸãã
ãããããããæšæž¬ããã«ã¯ã©ãããã°ããã§ãããã? ãã®ããã«ãDockerfileã§ããã·ã¥ããã·ã¥ãã©ãããã©ãŒã ã䜿çšã§ããããããã«ããã©ãããã©ãŒã ã«å³å¯ã«ãªããŸãã ããã¯ãã«ããå®è¡ãããå Žæã§ãããã¿ãŒã²ããOSãšã¿ãŒã²ããã¢ãŒããã¯ãã£ãæå®ã§ããŸãã ãã®åŸãGOOS ãš GOARCH ãæå®ã§ãããããå®çŸ©ããã¿ãŒã²ãã ãã©ãããã©ãŒã ãšäžèŽããŸãã ããŠããã«ããªã®ã§ãã©ããããã®æéãããããã確èªããå¿ èŠããããŸãã ä»ã¯ 47 ç§ã§ãããã®ã»ããããã§ãã ããã¯ãã¯ãã¹ã³ã³ãã€ã«ã䜿çšããŠããããã§ãã
ããã§ãã°ãèŠããšãAMD 64 ãšArmã® 64 ãåæã«ããã£ãŠããããšãããããŸãã ããã«ã¯ãŸã ããã€ãã®ããã«ãã£ããããŸãã 以åã®ããšãæãåºããšãçŽ 24 ç§ããããŸãããåãã©ã³ããŒã§ 2 ã€ã®ãã«ããçºçããŠããããã 31 ç§ããããŸãã ãããã£ãŠãåãã€ã³ã¹ã¿ã³ã¹ã« 2 ã€ã®ãã«ãããããŸãã ããšãã°ããã®ãã«ããè€æ°ã®ã©ã³ããŒã«åæ£ããŠããã«ãã£ãæžãããåŸã§çµæãããŒãžã§ããããã«ããããšãã§ããŸãã ããããããã¯åŸã§èŠãããšã«ãªããŸãã ãã¡ãããã¯ãã¹ã³ã³ãã€ã«ã¯ããã°ã©ãã³ã°èšèªã«ãã£ãŠã¯é©åã§ãªãå Žåãããããšã«çæããŠãã ããã ããšãã°ãGoã䜿çšãããšãããã¯éåžžã«ç°¡åã§ãã Rustã䜿çšãããšããããç°¡åã«ãªããŸãã ãããããããã§ããå Žåã䜿çšã§ããå¯äžã®å®è¡å¯èœãªãœãªã¥ãŒã·ã§ã³ã¯ãARMäžã«ãã€ãã£ãããŒããæã€ããšã§ãã AMDã«ã¯ãã€ãã£ãããŒãããããããšãã° 64ãããããã«åºã¥ããŠæ§ç¯ã§ããŸãããã¯ãŒã¯ãããŒã§ããé«åºŠãªã»ããã¢ãããå¿ èŠã§ãã ãããã£ãŠãããã«ã¯ããã€ãã®å¶çŽããããŸãã
ã€ã¡ãŒãžã¿ã°ã管çãã
ãã«ããã©ãããã©ãŒã ãã«ãã®æ¹æ³ãèŠãŠããã®ã§ãã€ã¡ãŒãžãããã·ã¥ãããšãã«ã€ã¡ãŒãžã¿ã°ãã¬ãã«ã§ç®¡çããæ¹æ³ã確èªã§ããŸãã å°ãè€éã«ãªããããããŸããã CIã§ã¯ããããããèŠãããŸãã GitHub Actionã®åé ã«ã¯ããªããžããªã«åæ§ã®ã¿ã°ãããã·ã¥ãããŠãããã©ããã«å¿ããŠãããã·ã¥ããã¿ã°ã®ãªã¹ããæå®ããããã ãã«ã倧ããªã¹ã¯ãªããã®ãã£ã³ã¯ãæã€ããšãã§ããããšãããããŸãã ãŸãã¯ãããšãã°ãšããžãªãªãŒã¹ã䜿çšããå Žåãmainã«äœãããããããã§æ¡ä»¶ãæœåºããããã«ãã©ã³ãã®ååãããã·ã¥ããããšèšãã§ãããã ã ãããããã¯ã¡ãã£ãšããèŠçã§ãã æéãçãããã«ãã¯ãŒã¯ãããŒã®ã¿ã°ãšã¬ãã«ã®äœæãèªååã§ããGitHub ActionãéçºããŸããã
èŠãŠã¿ãŸãããã ã¡ã¿ããŒã¿ã¢ã¯ã·ã§ã³ã䜿çšããŠãã«ãããåã«ãæœåºã¹ããããå®çŸ©ããå¿ èŠããããŸãã ãããã£ãŠãç»åå ¥åã®ã¿ãå¿ èŠã§ãã ãã®å Žåã¯ããªããžããªã§ãã ããã¯åçŽãªãªããžããªã§ãã GHCRã«ããã·ã¥ãããå Žåã¯å€ãã®ã€ã¡ãŒãžã䜿çšã§ããåæã«Docker Hubãå®çŸ©ã§ããŸãã å°çšã®ã¿ã°ãããå Žåã¯ããã®åŸã«build-push-actionã«é©çšããå¿ èŠãããã¬ãã«ã®ã¿ã°ãçæãããŸãã ãã®å Žåãåã®æé ã®å ¥åã§ã¿ã°ãèšå®ããŸããã ããšãã°ãã¡ã€ã³ãã©ã³ãã«ããã·ã¥ãããšããã®ã¿ã°ã®ãªã¹ããçæãããŸãã ãããã£ãŠãmainãšåŒã°ãããã®ã¯1ã€ã ããããèªåçã«çæãããOCI圢åŒã®ä»æ§ã©ãã«ã®ãªã¹ãããããŸãã ãã®çš®ã®ããšããªããã¢ãŠãããæ¹æ³ã¯ãããŸããããã芧ã®ãšããã説æããããŸãã ãã㯠GitHub API ããååŸãããŸãã ããã¯ãªããžããªã®èª¬æã§ãã ãŸããååŸãããŠããã«é 眮ãããŠãããªããžããªã®ã¿ã€ãã«ãããããããã®çš®ã®ã¢ã¯ã·ã§ã³ã䜿çšããŠã€ã¡ãŒãžã«äœãå«ãŸããŠãããã远跡ã§ããŸãã ããã¯ããªã䟿å©ã ãšæããŸãã ããšãã°ãã³ã³ããã»ã€ã¡ãŒãžã«ã€ã¡ãŒãžã®READMEã衚瀺ããããšãOCIã©ãã«ãå©çšãããããšãã°ãREADMEã«æå³ã®ããæ å ±ã衚瀺ãããŸãã
ãããŠãv1 ã¿ã°ãæŒããšãv1.0ã0ãææ°ã® v1ãçæããŸãã0ã0 ãåæ§ã§ãã å°ããããã«ãããããããŸããããå éšã§äœãèµ·ãã£ãŠããã®ãã説æããŸãããã ãã®çš®ã®ã«ã¹ã¿ãã€ãºãããã¿ã°ã䜿çšãããšãã¢ã¯ã·ã§ã³ãã©ã®ããã«å ã«æ»ãã®ãçåã«æããããããŸããã ããã©ã«ãã§ã¯ãtags å ¥åãæå®ããªãå Žåãããã©ã«ãå€ã¯ type=schedule ãš type=ref ã§ãevent=branch ã¿ã°ãŸã㯠PR ãæå®ãããŸãã ãããã£ãŠãtype=scheduleã¯ãã¯ãŒã¯ãããŒã«ã®ã¿ã¹ã±ãžã¥ãŒã«ã€ãã³ããããå Žåã«äœ¿çšãããååãã¿ã°ä»ãããŸãã ã¿ã°ã«ã¯ããã©ã«ãã§é©åãªååãä»ããããGit åç §ã®äžã® ref ã¯ãã©ã³ããšåæ§ã«ããªã¯ãšã¹ãã®ã¿ã°ã«ããªããŸãã ç¹å®ã®ãŠãŒã¹ã±ãŒã¹ã«ã¯ä»ã«ãã«ãŒã«ããããããšãã°ãGit ãããŒã®äžè¬çãªãã¿ãŒã³ã¯ãåæ§ã®ã¿ã°ãããã·ã¥ããŠãããžã§ã¯ãããªãªãŒã¹ããããšã§ãã
ç§ãã¡ã®å Žåãç»åã¿ã°ãšææ°ã®ã¿ã°ãèšå®ããã ãã§ãªããã¡ãžã£ãŒ/ãã€ããŒã®ãããªãã®ãå¿ èŠãªå Žåãããã°ãã¡ãžã£ãŒã®ã¿ãå¿ èŠãªå ŽåããããŸãã ãããè¡ãã«ã¯ãã¿ã°ã«é©çšããã«ãŒã«ãæå®ããå¿ èŠããããŸãã ãã®å Žåãããšãã°ããã«ããŒãžã§ã³ã欲ãããšèšããŸãããäžéšã®ãŠãŒã¶ãŒã¯ããããæ°ã«ãããã€ã¡ãŒãžã§ã¡ãžã£ãŒãã€ããŒã®ã¿ã䜿çšãããããã¡ãžã£ãŒ/ãã€ããŒãèšå®ããŠã»ãããšèšããŸãã ãããã£ãŠããã®å Žåãtype=semverã¿ã°ã®åšãã§ã¯ãããšãã°ãv1ãæŒããšçæãããŸãã0ã0ãããã¯èšãã§ããããç§ã¯ 1ãæã£ãŠããŸãã0ã0, ç§ã¯v1ãæã£ãŠããŸãã0ã ãš latestãããã³ã³ããã SHA ãèšå®ããã SHAã
ããã¯èªåçã«çæãããŸãã æ°ã«ããå¿ èŠã¯ãªãã ããã¯ããªãã®ããã«ãããèšå®ããŸãã ããšãã°ããã«ãªã¯ãšã¹ãã®å Žå㯠Snd ãçæããããã®å Žå㯠PR196ãçæãããSHA ã®å Žåãåæ§ã§ãã ããã¯äœããæŒããã³ã«èšå®ãããŠããã®ã§ãããã¯ããªã䟿å©ã§ãã ä»ã«ãã±ãŒã¹ããããŸãã PythonãšããŒãžã§ã³ç®¡çã«åºæã®ãã®ããããŸãã ãŸãããšããžã±ãŒã¹ã«äœ¿çšãããŠããä»ã®ãã®ããããäŸãã°ããã¬ãã£ãã¯ã¹ãµãã£ãã¯ã¹ã®äžã«ãããªãã¬ãŒããŒãå ¥ããããšããŸãã äŸãã°ãAlpineããŒãžã§ã³ã®ã€ã¡ãŒãžãDebianããŒãžã§ã³ãå¿ èŠã ãšããŸãããã Debianãªã©ã®ãã¬ãã£ãã¯ã¹ãä»ããããšãã§ããŸãã ã ãããå€ãã®ã«ãŒã«ããããŸãã ãªããžããªã«ã¯èšå€§ãªããã¥ã¡ã³ãããããŸãã®ã§ãã芧ãã ããã
çŒã
Bakeã®è©±ããããã®ã§ãããã芧ã®éãã¯ãŒã¯ãããŒã¯ããªã巚倧ã§ããã®ã¯ãŒã¯ãããŒã®ãµã€ãºãå€§å¹ ã«çž®å°ããããšæããŸãã ãã€ã¯ã¯ãããå©ããŠãããŸãã å§ããåã«ãBakeãäœã§ãããããããªããããããªãã®ã§ãbuildã³ãã³ãã§ã«ãŒãã«æ»ããŸãã ãåç¥ã®ããã«ã仿¥ã®ãã«ãã³ãã³ãã§ãã®ãããªãã®ãæã€ããšãã§ããŸãã
ããªã倧ããã§ãã buildã³ãã³ãã«ã¯å€ãã®ãã©ã°ãçšæãããŠããããããããŒã«ã«ç°å¢ããCIã«ç§»æ€ãããšãã³ããŒããŒã¹ããå¿ èŠã«ãªãå¯èœæ§ãããããããã®çš®ã®ããšãåçŽåããããšèããŠããŸãã äž¡æ¹ãç¶æããå¿ èŠãããã®ã§ãããã¯çŽ æŽãããããšã§ã¯ãããŸããã ããªãã®ã¯ãŒã¯ãããŒã§ã¯ããããããããŒã«ã«ã³ãã³ãããã«ãããã·ã¥ã¢ã¯ã·ã§ã³å ã®å ¥åã«ç§»æ€ããå¿ èŠãããããããã®ãããªãã®ãããã§ãããã ããã¯éåžžã«å€§ããã§ãã ããã¯çæ³çã§ã¯ãããŸããã ç§ãã¡ã¯äž¡æ¹ãç¶æããå¿ èŠããããŸãã å«ã§ãã ãŸãããããžã§ã¯ãããã«ãããããã«ã¯ãã³ã³ããªãã¥ãŒãã£ã³ã°ããŒãã®ããã¥ã¡ã³ããæŽæ°ããå¿ èŠããããŸãã®ã§ãããã¯ããŸãè¯ããããŸããã Bake ã䜿ãã°ã代ããã«ãã®ãããªããšãã§ããŸãã ã§ããããäŸãã°ããã®ããã·ã¥ãã©ã°ãå®çŸ©ããã ãã§ãäœããäœããããäœããäœãããããããããã·ã¥ãããããšãããã©ã°ãå®çŸ©ããå¿ èŠããããŸãã
ããã§ãå ã«é²ãåã«ããŸããã€ã¯ã®å®çŸ©ãšã¯äœãã«ã€ããŠã話ãããããšæããŸãã ãããBakeã䜿çšããããã®åºçºç¹ã§ãã ãããã£ãŠãBakeã§ã¯ããŠãŒã¶ãŒããããžã§ã¯ããç¹ã«å®çŸ©ãã¡ã€ã«ã䜿çšããŠèª°ã§ãç°¡åã«åŒã³åºãããšãã§ããåå©çšå¯èœãªãã«ããããŒãå®çŸ©ã§ããããã«ããããšèããŠããŸãã ãããã£ãŠããã®å®çŸ©ãã¡ã€ã«ã¯ãHCLãã¡ã€ã«ãJSONãã¡ã€ã«ããŸãã¯Composeãã¡ã€ã«ã§ããå¯èœæ§ããããŸãã è€æ°ã®ãã¡ã€ã«ãæå®ã§ãããã¡ããããããã¯ç¹å®ã®é åºã§ã¡ãã·ã¥åãããäœãæå®ããªãå Žåã¯ããã©ã«ãã§ãããã«ãªããŸãã ã€ãŸããComposeèªäœã®ããã«èŠããbakeã³ãã³ããå®è¡ããå Žæã§å©çšå¯èœãªããã©ã«ãã®ãã¡ã€ã«ã調ã¹ãŸããã
ã芧ã®éããç§ã¯HCLã®é£ã«å°ããªããŒããæ²ããŠããŸãããªããªããããããã®è¬æŒã§ç§ã話ãããšã ããã§ãã HCLã¯ãã®çš®ã®ããšã«å¯ŸããŠéåžžã«åŒ·åã§ãã ãããã£ãŠãHCL圢åŒã¯ãTerraformã®ãããªãããã¯å®çŸ©ãä»ããŠãµããŒãããŸãã ããã¯ã»ãšãã©åãããšã§ãã 倿°ããã«ãåŒæ°ãšããŠäœ¿çšããããšããDockerfile ã Bake ãã¡ã€ã«ã®å±æ§å€ã§å€æ°ãè£éããããšãã§ããŸãã äžè¬çãªçŽç²ãªäºåŸé¢æ°ã®ã»ããããããŸãã go-cty ã§å©çšå¯èœãªä»»æã®é¢æ°ã䜿çšã§ããŸãããç¬èªã®ãŠãŒã¶ãŒå®çŸ©é¢æ°ã䜿çšããããšãã§ããŸãã
HCL å®çŸ©ã®äŸãèŠãŠã¿ãŸãããã ããã¯èŠãç®ãªã®ã§ãåºæ¬çã«ã«ã¹ã¿ã ãã«ãã°ã«ãŒãã®ãµããŒãã远å ãããŸãã ã芧ã®ãšãããç°ãªãã¿ãŒã²ãã ã°ã«ãŒãã䜿çšããŠãããžã§ã¯ãå šäœã§ã³ãŒããåå©çšããæ¹ãé©åã§ãã ã¿ãŒã²ããã¯ãããšãã°ãã€ã¡ãŒãžãã€ã¡ãŒãž all ããããã°ã«ãŒãã§ Docker ãã«ã ã³ãã³ãã«æå®ããã®ãšåããªãã·ã§ã³ãæã€ 1 ã€ã® Docker ãã«ãåŒã³åºããåæ ããŠããããšãããããŸãã
ã芧ã®ãšãããdefaultãšåŒã°ãããã®ã¯ãtargetãªãã·ã§ã³ã䜿çšããŠã¿ãŒã²ããã®ãªã¹ããæå®ã§ããŸãã ã¿ãŒã²ããã¯ãinherit ãªãã·ã§ã³ãã¿ãŒã²ããã®ãªã¹ãã«èšå®ããããšã§ããã«ã ãªãã·ã§ã³ãç¶æ¿ããããšãã§ããŸãã ããšãã°ãç»åã¯ãã¹ãŠç»åã®1ã€ããç¶æ¿ããããããç»åã®ãªãã·ã§ã³ããç¶æ¿ã§ããŸãã ããã¯ãTerraformãšéåžžã«ãã䌌ãŠããã倿°ãå®çŸ©ããæ¹æ³ãæäŸããŠããŸãã ãããã£ãŠãHCLãã¡ã€ã«åœ¢åŒã¯ãã¿ã°ä»ãã®ãã®ãããªå€æ°ãããã¯å®çŸ©ããµããŒãããŠããŸãã ãŸããçŸåšã®ç°å¢ã«ãã£ãŠæäŸãããå€ãæã€å€æ°ãå®çŸ©ããããã«ã䜿çšã§ããŸãã ãããã£ãŠãç°å¢å€æ°ã䜿çšãããšããã®å€ã¯å€æ°å€æ°ã«çœ®ãæããããŸãã
次ã«ãããšãã°ãã€ã¡ãŒãžããã¹ãŠã¿ãŒã²ããã«ãã«ãããããšæããŸãã ç§ã¯ãã ã€ã¡ãŒãžãå®çŸ©ããå¿ èŠããããŸã ãã¹ãŠã®Docker buildx bake image allãããã ãã§ãã ããã¯ãŸãã«ç§ãæããã®ãæ§ç¯ããŸãã ããã¯ãå éšã«ãŒããå¹çåããä»ã®ç°å¢ã«æŽ»çšããã®ã«éåžžã«äŸ¿å©ã§ãã
ç°¡åãªãã®ãèŠãŠã¿ãŸãããâåã®ãã®ã¯å·šå€§ãªãã®ã§ããã åç §ãã©ã®ããã«è¡ãããŠãããã倧ãŸãã«ç¢ºèªã§ããŸãã ããã§ã¯ãåºæ¬çãªã¯ãŒã¯ãããŒã«æ»ããŸãããã ç§ãã¡ã¯å§ãŸãã§ãããBakeã®å®çŸ©ãšã¯ãŒã¯ãããŒã«ããŸãã ããã§ã¯ããã€ã¯ã¢ã¯ã·ã§ã³ã ãã䜿çšããå¿ èŠããããŸãã ãã®ãããBake ã«ãã¢ã¯ã·ã§ã³ããããŸãããããã¯ã¿ã°ã®äžã«ã¯ãŸã£ãããããŸããã ããã·ã¥ã䜿çšããã ãã§ãããã©ã«ãã§ã¯ãããã«è¡šç€ºãããŠããç»ååã䜿çšãããŸã crazymax.comã ããã·ã¥ã¿ã°ããã®ç»åãèšå®ããŸãã
ãããèŠãŠããã®ã§ãã¢ã¯ã·ã§ã³ã®å éšã«è¡šç€ºãããæ£èŠè¡šçŸãããã®ã§ãäœãèµ·ãã£ãŠããã®ããäœãèæ ®ãããŠããã®ããäŸãã°å€æ°ãæž¡ãããŠããã®ããããããŸãã ãã®ããããã«ãããã·ã¥ããã€ã¯ã¢ã¯ã·ã§ã³ã®å éšã§ç¢ºèªã§ãããããããã·ã¥ããã·ã¥ããªã³ãã¿ã°ã䜿çšããŠæ£èŠè¡šçŸã瀺ããŠããŸãã
ä»ããã€ã¯ã«ã€ããŠç§å¯ã亀ããŠã話ãããããšæããŸãã CIã«é¢ããæªãæ £è¡ãå€ãããŠãæ©å¯æ å ±ãè³æ Œæ å ±ãæž¡ãããã«ãã«ãåŒæ°ã䜿çšããŠãã人ãèŠãããŸãã ã ãããããã¯æã ç»åèªäœã®äžã«ãããããããªãã®ã§ãè¯ããããŸããã ãã ããã«ãæã§ã¯ãããŸããã ãããã£ãŠããã®ãããªå Žåã¯ããã«ãæã«ã·ãŒã¯ã¬ããã䜿çšããå¿ èŠããããŸãã ã·ãŒã¯ã¬ããã¯ããã䜿çšããç°¡åãªæ¹æ³ã§ãã
å ã«é²ãåã«ããããžã§ã¯ãããã¹ãããããã«Dockerfileã«æ°ããã¹ããŒãžã远å ããããšæããŸãããBakeå®çŸ©å ã«æ°ããã¿ãŒã²ããã远å ããããšãã§ããŸãã ãããŠããã®çŽåã«ããã«ããšããã·ã¥ã®åã«ããã®ãããžã§ã¯ãããã¹ããããã®ã§ãã ããããåé¡ããããŸãã ãã¹ãã«ã¯ GitHub API ãžã®ã¢ã¯ã»ã¹ãå¿ èŠã§ããããšãç¥ã£ãŠããŸãããã以å€ã®å Žåã¯ã¹ããããããŸãã
ã©ããããããããã®ã¯ãŒã¯ãããŒã«GitHubããŒã¯ã³ãæž¡ãå¿ èŠããããŸãã ã©ãããã°ããã§ãã? ããã«ã¯ãã«ãæã®ã·ãŒã¯ã¬ããã远å ã§ããŸãã åºæ¬çã«ãããã¯ç§ã®ãã€ã¯ã®å®çŸ©ã§ã¯ãå ¬éãããç§å¯ãå®çŸ©ããã ãã§ãã ã ããç§ã¯ç°å¢å€æ°name github tokenã䜿çšããŠã·ãŒã¯ã¬ããåghããŒã¯ã³ãå ¬éããããšæããŸãã ããã¯ãsecret ãã©ã°ã䜿çšããå Žåãšåãã§ãbuild ã³ãã³ãã§ã䜿çšããŸãã äœãå€ãããªãã ãŸããDockerfileãç¥ã£ãŠãããšããã¹ããå®è¡ãããšãã«ãããã®ã·ãŒã¯ã¬ãããç§»åã§ããŸãã ãŸãããã®ç°å¢å€æ°githubããŒã¯ã³ã¯ããã¹ãå ã§äœ¿çšããããã®ã䜿çšã§ããŸãã æåŸã«ãã¯ãŒã¯ãããŒã§ã¯ãæäŸããã GitHub ããŒã¯ã³ ã·ãŒã¯ã¬ããã䜿çšã㊠GitHub ããŒã¯ã³ãèšå®ããŸãã ã ããããã¯ééããããããããã¯ç§ã®ã³ã³ããå ã§çŽæ¥äœ¿çšããããšãã§ããŸãã ã ãããããã¯ããªã䟿å©ã§ãã ããã¯ããã®å®è¡åœä»€ã§ã®ã¿äœ¿çšããããããå®å šã§ãã æçµçãªç»åã«ã¯å«ãŸããŸããã ãã®ç»åãããã·ã¥ããããšãã¯ããã®ã¹ããŒãžã®ã¿ã«äœ¿çšãããŸãã
ã³ã³ããããŒã¹ã®ã¯ãŒã¯ãããŒ
ãã®ããšã念é ã«çœ®ããŠãCIã§ã³ã³ããã䜿çšããããšã®å€§ããªå¯èœæ§ãæ¢ããå éšã«ãŒããšCIç°å¢éã®ç§»æ€æ§ãåäžãããæ¹æ³ãæ¢ãããšãã§ããŸãã ã³ã³ããã䜿çšãããšç§»æ€æ§ãåäžãããããã³ã³ããã䜿çšãããšããèãæ¹ã§ãã ãããŠãäŸãã°ãæ°ããã¿ãŒã²ããã远å ãããš - ããã lint ãšåŒã¶ããšã«ããŸã - ãã®ãããç§ã®ãã㯠ãã¡ã€ã«ã¯å·šå€§ã«ãªãå§ããŸãããããã¯äŸ¿å©ã§ãã å°æ¥å¿ èŠã«å¿ããŠãããåå©çšããDockerfileã«ãlintã¹ããŒãžãäœæã§ããŸãã ãããŠãããã¯ç§ã®ã³ãŒãã倧äžå€«ãã©ããã確èªããããã«golang CI lintãå®è¡ããã ãã§ãã ãããŠãç§ã®å®çŸ©ã§ã¯ãã¯ãŒã¯ãããŒã§ãæ°ããlintã¹ãããã远å ããŸãã
ä»ããã°ãèŠããšãç§ã®lintã¹ããŒãžãééããŠããããšãããããŸãã 倧äžå€«ãªã®ã«ãäœãå€ãªãšããããããŸãã ç»åããšã¯ã¹ããŒããããšãããã®ããããŸãããç§ã¯ãããæãã§ããŸããã ç§ã¯ãã 糞ããã®éšåãåããããã ãã§ãã ãã ããããã©ã«ãã§ã¯ããã«ãã³ãã³ããå®è¡ãããšããã«ããè¡ããã³ã«ã€ã¡ãŒãžãããŒã«ã«ã¹ãã¢ã«æžã蟌ãŸããŸãã ãã ããäœããšã¯ã¹ããŒãããã«ãã«ãã§ããŸãã ãããè¡ãã«ã¯ããã®ã¿ãŒã²ãããåé¿ããŠããã£ãã·ã¥ã®ã¿ã®åºåã¿ã€ãã®ã¿ã䜿çšã§ããŸãã ãã®åºåã¿ã€ãã¯ãåºæ¬çã«ãã«ãçµæãåºåããã®ãç Žæ£ããŸããããã®ç¹å®ã®ã¿ãŒã²ããã®ãã£ãã·ã¥ãæžã蟌ã¿ãŸãã ãã¹ãã®ãã®ã«ã€ããŠãåãããšãããå¿ èŠããããŸãã åã«ãããå¿ããŠããã®ã§ããã¹ããããšãäœãåºåãããŸããã å°æ¥ããã¹ãå®çŸ©ããšã¯ã¹ããŒãããŠãã³ãŒããã«ãããããªã©ã«æçš¿ããããšããŸãã ãã«ãçµæããšã¯ã¹ããŒãããããšãã§ããŸãã ãããã£ãŠãæéãç¡é§ã«ããããªãå Žåããã¹ããŒãžã§ãã¹ããå®è¡ãã以å€ã«äœãåºåããå¿ èŠããªãå Žåã«äŸ¿å©ã§ãã
ã芧ã®ãšãããå ±éã®ãã¿ãŒã³ããããŸãã äœãã远å ãããã³ã«ãã¯ãŒã¯ãããŒã«æ°ããã¹ãããã远å ãããŸãã ãã®ãããã¯ãŒã¯ãããŒã¯éåžžã«å€§ãããªãå¯èœæ§ããããŸãã ãã®å Žåãæ¯åæ°ããã¹ããããå¿ èŠã§ãã ããšãã°ãããã§ã¯ããã¹ããš lint ãã°ã«ãŒãåã§ããŸããããã¯ããã®æé ã®ç®çãã³ãŒãã®æ€èšŒã§ããããã§ãã ä»ã§ããããšã¯ãããããåé€ãããã¡ãã·ã¥åããŠãæ€èšŒãããã®ã ããçšæããæ€èšŒãåŒã³åºãããšãã§ããã®ã§ããããåé€ããããšã§ãã
ããŒã«ã«ç°å¢ã®åšãã§ã¯ããæœè±¡åãããŠããããããŠãŒã¶ãŒã«éç¥ããããæ€èšŒãå®è¡ãããããããšãã§ããŸãã ããã¯ããªãã®ããã«ãã¹ãŠãè¡ããŸãã æç€ºãããããã¹ããå®è¡ããããlintãå®è¡ããããä»ã®äœããå®è¡ããå¿ èŠã¯ãªãã®ã§ãæ€èšŒããã ãã§çµããã§ãã ãã¡ãããBuildKitã®ãããã§äžŠåã«å®è¡ããããããmakeãã¡ã€ã«ã®ãããªå¶åŸ¡ã¯ãããŸããã ãã®å Žåã䞊åã«å®è¡ãããŸãã æ£èŠã®è¡šçŸã§ããããããã«ãäž¡æ¹ãåŒã³åºãããšãããããŸãã
ãã®ããŒã«ã®ãã®ã»ã¯ã·ã§ã³ã«ãžã£ã³ãããããªãã£ãã®ã§ãããããã¯é¢çœããããããªããšæããŸãã 以åã¯ããã¹ããšãªã³ãã®éšåã«ã€ããŠã¯ãåãã©ã³ããŒäžã§åäœãããšèšã£ãŠããŸããã ããã¯äŸ¿å©ã§ãããããšãã°ããã¹ãããªãœãŒã¹ã®å¶çŽã«ãªãããšãããã£ãŠããå Žå (CPU ã RAM ã䜿ããããå Žå) ã§ããããã©ã³ããŒéã§åå²ã㊠GitHub ã¯ãŒã¯ãããŒãå©çšãããå Žåãªã©ã§ãã ããã解決ããã«ã¯ãã¿ãŒã²ããã®ã°ã«ãŒãã忣ãããããšãã§ããã®ã§ãæ€èšŒã¿ãŒã²ããããããŸããããããã©ã³ããŒå šäœã«åæ£ãããã®ã§ãåããžã§ãã®äžéšã§ã¯ãªããå®éã«ã¯2ã€ã®ãžã§ãã«åæ£ããŸãã ããã解決ããããã«ãåã倧ããªã°ã«ãŒããç¶æããªãããã°ã«ãŒãã¿ãŒã²ãããšè€æ°ã®ã©ã³ããŒã忣ãããããšãã§ããŸãã ãããã£ãŠãããŒã«ã«ãããŒã¯åããŸãŸã§ãã¯ãŒã¯ãããŒå ã§å°ã倿Žããã ãã§ãã ãã®ãããè¡åãåçã«èšå®ããããã®GitHubã¢ã¯ã·ã§ã³ã®ãã¿ãŒã³ããããŸãã
ããã¯å°ãäžå¯è§£ã§ãã ä»åŸã¯ãã€ã¯ã¢ã¯ã·ã§ã³ã䜿çšããŠããã䜿çšãããã®ã§ããããè¡ãå¿ èŠã¯ãããŸããã èªåçã«åŒã³åºãããè€æ°ã®ã©ã³ããŒãäœæããŸãã ãããäœããããããã®å Žåãã芧ã®ãšãããvalidateã°ã«ãŒãã§bakeã³ãã³ãã䜿çšããŸãã ãã®ã°ã«ãŒãã§äœ¿çšå¯èœãªã¿ãŒã²ããã®ãªã¹ããå°å·ãããã®æºåããããžã§ãã®ç¹å®ã®ã¿ãŒã²ããåºåå ã«é 眮ãããã®åŸãã¿ãŒã²ããå€ãå«ããããªãã¯ã¹ã䜿çšã§ããŸãã ããã¯ã䜿çšå¯èœãªã¿ãŒã²ãã(testãšlint)ã®ãªã¹ãã§ãããããåã©ã³ããŒã§äž¡æ¹ã®æ€èšŒãå®è¡ãããŸãã ãããã£ãŠã1ã€ã®ã©ã³ããŒã§ãã¹ãããå¥ã®ã©ã³ããŒã§ãªã³ãããŸãã
ãããããé©åã«è¡šçŸããã®ã¯ãtest ãš lint ã®äž¡æ¹ã䞊è¡ããŠå®è¡ããåäžã®æ€èšŒã远å ããåã§ãããçŸåšã¯ã©ã³ããŒéã§åå²ãããŠãããããæéãããããŸããã ç¹°ãè¿ãã«ãªããŸããã 57 ç§ã§ã¯ãªããåã©ã³ãç¬èªã®ã©ã³ããŒã§å®è¡ããããã§ãã ã€ãŸããããã¯ãã«ããé åžããæ¹æ³ã§ãã ããã¥ã¡ã³ãã«ã¯ãYouTube ãã©ãããã©ãŒã ã€ã¡ãŒãžã®ãã«ããé åžããäŸããããŸãã ããšãã°ã5ã€ã®ãã©ãããã©ãŒã ã5ã€ã®ã©ã³ããŒã«åæ£ããããšãåãã©ã³ããŒã§ãããè¡ããšãªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ãããããããããåå²ããããšãã§ããŸãã ãŸããå¥ã®ãŠãŒã¹ã±ãŒã¹ãšããŠãå€ãã®äººãã¬ãžã¹ããªã«ã€ã¡ãŒãžãããã·ã¥ããããã®äœããæ§ç¯ããŸãã ããã¯å€ãã®äººããã£ãŠããããšã§ãããç§ãã¡ããã€ããªãå ¥ããŠããã®ãã€ããªãããã·ã¥ããŠãªãªãŒã¹ãªã©ãåŸãããšæã£ãŠããŸãã ãããã£ãŠãå®éã«ã¯BuildKitã䜿çšããŠãããè¡ãããšãã§ããŸãã åºåã倿ŽããŠãã¬ãžã¹ããªã§ã¯ãªãåºåãããããã¯ã©ã€ã¢ã³ãã§ããŒã«ã«ã«åºåããããšèšãã ãã§ãã ãã®å Žåããã€ããªãšåŒã°ããã¹ããŒãžãããã€ããªãããŒã«ã« ãã¡ã€ã« /bin ã«åºåãããŸãã ããã§ãå°çšã®ã¯ãŒã¯ãããŒãäœæããŸãã ãã®ã¯ãŒã¯ãããŒã¯ãã¿ã°ãããã·ã¥ããããšãã«ããªã¬ãŒããããã®åŸããã®ãã€ããªãå®äºãããšãã«ãGitHubãªãªãŒã¹ãäœæããŠãã®ãã€ããªãããã·ã¥ããŸãã
ããã¯ãããšãã°ãè€æ°ã®ãã©ãããã©ãŒã ããããªã©ãä»ã®ãŠãŒã¹ã±ãŒã¹ã§è¡ãããšãã§ããŸãã ãã®å Žåãåãããšãã§ããã®ã§ããã«ããã©ãããã©ãŒã ãã«ããå®è¡ãããã¹ãŠã®ãã€ããªãæœåºããŠãGitHubãªãªãŒã¹å ã«çŽæ¥ããã·ã¥ã§ããŸãã ãããã£ãŠãæçµçãªã¢ã¯ã·ã§ã³ã䜿çšããå¿ èŠããããŸãã ãã®ã»ã¯ã·ã§ã³ã§ããDockerfileèªäœã®äžã«å ¥ããããšãã§ããŸãããGitHub APIãšéä¿¡ããå¿ èŠããããããããå€ãã®äœæ¥ãå¿ èŠã«ãªããŸãã ããã¯ããã§ã«å©çšå¯èœãªGitHubã¢ã¯ã·ã§ã³ã䜿çšãããšããç°¡åãªãã®ã§ãã
çµè«
仿¥ãç§ãã¡ã¯äœãèŠãŸããã? ãã£ãã·ã¥ãšã¯ã¹ããŒã¿ãŒã䜿çšããã¿ã°ãèªååããããã®ããŸããŸãªã¢ãŒããã¯ãã£ãã€ãã©ã€ã³æŠç¥ã䜿çšããŠå¹ççãªã€ã¡ãŒãžãäœæããæ¹æ³ã䜿çšããŸããã ç§ãã¡ã¯ãã¯ãŒã¯ãããŒãç°¡çŽ åããCIã®ãªãŒããŒã©ã€ããæžããããã«ãBakeãšãã«ãã·ãŒã¯ã¬ããã䜿çšããŠãBakeã«ã€ããŠå€ãã®ããšã話ããŸããã ãŸããããŒã«ã«ç°å¢ãšCIç°å¢éã®ç§»æ€æ§ãåäžãããããã ãã«ã³ã³ããã䜿çšããæ¹æ³ã説æããŸãã
æåŸã«ãã³ã³ããã䜿ã£ããããžã§ã¯ããããã€ããããŸãã ããšãã°ãbuildx ããããŸãã ãã¡ããããã®çš®ã®ãã¿ãŒã³ã䜿çšãããšãã¯ãã¹ã³ã³ãã€ã«ããã³ããŒã®æŽæ°ããã³ããŒã®ãã§ãã¯ãªã©ãå€ãã®ããšãè¡ãããšãã§ããŸãã 糞ããããããŸãã æ°ãããã¿ãŒã³ã䜿çšããã¡ããªãã¯ã䜿çšããŠãå€ãã®ããšãã§ããŸãã Bake å ã«ã¯ããã€ãã®ã¡ããªã¯ã¹ããããŸãã ãã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯åãäžããŸããã§ããããããã«ã€ããŠã¯çŽ æŽãããè³æããããŸãã ãããã£ãŠã仿¥ã·ããããGitHubã¢ã¯ã·ã§ã³ã¯ãBakeèªäœã®å éšã§åããã®ãã·ããã§ããŸãã ããã¯äŸ¿å©ãªããšã§ããããã®ãããžã§ã¯ãå ã§ãããè¡ã£ãŠããŸãã ãšããããã§ãããã ãã§ãã ããããšãããããŸãã
ããã«è©³ãã
- GitHub ã¢ã¯ã·ã§ã³: https://docs.docker.com/build/ci/github-actions/
- ããã«ãŒã¯åããŠã§ãã? å§ããŸãããã
- Docker ãã¹ã¯ãããã®ææ°ãªãªãŒã¹ãå ¥æããŸãã
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã
- Docker Newsletter ã賌èªããŠãã ããã