ãšã³ã¿ãŒãã©ã€ãºRubyããªããªãŒãã€ãã©ã€ã³ã§ã¯ãéçè§£æãååçãªå質ã·ã°ãã«ã§ã¯ãªããã²ãŒãããŒãã³ã°ã¡ã«ããºã ãšããŠæ±ãåŸåã匷ãŸã£ãŠããŸããCIã¹ã«ãŒããããããžãã¹ããªããªãŒãçŽæ¥çã«å¶çŽããç°å¢ã§ã¯ããã€ãã©ã€ã³ã«æ¿å ¥ãããã¢ãã©ã€ã¶ãŒãå¢ããããšã«ãã¬ã€ãã³ã·ãé害ã¢ãŒãããããŠãªãã¬ãŒã·ã§ã³ã®çµåãçããŸããRubyã®åçå®è¡ã¢ãã«ã¯ãéçããŒã«ãã¡ã¿ããã°ã©ãã³ã°ãèŠçŽããŒã¹ã®é ç·ããããŠã³ã³ãã€ã«æã®ç¢ºå®æ§ãèæ ®ããŠèšèšãããŠããªãå®è¡æèšå®ã«ãŸãããåäœãæšè«ããå¿ èŠãããããããã®ç·åŒµé¢ä¿ãããã«å¢å¹ ãããŸãã
ã¢ãŒããã¯ãã£äžã®æ ¹æ¬çãªèª²é¡ã¯ãããŒã«ã®ç²ŸåºŠãã®ãã®ã®ç²ŸåºŠã§ã¯ãªãããã€ãã©ã€ã³ã®åã¹ããŒãžã«ããããªã¹ã¯ã®æŽåã§ããäžéšã®ã¢ãã©ã€ã¶ãŒã¯ãããŒãžãå®å šã«ãããã¯ã§ããé«éã§ç¢ºå®çãªãã£ãŒãããã¯ã«æé©åãããŠããŸãããäžæ¹ã§ãããæ·±ãã³ã³ããã¹ãã¢ããªã³ã°ãå¿ èŠãšãããããé«é »åºŠã®ã²ãŒãã£ã³ã°ã«ã¯é©ããªããã®ããããŸãããããã®ããŒã«ãé©åã«é©çšãããªãå Žåãçµç¹ã¯è匱ãªãã€ãã©ã€ã³ã«ééããéçºè ããã€ãã¹ãåŠç¿ããŠããŸããããããã¯åœ±é¿ã®å€§ããæ¬ é¥ããªãªãŒã¹ãã©ã³ãã«äŒæããäžæµã®ä¿®æ£ã³ã¹ããå¢å€§ããããããªèš±å®¹æ§ã®é«ãã²ãŒãã«ééããããšã«ãªããŸãã
çžé¢åæãªã¹ã¯
Smart TS XL ã¯ãRuby ã®éçè§£æããŒã¿ãå®çšçãªã¢ãŒããã¯ã㣠ã€ã³ããªãžã§ã³ã¹ã«å€æããã€ã³ãµã€ã ãã©ãããã©ãŒã ãšããŠæ©èœããŸãã
ä»ããæ¢çŽ¢ããå€§èŠæš¡ãªCIã§ã¯ãã²ãŒãããŒãã³ã°ã®å€±æã¯ã«ãŒã«ã®æ¬ èœã«ãã£ãŠåŒãèµ·ããããããšã¯çšã§ã管çãããŠããªãã·ã°ãã«ã®éè€ãæå¶ã®ããããçããŸãããªã³ãã£ã³ã°ã®æ€åºçµæãåéåãã»ãã¥ãªãã£ã¢ã©ãŒãã¯ãå ±éã®åªå é äœä»ãã¢ãã«ããªããŸãŸç«¶åããããšãå€ããããŒã ããªããžããªéã§äžè²«æ§ã®ãªãé©çšã«ã€ãªãããŸããæéã®çµéãšãšãã«ãããã¯å€æŽé »åºŠã®é«ãã¢ãžã¥ãŒã«ãç¹ã«å¢åãªãã¡ã¯ã¿ãªã³ã°ããµãŒãã¹æœåºãè¡ã£ãŠããã¢ããªã¹ã«é ãããªã¹ã¯éäžãåŒãèµ·ãããŸããããã¯ãããåºç¯ãªåé¡ãšå¯æ¥ã«é¢é£ããŠããŸãã ã¢ããªã±ãŒã·ã§ã³ã®è¿ä»£åãªã¹ã¯.
ãªã¹ã¯ç®¡çã¯ãéçè§£æã®çµæãå®éã®å®è¡ç°å¢ã«ã©ããããã³ã°ãããã«ãå·Šå³ãããŸããRubyã¢ããªã±ãŒã·ã§ã³ã¯ãäºæãã¬å¶åŸ¡ãã¹ãæé»çãªäŸåé¢ä¿ããããã¯éçããŒã«ãéšåçã«ããã¢ãã«åã§ããªããã¬ãŒã ã¯ãŒã¯äž»å°ã®åäœãªã©ã«ãããæ¬çªç°å¢ã§é »ç¹ã«å€±æããŸããCIããªãªãŒã¹ã¯ãŒã¯ãããŒãžã®èŠåŸããçµ±åããªããã°ãéçè§£æã¯äºé²çå¶åŸ¡ã§ã¯ãªãã³ã³ãã©ã€ã¢ã³ã¹ã¢ãŒãã£ãã¡ã¯ããšãªããè€éã§é²åããRubyç°å¢å šäœã«ãããããªããªãŒãªã¹ã¯ç®¡çã«ããã圹å²ã匱ãŸããŸããããã¯ãçŸåšé²è¡äžã®è°è«ã«ãåæ ãããŠããŸãã ãœãããŠã§ã¢ã€ã³ããªãžã§ã³ã¹ãã©ãããã©ãŒã .
Ruby ã®éçè§£æã«ããã CI ã²ãŒãããŒãã³ã°ããã³ãªã¹ã¯çžé¢ã¬ã€ã€ãŒãšããŠã® Smart TS XL
Rubyäžå¿ã®CIãã€ãã©ã€ã³ã«ãããéçè§£æã¯ãããŒã«ã®äžè¶³ãåå ã§å€±æããããšã¯ã»ãšãã©ãããŸããã倱æã®åå ã¯ãã·ã°ãã«ããªã³ã¿ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒãåãã§ãã«ãŒã«åæ£ããããŸãŸã«ãªã£ãŠããããšã§ããåããŒã«ã¯ç¬èªã®çãå®è¡ã¢ãã«ã«åºã¥ããŠãªã¹ã¯ãè©äŸ¡ãã屿çã«ã¯æå¹ã§ãã£ãŠãã°ããŒãã«ã«ã¯äžå®å šãªçµæãçæããŸãããšã³ã¿ãŒãã©ã€ãºããªããªãŒç°å¢ã§ã¯ããã®åæ£åã«ãã£ãŠã²ãŒãããŒãã³ã°ã®æææ±ºå®ãæãªãããŸãããªããªãããã€ãã©ã€ã³ã®çµæã¯ãæéçå¶çŽã®äžã§ãé倧床ãã¹ã³ãŒãã圱é¿åºŠãšããçžå®¹ããªãæŠå¿µã調åãããããšã«ããã£ãŠããããã§ãã
Smart TS XLã¯ãåã ã®Rubyã¢ãã©ã€ã¶ãŒã®äžäœã§åäœããã«ãŒã«ã®é©çšã§ã¯ãªããåäœã®å¯èŠæ§ãäŸåé¢ä¿ã®æ§é ãå®è¡ã®é¢é£æ§ã«çŠç¹ãåœãŠãããšã§ããã®ã®ã£ãããè§£æ¶ããŸãããã©ãããã©ãŒã ãªãŒããŒãã¢ããã€ãŒãŒã·ã§ã³ã¢ãŒããã¯ãã«ãšã£ãŠããã®æ©èœç䟡å€ã¯ãéçãªèª¿æ»çµæããé²åŸ¡å¯èœãªCIã²ãŒãã£ã³ã°ããªãªãŒã¹ãããã³ä¿®åŸ©ã®æ±ºå®ã«äœ¿çšã§ããã¢ãŒããã¯ãã£ã³ã³ããã¹ãã«å€æããããšã«ãããŸããç¹å®ã®RuboCopã®éåãBrakemanã®èŠåãããŒãžããããã¯ããã¹ããã©ãããåãã®ã§ã¯ãªãããã®ãã©ãããã©ãŒã ã¯ã倿Žãã·ã¹ãã å šäœã«ã©ã®ããã«äŒæããããã©ã®ã³ã³ããŒãã³ãããªã¹ã¯ãå¢å¹ ããããããããŠæå¶ãããªãããã·ã¹ãã å šäœã«ãªã¹ã¯ãããããå Žæãè©äŸ¡ã§ããããã«ããŸãã
ãã®äœçœ®ä»ãã«ãããSmart TS XLã¯éçºããŒã«ãšããããããããªããªãŒãªã¹ã¯ç®¡çã«éç¹ã眮ããã®ãšãªããç¹ã«Rubyã¢ããªã±ãŒã·ã§ã³ãä»ã®èšèªãå ±æãµãŒãã¹ããããŠé·æã«ãããã¬ã¬ã·ãŒã³ã³ããŒãã³ããšå ±åããç°å¢ã«ãããŠãã®éèŠæ§ãå¢ããŸããCIãã€ãã©ã€ã³ãåçŽãªååŠå€å®ããã圱é¿åºŠãæææš©ãå®è¡ã®éèŠåºŠã«åºã¥ããå·®å¥åãããã²ãŒããžãšç§»è¡ããã«ã€ããŠããã®éèŠæ§ã¯é«ãŸããŸãã
ç¬ç«ãã Ruby ã¢ãã©ã€ã¶ãŒãè¶ ããããŒã«éã®äŸåé¢ä¿ã®å¯èŠæ§
Rubyã®éçè§£æããŒã«ã¯éåžžããªããžããªããã¬ãŒã ã¯ãŒã¯ã®å¢çå ã§åäœããŸããRuboCopã¯ãã¡ã€ã«ãåå¥ã«è©äŸ¡ããBrakemanã¯Railsåºæã®ãããŒãã¢ãã«åããSorbetãSteepã¯ã¢ãããŒã·ã§ã³ãååšããå Žåã«åå¥çŽãé©çšããŸãããããã®ããŒã«ã¯ãããããã©ã®Rubyã¢ãžã¥ãŒã«ãã¯ãªãã£ã«ã«ãªå®è¡ãã¹äžã«ããããã©ã®ãµãŒãã¹ãå ±æã©ã€ãã©ãªã«äŸåããŠããããäœã¬ãã«ã³ã³ããŒãã³ãã®å€æŽãè€æ°ã®ãã€ãã©ã€ã³ã«ã©ã®ãããªåœ±é¿ãäžããããšãã£ããæšªæçãªè³ªåã«çããããããã«ã¯èšèšãããŠããŸããã
Smart TS XLã¯ãã³ãŒãããŒã¹å šäœã®æ§é æ å ±ãéçŽããäŸåé¢ä¿äžå¿ã®ãã¥ãŒãæäŸããéçãªæ€åºçµæãã·ã¹ãã ããããžã®èгç¹ããè§£éããããšãå¯èœã«ããŸãããšã³ã¿ãŒãã©ã€ãºãŠãŒã¶ãŒã«ãšã£ãŠããã®æ©èœã¯ãªã¹ã¯ããŒã¹ã®åªå é äœä»ããçŽæ¥çã«ãµããŒãããŸãã
äž»ãªæ©èœé¢ã¯æ¬¡ã®ãšããã§ãã
- éçãªçµæãå¢å¹ ãããé ä¿¡ãªã¹ã¯ã衚ãããã¡ã³ã€ã³ããã³ãã¡ã³ã¢ãŠãã®é«ãã³ã³ããŒãã³ããç¹å®ããŸãã
- Ruby ã¢ããªã±ãŒã·ã§ã³å±€ãå€éšãµãŒãã¹ãå ±æã©ã€ãã©ãªããŸãã¯ããã ã¯ãŒã¯ããŒãã«ãªã³ã¯ããäŸåé¢ä¿ãã§ãŒã³ã®èŠèŠåã
- éçãªåé¡ãšå®è¡ã¯ãªãã£ã«ã«ãã¹ã®çžé¢é¢ä¿ãåäžã® Ruby ã®å€æŽãè€æ°ã®äžæµã®æ¶è²»è ã«åœ±é¿ãäžããå¯èœæ§ãããå Žæã匷調衚瀺ããŸãã
CIã²ãŒãããŒãã³ã°ã®èгç¹ããèŠããšãããã«ããçµç¹ã¯ç»äžçãªåŒ·å¶å·è¡ããè±åŽã§ããŸãã圱é¿åºŠã®äœãé åã§ã®çºèŠäºé ã¯éåæçã«åŠçã§ããäžæ¹ãæ§é çã«éèŠãªã³ã³ããŒãã³ãã®åé¡ã«ã€ããŠã¯ãã峿 Œãªã²ãŒãã£ã³ã°ãæ£åœåãããŸãããã®ã¢ãããŒãã¯ããªã¹ã¯ç®¡çã匱ããããšãªããã€ãã©ã€ã³ã®æ©æŠã軜æžããåè¿°ã®æ¢åã®ãã©ã¯ãã£ã¹ãè£å®ããŸãã ãœãããŠã§ã¢ã€ã³ããªãžã§ã³ã¹ãã©ãããã©ãŒã .
ããŒãžãšãªãªãŒã¹ã®æ±ºå®ã®ããã®å®è¡ãèæ ®ãã圱é¿åæ
ãšã³ã¿ãŒãã©ã€ãºRubyããªããªãŒã«ãããŠæãã³ã¹ãã®ãããé害ã¢ãŒãã®äžã€ã¯ãåäœã§ã¯å®å šã«èŠãã倿Žãæ¿èªããŠããã¢ãã«åãããŠããªãå®è¡ãã¹ãåå ã§é害ãçºçããããšã§ããããã¯ããªãã¡ã¯ã¿ãªã³ã°ãgemã®ã¢ããã°ã¬ãŒãããããã¯Railsã¢ããªã¹ã®æ®µéçãªåè§£ã«ãããŠããçºçããæé»çãªçµåãèŠçŽã«åºã¥ãé ç·ã«ãã£ãŠå®éã®å®è¡æåäœãäžæçã«ãªãããšããããŸãã
Smart TS XLã¯ãå®è¡ãèæ ®ãã圱é¿åæãéèŠããéçæ§é ãããŒãžããã³ãªãªãŒã¹ã¬ããã³ã¹ã®ããã®å®çšçãªæŽå¯ã«å€æããŸããéçåæããã€ããªã·ã°ãã«ãšããŠæ±ãã®ã§ã¯ãªããææ¡ããã倿Žãæ¢åã®å®è¡ãããŒãšã©ã®ããã«çžäºäœçšããããè©äŸ¡ã§ããŸãã
察象ãŠãŒã¶ãŒã«ãšã£ãŠã®æ©èœäžã®å©ç¹ã¯æ¬¡ã®ãšããã§ãã
- 鿥çããã³æšç§»çãªäŸåé¢ä¿ãå«ãã圱é¿ãåããå®è¡ãã¹ãžã® Ruby ã³ãŒãã®å€æŽã®ãããã³ã°ã
- éçãªã³ã¿ãŒãåãã§ãã«ãŒã§ã¯å®å šã«ãã£ããã£ã§ããªãæ¹æ³ã§å¶åŸ¡ãããŒã倿Žãã倿Žãæ©æã«ç¹å®ããŸãã
- ã©ã®ã³ã³ããŒãã³ããäžç·ã«æ€èšŒããå¿ èŠãããããæç¢ºã«ããããšã§ã䞊è¡å®è¡ã𿮵éçãªããŒã«ã¢ãŠãæŠç¥ããµããŒãããŸãã
CIãªãŒããŒã«ãšã£ãŠããã®æ©èœã¯ãããªããªãŒãé ãããé床ã«ä¿å®çãªã²ãŒãã£ã³ã°ã«ãŒã«ãžã®äŸåã軜æžããŸãããªã¹ã¯ãšã³ã³ãã©ã€ã¢ã³ã¹ã®é¢ä¿è ã«ãšã£ãŠã¯ãã³ãŒã倿Žãå®è¡åäœããªãªãŒã¹æ±ºå®éã®ãã¬ãŒãµããªãã£ãæäŸããæåã¬ãã¥ãŒæé ã远å ããããšãªãç£æ»ã®é²åŸ¡åã匷åããŸãã
CIã¹ããŒãžå šäœã«ãããä¿¡å·ã®æ£èŠåãšåªå é äœä»ã
äŒæ¥ãæ±ããåé¡ã¯ãéçè§£æããŒã¿ã®äžè¶³ã§ã¯ãªããéæ§é åã·ã°ãã«ã®éå°ã§ããRubyãã€ãã©ã€ã³ã¯ããªã³ãã£ã³ã°ãã»ãã¥ãªãã£ã¹ãã£ã³ãäŸåé¢ä¿ãã§ãã¯ãåæ€èšŒãçµã¿åãããããšãå€ãããããããç°ãªã圢åŒãšé倧床ã¹ã±ãŒã«ã§åºåãçæããŸããæ£èŠåãè¡ãããŠããªãå ŽåãããŒã ã¯å Žåœããçãªæå¶ãäžè²«æ§ã®ãªãé©çšã«é Œãããšã«ãªããã¢ã©ãŒãç²ããç²ç¹ã«ã€ãªãããŸãã
Smart TS XLã¯ãããŒã«åºæã®ã¹ã³ã¢ãªã³ã°ã§ã¯ãªããã¢ãŒããã¯ãã£ã®åœ¹å²ãšå®è¡ãžã®åœ±é¿ã«åºã¥ããŠéçãªèª¿æ»çµæãæèåããæ£èŠåã¬ã€ã€ãŒãšããŠæ©èœããŸããããã¯æ¢åã®ã¢ãã©ã€ã¶ãŒã«åã£ãŠä»£ãããã®ã§ã¯ãªãããããã®åºåãåæ§æããããšã§ãäžè²«æ§ã®ããæææ±ºå®ããµããŒãããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- è€æ°ã® Ruby éçè§£æããŒã«ããã®çµæãçµ±äžãããæ§é ã³ã³ããã¹ãã«éçŽããŸãã
- ã«ãŒã«ã®é倧床ãã®ãã®ã§ã¯ãªããã³ã³ããŒãã³ãã®éèŠåºŠãšäŸåé¢ä¿ã®äœçœ®ã«åºã¥ããŠåé¡ãåªå é äœä»ãããŸãã
- ã³ã¢ ãµãŒãã¹ã®å³æ Œãªã²ãŒãã£ã³ã°ãåšèŸºã³ã³ããŒãã³ãã®ã¢ããã€ã¶ãª ã¬ããŒããªã©ãå·®å¥åããã CI ããªã·ãŒã®å®çŸ©ããµããŒãããŸãã
ãã®ã¢ãããŒãã¯ããã¹ãŠã®éåãå¿ ãããåçã®ãªã¹ã¯ã䌎ãããã§ã¯ãªãããšã³ã¿ãŒãã©ã€ãºããªããªãŒã®çŸå®ã«éçè§£æãé©åãããŸãããŸããç¡èŠãããçºèŠäºé ãæ§é çã«ææãªé åã«èç©ãããŠããå Žåããããæç¢ºã«ããããšã§æå¶ããªããã軜æžããŸããããã¯ãå€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ãã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã§é »ç¹ã«èŠããããã¿ãŒã³ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®è¿ä»£åãªã¹ã¯.
äŒæ¥ã®ã¹ããŒã¯ãã«ããŒåãã«ãªã¹ã¯ããŒã¹ã®CTAãæå¹ã«ãã
CTOããã©ãããã©ãŒã ãªãŒããŒããããŠã¢ããã€ãŒãŒã·ã§ã³ã¢ãŒããã¯ãã«ãšã£ãŠããã©ãããã©ãŒã ãéçšäžã®ãªãŒããŒããããå¢ããããšãªãäžç¢ºå®æ§ã軜æžã§ãããã©ãããããããªãåãçµã¿ã®æ±ºå®ãå·Šå³ããŸããSmart TS XLãRubyã®éçè§£æã«ç¹åããŠããã®ã¯ãã«ãŒã«éµå®ããããªããªãŒãªã¹ã¯ç®¡çãžãšè°è«ãé«åºŠåã§ããç¹ã§ãã
æ©èœçãªèгç¹ããèŠããšãããã¯æ¬¡ã®ããã«è§£éãããŸãã
- ã¢ãŒããã¯ãã£ãžã®åœ±é¿ã«åºã¥ããŠãRuby ã®éçè§£æããããã¯ãèŠåããŸãã¯éç¥ããå Žæãæç¢ºã«è¡šçŸããŸãã
- å¯èŠæ§ã®å ±æã«ãããéçºããŒã ããã©ãããã©ãŒã ææè ããªã¹ã¯æ©èœéã®é£æºãåäžããŸãã
- é«ãªã¹ã¯ã®ãªãªãŒã¹æã«æåã¬ãã¥ãŒãéšæã®ç¥èãžã®äŸåã軜æžãããŸãã
ãããã®ã¡ãªããã¯ãããŒã«ã®çœ®ãæãã§ã¯ãªããæŽå¯ãé«éåããããŠå¶åŸ¡ã«éç¹ã眮ããè¡ååèµ·ãçŽæ¥çã«ãµããŒãããŸãããã€ãºã®å€ãCIãã€ãã©ã€ã³ãè匱ãªã²ãŒãããããã¯äžéæãªãªã¹ã¯éäžã«æ©ãŸãããŠããçµç¹ã«ãšã£ãŠãSmart TS XLã¯ãå®è¡ãšäŸåé¢ä¿ã®çŸå®ã«åºã¥ããŠæ¢åã®Rubyéçè§£æãžã®æè³ãæ Œæ®µã«å¹æçã«ããæ¹æ³ãæäŸããŸãã
CI ã²ãŒãããŒãã³ã°ãšãªã¹ã¯ç®¡çã®ããã® Ruby éçè§£æããŒã«ã®æ¯èŒ
ãšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããRubyçšéçè§£æããŒã«ã®éžæã¯ãæ©èœã®å®å šæ§ããããå ·äœçãªããªããªãŒç®æšããªã¹ã¯ç®æšãšã®æŽåæ§ãéèŠã§ããããŒã«ã¯ããã€ãã©ã€ã³ã®è² è·äžã§ã®åäœãçºèŠäºé ã®å¯èŠåæ¹æ³ãã¬ããã³ã¹ããã³ããªã¢ãŒãžã¯ãŒã¯ãããŒãžã®çµ±åæ§ã«ãããŠå€§ããç°ãªããŸããå®è¡ç¹æ§ãã¹ã±ãŒãªã³ã°æåãé©çšã®é©åæ§ãç¡èŠããæ¯èŒã¯ãè匱ãªã²ãŒãããæå¶ãããŠããªããªã¹ã¯ã®èç©ã«ã€ãªããããšããããããŸãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãäžè¬çãªå質䞻匵ã§ã¯ãªããå ·äœçãªéçšç®æšã«åºã¥ããŠæ¯èŒãè¡ããŸããéžæãããåããŒã«ã«ããŽãªãŒã¯ãCIã²ãŒãããŒãã³ã°ã«ãããç¬èªã®åœ¹å²ãåæ ããŠãããããŒãžåã®è¿ éãªé©çšããã詳现ãªã»ãã³ãã£ãã¯ã¹ãã£ã³ãã¢ããã€ãŒãŒã·ã§ã³æ¯æŽãŸã§ããã®åœ¹å²ã¯å€å²ã«ããããŸããåããŒã«ãè©³çŽ°ã«æ€èšããåã«ãäŒæ¥ã®ç®æšãšããããããµããŒãããããã«æãé »ç¹ã«éžæãããããŒã«ãšã®æç¢ºãªãããã³ã°ã確ç«ããããšãç®çã§ãã
äž»èŠãªäŒæ¥ç®æšã«å¿ããæé©ãªããŒã«ã®éžæ
- é«éãã€æ±ºå®è«çãªãã¬ããŒãžã²ãŒãã£ã³ã°: RuboCopãStandardRB
- Railsç¹æã®ã»ãã¥ãªãã£èåŒ±æ§æ€åº: å¶åæ
- ãªããžããªå šäœã«ããããšã³ã¿ãŒãã©ã€ãº ããªã·ãŒã®é©çš: SemgrepãCodeQL
- ãªãã¡ã¯ã¿ãªã³ã°äžã®ã€ã³ã¿ãŒãã§ãŒã¹ããªããå¶åŸ¡: ã·ã£ãŒããããã¹ãã£ãŒã
- ä¿å®æ§ãšãªãã¡ã¯ã¿ãªã³ã°ã®ãããã¹ãããã®ç¹å®: ReekãRubyCritic
- å€§èŠæš¡ãªéäžåã»ãã³ãã£ã㯠ã»ãã¥ãªãã£åæ: ã³ãŒãQL
- ãªãŒããŒã·ããåãã®ã¬ããŒããšãã¬ã³ãã®å¯èŠæ§: ã«ããŒæ¹è©å®¶
ã«ãã³ãã
å ¬åŒãµã€ãïŒ ã«ãã³ãã
RuboCopã¯ãRubyã¹ã¿ã€ã«ãæ§é çäžè²«æ§ããããŠå®çŸ©ãããæ£ç¢ºæ§é¢é£ãã¿ãŒã³ã®ãµãã»ããã®é©çšã«éç¹ã眮ããã«ãŒã«é§ååã®éçè§£æãšã³ãžã³ãšããŠåäœããŸãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããRuboCopã®äž»ãªã¢ãŒããã¯ãã£ç圹å²ã¯ã決å®è«çãªã²ãŒãããŒãã³ã°ã§ããã€ãŸããã³ãŒã倿Žãè¿ éãã€äºæž¬å¯èœãªæ¹æ³ã§è©äŸ¡ããäžé©åãªãã¿ãŒã³ãå ±æãã©ã³ãã«äŸµå ¥ããã®ãé²ããŸããå®è¡ã¢ãã«ã¯ãã¡ã€ã«äžå¿ãã€æ§æçã§ãããããå®è¡æã®æåã¯ã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ããã¬ãŒã ã¯ãŒã¯ã®è€éãããããã¯ãããã€ã¡ã³ãããããžãŒã«å€§ããäŸåããŸããã
æ©èœçãªèгç¹ããèŠããšãRuboCopã¯RubyãœãŒã¹ã³ãŒãããã¬ã€ã¢ãŠããåœåãã¡ããªã¯ã¹ãLintãã§ãã¯ãšãã£ãç¹å®ã®ã«ãŒã«ã«ããŽãªã衚ãèšå®å¯èœãªãcopsã矀ã«ç §ããåãããŠè§£æããŸããäŒæ¥ã§ã¯éåžžãããã©ã«ãã®èšå®ãè¶ ããŠããªãã¡ã¯ã¿ãªã³ã°äœæ¥ãå®å®åããããŒã éã®ã°ãã€ããæžããããã®ç€Ÿå æšæºãèŠå®ããŠããŸãããã®èšå®ã®æè»æ§ã«ãããRuboCopã¯ããªã·ãŒé©çšã¬ã€ã€ãŒãšããŠæ©èœããç¹ã«ãçµ±äžæ§ãã¬ãã¥ãŒé床ãããŒãžã®å®å šæ§ã«çŽæ¥åœ±é¿ããå€§èŠæš¡ãªããžããªã«ãããŠå¹æãçºæ®ããŸãã
RuboCopã¯ãªãŒãã³ãœãŒã¹ã§ãããããäŸ¡æ Œèšå®ã¯æç¢ºã§ããããããäŒæ¥å šäœã®ã³ã¹ãã¯ã©ã€ã»ã³ã¹ã§ã¯ãªã鿥çãªãã£ãã«ãéããŠçºçããŸããããã«ã¯ãæ§æã¬ããã³ã¹ãã¬ã¬ã·ãŒã³ãŒãããŒã¹ã®ããŒã¹ã©ã€ã³äœæãè€æ°ã®ãã€ãã©ã€ã³ã«ãããã«ãŒã«ã®é²åã管çããããã®éçšãªãŒããŒããããå«ãŸããŸããæ°åã®RubyãµãŒãã¹ãæã€çµç¹ã§ã¯ãRuboCopã®æ§æãäžå åããŠåæ£ãåé¿ããããšããããããŸããããã«ãããããŒã ããšã®èªåŸæ§ã§ã¯ãªãããã©ãããã©ãŒã ã®æææš©ã®è²¬ä»»ãçããŸãã
CIå®è¡ã«ãããŠãRuboCopã®ããã©ãŒãã³ã¹ãããã¡ã€ã«ã¯é«é »åºŠã²ãŒãã£ã³ã°ã«æé©ã§ãã䞊åå®è¡ãšå¢åã¹ãã£ã³ããµããŒãããŠãããããã¢ãã¬ããå€§èŠæš¡ãªRailsã¢ããªã±ãŒã·ã§ã³ã«ã倧ããªã¬ã€ãã³ã·ãçºçãããããšãªãã¹ã±ãŒã«ã§ããŸãããã®äºæž¬å¯èœæ§ã«ãããéçºè ã®ä¿¡é Œãç¶æãããã€ãã¹ãã¿ãŒã³ãåé¿ããããã«å€±æã®æåã«äžè²«æ§ãæ±ãããããå¿ é ã®ããŒãžåãã§ãã¯ã«ãã䜿çšãããŸãã
RuboCopãæ¬æ¥ã®åœ¹å²ãè¶ ããŠäœ¿çšããããšããšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã¹ã±ãŒãªã³ã°ã®çŸå®ãé¡åšåããŸããè€éæ§ãé·ãã®éŸå€ãšãã£ãææšã«åºã¥ãCOPã¯ãã¬ã¬ã·ãŒã·ã¹ãã äžå¿ã®ã·ã¹ãã ã§ã¯æç¶çãªãã€ãºãçºçãããåºç¯å²ã«ãããæå¶ã«ã€ãªããå¯èœæ§ããããŸããèŠåŸããã¬ããã³ã¹ããªããã°ãæå¶ãã¡ã€ã«ã¯ä¿®åŸ©èœåãããéãå¢å ããæ¬æ¥ã®ãªã¹ã¯ç®¡çã®æå³ãæãªãç²ç¹ãçã¿åºããŸããããããç¶æ³ã¯ãæ¢ã«ããåºç¯ãªãªã¹ã¯ç®¡çã«èŠããã§ããç°å¢ã§é »ç¹ã«èŠãããŸãã ãœãããŠã§ã¢ç®¡çã®è€éã.
RuboCopã®æ§é çãªéçã¯ãããã°ã©ã å šäœãšããŒã¿ãããŒã®èªèãæ¬ åŠããŠããããšã«èµ·å ããŸãããã¬ãŒã ã¯ãŒã¯åºæã®å®è¡ãã¹ããµãŒãã¹éã®äŸåé¢ä¿ãã©ã³ã¿ã€ã åäœãã¢ãã«åããŸããããã®çµæãå¶åŸ¡ãããŒã®çžäºäœçšã«èµ·å ããã»ãã¥ãªãã£è匱æ§ãç¹å®ããããå®è¡ã¯ãªãã£ã«ã«ãã¹ãžã®å€æŽã®åœ±é¿ãæ€èšŒãããããããšãã§ããŸãããRuboCopã¯ãå æ¬çãªãªã¹ã¯åæããŒã«ãšããŠã§ã¯ãªããã³ãŒãã®åœ¢ç¶ãå®å®ãããã°ãã€ããäœæžããé«éã§çµ±äžããã匷å¶ã¡ã«ããºã ãšããŠæ±ãããšã§ãæã广ãçºæ®ããŸãããã®å¢çå ã«äœçœ®ã¥ããããããšã§ãRuboCopã¯åºç€ãšãªãCIã²ãŒããšããŠé«ã䟡å€ãæäŸããªããããã詳现ãªãªã¹ã¯è©äŸ¡ã¯è£å®çãªã¢ãã©ã€ã¶ãŒãã¢ãŒããã¯ãã£å¯èŠåã¬ã€ã€ãŒã«å§ããããšãã§ããŸãã
æšæºRB
å ¬åŒãµã€ãïŒ æšæºRB
StandardRBã¯ãèšå®ããŽã·ãšãŒã·ã§ã³ãšã«ãŒã«ã®æ¡æ£ãæé€ããããšãç®çã«èšèšããããç¬èªã®Rubyéçè§£æããã³ãã©ãŒãããããŒã«ãšããŠäœçœ®ä»ããããŠããŸãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããŠãStandardRBã®ã¢ãŒããã¯ãã£äžã®åœ¹å²ã¯ãé«åºŠã«èšå®å¯èœãªãªã³ã¿ãŒãšã¯å€§ããç°ãªããŸããã«ã¹ã¿ãã€ãºå¯èœãªããªã·ãŒãšã³ãžã³ãšããŠæ©èœããã®ã§ã¯ãªããStandardRBã¯ã³ãã¥ããã£ã«ãã£ãŠå®çŸ©ãããåºå®ã®ã«ãŒã«ã»ãããé©çšããããšã§ãããŒã ããªããžããªéã®äžè²«æ§ãšäºæž¬å¯èœæ§ãéèŠããŠããŸãããã®èšèšäžã®éžæã¯ãå€§èŠæš¡ãªç°å¢ã§ã®StandardRBã®å°å ¥ãã¬ããã³ã¹ããããŠä¿¡é Œã«çŽæ¥åœ±é¿ãäžããŸãã
æ©èœçã«ã¯ãStandardRB ã¯ãªã³ãã£ã³ã°ãšãã©ãŒããããåäžã®å®è¡ãã¹ã«çµ±åããæå°éã®ã»ããã¢ããã§ç¢ºå®çãªçµæãçæããŸããå€§èŠæš¡ãªèšå®é åããªãããããµãŒãã¹éã®å·®ç°ã®ãªã¹ã¯ã軜æžãããã«ã¹ã¿ã ã«ãŒã«éå±€ã®ç¶æã«äŒŽãã¬ããã³ã¹ã®ãªãŒããŒããããæããããŸããå€ãã® Ruby ããŒã ãæ±ããçµç¹ã§ã¯ããªã³ããŒãã£ã³ã°ããªããžããªã®çµ±åããã©ãããã©ãŒã æšæºåã®åãçµã¿ã«ãããæ©æŠãå€§å¹ ã«è»œæžã§ããŸããããã¯ãéçºè ãããââãžã§ã¯ãã®ã³ã³ããã¹ãã«é¢ä¿ãªãåãé©çšåäœãçµéšããããã§ãã
StandardRBã¯ãªãŒãã³ãœãŒã¹ã§ãããããäŸ¡æ Œèšå®ã¯ã·ã³ãã«ã§ããäŒæ¥ã³ã¹ãã¯éæ¥çã«çºçããŸãããé«åºŠã«æ§æå¯èœãªããŒã«ãšã¯ç°ãªã圢ã§çŸããŸããã«ãŒã«ã®ãã¥ãŒãã³ã°ã«æéãè²»ãã代ããã«ãçµç¹ã¯äŸå€ç®¡çã«æè³ããŸããã¬ã¬ã·ãŒã³ãŒãããŒã¹ã§ã¯ãé ä¿¡ã®ãããã¯ãåé¿ããããã«ãéžæçãªç¡å¹åãæ®µéçãªããŒã«ã¢ãŠãæŠç¥ãå¿ èŠãšãªãããšããããããŸããå šäœçãªæ§æãããããªã³ãã¯å°ãããŸãŸã§ããã管çãããŠããªãäŸå€ã¯äŸç¶ãšããŠèç©ãããå¯èœæ§ããããéçºè ã«ããã¢ãããã¯ãªåé¿çã§ã¯ãªãã管çãããã¢ãŒãã£ãã¡ã¯ããšããŠæ±ãå¿ èŠããããŸãã
CIå®è¡ã«ãããŠãStandardRBã¯é«éã²ãŒããšããŠåªããããã©ãŒãã³ã¹ãçºæ®ããŸããã²ãŒãã£ã³ã°ã·ããªãªã«ãããŠèªåãã©ãŒããããç¡å¹ã«ããç¶æ ã§äœ¿çšããå Žåããã®å®è¡ææåã¯RuboCopã«å¹æµããŸããã«ãŒã«ã¯åºå®ãããŠãããããã¹ãã£ã³çµæã¯æéãšç°å¢ãåããå®å®ããŠãããããŒã«ã®ã¢ããã°ã¬ãŒãåŸã«äºæãã¬ãã€ãã©ã€ã³é害ãçºçããå¯èœæ§ãäœæžããŸãããã®å®å®æ§ã¯ãCIã®æ±ºå®è«æ§ãèªååãããé©çšã«ãããä¿¡é Œæ§ã®åææ¡ä»¶ãšãªããèŠå¶ã®å³ããç°å¢ãé«å¯çšæ§ç°å¢ã§ç¹ã«åœ¹ç«ã¡ãŸãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã¹ã±ãŒãªã³ã°ã®çŸå®ã¯ã匷ã¿ãšå¶çŽã®äž¡æ¹ãæµ®ã圫ãã«ããŸããStandardRBã¯ãåæç¯å²ãéå®çã§ããã©ãŒãã³ã¹ãããã¡ã€ã«ãäºæž¬å¯èœã§ãããããå€§èŠæš¡ãªã³ãŒãããŒã¹ãã¢ãã¬ããžããªå šäœã§å¹æçã«ã¹ã±ãŒãªã³ã°ã§ããŸãããããããšã³ã¿ãŒãã©ã€ãºåºæã®èŠçŽããã¡ã€ã³é§ååãã¿ãŒã³ããã¬ãŒã ã¯ãŒã¯æ¡åŒµãããã©ã«ãã®ã«ãŒã«ããéžè±ããŠããå ŽåãStandardRBã®ç¬èªã®æ§è³ªãå¶çŽãšãªãå¯èœæ§ããããŸãããã®ãããªå ŽåãããŒã ã¯ããŒã«ã«ãªäŸå€ãšã瀟å ã®ã¢ãŒããã¯ãã£æšæºã«å®å šã«ã¯é©åããªãå¯èœæ§ã®ãããã¿ãŒã³ã®ããåºç¯ãªåãå ¥ãã®ã©ã¡ãããéžæããå¿ èŠããããŸãã
æ§é äžã®å¶çŽã¯ãStandardRB ã®é åãé«ããã®ãšåãååããçããŠããŸããStandardRB ã¯ãæ·±ãã»ãã³ãã£ãã¯è§£æããã¬ãŒã ã¯ãŒã¯åºæã®ã¢ããªã³ã°ãããŒã¿ãããŒæšè«ã詊ã¿ãŸããããã®çµæãå®è¡åäœãã»ãã¥ãªãã£ãªã¹ã¯ãã¢ãžã¥ãŒã«éã®åœ±é¿ã«é¢ããçŽæ¥çãªæŽå¯ã¯æäŸãããŸãããStandardRB ã®äŸ¡å€ã¯ãçµ±äžãããã³ãŒãæ§é ã匷å¶ããã¹ã¿ã€ã«ã®ã°ãã€ããæžããããšã«ãããŸããããã¯éæ¥çã«ãããå®å šãªãªãã¡ã¯ã¿ãªã³ã°ãšããæç¢ºãªã¬ãã¥ãŒã·ã°ãã«ããµããŒãããŸãããã®å¢çå ã§äœ¿çšãããå ŽåãStandardRB ã¯ãæ£ç¢ºæ§ãã»ãã¥ãªãã£ãã¢ãŒããã¯ãã£ãªã¹ã¯ã«å¯ŸåŠãããããç¹åããã¢ãã©ã€ã¶ãŒãè£å®ãããäœæ©æŠã§ä¿¡é Œæ§ã®é«ã CI ã²ãŒããšããŠæ©èœããŸãã
å¶åæ
å ¬åŒãµã€ãïŒ å¶åæ
Brakemanã¯ãRuby on Railsã¢ããªã±ãŒã·ã§ã³åãã«ç¹å¥ã«æ§ç¯ãããéçã»ãã¥ãªãã£åæããŒã«ã§ããæ±çšçãªãã¿ãŒã³ãããã³ã°ããããã¬ãŒã ã¯ãŒã¯ã®èªèãéèŠããå®è¡ã¢ãã«ãæ¡çšããŠããŸãããšã³ã¿ãŒãã©ã€ãºCIãã€ãã©ã€ã³ã«ãããŠãBrakemanã®ã¢ãŒããã¯ãã£äžã®åœ¹å²ã¯ç¹åãããæç¢ºã«éå®ãããŠããŸããå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãããŒã¿ããŒã¹ããããã¯å®å šãªãããã€ã¡ã³ãã³ã³ããã¹ããå¿ èŠãšããã«ããœãŒã¹ã³ãŒãããçŽæ¥Railsåºæã®è匱æ§ã¯ã©ã¹ãç¹å®ããŸãããã®ç¹æ§ã«ãããBrakemanã¯ãã«ãç°å¢ã«ãããäºæž¬å¯èœã§ç¹°ãè¿ãå¯èœãªã»ãã¥ãªãã£ã¹ãã£ã³ã«ç¹ã«é©ããŠããŸãã
æ©èœçã«ã¯ãBrakemanã¯ã³ã³ãããŒã©ãŒãã¢ãã«ããã¥ãŒãã«ãŒããèšå®ãã¡ã€ã«ãè§£éããããšã§Railsã¢ããªã±ãŒã·ã§ã³ãåæããå®å šã§ãªãããŒã¿ãããŒãšãªã¹ã¯ã®é«ããã¬ãŒã ã¯ãŒã¯ã®äœ¿çšãç¹å®ããŸãããã®æ€åºããžãã¯ã¯ãã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãå®å šã§ãªããã©ã¡ãŒã¿åŠçããã¹ã¢ãµã€ã³ã¡ã³ãã®è匱æ§ãèªèšŒã®è匱æ§ãã»ãã¥ãªãã£å¶åŸ¡ã®èšå®ãã¹ãšãã£ãåé¡ã«éç¹ã眮ããŠããŸãããããã®æ€åºçµæã¯Railsã®èŠçŽã«åºã¥ããŠãããããåŸæ¥ã®Railsã¢ãŒããã¯ãã£ã«é©çšããå Žåãäžè¬çãªã¹ãã£ããããé«ãä¿¡å·å質ã瀺ãããšããããããŸãã
Brakemanã¯ãªãŒãã³ãœãŒã¹ã§ãããããäŸ¡æ Œèšå®ã¯æå¿«ã§ããäŒæ¥å šäœã®ã³ã¹ãã¯ãã©ã€ã»ã³ã¹ã§ã¯ãªããçµ±åãšã¯ãŒã¯ãããŒç®¡çã«åæ ãããŸããçµç¹ã¯ãã¬ããŒãã®åã蟌ã¿ãæææš©ã®ãããã³ã°ããããŠä¿®åŸ©ã®è¿œè·¡ã«æè³ããããšã§ãçµæããµã€ãåãããã»ãã¥ãªãã£ã¢ãŒãã£ãã¡ã¯ããšåããªãããã«ããå¿ èŠããããŸããèŠå¶ã®å³ããç°å¢ã§ã¯ãå€ãã®å ŽåãBrakemanã®åºåãè匱æ§ç®¡çãã³ã³ãã©ã€ã¢ã³ã¹å ±åããã»ã¹ãšé£æºãããå¿ èŠããããŸãã
CIå®è¡ã«ãããŠãBrakemanã®åäœã¯æŠãå®å®ããŠãããæ±ºå®è«çã§ããéçãªãœãŒã¹ã³ãŒãã®ã¿ã®è§£æã«ãããäžæçãªã€ã³ãã©ã¹ãã©ã¯ãã£ãžã®äŸåãåé¿ãããã©ã³ããç°å¢éã®äžå®å®æ§ã軜æžããŸããã¹ãã£ã³æéã¯ã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ãšè€éãã«å¿ããŠå€åããç¹ã«å€§èŠæš¡ãªRailsã¢ããªã¹ã§ã¡ã¿ããã°ã©ãã³ã°ãã«ã¹ã¿ã DSLãå€çšãããŠããå Žåã«é¡èã§ããã¢ããªã±ãŒã·ã§ã³ã®èŠæš¡ã倧ãããªãã«ã€ããäŒæ¥ã¯ã¹ã«ãŒããããšã«ãã¬ããžã®ãã©ã³ã¹ãåãããã«ãBrakemanãå¿ é ã®ããŒãžåã²ãŒãããã¹ã±ãžã¥ãŒã«ãããã¹ãã£ã³ããªãªãŒã¹ãã©ã³ãã®ã¹ãã£ã³ã«ç§»è¡ããããšããããããŸãã
äŒæ¥ã®ã¹ã±ãŒã«ã¢ãŠãã®çŸå®ã¯ã匷ã¿ãšéçã®äž¡æ¹ãæµ®ã圫ãã«ããŸããBrakemanã¯Railsç¹æã®ãªã¹ã¯ã詳现ã«å¯èŠåããŸããããã®ç¯å²ã¯æå³çã«çãèšå®ãããŠããŸããRails以å€ã®Rubyã³ãŒããã¹ãRailså€ã§å©çšãããå ±æã©ã€ãã©ãªããµãŒãã¹éã®çžäºäœçšã¯åæããŸãããæ··åšç°å¢ã§ã¯ãç¹ã«RubyãµãŒãã¹ãä»ã®èšèªãã¬ã¬ã·ãŒã·ã¹ãã ãšçžäºäœçšããå Žåãç²ç¹ãåé¿ããããã«è£å®çãªããŒã«ãå¿ èŠã«ãªããŸããããã¯ãããåºç¯ãªã»ã¯ã·ã§ã³ã§è°è«ãããŠããæ®µéçãªã¢ããã€ãŒãŒã·ã§ã³ã®åãçµã¿ã«ãããŠãããããã¿ãŒã³ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®è¿ä»£åãªã¹ã¯.
é«åºŠãªã«ã¹ã¿ãã€ãºãè¡ãããç°å¢ã§ã¯ãæ§é çãªéçãçŸããŸããé«åºŠãªã¡ã¿ããã°ã©ãã³ã°ãåçãªã«ãŒãçæããããã¯åŸæ¥ãšã¯ç°ãªããã¬ãŒã ã¯ãŒã¯ã®äœ¿çšã¯ãæ€åºç²ŸåºŠãäœäžããããã誀æ€ç¥ãå¢å ããããããå¯èœæ§ããããŸããBrakemanã¯ç¡èŠãã¡ã€ã«ãšä¿¡é ŒåºŠãã¥ãŒãã³ã°ããµããŒãããŠããŸãããé©åã«å¶åŸ¡ãããŠããªãæå¶ã¯ãé·æçãªãªã¹ã¯ã®å¯èŠæ§ãæãªãå¯èœæ§ããããŸãã
Brakemanã¯ãéå±€åãããåææŠç¥ã®äžã§Railsåºæã®ã»ãã¥ãªãã£ã·ã°ãã«ãšããŠäœçœ®ä»ãããšæã广çã§ããRailsã®èŠçŽãæ¯é çãªé åã«ãããŠã䟡å€ã®é«ãèåŒ±æ§æ€åºãæäŸããŸãããå æ¬çãªã»ãã¥ãªãã£ãœãªã¥ãŒã·ã§ã³ãšããŠæ±ãã¹ãã§ã¯ãããŸããããšã³ã¿ãŒãã©ã€ãºCIãã€ãã©ã€ã³ã«ãããŠã¯ãå€ç«ãããã€ããªã²ãŒããšããŠé©çšããã®ã§ã¯ãªããããåºç¯ãªäŸåé¢ä¿ãå®è¡ãã¢ãŒããã¯ãã£ã«é¢ããç¥èŠãšäœµããŠãBrakemanã®ç¥èŠãæèåããããšã§ããã®äŸ¡å€ã¯æå€§éã«çºæ®ãããŸãã
ã»ã ã°ã¬ãã
å ¬åŒãµã€ãïŒ ã»ã ã°ã¬ãã
Semgrepã¯ãRubyãå«ãè€æ°ã®èšèªã«ãŸããããã¿ãŒã³ãããã³ã°ãéããŠãã»ãã¥ãªãã£ãšã³ã³ãã©ã€ã¢ã³ã¹ã®ããªã·ãŒãé©çšããããã«èšèšãããã«ãŒã«é§ååã®éçè§£æãšã³ãžã³ã§ãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããŠãSemgrepã®ã¢ãŒããã¯ãã£ç圹å²ã¯ããã¬ãŒã ã¯ãŒã¯ã¢ããªã³ã°ã§ã¯ãªããããªã·ãŒã®ã³ãŒãåã«éç¹ã眮ããŠããŸããSemgrepã¯ãçµç¹ãè€æ°ã®ãªããžããªãããŒã ãããªããªãŒãã€ãã©ã€ã³ïŒæ··åèšèªã®ç°å¢ãå«ãïŒã«ããã£ãŠãã»ãã¥ãªãã£ãä¿¡é Œæ§ãã³ã³ãã©ã€ã¢ã³ã¹ã®ã«ãŒã«ãäžè²«ããŠé©çšããå¿ èŠãããå Žåã«å°å ¥ãããã®ãäžè¬çã§ãã
Semgrep ã¯æ©èœçã«ãæ€åºãŸãã¯çŠæ¢ããã³ãŒããã¿ãŒã³ãèšè¿°ãã宣èšåã«ãŒã«ãé©çšããããšã§åäœããŸããRuby ã®å Žåãããã«ã¯å®å šã§ãªã API ã®äœ¿çšãå®å šã§ãªãããŒã¿åŠçãã¿ãŒã³ããããŠããã©ã«ãã®ãªã³ã¿ãŒããã¬ãŒã ã¯ãŒã¯ã¹ãã£ãã§ã¯ã«ããŒãããªãçµç¹åºæã®ã¢ã³ããã¿ãŒã³ã®ç¹å®ãå«ãŸããŸããã«ãŒã«ã¯æç€ºçã§äººéãèªãã圢åŒã§ãããããã»ãã¥ãªãã£ããŒã ãšãã©ãããã©ãŒã ããŒã ã¯å éšæšæºãã¹ãã£ã³å±€ã«çŽæ¥ãšã³ã³ãŒãããããšãã§ãããã³ããŒå®çŸ©ã®ãã¥ãŒãªã¹ãã£ãã¯ã®ã¿ã«é Œãã®ã§ã¯ãªããéçè§£æã®åºåã瀟å ã¬ããã³ã¹ã®ç®æšãšæŽåãããããšãã§ããŸãã
äŸ¡æ Œèšå®ã¯å°å ¥å±€ã«ãã£ãŠç°ãªããŸããã³ãã¥ããã£çã¯ãªãŒãã³ãœãŒã¹ã§ãããŒã«ã«ã¹ãã£ã³ãšåºæ¬çãªCIçµ±åã«é©ããŠããŸãããšã³ã¿ãŒãã©ã€ãºçã§ã¯ãèŠå¶ã®å³ããç°å¢ã§æ±ãããããäžå çãªã«ãŒã«ç®¡çãã¬ããŒãäœæãã¯ãŒã¯ãããŒçµ±åãå°å ¥ãããŠããŸããçµæžçãªãã¬ãŒããªãã¯ãã©ã€ã»ã³ã¹ããããã«ãŒã«ã®ã©ã€ããµã€ã¯ã«ç®¡çïŒäœæãæ€èšŒãããŒãžã§ã³ç®¡çã廿¢ãªã©ïŒã«å€§ããå·Šå³ãããŸããçµ±å¶ãããæææš©ããªããã°ãã«ãŒã«ã»ãããæ¥éã«å¢å€§ããã¹ãã£ã³çµæã®ä¿¡é Œæ§ãæãªããã€ãºãçºçããå¯èœæ§ããããŸãã
CIå®è¡ã«ãããŠãSemgrepã¯äžè¬çã«ããã©ãŒãã³ã¹ãé«ã䞊ååãå¯èœãªãããããŒãžåã®ãã§ãã¯ãšã¹ã±ãžã¥ãŒã«ããããã£ãŒãã¹ãã£ã³ã®äž¡æ¹ã«é©ããŠããŸããå®è¡æã®æåã¯ããªããžããªã®ãµã€ãºã ãã§ãªããã«ãŒã«ã®è€éããšããªã¥ãŒã ã«ãå·Šå³ãããŸããäŒæ¥ã§ã¯ãã²ãŒãã£ã³ã°çšã®ãé«éã«ãŒã«ããšãéåæã§å®è¡ãããããé«ã³ã¹ããªã«ãŒã«ãå®éšçãªã«ãŒã«ãåé¢ããããšããããããŸããããã«ãããã¹ã«ãŒããããç¶æããªãããããåºç¯ãªã«ãã¬ããžãç¶æã§ããŸããé害æã®æåã¯æ±ºå®è«çã§ãããããé©åã«æ§æãããŠããã°ããã€ãã©ã€ã³ã®çµæãäºæž¬ã§ããŸãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®æ¡åŒµãšããçŸå®ã¯ãéèŠãªå¶çŽãæããã«ããŠããŸããSemgrepã®æå¹æ§ã¯ãã«ãŒã«ã®å質ãšã¹ã³ãŒãå¶åŸ¡ã«å€§ããäŸåããŸããé©åã«èšè¿°ãããŠããªãã«ãŒã«ã¯ãç¹ã«ããŒã éã§æ £çšçãªãã¿ãŒã³ãç°ãªãåçãªRubyã³ãŒãããŒã¹ã§ã¯ã䟡å€ã®äœãæ€åºçµæã倧éã«çæããå¯èœæ§ããããŸããããã«ãäžéšã®é«åºŠãªãã¬ãŒã ã¯ãŒã¯å¯Ÿå¿åæã¯ãã¹ãŠã®å±€ã§å©çšã§ããããã§ã¯ãªããããããŒã«ã«éçºè ã®ã¹ãã£ã³ãšéäžç®¡çãããCIã®é©çšãç°ãªãå Žåãã«ãã¬ããžã«äžè²«æ§ããªããªãå¯èœæ§ããããŸãã
æ§é çãªéçã¯ããã¿ãŒã³ããŒã¹ã®åæã¢ãã«ã«èµ·å ããŠããŸããSemgrepã¯ç¹å®ã®ããŒã¿ãããŒã·ããªãªãè¿äŒŒããããšã¯ã§ããŸãããããã°ã©ã å šäœã®æå³ççè§£ãå®è¡ãã¹ã¢ããªã³ã°ã¯æäŸããŠããŸããããã®ãããSemgrepã¯ãåºçŸããåäœãçºèŠããããããæç€ºçãªããªã·ãŒãæ¢ç¥ã®ãªã¹ã¯ãã¿ãŒã³ãé©çšããããšã«é©ããŠããŸãããšã³ã¿ãŒãã©ã€ãºã¢ãŒããã¯ãã£ã«ãããŠãSemgrepã¯ãããæ·±ãæå³çåæãäŸåé¢ä¿ãèæ ®ããåæãšçµã¿åãããæç¢ºãªçè§£ã«åºã¥ããŠåäœããããšã§ãæé«ã®ããã©ãŒãã³ã¹ãçºæ®ããŸãã éçè§£æã®åºç€ãã¿ãŒã³ã®åŒ·å¶ãããåºç¯ãªãªã¹ã¯ã®å¯èŠæ§ã眮ãæããã®ã§ã¯ãªããè£å®ããããšãä¿èšŒããŸãã
ã³ãŒãQL
å ¬åŒãµã€ãïŒ ã³ãŒãQL
CodeQLã¯ãã¯ãšãªããŒã¹ã®éçè§£æãã©ãããã©ãŒã ã§ãããã³ãŒãã¹ãã£ã³ãã«ãŒã«ãããã³ã°ã§ã¯ãªãã»ãã³ãã£ãã¯ããŒã¿ã®åé¡ãšããŠæããŸãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããCodeQLã®ã¢ãŒããã¯ãã£ç圹å²ã¯ãã³ãŒãããŒã¹ã®æ§é å衚çŸã«å¯ŸããŠå®è¡ãããããã°ã©ã å¯èœãªã¯ãšãªãéããŠã深局è匱æ§ã®çºèŠãšããªã·ãŒé©çšãäžå¿ãšããŠããŸããRubyç°å¢ã«ãããŠãCodeQLã¯ãæ§æãã¿ãŒã³ãè¶ ãã説æå¯èœãã€ç£æ»å¯èœãªã»ãã¥ãªãã£æ€åºçµæãå¿ èŠãšããçµç¹ã«ãšã£ãŠãé«å¿ å®åºŠã®è§£æãªãã·ã§ã³ãšããŠäœçœ®ä»ããããŸãã
CodeQLã®æ©èœãšããŠã¯ããŸãRubyã³ãŒãããŒã¹ãããã°ã©ã æ§é ãå¶åŸ¡ãããŒãããŒã¿ãããŒã衚ãããŒã¿ããŒã¹ã«å€æããŸããæ¬¡ã«ããã®ããŒã¿ããŒã¹ã«å¯ŸããŠã¯ãšãªãå®è¡ããè匱æ§ãå®å šã§ãªããã¿ãŒã³ãè«çãšã©ãŒãç¹å®ããŸãããã®2ãã§ãŒãºå®è¡ã¢ãã«ã¯ãCodeQLãé«éãªãã¡ã€ã«æåã¹ãã£ããšåºå¥ãããã®ã§ããããã«ãããæ±æãããããŒã¿ã®äŒæãå®å šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãã¹ãè€æ°ã®å®è¡ãã¹ãç·åçã«èæ ®ããå Žåã«ã®ã¿çºçããè€éãªã€ã³ãžã§ã¯ã·ã§ã³ã·ããªãªãšãã£ãåé¡ããããæ£ç¢ºã«æ€åºã§ããŸãã
äŸ¡æ Œèšå®ã¯ããã©ãããã©ãŒã ã®çµ±åãšå©çšç¶æ³ã«ãã£ãŠç°ãªããŸããCodeQLã¯ãçµ±åãããã³ãŒãã¹ãã£ã³ã¯ãŒã¯ãããŒãéããŠå©çšãããããšãå€ããã©ã€ã»ã³ã¹ã¯ãããžã§ã¯ãããšã®æéã§ã¯ãªããããåºç¯ãªã»ãã¥ãªãã£ãŸãã¯ãã©ãããã©ãŒã ã®ãµãã¹ã¯ãªãã·ã§ã³ã«çŽä»ããããŠããŸããäŒæ¥ã®ã³ã¹ãèŠå ãšããŠã¯ãããŒã¿ããŒã¹çæã®ããã®ã³ã³ãã¥ãŒãã£ã³ã°æ¶è²»ããã€ãã©ã€ã³å®è¡æã®åœ±é¿ãã¯ãšãªããã¯ç®¡çã®éçšãªãŒããŒããããªã©ãæããããŸããã«ã¹ã¿ã ã¯ãšãªãäœæããçµç¹ã¯ãé·æã«ããã£ãŠã¯ãšãªãç¶æããã³æ€èšŒããããã«å¿ èŠãªå°éç¥èãèæ ®ããå¿ èŠããããŸãã
CIå®è¡ã«ãããŠãCodeQLã¯æç¢ºãªã¹ã±ãŒãªã³ã°ã®èæ ®äºé ãå°å ¥ããŸããããŒã¿ããŒã¹çæã¯ãç¹ã«å€§èŠæš¡ãªRubyã¢ããªã¹ããåºç¯ãªå±¥æŽãšãã©ã³ããæã€ãªããžããªã§ã¯ããªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ããããŸãããã®ãããäŒæ¥ã§ã¯ãéå®çãªã¯ãšãªã»ããã䜿çšãããã«ãªã¯ãšã¹ãã¹ãã£ã³ãšãããåºç¯ãªã¯ãšãªã¹ã€ãŒããå®è¡ããã¹ã±ãžã¥ãŒã«ã¹ãã£ã³ããªãªãŒã¹ãã©ã³ãã¹ãã£ã³ãé »ç¹ã«äœ¿ãåããŠããŸãããã®æ®µéçãªå®è¡ã¢ãã«ã«ãããCodeQLã¯CIã¹ã«ãŒããããå§è¿«ããããšãªã詳现ãªã€ã³ãµã€ããæäŸã§ããŸããããã€ãã©ã€ã³ã®èšèšãšæææš©ã®æ éãªç®¡çãå¿ èŠã§ãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®æ¡åŒµã®çŸå®ã¯ãCodeQLã®ã¬ããã³ã¹ãžã®åœ±é¿ãæµ®ã圫ãã«ããŠããŸãããã®åŒ·ã¿ã¯äžå åã«ãããŸããã»ãã¥ãªãã£ããŒã ã¯çµç¹å šäœã§äžè²«ããã¯ãšãªã»ãããå®çŸ©ã»é©çšã§ãããããèåŒ±æ§æ€åºã®ã°ãã€ãã軜æžã§ããŸãããããããã®äžå åã¯ãã©ãããã©ãŒã ããŒã ãžã®äŸåãçã¿åºããŸããæç¢ºãªç®¡çäœå¶ããªããã°ãã¯ãšãªã®æŽæ°ã«ãã£ãŠäºæãã¬çºèŠã®æ¥å¢ãã®ã£ãããçãããªãªãŒã¹ã®ä¿¡é Œæ§ã«åœ±é¿ãäžããå¯èœæ§ããããŸããããã«ãRubyåºæã®ã«ãã¬ããžã¯å€ãã®è匱æ§ã¯ã©ã¹ã«å¯ŸããŠå ç¢ã§ãããç¹å®ã®ãšããžã±ãŒã¹ã§ã¯ããäž»æµã®èšèªã«é ãããšãå¯èœæ§ãããããªã¹ã¯è©äŸ¡ã®éã«ã¯ãã®ç¹ãèæ ®ããå¿ èŠããããŸãã
æ§é äžã®å¶çŽã¯ãåæçãªãã®ã§ã¯ãªããäž»ã«éçšäžã®å¶çŽã§ããCodeQLã¯ãéçºè ããŒã«ã«ã®è¿ éãªãã£ãŒãããã¯ã«ãŒãåãã«èšèšãããŠãããããã®ã©ã³ã¿ã€ã ãããã¡ã€ã«ã¯ãæ±çšçãªãã¬ããŒãžã²ãŒããšããŠã¯é©ããŠããŸããããã®ç䟡ã¯ãé«éããŒã«ãè£å®ãããã£ãŒãã€ã³ã¹ãã¯ã·ã§ã³ã¬ã€ã€ãŒãšããŠäœ¿çšããããšã§çºæ®ãããŸããCodeQLãé©åã«é 眮ããããšã§ãäŒæ¥ã¯Rubyã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãã»ãã³ãã£ãã¯ã¬ãã«ã§æšè«ããããã®åŒ·åãªã¡ã«ããºã ãå©çšã§ããæ¥ã ã®ã³ãŒãã¹ã¿ã€ã«ã®åŒ·å¶ã§ã¯ãªããã³ã³ãã©ã€ã¢ã³ã¹ãç£æ»å¯èœæ§ããããŠé·æçãªãªã¹ã¯è»œæžãå®çŸã§ããŸãã
ã·ã£ãŒããã
å ¬åŒãµã€ãïŒ ã·ã£ãŒããã
Sorbetã¯ãRubyçšã®æ®µéçãªéçåãã§ãã«ãŒã§ããæ¬æ¥ã¯åçåä»ãã®ãšã³ã·ã¹ãã ã«æç€ºçãªåæ å ±ãå°å ¥ããŸãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããSorbetã®ã¢ãŒããã¯ãã£ç圹å²ã¯ãã¹ã¿ã€ã«ã®åŒ·å¶ãèåŒ±æ§æ€åºã§ã¯ãªããç¶ç¶çãªå€æŽã«ãããã€ã³ã¿ãŒãã§ãŒã¹ã®ããªããã®å¶åŸ¡ã§ããRubyã·ã¹ãã ãå€§èŠæš¡ãªãªãã¡ã¯ã¿ãªã³ã°ã®æ³¢ããµãŒãã¹ã®æœåºããããã¯äžŠåå®è¡ã«ããã¢ããã€ãŒãŒã·ã§ã³ãåããéã«ãã³ã³ããŒãã³ãéã®æé»çãªå¥çŽãããŒãžåŸããã³ãªãªãŒã¹åŸã®é害ã®äž»ãªåå ãšãªãå ŽåãSorbetã¯æå¹æ§ãçºæ®ããŸãã
Sorbetã¯æ©èœçã«ãåä»ãã¢ãããŒã·ã§ã³ãšãã¡ãœããã·ã°ããã£ã宿°ãããŒã¿æ§é ãèšè¿°ããçæãããã€ã³ã¿ãŒãã§ãŒã¹ãã¡ã€ã«ãä»ããŠåäœããŸããå®è¡åäœã¯èšèšäžãå¢åçã«å®è¡ãããŸããããŒã ã¯Sorbetãéžæçã«å°å ¥ãããªã¹ã¯ã®é«ãã¢ãžã¥ãŒã«ã«å³å¯ãªåä»ããé©çšããªãããåšèŸºé åã¯ç·©ãåä»ãã®ãŸãŸã«ããããšãã§ããŸããããã«ãããäŒæ¥ã¯ãµãŒãã¹ã€ã³ã¿ãŒãã§ãŒã¹ããã¡ã€ã³ã¢ãã«ãå ±æã©ã€ãã©ãªãªã©ã®éèŠãªå¢çãã¿ãŒã²ããã«ããããšãã§ããã³ãŒãããŒã¹å šäœã«äºåã«ã¢ãããŒã·ã§ã³ãé©çšããå¿ èŠã¯ãããŸããã
Sorbetã¯ãªãŒãã³ãœãŒã¹ã§ãããããäŸ¡æ Œèšå®ã¯æç¢ºã§ããäŒæ¥å šäœã®ã³ã¹ãã¯ãã©ã€ã»ã³ã¹ã§ã¯ãªããå°å ¥ãšã¬ããã³ã¹ã«ãã£ãŠçºçããŸããåä»ãã¢ãŒãã£ãã¡ã¯ãã¯ãæææš©ãã¬ãã¥ãŒãã©ã€ããµã€ã¯ã«ç®¡çãå¿ èŠãšããæ°ããçš®é¡ã®è³ç£ããããããŸããæç¢ºãªè²¬ä»»ã¢ãã«ããªããã°ããããã®ã¢ãŒãã£ãã¡ã¯ãã¯å€ããªããåãã§ãã¯ã®ä¿¡é Œæ§ãæãªãããCIã®é害ãå®è¡æã®çŸå®ãšä¹é¢ããŠããããã«èŠããå Žåã«æ©æŠãçããå¯èœæ§ããããŸãã
CIãã€ãã©ã€ã³ã«ãããŠãSorbetã®å®è¡ãããã¡ã€ã«ã¯å°å ¥ç¯å²ã«å€§ããäŸåããŸããéå®çã§å¢çéèŠã®åä»ãã¯ãè¿ éãã€äºæž¬éãã«å®è¡ã§ãããããæ©å¯æ§ã®é«ãé åã«ããã倿Žã®ã²ãŒãã£ã³ã°ã«é©ããŠããŸããå€§èŠæš¡ãªã¬ã¬ã·ãŒã³ãŒãããŒã¹å šäœã«ããã£ãŠåä»ããåºãããããã¯å³å¯ã«é©çšãããšãç¹ã«Rubyã¡ã¿ããã°ã©ãã³ã°ãåçåäœãåºãæ®åããŠããå Žåãå®è¡æéãšé害ã®é »åºŠãå¢å ããå¯èœæ§ããããŸããäŒæ¥ã§ã¯ãåä»ãã®åŒ·å¶ãããŒãžåã®ã²ãŒãã«æ®éçã«çµã¿èŸŒãã®ã§ã¯ãªããå°çšã®ãã€ãã©ã€ã³ã¹ããŒãžã«åå²ããããšã§ããã®åé¡ã軜æžããããšããããããŸãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã¹ã±ãŒãªã³ã°ã®çŸå®ã¯ãSorbetã®äºé¢æ§ãæµ®ã圫ãã«ããŠããŸããé©åã«ç®¡çãããŠããã°ãçµ±åãã¹ããæ¬çªç°å¢ãžã®å±éæã«è¡šé¢åããŠããŸããããªç Žå£ç倿Žãæ©æã«æ€åºã§ããŸããäžæ¹ãé©åã«ç®¡çãããŠããªãå Žåã¯ãéšåçãªãã€ãã¹ãéžæçãªç¡å¹åãä¿ãæ©æŠã®åå ãšãªãå¯èœæ§ããããŸããSorbetã®æå¹æ§ã¯ãåã®æ¡çšãã¢ãŒããã¯ãã£ã®æå³ãè€éæ§ã®éäžãšã©ãã ãæŽåããŠãããã«å¯æ¥ã«é¢é£ããŠããããã®é¢ä¿ã¯å€ãã®å Žåãæ¬¡ã®ãããªããã»ã¹ãéããŠæããã«ãªããŸãã èªç¥çè€éãã®æž¬å®.
æ§é äžã®å¶çŽã¯Rubyã®ãã€ãããºã ã«èµ·å ããŸããSorbetã¯ãå®è¡æã«çæãããåäœãDSLãå€çšããã³ãŒãããããã¯åºç¯å²ã«åã¶ã¢ã³ããŒããããªã©ããæåä»å ¥ãªãã«å®å šã«ã¢ãã«åããããšã¯ã§ããŸããããããã®ã®ã£ããã¯Sorbetã®äŸ¡å€ãåŠå®ãããã®ã§ã¯ãããŸããããæç¢ºãªå¢çå®çŸ©ãšæåŸ å€ãå¿ èŠã§ããSorbetã¯ãRubyã³ãŒãå šäœã«ãããæ®éçãªæ£ããæ€èšŒããŒã«ãšããŠã§ã¯ãªããã€ã³ã¿ãŒãã§ãŒã¹ã®å®å®æ§ãæãéèŠãšãªãç®æã«æå³çã«é©çšãããããªãã¡ã¯ã¿ãªã³ã°ãšã¢ããã€ãŒãŒã·ã§ã³ã®å¶åŸ¡ã¡ã«ããºã ãšããŠæ±ãããå Žåã«æã广çã§ãã
æ¥ãª
å ¬åŒãµã€ãïŒ æ¥ãª
Steepã¯ãRubyçšã®éçåãã§ãã«ãŒã§ãããRBSåã·ã°ããã£ãšã³ã·ã¹ãã ãããŒã¹ã«æ§ç¯ãããŠããŸããããã¯ãå ±æã»å€éšåãããå¥çŽãããéèŠãããæ®µéçåä»ãæŠç¥ã®ä»£æ¿ãšããŠäœçœ®ä»ããããŠããŸãããšã³ã¿ãŒãã©ã€ãºCIç°å¢ã«ãããŠãSteepã®ã¢ãŒããã¯ãã£ç圹å²ã¯ãåã¢ãããŒã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãã«çŽæ¥åã蟌ãã®ã§ã¯ãªããæç€ºçã«å®çŸ©ãããã€ã³ã¿ãŒãã§ãŒã¹ä»æ§ã«åºã¥ããŠRubyå®è£ ãæ€èšŒããããšã«éç¹ã眮ããŠããŸãããã®éãã¯ãã¬ããã³ã¹ãæææš©ããããŠã¹ã±ãŒãªã³ã°ã«éèŠãªåœ±é¿ãåãŒããŸãã
æ©èœçã«ã¯ãSteepã¯RubyãœãŒã¹ã³ãŒãããã¯ã©ã¹ã€ã³ã¿ãŒãã§ãŒã¹ãã¡ãœããã·ã°ããã£ããããŠæ³å®ãããããŒã¿æ§é ãèšè¿°ããRBSãã¡ã€ã«ãšæ¯èŒè©äŸ¡ããŸãããã®åé¢ã«ãããäŒæ¥ã¯åå®çŸ©ã第äžçŽã®ã¢ãŒããã¯ãã£ææç©ãšããŠæ±ãããšãã§ããå€ãã®å ŽåãAPIå¥çŽãå ±æã©ã€ãã©ãªä»æ§ãšäžŠè¡ããŠç®¡çãããŸããè€æ°ããŒã ç°å¢ã§ã¯ãRBSãã¡ã€ã«ãå ±æã³ã³ããŒãã³ãã®å¶äœè ãšå©çšè éã®æ£åŒãªåæãšããŠæ©èœãããããæææš©ã®å¢çãæç¢ºã«ãªããŸãã
Steepã¯ãªãŒãã³ãœãŒã¹ã§ãããããäŸ¡æ Œèšå®ã¯ã·ã³ãã«ã§ãããšã³ã¿ãŒãã©ã€ãºã³ã¹ãã¯ãããŒã«ã§ã¯ãªã眲å管çã«ãã£ãŠçºçããŸããRBSãªããžããªã¯ããã¥ã¬ãŒã·ã§ã³ãããŒãžã§ã³ç®¡çããããŠå®éã®ã³ãŒãé²åãšã®æŽåæ§ã確ä¿ããå¿ èŠããããŸããèŠåŸããããã»ã¹ããªããã°ã眲åãå®è£ ã«é ãããšã£ãŠããŸãå¯èœæ§ããããCIã®æ©æŠãçããããåé©çšãžã®ä¿¡é Œãæãªãå¯èœæ§ããããŸãããã®ãããSteepã®å°å ¥ã«ã¯ãã€ã³ã©ã€ã³åä»ãã¢ãããŒããããé«åºŠãªã¬ããã³ã¹ã®æçåºŠãæ±ããããããšããããããŸãã
CIå®è¡ã«ãããŠãSteepã®å®è¡æã®åäœã¯RBSã®é©çšç¯å²ã®åºããšã³ãŒãããŒã¹ã®è€éãã«äŸåããŸãããµãŒãã¹å¢çãšå ±æã©ã€ãã©ãªãžã®éäžçãªé©çšã¯ãäºæž¬å¯èœã§ãã€ãºã®å°ãªãçµæãçæããåŸåããããã²ãŒãã£ã³ã°ã«é©ããŠããŸããäžæ¹ãã¬ã¬ã·ãŒRubyã·ã¹ãã å šäœãžã®é©çšç¯å²ãåºãå Žåãã¹ãã£ã³æéãé·ããªããåçãªåäœãååã«ã¢ãã«åãããŠããªãç®æã§é »ç¹ã«é害ãçºçããå¯èœæ§ããããŸããäŒæ¥ã§ã¯ãä¿¡é Œæ§ãšã¹ã«ãŒãããã®ãã©ã³ã¹ãåãããã«ããã¹ãŠã®ãã«ãªã¯ãšã¹ãã§ã¯ãªããçµ±åãã©ã³ããŸãã¯ãªãªãŒã¹ãã©ã³ãã§Steepã®ãã§ãã¯ãå®è¡ããããã«æ®µéçã«èšå®ããããšãããè¡ãããŸãã
ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®æ¡åŒµæ§ã¯ãSteepãå¥çŽé§ååç°å¢ã«é©ããŠããããšãæµ®ã圫ãã«ããŠããŸããã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ãããŒãžã§ã³ç®¡çãããAPIããŸãã¯å ±æã¹ããŒããªããžããªãæ¢ã«ç®¡çããŠããçµç¹ã§ã¯ãSteepãæ¢åã®ãã©ã¯ãã£ã¹ãšèªç¶ã«é£æºããŠããããšã«æ°ä»ãããšããããããŸããäžæ¹ãéå ¬åŒãªå¥çŽãè¿ éãªã€ãã¬ãŒã·ã§ã³ã«æ £ããŠããããŒã ã¯ã倿Žã®ããŒãžã«çœ²åã®ç¶æãåææ¡ä»¶ãšãªããšãè»èœ¢ãçµéšããå¯èœæ§ããããŸãããã®ãã¬ãŒããªãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå®å®ããåã«æ¥éã«é²åããã¢ããã€ãŒãŒã·ã§ã³ããã°ã©ã ã«ãããŠç¹ã«é¡èã§ãã
æ§é äžã®å¶çŽã¯ãä»ã®Rubyåã·ã¹ãã ã«ãå ±éãããã®ã§ããSteepã¯ãå®è¡æã¡ã¿ããã°ã©ãã³ã°ãDSLããããã¯å€§èŠæš¡ãªã¢ã³ããŒãããã«ãã£ãŠçæãããåäœããæåã¢ããªã³ã°ãªãã«ã¯å®å šã«æšè«ã§ããŸããããã®ããããã®çäŸ¡ã¯æ éãªã¹ã³ãŒãéžæã«ããã£ãŠããŸããSteepã¯ããã¹ãŠã®Rubyã³ãŒãã«å¯Ÿããå æ¬çãªãœãªã¥ãŒã·ã§ã³ãšããŠã§ã¯ãªããæç¢ºã«å®çŸ©ãããå¢çã«ãããæ£ç¢ºæ§ã匷å¶ãããªãã¡ã¯ã¿ãªã³ã°ãšãµãŒãã¹ã®é²åããµããŒãããããã«äœ¿çšããå Žåã«æã广çã§ãããã®ãããªåœ¹å²ãæ ãå ŽåãSteepã¯Rubyæ¬æ¥ã®æè»æ§ãç¶æããªãããã€ã³ã¿ãŒãã§ãŒã¹ã®ããªãããå¶åŸ¡ããããã®å³å¯ãªã¡ã«ããºã ãäŒæ¥ã«æäŸããŸãã
ãšã³ã¿ãŒãã©ã€ãº CI ã®ãã¬ãã·ã£ãŒäžã«ããã Ruby éçè§£æããŒã«ã®æ¯èŒ
æ¯èŒããããšã§ãRubyã®éçè§£æããŒã«ãå®è¡æåãã¬ããã³ã¹ã³ã¹ããCIã²ãŒãããŒãã³ã°ãšè©³çްãªãªã¹ã¯æ€æ»ã®é©åæ§ã«ãããŠãã©ã®ãããªç¹ã§ç°ãªãããæç¢ºã«ãªããŸãã以äžã®è¡šã¯ããã©ãããã©ãŒã ãªãŒããŒãã¢ããã€ãŒãŒã·ã§ã³ã¢ãŒããã¯ããã ããŒããã©ãªãª åäžã®ããŒã«ãéžæããã®ã§ã¯ãªããããããã®åŽé¢ãããã€ãã©ã€ã³ã®ã¬ã€ãã³ã·æåºŠãã«ãŒã«ã¬ããã³ã¹ã®ãªãŒããŒããããåã ã®ãã¡ã€ã«ãè¶ ãããªã¹ã¯ã®æšè«èœåãªã©ãå€§èŠæš¡ãªRubyç°å¢ã«ãããéçšäžã®çŸå®ãåæ ããŠããŸãã
ãã®æ¯èŒã¯ãæ©èœãã§ãã¯ãªã¹ãã§ã¯ãªããã¢ãŒããã¯ãã£ã®æŽåæ§ãããªãã¯ã¹ãšããŠè§£éããå¿ èŠããããŸããããåŽé¢ã§åŒ±ãèŠããããŒã«ã¯ãå¥ã®åŽé¢ã«æå³çã«æé©åãããŠããããšãå€ããããŒã«èšèšãšCIã®åœ¹å²ã®äžæŽåã¯ããšã³ã¿ãŒãã©ã€ãºããªããªãŒãã€ãã©ã€ã³ã«ãããæ©æŠããã€ãã¹è¡åã®äžè¬çãªåå ãšãªããŸãã
| ããŒã« | CIã«ãããäž»èŠãªåœ¹å² | åæã®æ·±ã | å®è¡åäœ | CIã²ãŒãã®é©åæ§ | äŒæ¥ã®ã¹ã±ãŒãªã³ã°ã®çŸå® | æ§é äžã®å¶é |
|---|---|---|---|---|---|---|
| ã«ãã³ãã | ãªã³ãã£ã³ã°ãšããªã·ãŒã®é©çš | çµ±èªçããã³æ§é ç | é«éããã¡ã€ã«ããŒã¹ã決å®è«ç | ãã¬ããŒãžã²ãŒãã«åŒ·ã | ã¢ãã¬ãå šäœã§é©åã«ã¹ã±ãŒã«ããããæ§æã¬ããã³ã¹ãå¿ èŠ | ããŒã¿ãããŒãªããå®è¡ã¢ããªã³ã°ãªããã»ãã¥ãªãã£ã®æŽå¯ãéãããŠãã |
| æšæºRB | çµ±äžããããªã³ãã£ã³ã°ãšãã©ãŒããã | çµ±èªç | é«éãæèŠãæç¢ºãã°ãã€ããå°ãªã | ãã¬ããŒãžã²ãŒãã«åŒ·ã | æ§æãªãŒããŒãããã¯äœãããäŸå€ããªããã管çããå¿ èŠããã | ã«ã¹ã¿ãã€ãºãå¶éãããŠãããã»ãã³ãã£ãã¯åæãã»ãã¥ãªãã£åæã¯è¡ãããªã |
| å¶åæ | Railsã»ãã¥ãªãã£ã¹ãã£ã³ | ãã¬ãŒã ã¯ãŒã¯å¯Ÿå¿ã®éšåçãªããŒã¿ãã㌠| éçãœãŒã¹è§£æ; å®è¡æã«äŸåããªã | äžçšåºŠãå€ãã®å ŽåãªãªãŒã¹ã²ãŒã | Railsã¢ããªã¹ã®æ³šç®åºŠã¯é«ãããã¹ã³ãŒãã¯Railsã«éå®ããã | Rails以å€ã®Rubyã«ã¯é©çšã§ããŸãããã¡ã¿ããã°ã©ãã³ã°ãå€çšãããšå¿ å®åºŠãäœäžããŸãã |
| ã»ã ã°ã¬ãã | ããªã·ãŒãšã³ã³ãã©ã€ã¢ã³ã¹ã®æœè¡ | ãã¿ãŒã³ããŒã¹ã®å¶éãããããŒã¿ãã㌠| 䞊ååå¯èœ; ã«ãŒã«äŸåã®ã³ã¹ã | æè»æ§ããããã«ãŒã«ã®éå±€åã«å¿ããŠç°ãªããŸã | ãªããžããªå šäœã§ã¹ã±ãŒã«ããŸããã«ãŒã«ã®ã©ã€ããµã€ã¯ã«ç®¡çãéèŠã§ãã | åºçŸè¡åã«å¯Ÿãããã¿ãŒã³å¶éãç¯å²ã¯å±€ã«ãã£ãŠç°ãªããŸã |
| ã³ãŒãQL | é«åºŠãªã»ãã¥ãªãã£ãšã»ãã³ãã£ãã¯åæ | ããã°ã©ã å šäœãããŒã¿ãã㌠| ããŒã¿ããŒã¹æ§ç¯ãšã¯ãšãªå®è¡ | äºåããŒãžã®å Žåã¯äœããã¹ã±ãžã¥ãŒã«ã¹ãã£ã³ã®å Žåã¯åŒ·ããã | éäžç®¡çãããã¬ããã³ã¹ãã³ã³ãã¥ãŒãã£ã³ã°ãšãã€ãã©ã€ã³ã®è€éãã®å¢å | éçšäžã®ãªãŒããŒãããããã£ãŒãããã¯ã«ãŒãã®é å»¶ |
| ã·ã£ãŒããã | ã€ã³ã¿ãŒãã§ãŒã¹ããªããå¶åŸ¡ | ã¿ã€ãããŒã¹ãå¢çéèŠ | å¢åç; ã¹ã³ãŒãäŸå | ã¯ãªãã£ã«ã«ãã¹ã®éžæçã²ãŒãã£ã³ã° | ãªãã¡ã¯ã¿ãªã³ã°äžã«é«ã䟡å€ãçºæ®ããŸããåææç©ã®æææš©ãå¿ èŠã§ãã | åçãªRubyã®åäœã®éå®çãªã¢ããªã³ã° |
| æ¥ãª | RBSã«ããå¥çŽæ€èšŒ | åããŒã¹ã仿§é§å | 眲åè©äŸ¡ãšã³ãŒããã§ã㯠| éžæçãå€ãã®å ŽååäœµåŸ | å¥çŽäž»å°åã®çµç¹ã«åŒ·ãã眲åã¬ããã³ã¹ãå¿ èŠ | RBSããªãããªã¹ã¯ãåçãã¿ãŒã³ã«ã¯æåã¢ããªã³ã°ãå¿ èŠ |
ããããªäŒæ¥ããŒãºã«å¿ããããã®ä»ã®äººæ°ã®Rubyéçè§£æã®ä»£æ¿ææ®µ
å€ãã®äŒæ¥ã¯ãCIã²ãŒãããŒãã³ã°ãã»ãã¥ãªãã£åŒ·åãåå¶åŸ¡ã«äœ¿çšãããã³ã¢ããŒã«ã«å ããŠãããçããªã¹ã¯ãµãŒãã§ã¹ãã¯ãŒã¯ãããŒã®ã£ããã«å¯ŸåŠããããã®å°çšããŒã«ãRubyã®éçè§£æããŒããã©ãªãªã«è¿œå ããŠããŸãããããã®ä»£æ¿ããŒã«ã¯ãäž»èŠãªå¶åŸ¡ãšããŠååã§ããããšã¯çšã§ãããäŸåé¢ä¿ãªã¹ã¯ç®¡çãä¿å®æ§ã¬ããŒããéçºè ããŒã«ã«ãã£ãŒãããã¯ã«ãŒããªã©ã®ç¹å®ã®ã·ããªãªã§ã¯äŸ¡å€ãçºæ®ããå¯èœæ§ããããŸãã
ãã®ã«ããŽãªã¯ãRubyãåºç¯ãªãã©ãããã©ãŒã ç°å¢ã®ã³ã³ããŒãã³ãã®1ã€ã§ããå ŽåããŸãã¯ç¹å®ã®ãªã¹ã¯ããªã³ãã£ã³ã°ãåä»ãããã¬ãŒã ã¯ãŒã¯å¯Ÿå¿ã®ã»ãã¥ãªãã£ã¹ãã£ã³ã®ç¯å²å€ã«ããå Žåã«æãé¢é£ããŸãããããã®ããŒã«ãæå³çã«äœ¿çšããããšã§ãéèŠãªCIãã¹ã«ããããã€ãºãå¢ããããšãªããã«ãã¬ããžã匷åã§ããŸãã
ããããªãŠãŒã¹ã±ãŒã¹å¥ã«èŠã泚ç®ãã¹ã Ruby éçè§£æããŒã«ãšé¢é£ããŒã«
- ã«ããŒæ¹è©å®¶
Reekãªã©ã®ããŒã«ããã®åºåãéçŽããä¿å®æ§ã¹ã³ã¢ããã£ãŒã³ã¡ããªã¯ã¹ããããã¹ãããåæãçæããŸããããŒãžã²ãŒãã£ã³ã°ãããããªãŒããŒã·ããã¬ããŒãããªãã¡ã¯ã¿ãªã³ã°ã®åªå é äœä»ãã«æã圹ç«ã¡ãŸãã - ãã©
ä¿å®æ§ãšèšèšãªã¹ã¯ãæããã«ããããšãç®çãšãããéäžçãªã³ãŒãã¹ã¡ã«æ€åºãã¢ããã€ãŒãŒã·ã§ã³èšç»ã«ãããŠãªãã¡ã¯ã¿ãªã³ã°åè£ãç¹å®ããããã«ãã䜿çšãããŸãããã·ã°ãã«ã®è§£éã䞻芳çã§ããããã峿 ŒãªCIé©çšã«ã¯é©ããªãåŸåããããŸãã - ãã³ãã©ãŒç£æ»
æ¢ç¥ã®ã¢ããã€ã¶ãªã«ç §ãããŠäŸåé¢ä¿ã®è匱æ§ãã§ãã¯ãå®è¡ããŸããç¹ã«ããµãŒãããŒãã£ã®ãšã¯ã¹ããŒãžã£ãŒãå³å¯ã«ç£æ»ãããèŠå¶ç°å¢ã«ãããŠããµãã©ã€ãã§ãŒã³ã®ãªã¹ã¯ã«å¯ŸåŠããããšã§ãã³ãŒãã¬ãã«ã®ã¹ãã£ããè£å®ããŸãã - ã«ãšã«
æ§é çãªææšã§ã¯ãªããæŒç®åã®äœ¿çšã«åºã¥ããŠã³ãŒãã®è€éããæž¬å®ããŸããèªç¥çã«è€éãªRubyã¡ãœãããç¹å®ããããã«äœ¿çšãããããšããããŸãããçµæã«ã¯æèçãªè§£éãå¿ èŠã§ãã - ç®å¥ã
Rubyã³ãŒãããŒã¹å šäœã®æ§é çãªéè€ãæ€åºããŸããéè€ããžãã¯ã«ãã£ãŠã¡ã³ããã³ã¹ãäžå ·åã®ãªã¹ã¯ãé«ãŸãçµ±åããªãã¡ã¯ã¿ãªã³ã°ã®åãçµã¿ã«åœ¹ç«ã¡ãŸãã - Railsã®ãã¹ããã©ã¯ãã£ã¹
Railsåºæã®ã¢ã³ããã¿ãŒã³ã«å¯Ÿãããã¥ãŒãªã¹ãã£ãã¯ããŒã¹ã®ãã§ãã¯ãæäŸããŸããã¬ã¬ã·ãŒRailsã¢ããªã±ãŒã·ã§ã³ã§ãè¿ éãªãã£ãŒãããã¯ãæäŸã§ããŸãããã·ã°ãã«ã®å質ã¯ãã¬ãŒã ã¯ãŒã¯ã®å€ããã«ã¹ã¿ãã€ãºã«ãã£ãŠå€§ããç°ãªããŸãã - SonarQube Rubyã¢ãã©ã€ã¶ãŒ
ããåºç¯ãªå€èšèªå質ãã©ãããã©ãŒã ã«çµ±åãããŠããŸããäžå çãªã¬ããŒãäœæãšèšèªéã®äžè²«æ§ã®ããã«éžæãããããšãå€ãã§ãããRubyã«ãŒã«ã®æ·±ããšå®è¡ã®å¿ å®åºŠã¯å°çšããŒã«ã«å£ãå ŽåããããŸãã
Ruby ã®éçè§£æã®å°å ¥ã«åœ±é¿ãäžããäŒæ¥ã®å¶çŽ
ãšã³ã¿ãŒãã©ã€ãºRubyç°å¢ã§ã¯ãå°èŠæš¡ããŒã ãã°ãªãŒã³ãã£ãŒã«ããããžã§ã¯ããšã¯å€§ããç°ãªãæ¡ä»¶äžã§éçè§£æãå°å ¥ãããŠããŸããå°å ¥ãå·Šå³ããå¶çŽã¯ãæè¡çãªåŽé¢ã®ã¿ã«èµ·å ããŠããããšã¯çšã§ãããããã¯ãããªããªãŒã®èŠæš¡ãçµç¹æ§é ããããŠåŸæ¥ã®åäœãšææ°ã®CIãžã®æåŸ ãšã®çžäºäœçšããçããŸããRubyã®æè»æ§ã¯ããããããã¬ãã·ã£ãŒãå¢å¹ ãããŸãããªããªããéçããŒã«ã¯ãèŠçŽãã©ã³ã¿ã€ã æ§æãã¡ã¿ããã°ã©ãã³ã°ã峿 ŒãªããªããªãŒã¿ã€ã ã©ã€ã³ãšå ±åãããšã³ã·ã¹ãã ã§åäœããå¿ èŠãããããã§ãã
ãããã£ãŠãéçè§£æã®å°å ¥ã¯å¶çŽç®¡çã®äœæ¥ãšãªããŸããããŒã«ã¯ãã¹ã«ãŒããããäžå®å®ã«ããããšãªãæ¢åã®CIãã€ãã©ã€ã³ã«é©åããã¬ããã³ã¹ãšç£æ»ã®èŠä»¶ã«é©åããã¢ããªã¹ãããã¯ã°ã©ãŠã³ãåŠçã·ã¹ãã ãå ±æGemãAPIãµãŒãã¹ãªã©ãå«ãç°æ©çš®Rubyç°å¢å šäœã§ä¿¡é Œæ§ããã£ãŠåäœããå¿ èŠããããŸãããããããã¬ãã·ã£ãŒããããäŒæ¥ãåäžã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªãããŒã«ã®ããŒããã©ãªãªãæ¡çšããåŸåã«ããçç±ã§ããããŸããé©çšæŠç¥ãåæå°å ¥æã«åºå®ãããã®ã§ã¯ãªããæéã®çµéãšãšãã«é²åããçç±ã§ãã
CIã¹ã«ãŒãããã®å§åãšæ±ºå®è«çãªã²ãŒãããŒãã³ã°èŠä»¶
Rubyã®éçè§£æå°å ¥ã«åœ±é¿ãäžããäž»èŠãªå¶çŽã®äžã€ã¯ãCIã®ã¹ã«ãŒãããæåºŠã§ãããšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ãCIãã€ãã©ã€ã³ã¯è€æ°ã®ããŒã ã«ãŸãããæ°çŸãæ°åãã®ããŒãžãæ¯æ¥åŠçããŸããäºæž¬äžå¯èœãªã¬ã€ãã³ã·ãéæ±ºå®çãªçµæãããããéçè§£æããŒã«ã¯ãããã«ããã«ããã¯ã«ãªããŸãããã®å¶çŽã¯ãããŒã«ã®éžæã ãã§ãªãããã€ãã©ã€ã³å ã§ããŒã«ãã©ã®ããã«ãã©ãã§å®è¡ããããã«ã圱é¿ãäžããŸãã
Rubyã®ãªã³ã¿ãŒãšãã©ãŒããã¿ã¯ã決å®è«çãªå®è¡ç¹æ§ãåããŠãããããæåã«æ¡çšãããããšãå€ãã§ããåæç¯å²ãéå®ãããŠãããå®è¡æéã¯ãã¡ã€ã«æ°ã«æ¯äŸããŠå¢å ããé害ã¢ãŒããäºæž¬å¯èœã§ãããã®ããã峿 ŒãªããŒãžåã²ãŒãã£ã³ã°ã«é©ããŠããŸããããããäŒæ¥ã¯åãã¹ããŒãžã«ããã«æ·±ãã¢ãã©ã€ã¶ãŒã远å ãããšãæå³ããªãçµæãçããããšãé »ç¹ã«çºèŠããŠããŸããã»ãã¥ãªãã£ã¹ãã£ããŒãã»ãã³ãã£ãã¯ã¢ãã©ã€ã¶ãŒã¯ãã³ãŒãæ§é ãäŸåé¢ä¿ã®è§£æ±ºãã«ãŒã«ã®è€éãã«å¿ããŠå®è¡æéãå€åããå¯èœæ§ãããããã¥ãŒã®å¢å¹ ãéçºè ã«ãããã€ãã¹åäœã«ã€ãªããå¯èœæ§ããããŸãã
å¶çŽãšãªãã®ã¯é床ã ãã§ãªããäºæž¬å¯èœæ§ã§ããCIã®ææè ã¯ããªããžããªã®èŠæš¡ã«é¢ããããç¹å®ã®ã¢ãã©ã€ã¶ãŒãéãããæéæ å ã§å®äºãããšãã確信ãå¿ èŠã§ãããã®ç¢ºä¿¡ãæãªããããšã匷å¶åã¯åŒ±ãŸããŸãããã®ãã¿ãŒã³ã¯ãé »ç¹ãªçµ±åãé«éãªãã£ãŒãããã¯ã«ãŒããšèŠåŸããã²ãŒãã£ã³ã°ã«äŸåãããã©ã³ã¯ããŒã¹éçºãªã©ã®ãããåºç¯ãªããªããªãŒã¢ãã«ã®éžæè¢ãšå¯æ¥ã«é¢é£ããŠããŸãã å岿Šç¥ã®ãã¬ãŒããªã.
ãã®çµæãäŒæ¥ã¯Rubyã®éçè§£æãéå±€çã«åå²ããåŸåã匷ãŸã£ãŠããŸããé«éã§æ±ºå®è«çãªããŒã«ã¯å¿ é ã®ã²ãŒããšããŠæ©èœãããã詳现ãªè§£æã¯éåæãŸãã¯ãªãªãŒã¹ãã©ã³ãã§å®è¡ãããŸãããã®åå²ã¯ããŒã«ã®å¥œã¿ã«ãããã®ã§ã¯ãªããå€§èŠæš¡ãªç°å¢ã§ã¯ç¡èŠã§ããªãCIã¹ã«ãŒãããã®å¶çŽã«å¯Ÿããæ§é çãªå¯Ÿå¿ã§ãã
ã¬ã¬ã·ãŒRubyã®è³ç£ãšäžåäžãªåæç¯å²
ããäžã€ã®éèŠãªå¶çŽã¯ãçŸä»£ã®éçè§£æææ³ã確ç«ããã以åããååšãããé·ãã«ããã£ãŠå©çšãããŠããRubyã³ãŒãããŒã¹ã®ååšã§ããå€ãã®ãšã³ã¿ãŒãã©ã€ãºRubyã·ã¹ãã ã¯10幎以äžãããŠææ©çã«é²åããæé»ã®å¥çŽãéè€ããããžãã¯ããããŠååã«ææžåãããŠããªããã¬ãŒã ã¯ãŒã¯åºæã®åäœãèç©ãããŠããŸããããã®ãããªç°å¢ã«éçè§£æãå°å ¥ãããšãã¢ãžã¥ãŒã«éã§ã«ãã¬ããžã®äžåäžæ§ãšä¿¡å·å質ã®å€§ããªå·®ãé²åããŸãã
ã¬ã¬ã·ãŒç°å¢ãå€ãé åã§ã¯ãç¹ã«ä¿å®æ§ãè€éæ§ãéèŠããããŒã«ããã倧éã®çºèŠäºé ãçæãããåŸåããããŸããç¶¿å¯ãªã¹ã³ãŒãèšå®ããªããã°ãããŒã ã«è² æ ãããããäžåŸã«æå¶ãããŠããŸãå¯èœæ§ããããŸããããã§ã®å¶çŽã¯ã修埩èœåã§ããäŒæ¥ã«ã¯ãæ°ããã«ãŒã«ãé©çšããåã«éå»ã®ãã¹ãŠã®çºèŠäºé ã修埩ã§ããã ãã®äººå¡ããªã¹ã¯èš±å®¹åºŠãã»ãšãã©ãããŸããããã®ãããå°å ¥æŠç¥ã«ãããŠã¯ãéå»ã®è² åµãšå°æ¥ãèŠæ®ãã管çã®ãã©ã³ã¹ãåãå¿ èŠããããŸãã
ãã®ãã€ããã¯ã¹ã¯ã»ãã¥ãªãã£ã¹ãã£ã³ã«ã圱é¿ãäžããŸããRailså°çšããŒã«ã¯ãåŸæ¥ã®ã³ã³ãããŒã©ãŒã§ã¯é«ãä¿¡é Œæ§ã§æ€åºçµæãåºåããäžæ¹ã§ãã«ã¹ã¿ã ããã«ãŠã§ã¢ãããã¯ã°ã©ãŠã³ããžã§ãããããã¯åçã«çæãããã³ãŒããã¹ã«éäžãããªã¹ã¯ãèŠéããŠããŸãå¯èœæ§ããããŸããäŒæ¥ã¯ãã«ãã¬ããžãäžå®å šã§ããããšãåãå ¥ããããã«å¿ããŠé©çšããªã·ãŒãèšèšããå¿ èŠããããŸããéšåçãªã«ãã¬ããžãå æ¬çãªãã®ãšããŠæ±ãããšãããšã誀ã£ãä¿¡é Œæ§ãçãããªã¹ã¯å ±åã®æŽåæ§ãæãªãããŸãã
åæç¯å²ã®äžåäžæ§ã¯ãã¢ãŒããã¯ãã£ã®ã³ã³ããã¹ãã®å¿ èŠæ§ã匷ããŸããããžãã¯ã®éäžåºŠãšäŸåé¢ä¿ã®å¯åºŠãã©ãã«ããã®ããçè§£ããªããã°ãäŒæ¥ã¯ã©ã®çºèŠãæãéèŠãã倿ããã®ã«èŠåŽããŸãããã®èª²é¡ã¯ãå€§èŠæš¡ãªäŸåé¢ä¿ãããã³ã°ã§èŠãããåé¡ãšäŒŒãŠããŸããå¯èŠæ§ã®ã®ã£ããã«ãã£ãŠçã®ãªã¹ã¯éäžåºŠãäžæçã«ãªããšããåé¡ã§ãããã®ãããã¯ã«ã€ããŠã¯ãæ¬çš¿ã§èå¯ãããŠããŸãã äŸåã°ã©ãåæ.
ã¬ããã³ã¹ãç£æ»å¯èœæ§ãã³ã³ãã©ã€ã¢ã³ã¹ã®æŽå
Rubyã®éçè§£æããŒã«ã®äŒæ¥å°å ¥ã¯ããšã³ãžãã¢ãªã³ã°ããŒã 以å€ã«ãåã¶ã¬ããã³ã¹ãšç£æ»ã®èŠä»¶ã«ãã£ãŠå¶çŽãåããŠããŸããã³ã³ãã©ã€ã¢ã³ã¹ããªã¹ã¯ç®¡çãå éšç£æ»ã®é¢ä¿è ã¯ãã³ãŒã倿Žãè§£æçµæããªãªãŒã¹æ±ºå®ã®éã®ãã¬ãŒãµããªãã£ããŸããŸãæåŸ ããŠããŸããåçŸå¯èœãªçµæãç£æ»å¯èœãªã¢ãŒãã£ãã¡ã¯ããçæã§ããªãéçè§£æããŒã«ã¯ãéçºéšé以å€ããã®ä¿¡é ŒãåŸãã®ãå°é£ã§ãã
ãã®å¶çŽã¯ãããŒã«ã®éžæãšçµ±åãã¿ãŒã³ã«åœ±é¿ãäžããŸããæ©æ¢°å¯èªãªã¬ããŒããå®å®ããçµäºã³ãŒãããããŠäžè²«æ§ã®ããé倧床ã¢ãã«ãçæããããŒã«ã¯ãã¬ããã³ã¹ã¯ãŒã¯ãããŒãžã®çµ±åã容æã§ããéã«ãã¹ã³ã¢ãªã³ã°ãäžéæã§ãã£ãããã«ãŒã«ãé »ç¹ã«å€æŽãããããç°å¢ã«äŸåããåäœããããããããŒã«ã¯ãç£æ»ã®èšè¿°ãè€éåãããŸããèŠå¶ã®å³ããæ¥çã§ã¯ãæè¡çãªã¡ãªããã«é¢ãããããããå°å ¥ã®åŠšããšãªãå¯èœæ§ããããŸãã
ã¬ããã³ã¹äžã®ããäžã€ã®ãã¬ãã·ã£ãŒã¯ãã«ãŒã«ã®ã©ã€ããµã€ã¯ã«ç®¡çããçããŸããäŒæ¥ã¯ãã«ãŒã«ã®å°å ¥ææãæ€åºçµæã®ããªã¢ãŒãžæ¹æ³ãäŸå€ã®ä»äžæ¹æ³ãªã©ã«ã€ããŠãçµ±å¶ã瀺ããªããã°ãªããŸãããRubyã®éçè§£æããŒã«ã¯ããããã®ããŒã«ãã©ã®çšåºŠé©åã«ãµããŒãããŠãããã«ãã£ãŠå€§ããç°ãªããŸãããã¿ãŒã³ããŒã¹ã®ããŒã«ã§ã¯ã«ãŒã«ã®ç®¡çãæ±ããããŸããåã·ã¹ãã ã§ã¯ã·ã°ããã£ã¢ãŒãã£ãã¡ã¯ãã®æææš©ãæ±ããããŸãããªã³ã¿ãŒã§ã¯èšå®ã®ããŒãžã§ã³ç®¡çãæ±ããããŸããããããç°ãªãã¬ããã³ã¹äžã®è² æ ãçããŸãããçµç¹ã®æç床ã«åãããŠèª¿æŽããå¿ èŠããããŸãã
ãããããã¬ãã·ã£ãŒããããäŒæ¥ãéçè§£æçµæãéçºè å°çšã®ã·ã°ãã«ãšããŠæ±ãã®ã§ã¯ãªããããåºç¯ãªãªã¹ã¯ç®¡çããã»ã¹ã«çµ±åããçç±ã説æããŠããŸããç®æãã¹ãã¯ãç¶²çŸ çãªæ€åºã§ã¯ãªããé²åŸ¡å¯èœãªå¶åŸ¡ã§ãããè§£æã«ãã£ãŠç®¡çãããŠããªããã€ãºãçã¿åºãã®ã§ã¯ãªããæææ±ºå®ãæ¯æŽããããšã§ãã
CIãã€ãã©ã€ã³ã«ãããRubyéçè§£æã®æŠç¥çç®æš
ãšã³ã¿ãŒãã©ã€ãºCIãã€ãã©ã€ã³ã«ãããRubyã®éçè§£æã¯ãã³ãŒãå質ãšããæœè±¡çãªæŠå¿µã§ã¯ãªããæç¢ºãªæŠç¥ç®æšã®éæãç®çãšããŠæ¡çšãããŠããŸããå€§èŠæš¡ãªCIã§ã¯ãå ±æç°å¢ãéããŠäŒæãèš±å¯ãã倿Žãå¶åŸ¡ããå¶åŸ¡ã¡ã«ããºã ãšãªããŸããéçè§£æã¯ãå®è¡æã·ã°ãã«ãå©çšå¯èœã«ãªãåã«ããªããªãŒãªã¹ã¯ã«åœ±é¿ãäžããããšãã§ããæ°å°ãªãèªååãããææ®µã®äžã€ãšãªããŸãããããã£ãŠãæ¡çšãä¿é²ããç®çã¯ããªã¹ã¯ã®æå¶ã倿Žã®äºæž¬å¯èœæ§ããããŠéçšã®å®å®æ§ãšå¯æ¥ã«äžèŽããŠããŸãã
ãããã®ç®æšã¯ãRubyå®è¡ã®çŸå®ã«ãã£ãŠåœ¢äœãããŸããåçãã£ã¹ããããèŠçŽé§ååãã¬ãŒã ã¯ãŒã¯ããããŠã©ã³ã¿ã€ã èšå®ã¯ãçŽç²ã«äºé²çãªå¶åŸ¡ã®æå¹æ§ãäœäžãããŸãããã®çµæãRubyäžå¿ã®ãã€ãã©ã€ã³ã«ãããéçè§£æã¯ã絶察çãªæ£ããã®ä¿èšŒã§ã¯ãªããå·®å¥åããã匷å¶ãæ©æã®ãªã¹ã¯ã·ã°ããªã³ã°ããããŠæææ±ºå®æ¯æŽããµããŒãããããšãæåŸ ãããŸããæãæåããŠããããã°ã©ã ã¯ããããã®ç®æšãæç¢ºã«å®çŸ©ããããã«å¿ããŠããŒã«ãšåŒ·å¶ãã€ã³ããéžæããŠããŸãã
ã¹ã«ãŒããããäœäžãããããšãªãäºæž¬å¯èœãªããŒãžåäœã匷å¶ãã
CIã«ãããRubyã®éçè§£æã®äž»ãªç®çã®äžã€ã¯ããã€ãã©ã€ã³ã®ã¹ã«ãŒããããç¶æããªãããäºæž¬å¯èœãªããŒãžåäœãå®çŸããããšã§ããäŒæ¥ã¯ãè€æ°ã®ããŒã ã«ããç«¶åãã倿Žã調åããããã«CIãæŽ»çšããŠããŸããéçè§£æããŒã«ã¯ãäœå質ãŸãã¯é«ãªã¹ã¯ã®å€æŽãå ±æãã©ã³ãã«åã蟌ãŸããå¯èœæ§ãäœæžããããã«å°å ¥ãããŸãããçµ±åã®ãµã€ã¯ã«ãé»å®³ãããããªé å»¶ãçºçãããããšãªãããã®å¹æãçºæ®ããå¿ èŠããããŸãã
ãã®ç®æšã¯ãé«éã§æ±ºå®è«çãªã¢ãã©ã€ã¶ãŒãå¿ é ã®ãã¬ããŒãžã²ãŒããšããŠæ¡çšããããšãæšé²ãããã®ã§ãããªã³ã¿ãŒãšãã©ãŒããã¿ãŒã¯ãå®è¡ç¹æ§ãå®å®ããŠãããé害ã¢ãŒãã®è§£éã容æã§ãããããäžè¬çã«ãã®äœçœ®ä»ãã«äœçœ®ä»ããããŸããæŠç¥ç䟡å€ã¯ãåæã®æ·±ãã§ã¯ãªããé©çšã®äžè²«æ§ã«ãããŸããéçºè ãããŒã«ã®åäœãäºæž¬ã§ããå Žåãã³ã³ãã©ã€ã¢ã³ã¹ã¯åäžãããã€ãã¹è¡çºã¯æžå°ããŸãã
ããããäºæž¬å¯èœæ§ã匷åããã«ã¯ãæ éãªã¹ã³ãŒã管çãå¿ èŠã§ããäŒæ¥ã¯ãããŒã«ãæè¡çã«ã¯ããæ·±ãåæãå¯èœã§ãã£ãŠããéçšäžã¯é »ç¹ãªå®è¡ã«é©ããªããšããç¶æ³ã«é »ç¹ã«ééããŸããé«éã²ãŒããšåãæ®µéã§é«åºŠãªã»ãã¥ãªãã£ãã§ãã¯ãã»ãã³ãã£ãã¯ãã§ãã¯ã宿œããããšãããšããã¥ãŒã®æ··éãéžæçãªç¡å¹åã«ã€ãªããããšããããããŸãããããã£ãŠãæŠç¥çãªç®æšã¯æå€§éã®æ€åºã§ã¯ãªããæéçå¶çŽäžã§ã®å€æŽã®ç¢ºå®ãªèª¿æŽã§ãã
ãã®ç®çã¯ã調æ»çµæã®ãã¬ãŒã ã¯ãŒã¯ã«ã圱é¿ãäžããŸããããŒãžã²ãŒãã£ã³ã°ã«äœ¿çšãããéçè§£æã¯ãå®è¡å¯èœã§æç¢ºãªã·ã°ãã«ãçæããå¿ èŠããããŸããã¢ãŒããã¯ãã£ã®è§£éãåºç¯ãªã³ã³ããã¹ããå¿ èŠãšãã調æ»çµæã¯ãåŸã®æ®µéã«å»¶æããæ¹ãé©åã§ãããã¹ãŠã®éç調æ»çµæãåçã«æ±ãããšã¯ãCIã®ã²ãŒãããŒãã³ã°ã®åœ¹å²ãæãªãããªã¹ã¯ãæé€ããã®ã§ã¯ãªããäžæµã«ã·ãããããããšã«ãªããŸãã
ããŒãžåŸããã³ãªãªãŒã¹åŸã®ä¿®åŸ©ã³ã¹ãã®åæž
ããäžã€ã®éèŠãªç®çã¯ã倿ŽãããŒãžãŸãã¯ãªãªãŒã¹ãããåŸã®ä¿®æ£ã³ã¹ããåæžããããšã§ãããšã³ã¿ãŒãã©ã€ãºRubyã·ã¹ãã ã§ã¯ãåºæ¬çãªã¬ãã¥ãŒã¯ééãããã®ã®ãæ¢åã®ã³ãŒããã¹ãäŸåé¢ä¿ããŸãã¯å®è¡æã®åäœãšã®çžäºäœçšãæªãã£ã倿Žãã倧ããªåœ±é¿ãããããã€ã³ã·ãã³ãã®åå ãšãªãããšããããããŸããéçè§£æã«ãã£ãŠãæ¬æ¥ã§ããã°çµ±åãã¹ããæ¬çªéçšæã«ããé¡åšåããªããããªåé¡ã衚é¢åããããšãæåŸ ãããŸãã
ãã®ç®çã¯ãããšããã¬ããŒãžã²ãŒãã£ã³ã°ã«é©ããªãå Žåã§ãã£ãŠããCIã«è©³çްãªåæããŒã«ãçµã¿èŸŒãããšãæ£åœåããŸããã»ãã¥ãªãã£ã¹ãã£ããŒãã»ãã³ãã£ãã¯ã¢ãã©ã€ã¶ãŒãåãã§ãã«ãŒã¯ãå€ãã®å Žåãçµ±åãã©ã³ãããªãªãŒã¹åè£ãã©ã³ãã§å®è¡ãããŸãããããã®ãã©ã³ãã§ã¯ãã¹ã«ãŒãããã®è² è·ãäœããçµæã«åºã¥ããŠå®è¡å¯åŠã®å€æãè¡ãããšãã§ããŸããæŠç¥çãªäŸ¡å€ã¯ãå¿ ãããæ©æã®ãããã¯ã§ã¯ãªããæ©æã®å¯èŠæ§ã«ãããŸãã
修埩ã³ã¹ãã®åæžã¯ãçºèŠäºé ã®æèåã«ãå·Šå³ãããŸããéçè§£æçµæã圱é¿ãåããã³ã³ããŒãã³ããæææš©ã®å¢çã倿Žç¯å²ã«ãªã³ã¯ãããããšã§ãäŒæ¥ã¯ã¡ãªãããåŸãããŸãããã®æèããªããã°ãçºèŠäºé ã¯åå¥ã®ã¢ã©ãŒããšããŠå±ããæäœæ¥ã«ãã調æ»ãå¿ èŠãšãªããæ©æçºèŠã«ããã³ã¹ãã¡ãªãããæãªãããŸãããã®èª²é¡ã¯ãããåºç¯ãªåãçµã¿ãšå¯æ¥ã«é¢é£ããŠããŸãã 圱é¿åæææ³äžæµã®åœ±é¿ãçè§£ããããšã§ãåæã®ã·ã°ãã«ãå®çšçãªæææ±ºå®ã«ã€ãªãããã©ãããæ±ºãŸããŸãã
ãããã£ãŠãç®æšã¯2ã€ãããŸããå®è¡æãããæ©ãåé¡ãæ€åºãã調æ»ã®åŽåã軜æžããåœ¢ã§æç€ºããããšã§ããæåã®åºæºã®ã¿ãæºããããŒã«ã¯ãæåŸ ãããçµæžçå©çããããããªãããšããããããŸãã
è¿ä»£åãšå¶åŸ¡ããããªãã¡ã¯ã¿ãªã³ã°ã®åãçµã¿ããµããŒã
Ruby CIãã€ãã©ã€ã³ã«ãããéçè§£æã¯ãé·æã«ãããã¢ããã€ãŒãŒã·ã§ã³ãšãªãã¡ã¯ã¿ãªã³ã°ã®åãçµã¿ããµããŒãããããã«ãæ¡çšãããŠããŸããäŒæ¥ãRubyã·ã¹ãã ãå šé¢çã«æžãæããŠã¢ããã€ãºããããšã¯çšã§ãããã®ä»£ããã«ãç¶ç¶çããªããªãŒãç¶æããªãããæ®µéçã«ãªãã¡ã¯ã¿ãªã³ã°ããµãŒãã¹ã®æœåºãã³ã³ããŒãã³ãã®çœ®ãæããè¡ããŸããéçè§£æã¯ãããããç§»è¡äžã«æå³ããªãååž°ãé²ãããã®ã¬ãŒãã¬ãŒã«ãšãªããŸãã
ãã®æèã«ãããç®çã¯ãã¹ã¿ã€ã«ã®çŽç²ãã匷å¶ããããšã§ã¯ãªãã倿Žã®åœ±é¿ãå¶åŸ¡ããããšã§ããåãã§ãã¯ãäŸåæ§åæãä¿å®æ§ã·ã°ãã«ã¯ãããŒã ããªãã¡ã¯ã¿ãªã³ã°ã®ãªã¹ã¯ãéäžããŠããå Žæãšè¿œå ã®æ€èšŒãå¿ èŠãªå Žæãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããCIãã€ãã©ã€ã³ã¯ãã¢ãŒããã¯ãã£ãå€åããææã«èŠåŸã匷å¶ãããã§ãã¯ãã€ã³ããšããŠæ©èœããŸãã
ãã®ç®æšãéæããã«ã¯ãéçè§£æããŒã«ãæ°æ§ã®ã³ãŒãéã§äžè²«ããŠåäœããããšãæ±ããããŸããããŒã«ãæè¿ãªãã¡ã¯ã¿ãªã³ã°ãããã¢ãžã¥ãŒã«ã§ããããŸãåäœããªãå Žåããªã¹ã¯ãæãé«ãã¬ã¬ã·ãŒé åã«ç²ç¹ãçããŠããŸããŸãããã®ãããäŒæ¥ã¯ãéèŠãªå¢çã«éå®ããŠé©çšããããå šé¢çãªå°å ¥ãå¿ èŠãšããã«æ®µéçã«é©çšã§ããããŒã«ã奜ã¿ãŸãã
ãã®ç®æšã®æŠç¥çéèŠæ§ã¯ãè¿ä»£åããã°ã©ã ãè€æ°å¹Žã«ãããã«ã€ããŠé«ãŸããŸããéçè§£æã¯çµç¹ã®èšæ¶ã®äžéšãšãªããã€ã³ã¿ãŒãã§ãŒã¹ãäŸåé¢ä¿ãå¶çŽã«é¢ããç¥èãä¿åããŸãããããã®ç¥èã¯ãããŒã ã®äº€ä»£ã«ãã£ãŠå€±ãããŠããŸãå¯èœæ§ããããŸããããã¯ã次ã®ãããªããåºç¯ãªæžå¿µäºé ãšå¯æ¥ã«é¢é£ããŠããŸãã ã¬ã¬ã·ãŒã·ã¹ãã ã®è¿ä»£åã¢ãããŒãè¡åã®ç¶ç¶æ§ãæè¡ã®é²æ©ãšåããããéèŠã«ãªãå Žæã§ãã
ã¬ããã³ã¹ãšãªã¹ã¯ã®å©å®³é¢ä¿è ã«é²åŸ¡å¯èœãªèšŒæ ãæäŸãã
æçµçãªæŠç¥ç®æšã¯ããšã³ãžãã¢ãªã³ã°éšé以å€ã®å©å®³é¢ä¿è ã«å¯Ÿãããªã¹ã¯ç®¡çã®æ ¹æ ãšãªã蚌æ ãæäŸããããšã§ããå€ãã®äŒæ¥ã§ã¯ãCIãã€ãã©ã€ã³ã¯ãªã¹ã¯ãã³ã³ãã©ã€ã¢ã³ã¹ãç£æ»éšéã«ãã£ãŠç²Ÿæ»ãããŠããã倿Žãäžè²«ããŠè©äŸ¡ãããæ¢ç¥ã®ãªã¹ã¯ãæå³çã«ç®¡çãããŠããããšãæ±ããããŸããéçè§£æã¯ãäœããã€ãã§ãã¯ãããã©ã®ãããªçµæã«ãªã£ãããææžåããææç©ãäœæããããšã§ããã®ç®æšéæã«è²¢ç®ããŸãã
ãã®ç®çã¯ãããŒã«ã®éžæã«åŸ®åŠãªåœ±é¿ãäžããŸããåçŸå¯èœãªçµæãå®å®ããé倧床åé¡ããããŠæ©æ¢°å¯èªãªåºåãçæããããŒã«ã¯ãã¬ããã³ã¹ã¯ãŒã¯ãããŒãžã®çµ±åã容æã§ããäžæ¹ãéçºè ã®è§£éã«å€§ããäŸåããããçµæã倧ããå€åãããããããŒã«ã¯ãç£æ»ã®èšè¿°ãè€éåãããŸãããã®çµæãæè¡çã«åªããããŒã«ã§ãã£ãŠãã蚌æ èŠä»¶ãæºãããªããšããçç±ã§åªå é äœãäžãã£ãŠããŸãããšããããŸãã
éçè§£æã¯ãå·®å¥åãããå¶åŸ¡ãå¯èœã«ããããšã§ã¬ããã³ã¹ããµããŒãããŸããäŒæ¥ã¯ããªã¹ã¯ã®é«ãã³ã³ããŒãã³ãã«ã¯ãã峿 Œãªãã§ãã¯ãé©çšãããªã¹ã¯ã®äœãé åã«ã¯ããç·©ãå¶åŸ¡ãé©çšããŠããããšãå®èšŒã§ããŸãããã®æ¯äŸæ§ã¯ãç£ç£æ©é¢ã®æåŸ ã«å¿ããªããããªããªãŒé床ãç¶æããããã«äžå¯æ¬ ã§ãã
æçµçãªæŠç¥ç®æšã¯ããã¹ãŠã®æ¬ é¥ãæé€ããããšã§ã¯ãªãããªã¹ã¯ãçè§£ãããç£èŠããã管çãããŠããããšã瀺ãããšã§ããRuby CIãã€ãã©ã€ã³ã«ãããéçè§£æã¯ãã¹ããŒããšå¶åŸ¡ã®ãã©ã³ã¹ãå®çŸããããã®æ°å°ãªãã¹ã±ãŒã©ãã«ãªã¡ã«ããºã ã®äžã€ãšããŠæ©èœããŸãã
å°éçãªRubyåæããŒã«ã®å¯Ÿè±¡ãšãªãã·ããªãª
ãã¹ãŠã®Rubyéçè§£æããŒã«ããCIãã€ãã©ã€ã³å šäœã§åäžã«åäœããããã«èšèšãããŠããããã§ã¯ãããŸããããšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããŠæã广çãªå°å ¥ãã¿ãŒã³ã¯ãããŒã«ã®ã·ã°ãã«å質ãå®è¡åäœãã¬ããã³ã¹ç¹æ§ã察åŠãã¹ããªã¹ã¯ãšäžèŽããç¹å®ã®ã·ããªãªã«åãããŠããŒã«ã調æŽããããšã§å®çŸããŸãããã¹ãŠã®ããŒã«ããŠãããŒãµã«ã²ãŒãã«åŒ·å¶çã«é©çšããããšãããšãéåžžãéå°ãªãã€ãºãçºçããããé©çšã匱ãŸããã®ããããã«ãªã£ãŠããŸããŸãã
å°çšããŒã«ã¯ãRubyã·ã¹ãã ãã¬ã¬ã·ãŒãã©ãããã©ãŒã ãèŠå¶å¯Ÿè±¡ã®ã¯ãŒã¯ãããŒããããã¯é·æã«ãããã¢ããã€ãŒãŒã·ã§ã³ããã°ã©ã ãšäº€å·®ããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸããããããç¶æ³ã§ã¯ãéçè§£æã¯ã°ããŒãã«æšæºã®é©çšãšããããããéåžžã¯èгå¯ãé£ããç¹å®ã®ãªã¹ã¯é åãæããã«ããããšã«éç¹ã眮ãããŸããããããã·ããªãªãçè§£ããããšã§ããã©ãããã©ãŒã ãªãŒããŒã¯ããŒã«ãåºç¯å²ã§ã¯ãªããæ£ç¢ºã«å°å ¥ã§ããããã«ãªããŸãã
ã»ãã¥ãªãã£äžéèŠãª Rails ã¯ãŒã¯ããŒããèŠå¶åœå±ã®ç£èŠäžã«çœ®ããã
éèååŒãå人ããŒã¿ããŸãã¯èŠå¶å¯Ÿè±¡èšé²ãåŠçããRailsã¢ããªã±ãŒã·ã§ã³ã¯ãç¬ç¹ã®åæã·ããªãªãæç€ºããŸãããããã®ã·ã¹ãã ã§ã¯ãè匱æ§ãèŠéããå Žåã®ã³ã¹ãã¯ããªãªãŒã¹ã®é å»¶ã«ããã³ã¹ããããã¯ããã«é«ããªããŸãããã®ãããRails察å¿ã®ã»ãã¥ãªãã£ã¹ãã£ããŒã¯ãæ±çšçãªå質管çããŒã«ãšããŠã§ã¯ãªãããã¬ãŒã ã¯ãŒã¯ã¬ãã«ã®ãªã¹ã¯é²åºã«çŠç¹ãåœãŠãã¿ãŒã²ããåã³ã³ãããŒã«ãšããŠå°å ¥ãããŸãã
ãã®ã·ããªãªã§ã¯ãå°çšããŒã«ã®ç䟡ã¯ãRailsã®èŠçŽãšæé»çãªåäœãçè§£ããŠãããã©ããã«ãããŸããè匱æ§ã¯ãç¹æ®ãªã³ãŒããã¹ã§ã¯ãªããäžèŠå®å šã«èŠãããã©ã¡ãŒã¿ãã³ãŒã«ããã¯ããã«ããŒã¡ãœããã®åŸ®åŠãªèª€çšããçããããšããããããŸããæ±çšçãªãªã³ã¿ãŒã§ã¯ããããã®åé¡ãååãªå¿ å®åºŠã§æ€åºããããšã¯çšã§ããRailså°çšã®ã¹ãã£ããŒã¯ãã³ã³ãããŒã©ãŒãã¢ãã«ããã¥ãŒãä»ããããŒã¿ã®æµããã¢ãã«åããããšã§ãããä¿¡é Œæ§ã®é«ãçµæãæäŸããŸãã
éçšäžããããã®ããŒã«ã¯æéã®CIã²ãŒãã«é 眮ãããããšã¯ã»ãšãã©ãããŸãããããããçµ±åãã¹ã段éããªãªãŒã¹åè£çã®æ€èšŒããããã¯å®æã¹ãã£ã³ãšé£æºããŠé 眮ãããŸããããã¯ãããæ·±ãåæã«ã¯ããå€ãã®ã³ã³ããã¹ããšæéãå¿ èŠã§ãããšããèªèãåæ ããŠããŸããç®æšã¯ãéçºè ãžã®å³æãã£ãŒãããã¯ã§ã¯ãªãã倿Žãæ¬çªç°å¢ã«å°éããåã«æ©æã«ãªã¹ã¯ãå¯èŠåããããšã§ãã
äŒæ¥ã¯ãããã®ããŒã«ãã³ã³ãã©ã€ã¢ã³ã¹éµå®ã®è£ä»ãã«ã掻çšããŠããŸããRailsã¢ããªã±ãŒã·ã§ã³ãæ¢ç¥ã®è匱æ§ã¯ã©ã¹ã«ã€ããŠäœç³»çã«ã¹ãã£ã³ãããŠããããšãå®èšŒã§ããã°ãç£æ»ã®é²åŸ¡åãåäžããŸããããã¯ãå¶åŸ¡ããããªãªãŒã¹ããã»ã¹ãšææžåããã修埩ã¯ãŒã¯ãããŒã®èšŒæ ãšçµã¿åãããããšã§ç¹ã«éèŠã«ãªããŸããå€ãã®çµç¹ã§ã¯ãRailsã»ãã¥ãªãã£ã¹ãã£ããŒã®æ€åºçµæã¯ãéçºè ã®ããã¯ãã°ã§ã¯ãªããè匱æ§ç®¡çã·ã¹ãã ã«çŽæ¥åæ ãããŠããŸãã
ãã®ã·ããªãªã®éçã¯é©çšç¯å²ã§ãããããã®ããŒã«ã¯Rails以å€ãžã®æ±çšæ§ãäœããé«åºŠã«ã«ã¹ã¿ãã€ãºãããã¢ããªã±ãŒã·ã§ã³ãã¡ã¿ããã°ã©ãã³ã°ãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã®å¹æã¯éå®ãããŸãããã®ããããã¬ãŒã ã¯ãŒã¯èŠçŽãäž»æµã§ãèŠå¶ãžã®å¯Ÿå¿ããã€ãã©ã€ã³ã®è€éããæ£åœåãããããªã¯ãŒã¯ããŒãã«éžæçã«å°å ¥ããããšã§ãæã广ãçºæ®ããŸãã
å€§èŠæš¡ãª Ruby ã¢ããªã¹ã®æ®µéçãªè¿ä»£åãšãªãã¡ã¯ã¿ãªã³ã°
å€§èŠæš¡ãªRubyã¢ããªã¹ã段éçã«ã¢ããã€ãŒãŒã·ã§ã³ããŠãããšãç¹æ®ãªåæããŒã«ãéå°ãªäŸ¡å€ãä»å ãããšãããç°ãªãã·ããªãªãçãŸããŸããããããã·ã¹ãã ã§ã¯ããªã¹ã¯ã¯åã ã®ã³ãŒãè¡ã§ã¯ãªããå¯çµåããã¢ãžã¥ãŒã«ãå ±ææœè±¡åããããŠé·æã«ãããäŸåé¢ä¿ã«éäžããŸããåŸæ¥ã®CIã²ãŒãã§ã¯ãããããæ§é çãªãªã¹ã¯ãæããããªãããšãå€ãããªãã¡ã¯ã¿ãªã³ã°ã«ãã倿Žãæå³ããªãå¯äœçšãåŒãèµ·ããå¯èœæ§ããããŸãã
ããã§ã¯ã匷å¶ã§ã¯ãªãæææ±ºå®ãæ¯æŽããããã«ãä¿å®æ§ãšäŸåæ§ã«ç¹åããããŒã«ã玹ä»ããŸãããããã®ããŒã«ã®åœ¹å²ã¯ããªãã¡ã¯ã¿ãªã³ã°ã®ãããã¹ããããããžãã¯ã®éäžããããŠå€æŽãå¢å¹ ãããå¯èœæ§ã®ããé åãç¹å®ããããšã§ãããã®æ å ±ã«ãããã©ã®ã³ã³ããŒãã³ããæåã«ã¢ããã€ãºãã¹ããããããŠå€æŽæã«ã©ã®ã³ã³ããŒãã³ãã«è¿œå ã®æ€èšŒãå¿ èŠããããããŸãã
å®éã«ã¯ããããã®ããŒã«ã¯ã¯ãªãã£ã«ã«ããŒãžãã¹ã®å€åŽã§åäœããŸããç¹å®ã®ã¢ãžã¥ãŒã«ã«ãããè€éæ§ãéè€ã®å¢å ãªã©ãæéã®çµéã«äŒŽãåŸåãæµ®ã圫ãã«ããã¬ããŒããçæããŸããã¢ããã€ãŒãŒã·ã§ã³ããŒã ã¯ãã®ããŒã¿ã䜿çšããŠããªãã¡ã¯ã¿ãªã³ã°ã®ãŠã§ãŒããèšç»ãããµãŒãã¹ã®æœåºãã³ã³ããŒãã³ãã®çœ®ãæããè¡ãåã«ãé«ãªã¹ã¯é åã®å®å®åãžã®æè³ãæ£åœåããŸãã
ãã®ã·ããªãªã¯ãããåºç¯ãªã¢ãŒããã¯ãã£åæææ³ãšã®çµ±åã«ãã£ãŠãã¡ãªãããåŸãããŸããRubyã³ã³ããŒãã³ããããããžã§ããã¡ãã»ãŒãžã³ã°ã·ã¹ãã ãå€éšAPIãšã©ã®ããã«çžäºäœçšããããçè§£ããããšã¯ã段éçã«ã¢ããã€ãºããéã«äžå¯æ¬ ã§ããéçè§£æã®åºåã¯ãæ§é çãªå¯èŠæ§ãšçžé¢é¢ä¿ã«ãããšäŸ¡å€ãé«ãŸããŸããããã¯ãåè¿°ã®ã¢ãããŒããšåæ§ã§ãã ã³ãŒããã¬ãŒãµããªãã£ã®å®è·µã³ãŒãã®å€æŽãã·ã¹ãã ã®åäœã«ãªã³ã¯ããããšã§ãè¿ä»£åã®ãªã¹ã¯ã軜æžãããŸãã
ãã®ã·ããªãªã«ãããå¶çŽã¯å³ææ§ã§ãããããã®ããŒã«ã¯ãåã ã®ãã«ãªã¯ãšã¹ãã«å¯ŸããŠå®çšçãªãã£ãŒãããã¯ãæäŸããããšã¯ã»ãšãã©ãããŸãããçµæã«ã¯è§£éãšåªå é äœä»ããå¿ èŠãšãªããããèªåã²ãŒããšããŠã®æçšæ§ã¯éå®ãããŸãããããã®ããŒã«ã®äŸ¡å€ã¯ãã³ã³ãã©ã€ã¢ã³ã¹ã®åŒ·å¶ã§ã¯ãªããæŠç¥çå®ã«ãããŸãã
è€æ°ããŒã ã® Ruby ç°å¢å šäœã§ã®ããªã·ãŒã®é©çš
倿°ã®RubyããŒã ãšãªããžããªãæ±ããäŒæ¥ã¯ãã»ãã¥ãªãã£ãšã³ã³ãã©ã€ã¢ã³ã¹ã®å®è·µã«ãããäžè²«æ§ã®æ¬ åŠã«æ©ãŸãããããšããããããŸãããã®ãããªç¶æ³ã§ã¯ãå°çšã®ããªã·ãŒé©çšããŒã«ãå°å ¥ããçµç¹ã®ã«ãŒã«ãå®è¡å¯èœãªãã§ãã¯ãšããŠãšã³ã³ãŒãããè³ç£å šäœã«åäžã«é©çšããŸããç®çã¯ãæ°ããªåé¡ãçºèŠããããšã§ã¯ãªããæ¢ç¥ã®ãªã¹ã¯ãã¿ãŒã³ã®åçºãé²ãããšã§ãã
ãããã®ããŒã«ã¯ãæ¿èªæžã¿ã©ã€ãã©ãªãçŠæ¢APIããŸãã¯å¿ èŠãªå®å šå¯Ÿçã«é¢ããããªã·ãŒãçµç¹å ã§æç¢ºã«å®çŸ©ãããŠããå Žåã«åšåãçºæ®ããŸãããããã®ããªã·ãŒãã«ãŒã«ãšããŠè¡šçŸããããšã§ãäŒæ¥ã¯æäœæ¥ã«ããã¬ãã¥ãŒãçµç¹å ã®èšæ¶ãžã®äŸåã軜æžã§ããŸãããããã®ããŒã«ã¯ãããŒã æ°ã«å¿ããŠæ¡åŒµå¯èœãªåæ£åã®é©çšã¡ã«ããºã ãšãªããŸãã
ãã®ã·ããªãªã«ãããéçšã®æåã¯ãã«ãŒã«ã¬ããã³ã¹ã«ããã£ãŠããŸããã¢ãŒããã¯ãã£ã®é²åã«åãããŠãããªã·ãŒã¯ããŒãžã§ã³ç®¡çãã¬ãã¥ãŒããããŠå»æ¢ãããå¿ èŠããããŸããé©åãªç®¡çããªããã°ãã«ãŒã«ã»ããã¯æä»£é ãã«ãªããä¿¡é Œãæãªããã€ãºãçã¿åºããŸãããã®ç¶æ³ã§æåãåããäŒæ¥ã¯ãããªã·ãŒã«ãŒã«ãéçãªæ§æã§ã¯ãªãããã©ãããã©ãŒã ããŒã ãã»ãã¥ãªãã£ããŒã ãææããçããã¢ãŒãã£ãã¡ã¯ããšããŠæ±ããŸãã
CIãã€ãã©ã€ã³ã«ãããããªã·ãŒã«ãŒã«ã®é©çšç¯å²ã¯çµç¹ã«ãã£ãŠç°ãªããŸããéèŠãªãªããžããªã«å¯ŸããŠãããŒãžåã®ã²ãŒãã§ããªã·ãŒã«ãŒã«ãé©çšããçµç¹ãããã°ãããŒãžåŸã®ãšã¹ã«ã¬ãŒã·ã§ã³ã¯ãŒã¯ãããŒã§é©çšããçµç¹ããããŸãããã®æ±ºå®ã¯ããªã¹ã¯ã𿩿Šã®èš±å®¹åºŠåããåæ ããŠããŸãããããã®å Žåããå°çšã®ããªã·ãŒããŒã«ã®äŸ¡å€ã¯ã詳现ãã§ã¯ãªãäžè²«æ§ã«ãããŸãã
éçã¯è¡šçŸåã§ãããã¿ãŒã³ããŒã¹ã®ããªã·ãŒããŒã«ã¯ãåºçŸããåäœãè€éãªå®è¡ãã¹ãå®å šã«ã¢ãã«åããããšã¯ã§ããŸãããæç€ºçãªçŠæ¢äºé ãèŠä»¶ã®é©çšã«ã¯æé©ã§ããã埮åŠãªçžäºäœçšã®æ€åºã«ã¯é©ããŠããŸããããããã£ãŠããã®æå¹æ§ã¯ããšã³ã³ãŒããããããªã·ãŒã®æç¢ºãã«ãã£ãŠå¶éãããŸãã
ãµãŒãã¹æå Ruby ã¢ãŒããã¯ãã£ã«ãããåé§åå¢çå¶åŸ¡
Rubyã·ã¹ãã ããµãŒãã¹æåã¢ãŒããã¯ãã£ãžãšé²åããã«ã€ããã€ã³ã¿ãŒãã§ãŒã¹ããªããã®å¶åŸ¡ã¯æç¢ºãªåæã·ããªãªãšãªããŸããããã§ã¯ããµãŒãã¹ãå ±æã©ã€ãã©ãªãå éšAPIéã®å¥çŽã圢åŒåããããã«ãå°çšã®åãã§ãã¯ããŒã«ãå°å ¥ãããŠããŸãããã®ç®çã¯ãçµ±åã®å€±æãããŒã å šäœã«æ³¢åããåã«ãç Žå£çãªå€æŽãæ©æã«æ€åºããããšã§ãã
ãã®ã·ããªãªã§ã¯ãåã·ã¹ãã ã¯æ£ããã®æ€èšŒã§ã¯ãªãã倿Žã®æ€åºãšããŠæ©èœããŸããåã·ã¹ãã ã¯ãå®å®æ§ãæãéèŠãšãªãå¢çã«éžæçã«é©çšãããŸããããã«ãããäŒæ¥ã¯Rubyã®æè»æ§ãå éšçã«ç¶æããªãããçµ±åãã€ã³ãã§èŠåŸã匷å¶ããããšãã§ããŸããCIãã€ãã©ã€ã³ã¯ãå ±æã³ã³ãã©ã¯ãã«åœ±é¿ãäžãã倿Žãåãã§ãã¯ã«ãã£ãŠã²ãŒãããäºææ§ã®ãªã倿Žãæ©æã«èŠåããŸãã
éçšé¢ã§ã¯ããã®ã¢ãããŒãã¯åã·ã°ããã£ãã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ãšãã£ãæ°ããææç©ãçã¿åºããŸãããããã®ææç©ã管çããã«ã¯ãããŒã éã®æææš©ãšèª¿æŽãå¿ èŠã§ããé©åã«ç®¡çãããã°ã倿Žã®åœ±é¿ãè°è«ããããã®å ±éèšèªãšãªããŸãããããã軜èŠããããšãæ©æŠã®åå ãšãªããããŒã ã¯ãããåé¿ããªããã°ãªããŸããã
ãã®ã·ããªãªã®æŠç¥ç䟡å€ã¯ã䞊è¡éçºã𿮵éçãªããŒã«ã¢ãŠãã®éçšã§é«ãŸããŸããåé§ååå¢çå¶åŸ¡ã¯ãæé»ã®å¥çŽãæç€ºåããããšã§ãå¶åŸ¡ãããé²åããµããŒãããŸããããã¯ã倿Žã®åœ±é¿ãšãªãªãŒã¹ãªã¹ã¯ã管çããããã®ããåºç¯ãªåãçµã¿ãšæŽåããŠãããåè¿°ã®ãã©ã¯ãã£ã¹ãšåæ§ã§ãã ããã©ãŒãã³ã¹ååž°ãã¹ãæ©æçºèŠã«ããäžæµã³ã¹ããåæžããŸãã
éçã¯ã«ãã¬ããžã§ããåã·ã¹ãã ã¯Rubyã®åçãªæ¯ãèããå®å šã«ã¢ãã«åããããšã¯ã§ãããå æ¬çãªåä»ãã匷å¶ããããšãããšããã°ãã°è£ç®ã«åºãŸããåã·ã¹ãã ã®ç䟡ã¯ãã¹ã³ãŒããæ éã«å®çŸ©ãããã¢ãŒããã¯ãã£ã®æå³ãšäžèŽããŠããå Žåã«ã®ã¿çºæ®ãããŸãã
ãããã®ã·ããªãªã®ããããã«ãããŠãRubyã«ç¹åããåæããŒã«ã¯ãæ®éçã«é©çšãããŠããªããããã䟡å€ãçºæ®ããŸããããããéçãèªèããå°éããäŒæ¥ã¯ãããªããªãŒé床ãã¬ããã³ã¹ã®ä¿¡é Œæ§ãç ç²ã«ããããšãªããææçŸ©ãªæŽå¯ãåŒãåºãããã®åªäœæ§ã確ç«ã§ããŸãã
ãšã³ã¿ãŒãã©ã€ãºRubyã·ã¹ãã ã«ãããããŒã«éžæããé 信管çãŸã§
ãšã³ã¿ãŒãã©ã€ãºRubyã®éçè§£æããã°ã©ã ã®æåŠã¯ãã«ãã¬ããžã§ã¯ãªãã¢ã©ã€ã¡ã³ãã«ãã£ãŠæ±ºãŸããŸããäžèšã®åæãããCIã¹ã«ãŒãããã®èŠæ±ã詳现ãªãªã¹ã¯æ€åºãã¢ããã€ãŒãŒã·ã§ã³ã®å®å šæ§ãã¬ããã³ã¹ã®æåŸ ãåæã«æºããããŒã«ã¯1ã€ããªãããšãããããŸããããŒã«ã®çš®é¡ããšã«ç°ãªãé害ã¢ãŒãã«å¯ŸåŠãããããããããç»äžçãªé©çšåœ¹å²ã«æŒã蟌ãããšããã€ãºããã€ãã¹åäœããããã¯èª€ã£ã確信ãåžžã«çããŸãã
æãå埩åã®é«ãäŒæ¥ã¯ãRubyã®éçè§£æãéå±€åãããå¶åŸ¡ã·ã¹ãã ãšããŠæ±ã£ãŠããŸããé«éã§æ±ºå®è«çãªããŒã«ã¯ãããŒãžåäœãå®å®åãããããªããªãŒãµã€ã¯ã«ãç¶æããŸããããæ·±ãã»ãã³ãã£ãã¯ããã³ã»ãã¥ãªãã£ã¹ãã£ãã¯ããããã倿Žããããã¯ããããšãªããã©ã€ããµã€ã¯ã«ã®ããæ©ãæ®µéã§ãªã¹ã¯ãçºèŠã§ããããã«ããŸããä¿å®æ§ãšåé§ååããŒã«ã¯ãæ§é çãªãªã¹ã¯ãå¯èŠåããã€ã³ã¿ãŒãã§ãŒã¹ããªãããæç¢ºã«ããããšã§ãã¢ããã€ãŒãŒã·ã§ã³ãå°ããŸããããããé¢å¿ã®åé¢ããããCIãã€ãã©ã€ã³ãã¹ã±ãŒã«ãšå€æŽã®ãã¬ãã·ã£ãŒäžã§ãä¿¡é Œæ§ãç¶æã§ããçç±ã§ãã
ãã¹ãŠã®ã»ã¯ã·ã§ã³ã«å ±éãããã¿ãŒã³ã¯ãéçè§£æã®äŸ¡å€ã¯ã³ã³ããã¹ãã«äŸåãããšããããšã§ãã調æ»çµæã¯ãå®è¡ãã¹ãäŸåé¢ä¿ã®æ§é ãæææš©ã®å¢çããããŠãªãªãŒã¹ã®æå³ãšã®é¢é£ã§è§£éã§ããå Žåã«ã®ã¿æå³ãæã¡ãŸããããããã³ã³ããã¹ãããªããã°ãããšãé«å質ãªããŒã«ã§ãã£ãŠããåæãããã·ã°ãã«ãžã§ãã¬ãŒã¿ãŒãšåããŠããŸãã®ã§ããããã§ãã¢ãŒããã¯ãã£ã®å¯èŠæ§ãšããŒã«éã®çžé¢æ§ã決å®çãªåœ¹å²ãæãããŸããããã¯Rubyã¢ãã©ã€ã¶ãŒã®ä»£æ¿ãšããŠã§ã¯ãªããäŒæ¥ãèªä¿¡ãæã£ãŠåºåçµæã«åºã¥ããŠè¡åããããã®ã¡ã«ããºã ãšããŠéèŠã§ãã
çµå±ã®ãšãããäŒæ¥ã®ãªãŒããŒã«ãšã£ãŠã®èª²é¡ã¯ãã©ã®Rubyéçè§£æããŒã«ãæé©ãã§ã¯ãªããè§£æãããåºç¯ãªããªããªãŒç®¡çãã¬ãŒã³ã«ã©ã®ããã«çµã¿èŸŒããã§ãããªã¹ã¯ã®å·®å¥åãå®è¡ã®èªèããããŠã¬ããã³ã¹ã«åºã¥ãé²åãäžå¿ãšããŠCIãèšèšããçµç¹ã¯ãäºåŸçãªæ¬ 饿€åºã«ãšã©ãŸããŸããã圌ãã¯éçè§£æãããã€ãã©ã€ã³ã«ãããåãªããã§ãã¯ããã¯ã¹ã§ã¯ãªããã¢ããã€ãŒãŒã·ã§ã³ãã³ã³ãã©ã€ã¢ã³ã¹ããããŠå€§èŠæš¡ãªæç¶çãªããªããªãŒãæ¯ããæŠç¥çè³ç£ãšããŠæŽ»çšããŠããŸãã
