Rustã¯ãå ç¢ãªå®å šæ§ä¿èšŒã衚çŸåè±ããªåã·ã¹ãã ããããŠãŒãã³ã¹ãã®æœè±¡åãé«ãè©äŸ¡ãããé Œãã«ãªãã·ã¹ãã ããã°ã©ãã³ã°èšèªãšããŠæ¥éã«å°é ããŠããŸãããããããåçšãã§ãã«ãŒãšå³æ Œãªã³ã³ãã€ã«æãã§ãã¯ã«ãã£ãŠæ§ã ãªå®è¡æãšã©ãŒãæªç¶ã«é²ããšããé«ãè©äŸ¡ã«ããããããããããã¯ã·ã§ã³ã°ã¬ãŒãã®Rustãéçºããã«ã¯ãå質ãä¿å®æ§ããããŠã»ãã¥ãªãã£ã«å³å¯ãªé æ ®ãæ±ããããŸãã
ãããžã§ã¯ãã®èŠæš¡ãšè€éããå¢ããšãã©ããªã«èŠåŸã®æŽã£ãããŒã ã§ãã埮åŠãªãã°ãã¹ã¿ã€ã«ã®äžäžèŽãã»ãã¥ãªãã£äžã®è匱æ§ãçããå¯èœæ§ããããŸãã éçã³ãŒãåæ äžå¯æ¬ ã§ããããšã蚌æãããŠããŸãããããã®ããŒã«ã¯ããœãŒã¹ã³ãŒããå®è¡ããã«æ€æ»ããããšã§ãæœåšçãªãšã©ãŒãæ©æã«çºèŠããããŒã å šäœã«ã³ãŒãã£ã³ã°æšæºãé©çšããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãžã®æºæ ã確ä¿ããããšãã§ããŸãã
Rustéçºè ã«ãšã£ãŠãéçè§£æã¯åãªãå®å šç¶²ã§ã¯ãããŸãããã³ã³ãã€ã©ã®å³å¯æ§ãè£å®ããã¿ãŒã²ãããçµã£ããªã³ãã£ã³ã°ãã»ãã¥ãªãã£ã¹ãã£ã³ããããŠé²åãããããžã§ã¯ãã®ããŒãºã«åãããé«åºŠãªèšºææ©èœãæäŸããŸãããã®èšäºã§ã¯ãçŸåšRustã§å©çšå¯èœãªæã广çãªéçè§£æããŒã«ãããã€ã玹ä»ããŸããã³ãã¥ããã£äž»å°ã®ãªã³ã¿ãŒããé«åºŠãªè匱æ§ã¹ãã£ããŒãŸã§ããããã®ãœãªã¥ãŒã·ã§ã³ã¯éçºããŒã ãé«ãã³ãŒãåè³ªåºæºãç¶æããæè¡çè² åµãåæžãããŸããŸãèŠæ±ã®å³ããç°å¢ã«ãããŠä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãæäŸããããšãå¯èœã«ããŸãã
SMART TS XL
çŸä»£ã® Rust éçºã§ã¯ãèšèªã®åŒ·åãªå®å šæ§ä¿èšŒããã£ãŠããå質ãç¶æããã®ã¯å°é£ã§ãã SMART TS XL Rustç¬èªã®æ©èœã«åããã詳现ãªéçè§£ææ©èœãæäŸããããšã§ãä¿¡é Œæ§ãä¿å®æ§ãã»ãã¥ãªãã£ã«åªãããœãããŠã§ã¢ã®éçºãæ¯æŽããããã«èšèšãããŠããŸããåé¡ãæ©æã«çºèŠããäžè²«æ§ãç¶æããæäœæ¥ã«ããã¬ãã¥ãŒã®åŽåãåæžããããšã§ããããã§ãã·ã§ãã«ãªãšã³ãžãã¢ãªã³ã°ã¯ãŒã¯ãããŒããµããŒãããŸãã
SMART TS XL Rust ãããžã§ã¯ãã«åãçµãããŒã ã«ãšã£ãŠæé©ãªéžæè¢ãšãªãããŸããŸãªæ©èœãåããŠããŸãã
- è©³çŽ°ãªæå³åæ
颿°ãã¢ãžã¥ãŒã«ãæææš©ãã¿ãŒã³éã®é¢ä¿ãçè§£ããããšã§ãåçŽãªãªã³ãã£ã³ã°ã®æ ãè¶ ããåæå®è¡ãªã¹ã¯ãäžé©åãªåçšãã©ã€ãã¿ã€ã 管çã®äžåãã³ãŒãã¬ãã¥ãŒã§ã¯çºèŠãé£ããè«çãšã©ãŒãšãã£ãã埮åŠãªåé¡ãç¹å®ããŸãã - é«åºŠãªãªã³ãã£ã³ã°ãšã¹ã¿ã€ã«ã®åŒ·å¶
ã³ãŒãã£ã³ã°ã¬ã€ãã©ã€ã³ãèªåçã«é©çšããã³ãŒãããŒã¹ã®äžè²«æ§ãç¶æããŸããããŒã ã¯ç€Ÿå æšæºã«åãããã«ã¹ã¿ã ã®lintã«ãŒã«ãå®çŸ©ããããæ¥çã®ãã¹ããã©ã¯ãã£ã¹ãé©çšãããããããšã§ãã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãé·æã«ããã£ãŠç¶æã§ããŸãã - ã»ãã¥ãªãã£èåŒ±æ§æ€åº
å®å šã§ãªããã¿ãŒã³ãå®å šã§ãªããããã¯ãããã³ äžè¬çãªè匱æ§äŸåé¢ä¿ã®æ¢ç¥ã®åé¡ãã¹ãã£ã³ããéçºè ã匷åãªã»ãã¥ãªãã£äœå¶ãç¶æãããµãã©ã€ ãã§ãŒã³ã®ãªã¹ã¯ã«ããããããªã¹ã¯ã軜æžããã®ã«åœ¹ç«ã¡ãŸãã - èšå®å¯èœãªã«ãŒã«ã»ãã
æ§ã ãªãããžã§ã¯ããããŒã ã®ããŒãºã«åãããŠåæãæè»ã«ã«ã¹ã¿ãã€ãºã§ããŸããã«ãŒã«ã¯å¿ èŠã«å¿ããŠã«ã¹ã¿ãã€ãºãæå¹åãç¡å¹åã§ããããããã€ãºãçºçãããããšãªããåæã®é¢é£æ§ãšå®çšæ§ã確ä¿ã§ããŸãã - å€§èŠæš¡ã³ãŒãããŒã¹åãã®ã¹ã±ãŒã©ãã«ãªåæ
å°èŠæš¡ãªãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªãããåºç¯ãªã¢ãžã¥ãŒã«éå±€ãæã€è€éãªãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®ã·ã¹ãã ãŸã§ãå¹ åºããããžã§ã¯ãã«å¯Ÿå¿ããããã«æé©åãããŠããŸããæ·±åºŠã粟床ãç ç²ã«ããããšãªããé«éãªè§£ææéãç¶æããŸãã - å
æ¬çãªã¬ããŒã
é倧床ãçºçå Žæãæšå¥šãããä¿®æ£æ¹æ³å¥ã«åé¡ããã€ã©ã€ã衚瀺ããã詳现ã§èªã¿ãããã¬ããŒããçæããŸããããã¥ã¡ã³ãã·ã¹ãã ããã±ããçºè¡ã¯ãŒã¯ãããŒãžã®çµ±åããµããŒãããæè¡çè² åµã®é·æçãªè¿œè·¡ãšç®¡çãå¯èœã«ããŸãã - CI / CDçµ±å
ææ°ã® DevOps ãã€ãã©ã€ã³ã«é©åããããã«èšèšãããŠããŸãã SMART TS XL ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ã·ã¹ãã ã«çµ±åããŠãé倧ãªåé¡ã®ãããããã€ã¡ã³ãããããã¯ããå質ã²ãŒãã宿œããéçºã©ã€ããµã€ã¯ã«å šäœã«ããã£ãŠé«ãåºæºãç¶æã§ããŸãã - ã³ã©ãã¬ãŒã·ã§ã³ãµããŒã
ãããã倿Žã«å¯ŸããŠäžè²«æ§ã®ããèªåãã£ãŒãããã¯ãæäŸããããšã§ãããŒã ã®åè³ªç®æšã®éæãæ¯æŽããŸããå®åçãªãã§ãã¯ãåæããŒã«ã«ãªãããŒãããããšã§ã³ãŒãã¬ãã¥ãŒã®è² æ ã軜æžãããšã³ãžãã¢ãèšèšãã¢ãŒããã¯ãã£ã®è°è«ã«éäžã§ããããã«ããŸãã - IDEçµ±åãšéçºè
ãšã¯ã¹ããªãšã³ã¹
äžè¬çãªãšãã£ã¿ãIDEãšã®çµ±åãªãã·ã§ã³ã«ãããéçºè ã¯ã³ãŒãäœææã«ãªã¢ã«ã¿ã€ã ã®ãã£ãŒãããã¯ãåãåãããšãã§ããŸããéçºã®åææ®µéã§åé¡ãæ€åºããåŸã ã®ã³ã¹ãã®ãããä¿®æ£ãåæžããŸãã - å€èšèªã»è€æ°ãããžã§ã¯ãåæ
è€æ°ã®èšèªãå«ããããžã§ã¯ãããä»ã®ã·ã¹ãã ãšã®çžäºéçšæ§ãæã€ãããžã§ã¯ãããµããŒãããŸãããã®æè»æ§ã¯ãRustã¢ãžã¥ãŒã«ãä»ã®ã¹ã¿ãã¯ãšé£æºããå€èšèªç°å¢ã§äœæ¥ããRustããŒã ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ãã®ã¬ãã«ã®å æ¬çãã€æ§æå¯èœãªåæãæäŸããããšã§ã SMART TS XL åãªããªã³ãã£ã³ã°ããŒã«ä»¥äžã®æ©èœãæäŸããŸãããããã§ãã·ã§ãã«ãªRustéçºã«ãããŠãã³ãŒãã®å質ãšã»ãã¥ãªãã£ãå®ã匷åãªä¿è·ææ®µãšããŠæ©èœããŸãã SMART TS XL æ¬çªç°å¢ã§ã®ãã°ã®æžå°ãã³ãŒãã¬ãã¥ãŒã®é«éåãæè¡çè² åµã®è»œæžãã³ãŒãããŒã¹ã®é·æçãªä¿å®æ§ã«å¯Ÿããä¿¡é Œã®åŒ·åãæåŸ ã§ããŸãã
ã¯ãªã
Clippyã¯Rustã³ãã¥ããã£ã®æšæºéçè§£æããŒã«ã§ãå
¬åŒRustããŒã«ãã§ãŒã³ã«çŽæ¥çµ±åãããŠãããã³ãŒãå質ã®åäžãæ
£çšçãªãã©ã¯ãã£ã¹ã®åŒ·åã®ããã«éçºè
ã«åºãå©çšãããŠããŸããèªåã³ãŒãã¬ãã¥ãŒã®è²Žéãªç¬¬äžå±€ãšããŠæ©èœããå®å
šæ§ãšè¡šçŸåãšããRustèšèªã®çå¿µã«æ²¿ã£ãå
æ¬çãªãªã³ãã£ã³ã°ãæäŸããŸããéçºè
ã¯Clippyãç°¡åã«å®è¡ã§ããŸãã cargo clippy ã³ãã³ããªã®ã§ã¢ã¯ã»ã¹ãããããããããèŠæš¡ã®ãããžã§ã¯ãã«é©ããŠããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- è±å¯ãªãªã³ãã«ã¿ãã°
æ£ç¢ºæ§ãããã©ãŒãã³ã¹ãã¹ã¿ã€ã«ãè€éããªã©ãããŸããŸãªã«ããŽãªã«ãããæ°çŸã®çµã¿èŸŒã¿LintãæäŸããŸãããããã®Lintã¯ãããããééããæ€åºããéçºè ãRustã®æ £çšçãªäœ¿ç𿹿³ãç¿åŸã§ããããæ¯æŽããŸãã - æ
£çšçãªåŒ·å¶
éæ £çšçãªãã¿ãŒã³ããã©ã°ä»ãããããå®å šã§å¹ççãªRustæ§æãææ¡ããããšã§ããã¹ããã©ã¯ãã£ã¹ãæšå¥šããŸããããã«ãããããŒã ã¯äžè²«æ§ãç¶æããé·æçãªä¿å®æ§ãåäžãããããšãã§ããŸãã - ã·ãŒã ã¬ã¹ãªè²šç©çµ±å
远å ã®ã€ã³ã¹ããŒã«ãå¿ èŠãšãããæšæºçãªRustéçºã¯ãŒã¯ãããŒã®äžéšãšããŠå®è¡ãããŸããclippy.tomlå¿ èŠã«å¿ããŠç¹å®ã® lint ãæå¹ãŸãã¯ç¡å¹ã«ããŸãã - éçºè
åãã®ãã£ãŒãããã¯
ã³ãŒãäŸãããã¥ã¡ã³ããžã®ãªã³ã¯ãå«ããæç¢ºã§å®çšçãªã¡ãã»ãŒãžãæäŸããŸããããã«ãããåŠç¿ã®ããŒãã«ãäžãããåé¡ãè¿ éã«è§£æ±ºã§ããŸãã - ç©æ¥µçãªã¡ã³ããã³ã¹ãšã³ãã¥ããã£ãµããŒã
Rust-lang ã®åäžã§ã¡ã³ããã³ã¹ãããŠãããèšèªã®é²åã«åãããŠå®æçã«ã¢ããããŒããããŠããŸããã³ãã¥ããã£ããã®è²¢ç®ã«ãããClippy ã¯ææ°ã®æ å ±ãšå æ¬çãªæ©èœãç¶æããŠããŸãã - CI/CD ã®äºææ§
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ãã€ãã©ã€ã³ã«ç°¡åã«çµ±åããŠããã¹ãŠã®ãã©ã³ããšã³ã³ããªãã¥ãŒã¿ãŒã«ããã£ãŠäžè²«ããŠãªã³ãã£ã³ã°æšæºãé©çšããŸãã
Clippy ã¯ãããã Rust ã³ãŒãããŒã¹ã«äžå¯æ¬ ãªããŒã«ã§ãããç¹ã«æ¬çªã¬ãã«ã®ã·ã¹ãã ãæ§ç¯ããå Žåãå€§èŠæš¡ã«äœæ¥ããå Žåãéçºè ãçè§£ããŠããã¹ãå¶éããããŸãã
- æ·±ãåæãããã¹ã¿ã€ã«ãéèŠãã
Clippyã¯ã¹ã¿ã€ã«ã®åŒ·å¶ãšåçŽãªãã¹ã®æ€åºã«åªããŠããŸãããé«åºŠãªã»ãã³ãã£ãã¯è§£æã¯å®è¡ã§ããŸãããè€æ°ã®ã¢ãžã¥ãŒã«ã«ãŸããã埮åŠãªæææš©ã®çžäºäœçšããçããè€éãªè«çãšã©ãŒãåæå®è¡ã®åé¡ãæ€åºããããšã¯ã§ããŸããã - å°çšã®ã»ãã¥ãªãã£ã¹ãã£ã³ãªã
察象ãçµã£ãã»ãã¥ãªãã£åæãè匱æ§ããŒã¿ããŒã¹ãšã®çµ±åãæ¬ åŠããŠããŸããåºæ¬çãªã³ã³ãã€ã©èŠå以å€ã®äŸåé¢ä¿ã®è匱æ§ãå®å šã§ãªããã¿ãŒã³ãæ€åºã§ããªãããã以äžã®ãããªå¥ã®ããŒã«ãå¿ èŠã«ãªããŸããcargo-auditå®å šã«ã«ããŒããŸãã - ã«ã¹ã¿ã ã«ãŒã«ã®äœæã¯äžèŠ
Clippyã®ã«ãŒã«ã¯ããŒã«ã«çµã¿èŸŒãŸããŠããããŠãŒã¶ãŒãæ¡åŒµããããšã¯ã§ããŸããããã¡ã€ã³åºæã®æšæºãã¢ãŒããã¯ãã£ã«ãŒã«ãæã€ããŒã ã¯ãç¬èªã®ã¬ã€ãã©ã€ã³ãé©çšããããã®ã«ã¹ã¿ã lintãäœæããããšã¯ã§ããŸããã - éãããã¬ããŒã ãªãã·ã§ã³
éçºè ã®äœ¿çšã«é©ããç°¡åãªã³ãã³ãã©ã€ã³åºåãçæããŸãããæ§é åãããæ©æ¢°å¯èªåœ¢åŒãããã·ã¥ããŒããåé¡è¿œè·¡çµ±åãªã©ã®é«åºŠãªã¬ããŒãæ©èœã¯åããŠããŸããã - åäžèšèªã¹ã³ãŒã
Clippyã¯Rustå°çšã«èšèšãããŠãããããã¯ãã¹ã©ã³ã²ãŒãžã·ã¹ãã ããRustã³ã³ããŒãã³ããä»èšèªãšã€ã³ã¿ãŒãã§ãŒã¹ãããããžã§ã¯ãã®è§£æããµããŒãããŠããŸããããã®ãããå€èšèªã¢ãŒããã¯ãã£ã§ã¯ãã®æå¹æ§ãå¶éãããŸãã - å€§èŠæš¡ãããžã§ã¯ãã«å¯Ÿå¿ããã¹ã±ãŒã©ããªãã£
éåžžã«å€§èŠæš¡ãªRustã³ãŒãããŒã¹ã§ã¯ãClippyã¯å€§éã®èŠåãçæããå¯èœæ§ãããããã®ç®¡çã«ã¯å€§å¹ ãªãã¥ãŒãã³ã°ãå¿ èŠã«ãªããŸããéçºè ã¯ãç¡é¢ä¿ãªãªã³ããæå¶ãããããã€ãºãæžããããã«ããŒã«ãèšå®ãããããããã«ãæéãè²»ããå¿ èŠããããããããŸããã - æå°éã®CIèªååå¶åŸ¡
Clippy 㯠CI ãã€ãã©ã€ã³ã«è¿œå ã§ããŸãããé倧ãªèŠåã®èšå®å¯èœãªå€±æãããå€ãããŒã¹ã©ã€ã³èšå®ããã©ã³ãå šäœã®æå¶ç®¡çãªã©ã®é«åºŠãªèªååæ©èœã¯å«ãŸããŠããŸããã - æèçè§£ã®éç
Clippyã®è§£æã¯äž»ã«æ§æãšã«ãŒã«ããŒã¹ã§ããã詳现ãªããŒã¿ãããŒãå¶åŸ¡ãããŒã®è§£æã¯è¡ããŸãããããé«åºŠãªéçè§£æããŒã«ã®ããã«ãè€æ°ã®é¢æ°ãã¢ãžã¥ãŒã«ã«ãŸãããåé¡ã远跡ããããšã¯ã§ããŸããã
Clippyã¯ãRustãããžã§ã¯ãã«ãããã³ãŒãåè³ªç¶æã®ããã®ãéåžžã«å¹æçã§äœ¿ããããããŒã«ã§ããæ £çšçãªãã©ã¯ãã£ã¹ã匷å¶ããéçºåææ®µéã§å€ãã®çš®é¡ã®äžè¬çãªãšã©ãŒãæ€åºããããšã§ãå³åº§ã«äŸ¡å€ãæäŸããŸããããããè€éãã»ãã¥ãªãã£ã¯ãªãã£ã«ã«ããŸãã¯å€§èŠæš¡ã·ã¹ãã ãæ§ç¯ããããŒã ã«ãšã£ãŠãClippyã¯ããã詳现ãªã»ãã³ãã£ãã¯è§£æãã»ãã¥ãªãã£ã¹ãã£ã³ãã«ã¹ã¿ãã€ãºå¯èœãªé©çšæ©èœãå«ããããåºç¯ãªéçè§£ææŠç¥ã®äžéšãšããŠäœ¿çšããã®ãæé©ã§ãã
rustc (ã³ã³ãã€ã©èŠå)
Rustã³ã³ãã€ã©ã¯ã rustcã¯ãæç¢ºã§è©³çްããã€å®çšçãªèšºææ©èœã§é«ãè©äŸ¡ãããŠããŸããã³ãŒãã®æ£ç¢ºæ§ãšå®å
šæ§ã確ä¿ããããã®æåç·ã§ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªãã§ã¡ã¢ãªå®å
šæ§ãå®çŸãããšããRustã®çŽæã®äžæ žãæãã³ã³ãã€ã«æãã§ãã¯ãæäŸããŸããé倧ãªãšã©ãŒãå®è¡æã«ã®ã¿é¡åšåããå€ãã®èšèªãšã¯ç°ãªããRustã®ã³ã³ãã€ã©ã¯ãã³ãŒããå®è¡ãããåã«ããããçš®é¡ã®ãã°ãæ€åºããããã«èšèšãããŠããŸãã
ãã®äžå¿ã«ã rustc æ§ææ€èšŒã ãã«ãšã©ãŸããŸããã詳现ãªã»ãã³ãã£ãã¯è§£æãæææš©ã«ãŒã«ãã©ã€ãã¿ã€ã ãåã®æ£åœæ§ã®åŒ·å¶ãªã©ãè¡ããéçºè
ãããŒã¿ç«¶åããã«ãã€ã³ã¿åç
§ããã®ä»ã·ã¹ãã ããã°ã©ãã³ã°ã§ããèŠãããå€ãã®åé¡ã®ãªãã³ãŒããèšè¿°ã§ããããã«ããŸããã³ã³ãã€ã©èŠåã¯ãåé¡ã®ãããã¿ãŒã³ïŒåæ³ã§ãã£ãŠããè«çãšã©ãŒãã¡ã³ããã³ã¹ãªã¹ã¯ã瀺åããå¯èœæ§ã®ãããã®ïŒãéçºè
ã«èŠåããããšã§ããã®æ©èœãããã«åŒ·åããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- æææš©ãšåå
¥ã®å·è¡
ã³ã³ãã€ã«æã«å€æ°ã®æææš©ãåçšãæå¹æéã«é¢ãã峿 Œãªã«ãŒã«ãé©çšããããšã§ãã¡ã¢ãªã®å®å šæ§ãä¿èšŒããŸããå®è¡æã®ãªãŒããŒããããªãã§ãããŒã¿ç«¶åããã³ã°ãªã³ã°ãã€ã³ã¿ã鲿¢ããŸãã - è±å¯ãªåã·ã¹ãã ãã§ãã¯
æé»çãªãã£ã¹ããåãšã©ãŒãé²ãããã«åãå³å¯ã«æ€èšŒããAPI ãããå®å šã§äºæž¬å¯èœãªãã®ã«ããŸãã - æç¢ºã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãšã©ãŒã¡ãã»ãŒãž
éçºè ãåé¡ãè¿ éã«è§£æ±ºããã®ã«åœ¹ç«ã€ææ¡ãã³ãŒãã®ãã€ã©ã€ããå®çšçãªã¬ã€ãã³ã¹ãå«ã詳现ãªã³ã³ãã€ã© ã¡ãã»ãŒãžãæäŸããŸãã - ãã¹ããã©ã¯ãã£ã¹ã®ã³ã³ãã€ã©èŠå
ãããã³ãŒããæªäœ¿çšã®å€æ°ãéæšå¥šã® APIãã¡ã³ããã³ã¹ã®åé¡ããã°ã«ã€ãªããå¯èœæ§ã®ãããã®ä»ã®ãã¿ââãŒã³ã«ã€ããŠéçºè ã«èŠåããŸãã - ç¶ç¶çãªæ¹åãšå®å®æ§
å ¬åŒRustãããžã§ã¯ãã®äžéšãšããŠã¡ã³ããã³ã¹ãããŠãããèšèªã®é²åã«åãããŠé »ç¹ã«ã¢ããããŒããããŸããRustããŒã ãæ³šåããå®å®ããé«å質ãªããŒã«éçºã®æ©æµãåããŠããŸãã - 貚ç©ã¯ãŒã¯ãããŒãšã®çµ±å
Rustã®ããã±ãŒãžãããŒãžã£ãŒãšã·ãŒã ã¬ã¹ã«é£æºããcargo build,cargo check,cargo testéçºè ã®ã¯ãŒã¯ãããŒã®æšæºçãªéšåã
äžæ¹ã rustc ã¯ãçŸåšå©çšå¯èœãªæãé«åºŠã§æçšãªã³ã³ãã€ã©ã® 1 ã€ã§ãããéçåæã®ããã«ãã®èŠåãšãšã©ãŒã®ã¿ã«äŸåãããšãç¹ã«è€éãªãããžã§ã¯ããšã»ãã¥ãªãã£èŠä»¶ãæã€å°éçãªéçºããŒã ã«ãšã£ãŠã¯éçããããŸãã
å顿€åºç¯å²ã®å¶é
å°çšã®éçè§£æããŒã«ãšã¯ç°ãªãã rustc äž»ã«èšèªã¬ãã«ã®æ£ç¢ºæ§ã«çŠç¹ãåœãŠãŠããŸããé«ã¬ãã«ã®èšèšäžã®åé¡ã埮åŠãªè«çãã°ãèšèªã«ãŒã«ã«éåããªãã³ãŒãã®èããªã©ãç¹å®ããããšã¯ããŸãããäŸãã°ãéå¹ççãªã¢ã«ãŽãªãºã ãè€éãªå¶åŸ¡ãããŒããããžã§ã¯ãåºæã®èšèšãã¿ãŒã³éåãªã©ãæ€åºããããšã¯ã§ããŸããã
åºæ¬ãè¶ ããã¹ã¿ã€ã«ãšãªã³ã匷å¶ã®æ¬ åŠ
rustc ã¹ã¿ã€ã«ãšãã¹ããã©ã¯ãã£ã¹ã«é¢ããæå°éã®èŠåã®ã¿ãçµã¿èŸŒãŸããŠããŸããæªäœ¿çšã®å€æ°ãéæšå¥šã®APIã«ã€ããŠèŠåããããšã¯ã§ããŸãããè±å¯ãªã¹ã¿ã€ã«èŠåãæ
£çšçãªäœ¿çšæ³ã匷å¶ããããã§ã¯ãããŸãããäžè²«ãããã©ãŒããããRustã®æ
£çšçãªãã¿ãŒã³ã®éµå®ãæ±ããããŒã ã«ãšã£ãŠãClippyã®ãããªããŒã«ã¯äŸç¶ãšããŠäžå¯æ¬ ã§ãã
ã»ãã¥ãªãã£è匱æ§åæãªã
ã³ã³ãã€ã©ã¯ãåºæ¬çãªå®å
šã§ãªãã³ãŒããããã¯ä»¥å€ã®ã»ãã¥ãªãã£ã¹ãã£ã³ãå®è¡ããŸããã unsafe èŠåãäŸåé¢ä¿ã®è匱æ§ã®åæã¯è¡ããŸãããã¯ã¬ãŒãå
ã®æ¢ç¥ã®CVEãæ€åºããããããŒãã³ãŒããããã·ãŒã¯ã¬ããã®ãããªæœåšçã«å®å
šã§ãªãã³ãŒããã¿ãŒã³ããã©ã°ä»ããããããããšã¯ãªãããããã®æžå¿µäºé
ã¯ãã¹ãŠå€éšããŒã«ã«å§ããããŸãã
ã«ã¹ã¿ãã€ãºå¯èœãªã«ãŒã«ã®æ¬ åŠ
rustc éçºè
ãçµç¹ã®ããŒãºã«åãããŠã«ã¹ã¿ãã€ãºããããªã³ãã£ã³ã°ã«ãŒã«ãå®çŸ©ãŸãã¯é©çšããããšã¯ã§ããŸãããããŒã ã¯ãã¢ãŒããã¯ãã£ã¬ã€ãã©ã€ã³ããã¡ã€ã³åºæã®äžå€æ¡ä»¶ããŸãã¯ãããžã§ã¯ãåºæã®åœåèŠåãã³ã³ãã€ã©ã®èšºæã«çŽæ¥ãšã³ã³ãŒãããããšã¯ã§ããŸããã
ããŒã åãã®éå®ã¬ããŒã
ã³ã³ãã€ã©åºåã¯ãåã ã®éçºè ãã¿ãŒããã«ãŸãã¯ãšãã£ã¿ã§äœ¿çšã§ããããã«èšèšãããŠããŸããããã·ã¥ããŒãçšã®æ§é åãããJSONåºåãå±¥æŽãã¬ã³ãã®è¿œè·¡ãåé¡è¿œè·¡ããŒã«ãšã®çµ±åãªã©ãããŒã ã¯ãŒã¯ãããŒã«é©ããé«åºŠãªã¬ããŒãæ©èœã¯åããŠããŸããã
CI/CD å質ã²ãŒããšã®æå°éã®çµ±å
ããã rustc CIã§ã¯ãããã©ã«ãã§ãšã©ãŒãçºçãããšãã«ãã倱æããŸããç¹å®ã®èŠåã¬ãã«ãlintããªã·ãŒããããã¯åºæºãšããŠé©çšããçµã¿èŸŒã¿ã®æ¹æ³ã¯ãããŸãããèªååããããã€ãã©ã€ã³ã«ãããŠãããŒã ã¯é倧ãªåé¡ãšè»œåŸ®ãªåé¡ãåºå¥ããå¶åŸ¡ãéãããŠããŸãã
èšèªéãŸãã¯ã·ã¹ãã ã¬ãã«ã®åæãªã
rustc Rustã³ãŒãã®ã¿ãè§£æããŸããåãã·ã¹ãã ã®äžéšã§ããå¯èœæ§ã®ããä»ã®èšèªã§æžãããã³ãŒããšã®çžäºäœçšãçè§£ãããè§£æãããããããšã¯ã§ããŸãããå€éšé¢æ°ã€ã³ã¿ãŒãã§ãŒã¹ïŒFFIïŒãèšèªéã®å¢çãæã€ãããžã§ã¯ãã§ã¯ãéçè§£æã®ç¯å²ã«ã®ã£ãããçããŸãã
Rustã³ã³ãã€ã©ã®å³æ Œãªãã§ãã¯ã¯ããã®èšèªã®äººæ°ãæ¯ããŠããå®å
šæ§ãšæ£ç¢ºæ§ã®ä¿èšŒã®åºç€ãšãªã£ãŠããŸããé«åºŠãªãšã©ãŒã¡ãã»ãŒãžãšã³ã³ãã€ã«æã®æææš©ã«ãŒã«ã®é©çšã«ãããå€ãã®çš®é¡ã®ãã°ãå®å
šã«é²ãããšãã§ããŸããããããå
æ¬çãªã³ãŒãå質ãã»ãã¥ãªãã£ãä¿å®æ§ãæ±ããçµç¹ã«ãšã£ãŠã rustcã®ã³ã³ãã€ã©èŠåã¯ã解決çå
šäœã§ã¯ãªããåºçºç¹ãšããŠæããã¹ãã§ããã³ã³ãã€ã©ã®ãã§ãã¯ããå°çšã®éçè§£æããŒã«ããªã³ã¿ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒããããŠCIã«çµ±åãããå質ã²ãŒããšçµã¿åãããããšã§ãããåºç¯ãªåé¡ãã«ããŒããããè±å¯ãªæŽå¯ãæäŸããããšãã§ããŸãã
貚ç©ç£æ»
cargo-audit Rustãããžã§ã¯ãã«ç¹åããã»ãã¥ãªãã£ç£æ»ããŒã«ã§ãéçºè
ãäŸåé¢ä¿ã«ããæ¢ç¥ã®è匱æ§ãç¹å®ã§ããããã«èšèšãããŠããŸããRustã®ããã±ãŒãžç®¡çãšã³ã·ã¹ãã ãšç·å¯ã«çµ±åãããRustSecã¢ããã€ã¶ãªããŒã¿ããŒã¹ã䜿çšããŠãéçºè
ã«å®çšçãªææ°ã®ã»ãã¥ãªãã£æ
å ±ãæäŸããŸãã Cargo.lock ãã¡ã€ã«ã cargo-audit ããŒã ããœãããŠã§ã¢ã«åœ±é¿ãåãŒãå¯èœæ§ã®ããå
¬éã»ãã¥ãªãã£å§åãèªèããŠããããšã確èªããŸãã
ãã®ããŒã«ã¯ãäž»ã«èšèªã¬ãã«ã§ã®æ£ç¢ºæ§ãšå®å šæ§ã«éç¹ã眮ã Rust ã®éçºã¯ãŒã¯ãããŒã«ãã»ãã¥ãªãã£æ€èšŒã®éèŠãªã¬ã€ã€ãŒã远å ããããããªãŒãã³ãœãŒã¹ãšãããã§ãã·ã§ãã«ã®äž¡æ¹ã®ã³ã³ããã¹ãã§åºã䜿çšãããŠããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- RustSecã¢ããã€ã¶ãªããŒã¿ããŒã¹ã®çµ±å
ã³ãã¥ããã£ã管çããRustã¯ã¬ãŒãåãã»ãã¥ãªãã£ã¢ããã€ã¶ãªããŒã¿ããŒã¹ãšäŸåé¢ä¿ããã§ãã¯ããŸããéçºè ãã³ãŒãããããã€ããåã«ãæ¢ç¥ã®è匱æ§ãèªèããŠããããšã確èªããŸãã - 貚ç©ã¯ãŒã¯ãããŒãšã®ç°¡åãªçµ±å
ã·ã³ãã«ãªcargo auditã³ãã³ããªã®ã§ãããŒã«ã«éçºã«ãŒãã³ã«ç°¡åã«è¿œå ã§ããŸããç¹å¥ãªèšå®ãå¿ èŠãšãããæšæºçãªRustããŒã«ãšäºææ§ããããŸãã - 詳现ãã€å®çšçãªåºå
ã¬ããŒãã«ã¯ã圱é¿ãåããããã±ãŒãžã®ããŒãžã§ã³ãé倧床ã¬ãã«ãCVE èå¥åããããé©çšããŒãžã§ã³ãžã®ã¢ããã°ã¬ãŒããªã©ã®æšå¥šããã修埩æé ãå«ãŸããŸãã - CI/CD ãã€ãã©ã€ã³ã®äºææ§
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ã·ã¹ãã ã«è¿œå ããŠããã¹ãŠã®ãã«ããŸãã¯ãããã€ã¡ã³ã ãã€ãã©ã€ã³ã§ã»ãã¥ãªã㣠ãã§ãã¯ãèªåçã«å®æœã§ããŸãã - ã€ã³ã¯ãããããã±ãŒãžã®æ€åºã®ãµããŒã
éçºè ã crates.io ããåé€ãããã¯ã¬ãŒãã«äŸåããŠããå Žåã«èŠåããã¡ã³ããã³ã¹ãããŠããªãããã±ãŒãžãåé¡ã®ããããã±ãŒãžãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã - ç©æ¥µçãªã¡ã³ããã³ã¹ãšã³ãã¥ããã£ãžã®è²¢ç®
RustSec ãããžã§ã¯ãã«ãã£ãŠãµããŒããããRust ãšã³ã·ã¹ãã å šäœã§åºãæ¡çšãããŠãããããæ°ããã¢ããã€ã¶ãªãå ¬éããããã³ã«ææ°ã®ç¶æ ã«ä¿ãããŸãã
äžæ¹ã cargo-audit ã¯ãã»ãã¥ãªãã£ãéèŠãã Rust ããŒã ã«ãšã£ãŠæ¬ ãããªãããŒã«ã§ãããå¯äžã®ã»ãã¥ãªãã£ä¿è·ææ®µãšããŠããã«äŸåããªãããã«ãŠãŒã¶ãŒãèæ
®ãã¹ãéèŠãªå¶éããããŸãã
æ¢ç¥ã®è匱æ§ã«çŠç¹ãåœãŠã
cargo-audit RustSecã¢ããã€ã¶ãªããŒã¿ããŒã¹ã«å
¬éãããŠããè匱æ§ã®ã¿ãæ€åºããŸããã³ãŒããäŸåé¢ä¿ã«ãããæ°èŠãŸãã¯æªç¥ã®ã»ãã¥ãªãã£äžã®æ¬ é¥ãçºèŠããããšã¯ã§ããŸãããã¯ã¬ãŒãã«ãŸã å
¬éãããŠããªãã»ãã¥ãªãã£ãã°ãå«ãŸããŠããå Žåã cargo-audit æ€åºãããªããããããŒã ãå±éºã«ãããããå¯èœæ§ããããŸãã
ã«ã¹ã¿ã ã³ãŒãã®éçã³ãŒãåæãªã
ãã®ããŒã«ã¯ãäŸåé¢ä¿ã®ã¡ã¿ããŒã¿ã®ã¿ãåæããŸãã Cargo.lock ãã¡ã€ã«ã§ãããããžã§ã¯ãèªèº«ã®ãœãŒã¹ã³ãŒãã«ã€ããŠã¯ãå®å
šã§ãªããã¿ãŒã³ãå®å
šã§ãªãäœ¿çšæ³ãè«çãšã©ãŒãããŒãã³ãŒããããç§å¯æ
å ±ãªã©ã«ã€ããŠã¯ã¬ãã¥ãŒãããŸãããç¬èªã®ã³ãŒãã®ã»ãã¥ãªãã£ãæ€èšŒããå¿
èŠãããããŒã ã«ãšã£ãŠã¯ã远å ã®éçè§£æãšæåã¬ãã¥ãŒãäžå¯æ¬ ã§ãã
å©èšãè¶ ããæšç§»çäŸåé¢ä¿ã«é¢ããéå®çãªæŽå¯
äžæ¹ã cargo-audit çŽæ¥äŸåé¢ä¿ããã³æšç§»äŸåé¢ä¿ã«ããè匱æ§ã«é¢ããã¢ããã€ã¶ãªããã©ã°ä»ãããããšã¯ã§ããŸãããå®éã®ã³ãŒããã¹ãåæããŠèåŒ±ãªæ©èœã䜿çšãããŠãããã©ããã倿ããããšã¯ã§ããŸããããã®çµæãããŒã ã¯æªäœ¿çšã®ã³ãŒããã¹ã®è匱æ§ã«é¢ããã¢ããã€ã¶ãªã確èªããããšã«ãªããå®éã®ãªã¹ã¯ã倿ããããã«æåã§è©äŸ¡ãè¡ãå¿
èŠããããŸãã
ã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒããçµç¹åºæã®ããªã·ãŒã¯ãããŸãã
cargo-audit 瀟å
ã»ãã¥ãªãã£ããªã·ãŒãã³ãŒãã£ã³ã°ã¬ã€ãã©ã€ã³ã匷å¶ããããšã¯ã§ããŸãããå
¬éãããŠããã¢ããã€ã¶ãªããŒã¿ããŒã¹ã«ååšãããã®ä»¥å€ã«ãã«ã¹ã¿ã ã»ãã¥ãªãã£ãã§ãã¯ãçµç¹åºæã®ã¢ããã€ã¶ãªãäŸåé¢ä¿ã®éžæã«ãŒã«ãå®çŸ©ããææ®µã¯ãããŸããã
éçããŒã¿ããŒã¹ã®äŸåæ§ãšæŽæ°ã®å¿ èŠæ§
广ã¯ãRustSecã®ããŒã«ã«ããŒã¿ããŒã¹ã³ããŒã宿çã«æŽæ°ããããšã«ããã£ãŠããŸããããŒã ãææ°ã®ç¶æ ã«ç¶æããªããšãã¢ããã€ã¶ãªãèŠéããŠããŸããªã¹ã¯ããããŸããæŽæ°ã¯ç°¡åã§ãããæ£ç¢ºãªçµæãåŸãã«ã¯ãã®ã¡ã³ããã³ã¹æé ãäžå¯æ¬ ã§ãã
ããåºç¯ãªè匱æ§ç®¡çã·ã¹ãã ãšã®çµ±åãªã
cargo-audit ã¿ãŒããã«ãã¬ã³ããªãŒãªåºåãçæãããããéçºè
ã«ãšã£ãŠã¯åªããããŒã«ã§ãããäŒæ¥ã®ã»ãã¥ãªãã£ã·ã¹ãã ãžã®çµ±åã«ã¯éçããããŸãã远å ã®ã¹ã¯ãªãããã«ã¹ã¿ãã€ãºãªãã«ãè匱æ§è¿œè·¡ããŒã«ãããã·ã¥ããŒãããã±ããã·ã¹ãã ã«æ§é åããŒã¿ãéä¿¡ããããã®çµã¿èŸŒã¿ãµããŒããæ¬ ããŠããŸãã
ã©ã€ã»ã³ã¹ã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ã®æ¬ åŠ
ã»ãã¥ãªãã£ç£æ»ã«ã¯äžå¯æ¬ ã§ããã cargo-audit äŸåé¢ä¿ã®ããã©ã€ã»ã³ã¹ã®ã³ã³ãã©ã€ã¢ã³ã¹éåãããªã·ãŒéåãåæããããšã¯ã§ããŸãããæ³çèŠä»¶ãã³ã³ãã©ã€ã¢ã³ã¹èŠä»¶ã®ããããŒã ã¯ãã©ã€ã»ã³ã¹ãªã¹ã¯ãæ€èšŒããããã«è¿œå ã®ããŒã«ã䜿çšããå¿
èŠããããŸãã
cargo-audit Rustãããžã§ã¯ãã«ããããµãã©ã€ãã§ãŒã³ã»ãã¥ãªãã£ç®¡çã«äžå¯æ¬ ãªããŒã«ã§ããéçºã©ã€ããµã€ã¯ã«ã®æ©ã段éã§äŸåé¢ä¿ã®æ¢ç¥ã®è匱æ§ãæ€åºããããšã§ãããŒã ã¯ããã¢ã¯ãã£ãã«è¡åããåºãå ±åãããŠããã»ãã¥ãªãã£äžã®æ¬ é¥ãžã®é²åºã軜æžã§ããŸãããã ãããã®å¯Ÿè±¡ç¯å²ã¯éå®çã§ãããããæ¬çªç°å¢ã§å
æ¬çãªãœãããŠã§ã¢ã»ãã¥ãªãã£ãå®çŸããã«ã¯ãã»ãã¥ã¢ã³ãŒãã£ã³ã°æšæºãã³ãŒãã¬ãã¥ãŒãéçè§£æãè匱æ§ç®¡çã·ã¹ãã ãªã©ã®ä»ã®ãã©ã¯ãã£ã¹ãšäœµçšããå¿
èŠããããŸãã
ã«ãã©
Rudraã¯ãå®å
šã§ãªãRustã³ãŒãã«ãããã¡ã¢ãªå®å
šæ§ã®åé¡ãçºèŠããããã«ç¹å¥ã«èšèšãããé«åºŠãªéçè§£æããŒã«ã§ããæ
£çšçãªã¹ã¿ã€ã«ãæ¢ç¥ã®ã»ãã¥ãªãã£å§åã®é©çšã«éç¹ã眮ãå€ãã®Rustè§£æããŒã«ãšã¯ç°ãªããRudraã¯Rustã®ã³ãŒãã䜿çšããéã«çºçããå¯èœæ§ã®ããã埮åŠã§è€éãªãã°ãæ€åºããããã«ã詳现ãªéçè§£æãå®è¡ããŸãã unsafe ã³ã³ãã€ã©ã«ãã£ãŠåŒ·å¶ãããä¿èšŒãåé¿ããããã®ãããã¯ã
FacebookïŒçŸMetaïŒã®ç ç©¶è ã«ãã£ãŠéçºãããRudraã¯ãRustãšã³ã·ã¹ãã ã«ãããéå€§ãªæ¬ é¥ã«å¯ŸåŠããããã«éçºãããŸãããRustã®æææš©ã·ã¹ãã ã¯å®å šãªã³ãŒãã«ãããã¡ã¢ãªå®å šæ§ã確ä¿ããŸãããäœã¬ãã«ã©ã€ãã©ãªãFFIãã€ã³ãã£ã³ã°ãããã©ãŒãã³ã¹ã¯ãªãã£ã«ã«ãªã¢ãžã¥ãŒã«ã§ã¯ãäŸç¶ãšããŠã¢ã³ã»ãŒãã³ãŒããåºã䜿çšãããŠããŸããRudraã®ç®çã¯ããã®ãããªã¢ã³ã»ãŒããããã¯ãå³å¯ã«è§£æããã³ã³ãã€ã©ãã§ãã¯ãæå³çã«åé¿ãããŠããç¶æ³ã«ãããŠããRustãèªãä¿¡é Œæ§ã¬ãã«ãç¶æããããšã§ãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- å®å
šã§ãªãã³ãŒããããã¯ã®éçè§£æ
Rustã³ãŒãã®äžã§ãã³ã³ãã€ã©ã®å®å šæ§ä¿èšŒãé©çšãããªãããšã©ãŒãçºçããããéšåãã¿ãŒã²ãããšããŸããã¡ã¢ãªäœ¿çšåŸããããã¡ãªãŒããŒãããŒããã³ã°ãªã³ã°ãã€ã³ã¿ãšãã£ãæœåšçãªã¡ã¢ãªå®å šæ§ã®è匱æ§ãç¹å®ããŸãã - å¥å
šæ§ã®å顿€åº
å®å šã§ãªã API ã®äœ¿çšãåç¬ã§ã¯æå¹ã«èŠããŠããäžæµã®ã¯ã¬ãŒãã§ã¡ã¢ãªç ŽæãåŒãèµ·ãããããRust ã®åã®å®å šæ§ã䟵害ãããããå¯èœæ§ã®ããäžå¥å šãª API ãèŠã€ããããšãç®çãšããŸãã - ã€ã³ã¿ãŒããã·ãŒãžã£è§£æ
å®å šã§ãªãæäœã颿°ã®å¢çãè¶ããŠã©ã®ããã«äŒæãããã調ã¹ãŠãããåçŽãªããã·ãŒãžã£å ããŒã«ã§ã¯èŠéãããå¯èœæ§ã®ããè匱æ§ãæ€åºããŸãã - å®å
šã§ãªãã³ãŒããå«ãã©ã€ãã©ãªãšã¯ã¬ãŒãã«çŠç¹ãåœãŠã
ãšã³ã·ã¹ãã å ã§åºãåå©çšãããããã©ãŒãã³ã¹ãæè»æ§ã®ããã«å®å šã§ãªããã®ã䜿çšããå Žåã§ãå®å šæ§ãä¿èšŒããå¿ èŠãããåºç€ã¯ã¬ãŒããä¿å®ããããŒã ã«ãšã£ãŠç¹ã«äŸ¡å€ããããŸãã - ç ç©¶äž»å°ã®ãã¶ã€ã³
åŠè¡ç ç©¶ã«åºã¥ããŠæ§ç¯ãããŠãããRust ã®ã»ãã³ãã£ã¯ã¹ã®åœ¢åŒã¢ãã«ãšäžè¬çãªå®å šã§ãªããã¿ãŒã³ã掻çšããŠè€éãªãã°ãæ€åºããŸãã - ãªãŒãã³ãœãŒã¹ã®å¯çšæ§
åºã䜿çšãããŠããã¯ã¬ãŒãã®å®å šæ§ãåäžããããšã³ã·ã¹ãã å šäœã®æ°ŽæºãåŒãäžããããšãç®æšã«ãRust ã³ãã¥ããã£ã«ç¡æã§æäŸãããŸãã
Rudra ã¯åªããæ©èœãåããé«åºŠã«å°éåãããããŒã«ã§ãããéçè§£æã¯ãŒã¯ãããŒã« Rudra ãå°å ¥ããããšãæ€èšããéã«éçºããŒã ãèªèããŠããã¹ãéèŠãªå¶çŽã䌎ããŸãã
å®å šã§ãªãéã ãã«çŠç¹ãåœãŠã
Rudraã®äž»ãªéçã¯ããã®ã¹ã³ãŒãã§ããRudraã¯ã¢ã³ã»ãŒããããã¯ãè§£æããç¹ã«ã¡ã¢ãªå®å šæ§ã«é¢ãããã°ãçºèŠããããã«èšèšãããŠããŸããRustã³ãŒãã®ã¹ã¿ã€ã«äžã®åé¡ãè«çãšã©ãŒããããã¯äžè¬çãªãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠãå®å šãªã³ãŒããè§£æããããLintãã§ãã¯ãè¡ã£ããããããšã¯ãããŸãããã¢ã³ã»ãŒãã³ãŒããã»ãšãã©ããããã¯å šã䜿çšããªããããžã§ã¯ãã§ã¯ãRudraãæäŸãã䟡å€ã¯éãããŠããŸãã
é«ãè€éæ§ãšç ç©¶ãããã¿ã€ãã®æ§è³ª
Rudraã¯ç ç©¶ãããžã§ã¯ããšããŠèšèšããããªãŒãã³ãœãŒã¹ãšããŠæäŸãããŠããŸãããæ¬çªç°å¢å¯Ÿå¿ã®éçºããŒã«ãæäŸããæŽç·ŽããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã容æãªçµ±åãå¿ ãããæäŸããŠããããã§ã¯ãããŸãããã€ã³ã¹ããŒã«ãèšå®ããããŠåºåã®å¹æçãªè§£éã«ã¯ãããçšåºŠã®åŠç¿æéãå¿ èŠã«ãªãå¯èœæ§ããããŸãã
éå®çãªCI/CDçµ±åæ©èœ
ããã·ã³ãã«ãªãªã³ãã£ã³ã°ããŒã«ãã»ãã¥ãªãã£ã¹ãã£ããŒãšã¯ç°ãªããRudraã«ã¯äžè¬çãªCI/CDã·ã¹ãã ãšã®çµ±åæ©èœãçµã¿èŸŒãŸããŠããŸãããèªååããããã€ãã©ã€ã³ã«çµã¿èŸŒãã«ã¯ãã«ã¹ã¿ã ã¹ã¯ãªããã®äœæãšã¡ã³ããã³ã¹ãå¿ èŠã«ãªãå Žåããããå°ä»»ã®DevSecOpsãªãœãŒã¹ãæããªãããŒã ã«ãšã£ãŠã¯éå£ãšãªãå¯èœæ§ããããŸãã
äžè¬çãªã»ãã¥ãªãã£è匱æ§ã¹ãã£ã³ãªã
Rudraã¯ãïŒcargo-auditã®ããã«ïŒäŸåé¢ä¿ã®æ¢ç¥ã®è匱æ§ããã§ãã¯ããããå€ãã¯ã¬ãŒããå®å šã§ãªãå Žåã«ãã©ã°ãç«ãŠããããŸããããŸããããŒãã³ãŒããããã·ãŒã¯ã¬ãããäžé©åãªãšã©ãŒåŠçãå®å šã§ãªãã¡ã¢ãªæäœãšã¯ç¡é¢ä¿ãªAPIã®èª€çšãšãã£ãåé¡ãã¹ãã£ã³ããŸãããå æ¬çãªã»ãã¥ãªãã£å¯Ÿçãå®çŸããã«ã¯ãããŒã ã¯è¿œå ã®ã»ãã¥ãªãã£ããŒã«ãå¿ èŠãšããŸãã
ã«ã¹ã¿ã ã«ãŒã«äœææ©èœã®æ¬ åŠ
Rudraã¯çŸåšãç¹å®ã®ãããžã§ã¯ãã®ããŒãºã«åãããã«ã¹ã¿ã ãã§ãã¯ãã«ãŒã«ã®å®çŸ©ããµããŒãããŠããŸãããRudraã¯ãæ¢ç¥ã®å®å šã§ãªãã¡ã¢ãªå®å šæ§ãã°ã察象ãšãããå³éžãããäžé£ã®åæã«éç¹ã眮ããŠããŸãããã¡ã€ã³åºæã®ã¬ã€ãã©ã€ã³ãã¢ãŒããã¯ãã£ããªã·ãŒãé©çšãããçµç¹ã«ã¯ãä»ã®ããŒã«ãå¿ èŠã«ãªããŸãã
å¶éãããã¬ããŒããšéçºè UX
Rudraã®åºåã¯ãRustã®å éšæ§é ãšã¢ã³ã»ãŒãã³ãŒãã®å®è·µã«ç²Ÿéããæè¡è åãã«èšèšãããŠããŸããã¬ããŒãã¯éââåžžã«è©³çްãªãã®ã«ãªãå ŽåããããŸãããRustã®å®å šæ§ã¢ãã«ã«é¢ããæ·±ãç¥èãæããªãéçºè ã«ãšã£ãŠã¯è§£éãé£ããã远å ã®ãã¬ãŒãã³ã°ãå°éç¥èãå¿ èŠã«ãªãå ŽåããããŸãã
å€§èŠæš¡ã³ãŒãããŒã¹ã«ãããããã©ãŒãã³ã¹ã®èæ ®äºé
Rudraã¯ããã·ãŒãžã£éè§£æãšã»ãã³ãã£ãã¯è§£æãå®è¡ãããããèšå€§ãªèšç®éãå¿ èŠãšããå ŽåããããŸããéåžžã«å€§èŠæš¡ãªã³ãŒãããŒã¹ã§å®è¡ãããšè§£ææéãé·ããªãå¯èœæ§ããããç¶¿å¯ãªèª¿æŽãè¡ããã«è¿ éãªéçºãµã€ã¯ã«ã§é »ç¹ã«äœ¿çšããã®ã¯çŸå®çã§ã¯ãããŸããã
Rudraã¯ãã¢ã³ã»ãŒãã³ãŒããèšè¿°ããããã¢ã³ã»ãŒãã³ãŒãã«äŸåãããããRustããŒã ã«ãšã£ãŠäžå¯æ¬ ãªããŒã«ã§ããRustã®åŒ·åãªå®å šæ§ä¿èšŒãšã¢ã³ã»ãŒãã³ãŒããæäŸããæè»æ§ã®éã®ã®ã£ãããåããã·ã¹ãã ã®äžã§æãããã©ãŒãã³ã¹ãéèŠãªéšåã§ãã£ãŠãã¡ã¢ãªå®å šæ§ãæåªå ã«ç¢ºä¿ããã®ã«åœ¹ç«ã¡ãŸãããããããã®ç¹åãçµ±åã®é£ããããããŠé«åºŠãªåºåæ©èœã«ããããªã³ã¿ãŒãäŸåæ§ã¹ãã£ãããããŠåŸæ¥ã®ã³ãŒãã¬ãã¥ãŒãã©ã¯ãã£ã¹ãå«ããããåºç¯ãªéçè§£æããã³ã»ãã¥ãªãã£æŠç¥ã®äžéšãšããŠäœ¿çšããã®ãæé©ã§ãã
ã¿ãã
MIRAIã¯ãã³ã³ãã€ã«æã«ããã°ã©ã ããããã£ã®æ£ç¢ºãªåœ¢åŒæ€èšŒãå®è¡ããããã«èšèšããããRustçšã®é«åºŠãªéçè§£æããŒã«ã§ããæœè±¡è§£éãçšããŠããã°ã©ã ã®ç¶æ ãæšè«ããåŸæ¥ã®ãªã³ãã£ã³ã°ãã³ã³ãã€ã©ã®èŠåã§ã¯æ€åºãããªãå¯èœæ§ã®ããè«çãšã©ãŒãèŠçŽéåãæœåšçãªã»ãã¥ãªãã£åé¡ãæ€åºããããšãç®æããŠããŸãã
ã¹ã¿ã€ã«ãæ £çšçãªçšæ³ã®ã¿ã«çŠç¹ãåœãŠãããŒã«ãšã¯ç°ãªããMIRAIã¯æå³çãªæ£ç¢ºæ§ãéèŠããŸããRustããã°ã©ã ãè§£æããã³ãŒãå ã«å®çŸ©ãããã¢ãµãŒã·ã§ã³ãäºåæ¡ä»¶ãäºåŸæ¡ä»¶ãäžå€æ¡ä»¶ããã§ãã¯ããããšã§ãéçºè ã¯ãããã€åã«æ·±å»ãªè«ççãã°ãçºèŠã§ããŸããMIRAIã®åŒ·ã¿ã¯ãåå²ãã«ãŒãã颿°åŒã³åºããšãã£ãè€éãªããã°ã©ã åäœãã¢ãã«åããããããå®è¡ã«ãããŠéèŠãªç¹æ§ãç¶æãããããšãä¿èšŒããç¹ã«ãããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- å¥çŽã®æ£åŒãªæ€èšŒ
éçºè ãRustã®pre,post,assertãã¯ãïŒcontractsã¯ã¬ãŒãçµç±ïŒãMIRAIã¯ãããã®æ¡ä»¶ãã³ãŒãããŒã¹å šäœã§æºããããŠããããšãéçã«æ€èšŒããŸãã - è«çãšã©ãŒã®æ€åº
å°éäžå¯èœãªã³ãŒããåžžã«å€±æããã¢ãµãŒã·ã§ã³ãå®è¡äžå¯èœãªåå²ãèå¥ããéçºè ãå¶åŸ¡ãããŒãç°¡çŽ åããŠä¿®æ£ã§ããããã«ããŸãã - é«åºŠãªã·ã³ããªãã¯å®è¡
æœè±¡è§£éã䜿çšããŠã³ãŒãã®è€æ°ã®ãã¹ãæ¢çŽ¢ããåçŽãªæ§æè§£æã§ã¯æ€åºãããªããã°ãæ€åºããŸãã - è€éãªRustæ©èœã®è§£æããµããŒã
åæåããã¿ãŒã³ ãããã³ã°ããžã§ããªãã¯ãæææš©ã»ãã³ãã£ã¯ã¹ãªã©ã®äžè¬ç㪠Rust æ§é ãåŠçããå®éã®ã³ãŒãã®å®çšçãªåæãå¯èœã«ããŸãã - Cargoãšã®çµ±å
æšæºã® Rust éçºã¯ãŒã¯ãããŒãšçµ±åããã³ãã³ãã©ã€ã³ ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããäœ¿ãæ £ããããŒã«ã䜿çšããŠãããžã§ã¯ããåæã§ããããã«ããŸãã - ãªãŒãã³ãœãŒã¹ã®å¯çšæ§
ç¶ç¶çãªéçºãšç ç©¶ã®æ¯æŽã«ãããRust ã³ãã¥ããã£ã«ç¡æã§æäŸãããŸãã
MIRAI ã¯ãå®çšç㪠Rust éçºã«åœ¢åŒææ³ãå°å ¥ãã匷åãªããŒã«ã§ãããããŒã ãæ éã«èæ ®ããå¿ èŠãããç¹å®ã®å¶éãšèª²é¡ããããŸãã
å¥çŽããŒã¹ã®æ€èšŒã«çŠç¹ãçµã
MIRAIã¯éçºè ãèšè¿°ããæç€ºçãªå¥çŽãã¢ãµãŒã·ã§ã³ã®ãã§ãã¯ã«åªããŠããŸããããããã®ã¢ãããŒã·ã§ã³ããªããã°ãããããçš®é¡ã®ãã°ãèªåçã«æ€åºããããšã¯ã§ããŸããããã®æå¹æ§ã¯ãéçºè ãã³ãŒãå ã§åææ¡ä»¶ãšäžå€æ¡ä»¶ãã©ãã ãè©³çŽ°ã«æå®ããŠãããã«äŸåããŸããé©åã«èšè¿°ãããå¥çŽããªãå ŽåãMIRAIã®åæç¯å²ã¯éå®ãããŸãã
æ¥å³»ãªåŠç¿æ²ç·ãšå°éç¥èã®èŠä»¶
MIRAIã广çã«äœ¿çšããã«ã¯ãæ£ç¢ºãªå¥çŽã®èšè¿°ãåäŸã®è§£éãªã©ãåœ¢åŒæ€èšŒã®æŠå¿µã«ç²ŸéããŠããå¿ èŠããããŸããåœ¢åŒææ³ã®çµéšããªãããŒã ã«ãšã£ãŠããªã³ããŒãã£ã³ã°ã¯å°é£ã極ãããã¬ãŒãã³ã°ãããã»ã¹ã®å€æŽãå¿ èŠã«ãªãå¯èœæ§ããããŸãã
çµ±åãšãŠãŒã¶ããªãã£ã®å¶é
MIRAIã¯Cargoçµç±ã§äœ¿çšã§ããŸãããéçºã¯ãŒã¯ãããŒãžã®çµ±åã¯ãããã·ã³ãã«ãªãªã³ãã£ã³ã°ããŒã«ã»ã©æŽç·ŽãããŠããŸãããIDEãšã®ç·å¯ãªçµ±åããããã«äœ¿ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªGUIãæäŸãããŠããªããããé«åºŠã«çµ±åãããéçºç°å¢ã«æ £ããŠããããŒã ã«ãšã£ãŠã¯å°å ¥ãå°é£ã§ãã
å€§èŠæš¡ã³ãŒãããŒã¹ã®ããã©ãŒãã³ã¹ãªãŒããŒããã
MIRAIã®é«åºŠãªåæã¯ãèšå€§ãªèšç®éãå¿ èŠãšããŸãã倿°ã®é¢æ°ããã¹ãå«ãå€§èŠæš¡ãªã³ãŒãããŒã¹ãåæãããšãåææéãå€§å¹ ã«é·ããªãå¯èœæ§ããããè¿ éãªã€ãã¬ãŒã·ã§ã³ãµã€ã¯ã«ããã¿ãŒã²ãããçµã蟌ãŸãªãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã®å®è¡ã«ã¯å®çšæ§ãå¶éãããå¯èœæ§ããããŸãã
å¥çŽå€ã®åé¡ã®æ€åºãéå®ç
MIRAIã¯Clippyãcargo-auditã®ãããªããŒã«ã眮ãæãããã®ã§ã¯ãããŸãããæ £çšçãªã¹ã¿ã€ã«ã匷å¶ããããäŸåé¢ä¿ã®è匱æ§ãææãããã宣èšãããå¥çŽã«é¢é£ããªãå®å šã§ãªãã³ãŒãã®èª€çšãç¹å®ãããããããšã¯ãããŸããããã®ã¹ã³ãŒãã¯ããŠãŒã¶ãŒå®çŸ©ã®è«çããããã£ãšäžå€æ¡ä»¶ã®æ€èšŒã«ç¹åããŠããŸãã
ã»ãã¥ãªãã£è匱æ§ããŒã¿ããŒã¹çµ±åãçµã¿èŸŒãŸããŠããªã
cargo-auditãšã¯ç°ãªããMIRAIã¯äŸåé¢ä¿ã«ãããæ¢ç¥ã®è匱æ§ããã§ãã¯ããŸãããã³ãŒãå ã®ã»ãã¥ãªãã£åé¡ã«ã€ãªããå¯èœæ§ã®ããè«ççãªãã°ã¯æ€åºã§ããŸãããCVEãåé€ãããããã±ãŒãžã¯ç£èŠããŸããã
å€§èŠæš¡ããŒã åãã®éå®çãªèªåå
MIRAIã®åºåã¯è©³çްãã€æ£ç¢ºã§ãããå€§èŠæš¡ããŒã ã®ã¯ãŒã¯ãããŒã«ã¯é©ããŠããŸãããæ§é åãããã¬ããŒã圢åŒãåé¡è¿œè·¡æ©èœã®çµ±åãå¥çŽéåã®æšç§»ã远跡ããããã·ã¥ããŒããªã©ã®çµã¿èŸŒã¿ãµããŒãããªããããå®å šãªèªååãå®çŸããã«ã¯ãããŒã ã远å ããŒã«ãæ§ç¯ããå¿ èŠããããŸãã
ãŠãŒã¶ãŒå®çŸ©å¥çŽãžã®äŸå
MIRAIã®æå€§ã®éçã¯ãéçºè ãèšè¿°ããå¥çŽã®ç²ŸåºŠã«å·Šå³ãããç¹ã§ããããæ£ç¢ºãã€å®å šãªå¥çŽãèŠå®ããããã®äžè²«ããèŠåŸããªããã°ãMIRAIã®å顿€åºèœåã¯äœäžãããã®äŸ¡å€ã¯åŒ·åãªããŒã ãã©ã¯ãã£ã¹ã«å·Šå³ãããŸãã
MIRAIã¯Rustãããžã§ã¯ãã«åœ¢åŒæ€èšŒæ©èœããããããåŸæ¥ã®éçè§£æããŒã«ã§ã¯å®çŸã§ããªãã¬ãã«ã®ä¿¡é Œæ§ãæäŸããŸããããã°ã©ããŒãå®çŸ©ããã³ã³ãã©ã¯ããå³å¯ã«æ€èšŒããããšã§ãéçºåææ®µéã§æ§ã ãªããžãã¯ãšã©ãŒãæé€ããã®ã«åœ¹ç«ã¡ãŸãããããããã®ç¹åãåŠç¿èŠä»¶ããããŠæç€ºçãªã¢ãããŒã·ã§ã³ãžã®äŸåãããMIRAIã¯ä»ã®è§£æããŒã«ãè£å®ããããŒã«ãšããŠæãããããã§ãã·ã§ãã«ãªRustéçºããŒã ã®ããã®å æ¬çãªå質ã»ã»ãã¥ãªãã£æŠç¥ã®äžéšãšããŠæããã®ãé©åã§ãã
ã¯ã«ãŒãŸ
Creusotã¯ãRuståãã®é«åºŠãªåœ¢åŒæ€èšŒãã¬ãŒã ã¯ãŒã¯ã§ããããã«ãããéçºè ã¯ã³ãŒãã«é¢ããè±å¯ãªæ°åŠçç¹æ§ãæå®ãã蚌æããããšãã§ããŸããåŸæ¥ã®éçè§£æããŒã«ããªã³ãã£ã³ã°ããŒã«ãã¹ã¿ã€ã«ã®åé¡ãäžè¬çãªãã°ãæ€åºããã®ã«å¯ŸããCreusotã¯æ©æ¢°æ€èšŒã«ãã蚌æãéããæ·±ãæ£ããã®ä¿èšŒã«éç¹ã眮ããŠããŸããCreusotã¯ãåŠè¡åéãå®å šæ§ãéèŠããããœãããŠã§ã¢ãšã³ãžãã¢ãªã³ã°ã§äžè¬çã«èŠãããåœ¢åŒææ³ããå®çšçãªRustéçºã¯ãŒã¯ãããŒã«å°å ¥ããããšãç®æããŠããŸãã
Creusot-RustãšåŒã°ããRustã®ãµãã»ããã§åäœããããã«èšèšããããã®ããŒã«ã¯ãéçºè ãã³ãŒãã«äºåæ¡ä»¶ãäºåŸæ¡ä»¶ãäžå€æ¡ä»¶ãè£é¡ãªã©ã®ä»æ§ã泚éä»ãããããšãå¯èœã«ããŸããCreusotã¯èªåå®ç蚌æãçšããŠãããã®ããããã£ãæ€èšŒããå®è£ ã圢åŒä»æ§ãæºãããŠããããšã確èªããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- 圢åŒä»æ§ã®ãµããŒã
éçºè ã¯Rustã³ãŒããšäžŠè¡ããŠãæ£ç¢ºãªåææ¡ä»¶ãäºåŸæ¡ä»¶ãäžå€æ¡ä»¶ãè£é¡ãçŽæ¥èšè¿°ã§ããŸããæåŸ ãããåäœãšå¶çŽã®å³å¯ãªããã¥ã¡ã³ãåããµããŒãããŸãã - æ©æ¢°ãã§ãã¯ãããæ ¡æ£
SMT (Satisfiability Modulo Theories) ãœã«ããŒã䜿çšããŠãã³ãŒãã仿§ãæºãããŠãããã©ãããèªåçã«æ€èšŒãããã¹ããè¶ ããæ£ç¢ºæ§ã®åŒ·åãªä¿èšŒãæäŸããŸãã - Rustæ§æãšã®çµ±å
Rustããã°ã©ããŒãèªç¶ãªã³ãŒãã§äœæ¥ã§ããããã«èšèšãããŠãããCreusot-Rustã¯ãRustã®äœ¿ãæ £ããã¹ã¿ã€ã«ãã»ãŒç¶æããªããã圢åŒçæšè«ããµããŒããããµãã»ããã§ãã - æ©èœã®æ£ç¢ºæ§ã®æ€èšŒ
ã³ãŒãã仿§éãã«åäœããããšã蚌æããããšã§ããã°æ€åºã«ãšã©ãŸããŸãããã¯ãªãã£ã«ã«ãªã¢ã«ãŽãªãºã ãããŒã¿æ§é ã®äžå€æ¡ä»¶ãå®å šæ§ãéèŠãããããžãã¯ã«æé©ã§ãã - äžè¬çãªRustæ§é ã®ãµããŒã
åæåããã¿ãŒã³ ãããã³ã°ãç¹æ§ããžã§ããªãã¯ããã®ä»ã®äžè¬ç㪠Rust æ©èœãåŠçããããã¡ãã®äŸã§ã¯ãªãçŸå®çãªã³ãŒãããŒã¹ã«é©çšã§ããŸãã - ãªãŒãã³ãœãŒã¹ãšç ç©¶ã«åºã¥ãã
ã¢ã¯ã»ã¹å¯èœãªåœ¢åŒæ€èšŒãéããŠãœãããŠã§ã¢ã®ä¿¡é Œæ§ãåäžãããããšãç®æšãšãããåŠè¡çãã€ã³ãã¥ããã£äž»å°ã®ãããžã§ã¯ããšããŠéçºãããŸããã
Creusot ã¯ãç¹ã«éèŠãªã·ã¹ãã ã«ãã㊠Rust ã³ãŒãã®æ€èšŒã«ç¬èªã®å©ç¹ãæäŸããŸãããéçºããŒã ãæ éã«è©äŸ¡ããå¿ èŠãããéèŠãªå¶çŽããããŸãã
åœ¢åŒæ€èšŒã«ç¹åãã
Creusotã¯ãæ±çšãªã³ã¿ãŒãã»ãã¥ãªãã£ã¹ãã£ãããŸãã¯äŸåé¢ä¿ç£æ»ããŒã«ã眮ãæããããã«èšèšããããã®ã§ã¯ãããŸããããã®ã¹ã³ãŒãã¯ããŠãŒã¶ãŒãæå®ããããããã£ãä¿æãããŠããããšãæ€èšŒããããšã§ãããããã®æ£åŒãªä»æ§ãèšè¿°ããªããã°ãCreusotã¯ã³ãŒãã«ã€ããŠå€ãã®ããšãåæãŸãã¯èšŒæããããšãã§ããã培åºçãªã¢ãããŒã·ã§ã³ãä»äžãããŠããªãå Žåããããžã§ã¯ãã®å€§éšåãæªæ€èšŒã®ãŸãŸã«ãªããŸãã
åœ¢åŒææ³ã®åŠç¿æ²ç·
Creusotã广çã«äœ¿çšããã«ã¯ãåœ¢åŒæ€èšŒã®ååãçè§£ããæç¢ºãªä»æ§ãèšè¿°ãã蚌æçµæãè§£éããå¿ èŠããããŸããåœ¢åŒææ³ã«ç²ŸéããŠããªãããŒã ã§ã¯ãCreusotã广çã«äœ¿çšããããã«ãã¬ãŒãã³ã°ãšç·Žç¿ãå¿ èŠã«ãªãå Žåããããå°å ¥ãé ããå¯èœæ§ããããŸãã
Rustã®ãµãã»ããã«å¶é
Creusot ã¯ãRust èšèªã®å¶çŽä»ããµãã»ããã§ãã Creusot-Rust ãšé£æºããŠåäœããŸããäžéšã®é«åºŠãª Rust æ©èœã¯å®å šã«ãµããŒããããŠããªãããCreusot ã®æ€èšŒã¢ãã«ã«é©åãããããã«ã³ãŒãã®æžãæããå¿ èŠã«ãªãå ŽåããããŸãããã®ãããå€§èŠæš¡ãè€éããŸãã¯éåžžã«æ £çšç㪠Rust ã³ãŒãããŒã¹ãžã®é©çšãå¶éãããå¯èœæ§ããããŸãã
å®å šã§ãªããããã¯ã®åæãªã
Creusotã¯å®å šãªRustã³ãŒãã®æ€èšŒã«éç¹ã眮ããŠããŸããã³ã³ãã€ã©ã®ä¿èšŒãæç€ºçã«ãã€ãã¹ãããŠããunsafeãããã¯ã®æ£åœæ§ãè§£æã»æ€èšŒããŸãããããã©ãŒãã³ã¹ãFFIã®ããã«unsafeã³ãŒãã«å€§ããäŸåããŠãããããžã§ã¯ãã§ã¯ããããæ€èšŒã®ã®ã£ãããçã¿åºããŸãã
ã»ãã¥ãªãã£è匱æ§ããŒã¿ããŒã¹ã®ãã§ãã¯äžè¶³
Creusot ã¯ãcargo-audit ã®ããã«äŸåé¢ä¿ã«ãããæ¢ç¥ã®ã»ãã¥ãªãã£åé¡ããã§ãã¯ããŸããããŸããããŒãã³ãŒããããã·ãŒã¯ã¬ãããäžé©åãªãšã©ãŒåŠçãæ£åŒãªä»æ§ã®ã³ã³ããã¹ãå€ã§ã®å®å šã§ãªã API ã®äœ¿çšãšãã£ãäžè¬çãªã»ãã¥ãªãã£ãã¿ãŒã³ã®åæãè¡ããŸããã
éå®çãªCI/CDçµ±åæ©èœ
Creusot ã¯ãã«ãããã»ã¹ã®äžéšãšããŠå®è¡ã§ããŸãããCI/CD ã·ã¹ãã ãšã®çµ±åæ©èœãååã«æŽã£ãŠããŸããããã€ãã©ã€ã³å ã§æ€èšŒãã§ãã¯ãèªåçã«å®è¡ããããã«ãã«ã¹ã¿ã ã¹ã¯ãªãããã¯ãŒã¯ãããŒãéçºããå¿ èŠããããããããŸããã
ã«ã¹ã¿ã ãªã³ãã£ã³ã°ãã¹ã¿ã€ã«ã«ãŒã«ã¯ãããŸãã
Creusotã¯ãªã³ãã£ã³ã°ããŒã«ã§ã¯ãªããã¹ã¿ã€ã«ã¬ã€ããåœåèŠåãæ £çšçãªçšæ³ã匷å¶ããã¡ã«ããºã ã¯æäŸããŠããŸãããäžè²«ããã³ãŒãã£ã³ã°èŠçŽãç¶æããããã«ã¯ãClippyãªã©ã®ãªã³ã¿ãŒã䜿çšããå¿ èŠããããŸãã
ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé
åœ¢åŒæ€èšŒã¯èšå€§ãªèšç®éãå¿ èŠãšããŸããå€§èŠæš¡ãªã³ãŒãããŒã¹ãéåžžã«è€éãªé¢æ°ã«å¯ŸããŠCreusotãå®è¡ãããšãæ€èšŒæéãé·ããªãå¯èœæ§ããããéžæçãªé©çšã䌎ããªãè¿ éãªéçºãµã€ã¯ã«ã«ã¯é©ããªãå¯èœæ§ããããŸãã
Creusotã¯ãéèŠãªæ£ããã®ããããã£ãæ°åŠçã«å³å¯ã«èšŒæããå¿ èŠãããRustããŒã ã«ãšã£ãŠåŒ·åãªããŒã«ã§ããéçºè ã圢åŒä»æ§ãèšè¿°ããã³æ€èšŒã§ããããã«ããããšã§ããã¹ããåŸæ¥ã®éçè§£æãè¶ ããã¬ãã«ã®ä¿èšŒãæäŸããŸããããããåœ¢åŒæ€èšŒãåŠç¿èŠä»¶ããµãã»ããèšèªã®å¶çŽããããŠçµ±åã®èª²é¡ã«éç¹ã眮ããŠãããããããããã³ãŒãè§£æããŒãºã«å¯Ÿå¿ããã¹ã¿ã³ãã¢ãã³ãœãªã¥ãŒã·ã§ã³ãšãããããããœãããŠã§ã¢å質ãç¶æããããã®ããåºç¯ãªããŒã«ããããžã®å°éçãªè¿œå æ©èœãšããŠæããã®ãé©åã§ãã
ãã«ã¹ãã£
Prustiã¯ãRustããã°ã©ã çšã®éçæ€èšŒããŒã«ã§ãããåœ¢åŒæ€èšŒæè¡ãæ¥åžžã®éçºã¯ãŒã¯ãããŒã«å°å ¥ããŸããRustã³ã³ãã€ã©äžã«æ§ç¯ãããPrustiã¯ãéçºè ãå¥çŽãçšããŠRustã³ãŒãå ã«çŽæ¥ãäºåæ¡ä»¶ãäºåŸæ¡ä»¶ãäžå€æ¡ä»¶ãªã©ã®åœ¢åŒä»æ§ãèšè¿°ããããšãå¯èœã«ããŸãããããŠãèªåæšè«ãçšããŠãããã®ä»æ§ãæ€èšŒããããããå®è¡ç¶æ³ã«ãããŠã³ãŒããæ£ããåäœããããšãä¿èšŒããŸãã
ã¹ã¿ã€ã«ãäžè¬çãªãã°ãã¿ãŒã³ã«éç¹ã眮ãäžè¬çãªéçè§£æããŒã«ãšã¯ç°ãªããPrustiã¯æ·±ãè«ççæ£ãããã¿ãŒã²ãããšããŠããŸããç¹å®ã®æ¡ä»¶äžã§ã®ã¿çºçããå¯èœæ§ã®ãã埮åŠãªãã°ãæ€åºããç¹å®ã®ãšã©ãŒãçºçããªãããšãæ©æ¢°æ€èšŒã«ãã£ãŠä¿èšŒããããã«èšèšãããŠããŸããRustã®æææš©ã·ã¹ãã ãšåã·ã¹ãã ãšå¯æ¥ã«çµ±åããããšã§ãPrustiã¯ãŠãŒã¶ãŒå®çŸ©ã®æ¯ãèãå¥çŽã«ãã£ãŠèšèªã®å®å šæ§ã¢ãã«ã匷åããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- Rustã«ããã圢åŒå¥çŽ
Rustã¹ã¿ã€ã«ã®ã¢ãããŒã·ã§ã³ã䜿çšããŠãåææ¡ä»¶ãäºåŸæ¡ä»¶ãã«ãŒãäžå€æ¡ä»¶ãã¢ãµãŒã·ã§ã³ãèšè¿°ã§ããŸãããããã®å¥çŽã¯ãæåŸ ãããåäœãšå¶çŽãã³ãŒãå ã§æç€ºçã«èšè¿°ããŸãã - èªåæ€èšŒ
SMT (Satisfiability Modulo Theories) ãœã«ããŒã䜿çšããŠãã³ãŒãããã¹ãŠã®å¯èœãªå®è¡ãã¹ã«ããã£ãŠå¥çŽãæºãããŠãããã©ããã確èªããè«ççãªãã°ã®ã¯ã©ã¹å šäœãæé€ããŸãã - Rustã³ã³ãã€ã©ãšã®ç·å¯ãªçµ±å
æšæºã® Rust ããŒã«ãšé£æºããã³ã³ãã€ã©ã®æ¢åã®åãšåçšãã§ãã¯ã掻çšããŠãå®éã® Rust ãããžã§ã¯ãã§ã®æ€èšŒãå®çšçã«ããŸãã - äžè¬çãªRustæ§é ã®ãµããŒã
ãã¿ãŒã³ ãããã³ã°ãåæåãç¹æ§ããžã§ããªãã¯ãããã³ãã®ä»ã®äžè¬ç㪠Rust æ©èœãåŠçãããããå€ãã®åŠè¡çãªæ€èšŒããŒã«ãããçŸå®çãªã³ãŒãããŒã¹ã§äœ¿ãããããªããŸãã - 詳现ãªåäŸå ±å
æ€èšŒã«å€±æããå ŽåãPrusti ã¯å ·äœçãªåäŸãæäŸããŠãéçºè ãå¥çŽéåã®çç±ãæ£ç¢ºã«çè§£ã§ããããã«ããŸãã - ãªãŒãã³ãœãŒã¹ãšç ç©¶ã«åºã¥ãã
ã¢ã¯ãã£ããªã³ãã¥ããã£ãšç¶ç¶çãªæ¹åã«ãããåœ¢åŒæ€èšŒã Rust éçºã®äž»æµã«åãå ¥ããããã®åŠè¡ç ç©¶ã®äžç°ãšããŠéçºãããŸããã
Prusti ã¯æ£ç¢ºæ§ãä¿èšŒããããã®é«åºŠãªæ©èœãæäŸããŸãããããŒã ãå°å ¥ããåã«æ éã«æ€èšããå¿ èŠãããç¹å®ã®å¶éããããŸãã
ãŠãŒã¶ãŒå®çŸ©å¥çŽãžã®äŸå
Prustiã®æå¹æ§ã¯ãéçºè ãèšè¿°ããå¥çŽã®å質ãšã«ãã¬ããžã«å®å šã«äŸåããŸããæç¢ºãã€è©³çްãªä»æ§ããªããã°ãPrustiã¯ã³ãŒãããŒã¹ã«ã€ããŠååãªæ€èšŒãè¡ãããšãã§ããŸãããã€ãŸããéçºè ã¯ããŒã«ã®ã¡ãªããã享åããããã«ãæ£ç¢ºãªå¥çŽãçè§£ããèšè¿°ããããšã«æéãè²»ããå¿ èŠããããšããããšã§ãã
å®å šã§ãªãRustãžã®éå®çãªãµããŒã
Prustiã¯å®å šãªRustã³ãŒãã®æ€èšŒãç®çãšããŠèšèšãããŠããŸããã³ã³ãã€ã©ã®ä¿èšŒãç·©ãã¢ã³ã»ãŒããããã¯å ã®æ£åœæ§ãè§£æã»æ€èšŒããããšã¯ã§ããŸãããããã©ãŒãã³ã¹ãFFIã®ããã«ã¢ã³ã»ãŒãã³ãŒãã䜿çšãããããžã§ã¯ãã§ã¯ãæ€èšŒã«ãã¬ããžã«æœåšçãªã®ã£ãããçããå¯èœæ§ããããŸãã
èšèªãµãã»ãããšæ©èœã®å¶é
Prusti ã¯ãŸã Rust ã®ãã¹ãŠã®æ©èœããµããŒãããŠããŸãããè€éãªãã¯ããé«åºŠã«åçãªãã¿ãŒã³ãªã©ãäžéšã®é«åºŠãªæ§é ã¯ãµããŒããããŠããªãããæ€èšŒã®ããã«ç°¡ç¥åãå¿ èŠãšãªãå ŽåããããŸãããã®ãããRust ã®å®å šãªæ©èœã»ããã䜿çšããå€§èŠæš¡ã§æçããã³ãŒãããŒã¹ã§ã¯ãPrusti ã®é©çšç¯å²ãå¶éãããå¯èœæ§ããããŸãã
ããŒã ã®æ¥å³»ãªåŠç¿æ²ç·
Prustiã广çã«æŽ»çšããã«ã¯ãéçºè ãå¥çŽæžã®äœæãåäŸã®è§£éãšãã£ãåœ¢åŒæ€èšŒã®æŠå¿µãç¿åŸããå¿ èŠããããŸããåœ¢åŒææ³ã®çµéšããªãããŒã ã¯ãPrustiã广çã«å°å ¥ããããã«ãããªãã®åŠç¿æ²ç·ã«çŽé¢ããå¯èœæ§ããããŸãã
ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã®èª²é¡
åœ¢åŒæ€èšŒã¯èšå€§ãªèšç®éãå¿ èŠãšããŸããè€éãªå¶åŸ¡ãããŒãæã€å€§èŠæš¡ãªé¢æ°ã®è§£æããå€§èŠæš¡ãªã³ãŒãããŒã¹ã®æ€èšŒã¯ãè§£ææéãé·ããªãå¯èœæ§ããããŸãããã®ãããPrustiãã³ãããããšããããã¯è¿ éãªCIãµã€ã¯ã«ã§å®è¡ããããšã¯ãã¹ã³ãŒããæ éã«èšå®ããªããã°å°é£ã§ãã
æå°éã® IDE ãš CI/CD ã®çµ±å
Prusti ã®éçºã¯ãŒã¯ãããŒãžã®çµ±åã¯ãŸã é²åãç¶ããŠããŸãããšãã£ã¿å ã§ã®ã³ã³ãã©ã¯ãèšè¿°ãæ€èšŒãã£ãŒãããã¯ãšãã£ã IDE ãšã®ç·å¯ãªçµ±åã¯ãŸã å®çŸãããŠããããCI/CD ãã€ãã©ã€ã³ãžã®è¿œå ã«ã¯å€ãã®å Žåãã«ã¹ã¿ã ã¹ã¯ãªããã®äœæãå¿ èŠã«ãªããŸãã
ã»ãã¥ãªãã£è匱æ§ããŒã¿ããŒã¹çµ±åãªã
cargo-audit ã®ãããªããŒã«ãšã¯ç°ãªããPrusti ã¯äŸåé¢ä¿ã«ãããæ¢ç¥ã®è匱æ§ããã§ãã¯ããŸãããPrusti ã¯ããŠãŒã¶ãŒãäœæããã³ãŒãã®æ©èœçãªæ£ããã®æ€èšŒã«ã®ã¿çŠç¹ãåœãŠãŠããããµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ãäŸåé¢ä¿ã®ãªã¹ã¯ã¯æ€èšŒããŸããã
äžè¬çãªãªã³ãã£ã³ã°ãšã¹ã¿ã€ã«ãã§ãã¯ã®æ¬ åŠ
Prustiã¯ãã¹ã¿ã€ã«äžã®æ £ç¿ãRustã®æ £çšçãªãã¿ãŒã³ã匷å¶ããŸãããããŒã ã¯ãPrustiã®åœ¢åŒæ€èšŒãšäžŠè¡ããŠãäžè²«ããã¹ã¿ã€ã«ãšãã¹ããã©ã¯ãã£ã¹ãç¶æããããã«ãClippyãªã©ã®ããŒã«ã䜿çšããå¿ èŠããããŸãã
Prustiã¯Rustéçºã«å³å¯ãªåœ¢åŒæ€èšŒããããããéçºè ãããããç¶æ³äžã§ã³ãŒããæå³ãããšããã«åäœããããšã蚌æã§ããããã«ããŸããç¹ã«ãã¯ãªãã£ã«ã«ãªã¢ã«ãŽãªãºã ãããŒã¿æ§é ãå®å šæ§ãéèŠãããããžãã¯ã«ãããŠåšåãçºæ®ããŸããããããæç€ºçãªå¥çŽãžã®äŸåãåŠç¿èŠä»¶ãèšèªãµãã»ããã®å¶çŽããããŠèªååãµããŒãã®å¶éãšãã£ãåé¡ãæ±ããŠãããããå æ¬çãªã³ãŒãå質ãšå®å šæ§ãå®çŸããã«ã¯ãåŸæ¥ã®éçè§£æããªã³ã¿ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒããããŠåŸ¹åºçãªã³ãŒãã¬ãã¥ãŒææ³ãè£å®ããããŒã«ãšããŠæŽ»çšããã®ãæé©ã§ãã
å¯å
Kaniã¯ãRustããã°ã©ã ãLLVMäžé衚çŸïŒIRïŒã¬ãã«ã§è§£æããããã«ç¹å¥ã«èšèšãããåœ¢åŒæ€èšŒããŒã«ã§ããAWSã«ãã£ãŠéçºã»ä¿å®ãããŠããKaniã¯ã以äžã®æ©èœãå®è¡ããããšã§ãRustã³ãŒãã®åœ¢åŒæ€èšŒãå®çšçãã€ã¹ã±ãŒã©ãã«ã«ããããšãç®çãšããŠããŸãã æçã¢ãã«æ€æ» ïŒBMCïŒããã®ã¢ãããŒãã¯ããŠãŒã¶ãŒãæå®ããå¢çãŸã§ã®ãã¹ãŠã®å¯èœãªããã°ã©ã ç¶æ ãäœç³»çã«æ¢çŽ¢ããã³ãŒãã®ç¹æ§ã蚌æãŸãã¯å蚌ããŸãã
Kaniã¯ãå®å šæ§ã極ããŠéèŠãªã·ã¹ãã ãçµã¿èŸŒã¿ãœãããŠã§ã¢ãæå·ã©ã€ãã©ãªãªã©ãéçºè ãRustã³ãŒãã«ç¹å®ã®çš®é¡ã®ãã°ããªãããšãé«ãä¿¡é Œæ§ã§ç¢ºèªãããç¶æ³ã«ç¹ã«é©ããŠããŸããæå®ãããç¯å²å ã§å®è¡å¯èœãªãã¹ãŠã®å®è¡ãã¹ãã¢ãã«åããããšã§ãKaniã¯ãã¹ããåŸæ¥ã®éçè§£æã§ã¯æ€åºãé£ãã埮现ãªè«çãšã©ãŒãæ€åºã§ããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- å¢çä»ãã¢ãã«æ€æ»
æå®ãããå¢çãŸã§ã®ãã¹ãŠã®å¯èœãªå®è¡ãã¹ãäœç³»çã«åæãããã®å¶éå ã®ãã¹ãŠã®ã·ããªãªã§æ£ç¢ºæ§ããããã£ãä¿æãããããšã確èªããŸãã - Rustã¢ãµãŒã·ã§ã³ã®ãµããŒã
æšæºRustãæ€èšŒassertã¹ããŒãã¡ã³ãã«ãããéçºè ãå®çŸ©ããå®å šæ§ãšæ£ç¢ºæ§ã®æ¡ä»¶ããéžæããç¯å²å ã§åžžã«ç¶æãããããšãä¿èšŒãããŸãã - ããŒãã¹ããŒã¹ã®æ€èšŒã¢ãã«
éçºè ãæžãã æ€èšŒããŒãã¹ã¯ãKani ãæ€èšŒããå¿ èŠãããæ¡ä»¶ãšå ¥åãèšè¿°ããããã«äœ¿çšãããç¹æ®ãªãšã³ã㪠ãã€ã³ãã§ãããåæã¹ã³ãŒãã现ããå¶åŸ¡ã§ããŸãã - ã¡ã¢ãªå®å
šæ§æ€èšŒ
å®å šã§ãªããããã¯ãå«ãã³ãŒãã§ãã£ãŠããæå®ãããå¢çå ã§ãããã¡ ãªãŒããŒãããŒãnull éåç §ãè§£æŸåŸäœ¿çšãªã©ã®ã¡ã¢ãªå®å šæ§ãšã©ãŒããªãããšã蚌æããŸãã - å®å
šã§ãªãRustã®ãµããŒã
å®å šã§ãªãã³ãŒããç¡èŠããå€ãã®ããŒã«ãšã¯ç°ãªããKani ã¯ãããæç€ºçã«åæããããã©ãŒãã³ã¹ãéèŠãªã³ãŒããã·ã¹ãã ã¬ãã«ã®ã³ãŒãã§ãå®å šæ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã - Cargoãšã®çµ±å
æšæºã® Rust ããŒã«ãšã·ãŒã ã¬ã¹ã«é£æºããRust éçºè ãæå°éã®æ©æŠã§æ¢åã®ã¯ãŒã¯ãããŒã«æ€èšŒãç°¡åã«çµã¿èŸŒãããšãã§ããŸãã - 詳现ãªåäŸçæ
æ€èšŒã倱æããå ŽåãKani ã¯ããããã£ãã©ã®ããã«éåãããããæ£ç¢ºã«ç€ºãå ·äœçãªåäŸãæäŸãããããã°ãšä¿®åŸ©ã«å€§ãã圹ç«ã¡ãŸãã - AWS ãµããŒãã«ãããªãŒãã³ãœãŒã¹
AWS ã®æ¯æŽãåããŠç©æ¥µçã«éçºãããŠãããç¶ç¶çãªæ¹åãããã¥ã¡ã³ãåãã³ãã¥ããã£ã®é¢äžãä¿èšŒãããŠããŸãã
Kani 㯠Rust éçºã«åŒ·åãªåœ¢åŒæ€èšŒæ©èœããããããŸãããå°å ¥ããåã«ããŒã ãçè§£ããŠããã¹ãéèŠãªèæ ®äºé ãšãã¬ãŒããªãããããŸãã
è§£æå¢çã®å¶é
ã«ãã®ã¢ãã«æ€æ»ã¯ è·³ããã€ãŸãããã®ä¿èšŒã¯æå®ãããå®è¡å¢çïŒäŸïŒã«ãŒãã®å±éå¶éãååž°ã®æ·±ãïŒå ã§ã®ã¿æå¹ã§ããå¢çã®ãªãåäœãéåžžã«æ·±ãç¶æ 空éã«äŸåããããããã£ã¯ãæç¢ºãªã¹ã³ãŒãèšå®ãšèª¿æŽãè¡ãããªãéãããã§ãã¯ãããªãå¯èœæ§ããããŸããå¢çãäœããããšãåœé°æ§ã®ãªã¹ã¯ãçããŸãã
æ€èšŒããŒãã¹ã®æžã蟌ã¿ãå¿ èŠ
Kaniã®æå¹æ§ã¯ãæ¢çŽ¢ãã¹ãæ¡ä»¶ãšå ¥åãå®çŸ©ãããé©åã«èšè¿°ãããæ€èšŒããŒãã¹ã«äŸåããŸããããŒãã¹ã®èšèšãé©åã§ãªããšãéèŠãªãã¹ãèŠéããŠããŸãå¯èœæ§ããããŸããããŒã ã¯æéãšå°éç¥èãæå ¥ããçŸå®äžçã®äœ¿çšã·ããªãªãæããææçŸ©ãªããŒãã¹ãäœæããå¿ èŠããããŸãã
ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã«é¢ããèæ ®äºé
å¢çä»ãã¢ãã«æ€æ»ã¯èšç®è² è·ãé«ãã§ããã³ãŒãã®è€éããå¢ãã«ã€ããŠãKaniãæ¢çŽ¢ããªããã°ãªããªãç¶æ ã®æ°ã¯ææ°é¢æ°çã«å¢å ããè§£ææéãé·ããªãå¯èœæ§ããããŸãããŸããå¢çã®èª¿æŽãã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãè¡ããªããšæ€èšŒãå°é£ã«ãªãå ŽåããããŸãã
éããã IDE çµ±åãšéçºè UX
Kani ã®äž»ãªã€ã³ã¿ãŒãã§ãŒã¹ã¯ã³ãã³ãã©ã€ã³ããŒã¹ã§ããã«ãèªååã«éç¹ã眮ããŠããŸããåºåã¯æç¢ºãã€æ£ç¢ºã§ãããäžè¬ç㪠Rust IDE ããšãã£ã¿ã«ã¯ãŸã æ·±ãçµ±åãããŠããããæ¥ã ã®å¢åéçºã«ããããã£ãŒãããã¯ãåŸãã«ã¯äœ¿ãã«ããç¶æ³ã§ãã
æ±çšãªã³ã¿ãŒãã¹ã¿ã€ã«ãã§ãã«ãŒã§ã¯ãªã
Kaniã¯æ£åœæ§ããããã£ã®èšŒæã«éç¹ã眮ããŠããŸããRustã®ã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ãæ £çšçãªäœ¿çšæ³ãäžè¬çãªlintã«ãŒã«ã匷å¶ãããã®ã§ã¯ãããŸãããéçºè ã¯ãäžè²«ããã³ãŒãã£ã³ã°èŠçŽãšæ £çšçãªãã©ã¯ãã£ã¹ãç¶æããããã«ãClippyã®ãããªããŒã«ãå¿ èŠãšããŠããŸãã
äŸåé¢ä¿ã®è匱æ§ãã§ãã¯ãªã
cargo-auditãšã¯ç°ãªããKaniã¯æ¢ç¥ã®ã»ãã¥ãªãã£å§åããµãã©ã€ãã§ãŒã³ãªã¹ã¯ã«ã€ããŠäŸåé¢ä¿ãåæããŸãããäŸåé¢ä¿ã«CVEãå«ãŸããŠããå Žåããcrates.ioããåé€ãããå Žåã«éçºè ã«èŠåããããšã¯ã§ããŸããã
æ£åŒãªæèãšå°éç¥èãå¿ èŠ
Kaniã广çã«æŽ»çšããã«ã¯ãéçºè ãã³ãŒãã«ã€ããŠåœ¢åŒçã«èå¯ããæ£ç¢ºãªããŒãã¹ãèšèšããåäŸãè§£éããããšããã°ãã°å¿ èŠã«ãªããŸããåœ¢åŒæ€èšŒã®çµéšããªãããŒã ã¯ãKaniã广çã«å°å ¥ããããã«åŠç¿æ²ç·ã«çŽé¢ããå¯èœæ§ããããŸãã
å°éå®¶ã«çŠç¹ãåœãŠãåºåãšã¬ããŒã
Kaniã®ãšã©ãŒã¬ããŒãã¯è©³çްã§ãããåœ¢åŒææ³ãäœã¬ãã«ã®ããã°ã©ã è§£æã«æ £ãããŠãŒã¶ãŒåãã«ã«ã¹ã¿ãã€ãºãããŠããŸããã¢ãã«æ€æ»ã®æŠå¿µã«ç²ŸéããŠããªãéçºè ã¯ãããŒã«ã®ç¥èŠãæå€§éã«æŽ»çšããããã«è¿œå ã®ãã¬ãŒãã³ã°ãå¿ èŠã«ãªãå ŽåããããŸãã
Kaniã¯ãRustã«æå 端ã®åœ¢åŒæ€èšŒæ©èœããããããŸããç¹ã«ãã¡ã¢ãªã®å®å šæ§ãšæ£ç¢ºæ§ã絶察çã«æ±ããããã·ã¹ãã ã¬ãã«ããã³ã»ãŒããã£ã¯ãªãã£ã«ã«ãªéçºã«ãããŠæå¹ã§ããRustã³ãŒãã®ããããã£ïŒunsafeãããã¯ãå«ãïŒãäœç³»çã«æ€èšŒããããšã§ããã¹ããããæããå¯èœæ§ã®ãããã°ã®ã¯ã©ã¹å šäœãæé€ããã®ã«åœ¹ç«ã¡ãŸãããããããã®éå®çãªæ§è³ªãããã©ãŒãã³ã¹ã³ã¹ããããŒãã¹èŠä»¶ããããŠåŠç¿æ²ç·ãèãããšãKaniã¯RustãœãããŠã§ã¢ã®å質ãã»ãã¥ãªãã£ãä¿å®æ§ãä¿èšŒããåºç¯ãªéçºã»åæããŒã«ã¹ã€ãŒããžã®ç¹å¥ãªè¿œå æ©èœãšããŠæããã®ãé©åã§ãã
ã·ãŒã¢
Seerã¯ãã·ã³ããªãã¯å®è¡æè¡ãçšããŠRustããã°ã©ã ã«ããããæ£ç¢ºæ§ã«é倧ãªåœ±é¿ãäžãã埮åŠãªãã°ãæ€åºããããã«èšèšãããå®éšçãªéçè§£æããŒã«ã§ããããã¥ãŒå€§åŠã®ç ç©¶è ã«ãã£ãŠéçºãããSeerã¯ãRustããŒã«ãšã³ã·ã¹ãã ã«ãããç¬èªã®é åãã¿ãŒã²ãããšããŠãããéåžžã¯èšèªã®åŒ·åãªã³ã³ãã€ã«æä¿èšŒã®æ©æµãåããå®å šãªRustã³ãŒãã§ãã£ãŠãçºçããå¯èœæ§ã®ããè«çãšã©ãŒãç¹å®ããããšãç®æããŠããŸãã
ãªã³ã¿ãŒãã¹ã¿ã€ã«ãã§ãã«ãŒãšã¯ç°ãªããSeer㯠ã»ãã³ãã£ã㯠åé¡ãæ€åºããŸããSeerã¯ããã°ã©ã ãã¹ãã·ã³ããªãã¯ã«äœç³»çã«æ¢çŽ¢ããã¢ãµãŒã·ã§ã³ã®å€±æãåææ¡ä»¶ã«éåããç¡å¹ãªå ¥åãã³ã³ãã€ã©ãã§ãã¯ãšåŸæ¥ã®ãã¹ãã®äž¡æ¹ãããæããå¯èœæ§ã®ããå¶åŸ¡ãããŒã®èª€ããªã©ã®è«ççãªæ¬ é¥ãæ€åºããŸããRustã³ãŒãããã¹ã«ææã«åå¿ããŠè§£æããããšã§ãSeerã¯ç¹å®ã®ããã¹ããå°é£ãªæ¡ä»¶äžã§ã®ã¿çºçãããã°ãèŠã€ããããšãã§ããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- Rustã®ã·ã³ããªãã¯å®è¡
å ¥åãèšå·å€ãšããŠââ衚çŸããããšã§ããã°ã©ã ãã¹ãåæããæåã§ãã¹ãå ¥åãçæããããšãªããå®è¡å¯èœãªåºå€§ãªç©ºéãæ¢çŽ¢ã§ããããã«ããŸãã - ã¢ãµãŒã·ã§ã³é忀åº
åå ãšãªãå¯èœæ§ã®ããã³ãŒããã¹ãç¹å®ããŸãassertã¹ããŒãã¡ã³ããŸãã¯å¥çŽæ¡ä»¶ã倱æããããã«ããããšã§ãéçºè ã¯æ¬çªç°å¢ã«æŒããŠããŸãå¯èœæ§ã®ããããžã㯠ãšã©ãŒãæé€ã§ããããã«ãªããŸãã - ãã°çºèŠã®ããã®èªåå
¥åçæ
ã¢ãµãŒã·ã§ã³ ãšã©ãŒãããªã¬ãŒããå ·äœçãªå ¥åäŸãçæããéçºè ããã°ãåçŸããŠçè§£ãããããªããŸãã - å®å
šãªRuståæã«çŠç¹ãåœãŠã
å®å šã§ãªãã³ãŒãã®ã¿ã«çŠç¹ãåœãŠãå€ãã®éçã¢ãã©ã€ã¶ãŒãšã¯ç°ãªããSeer ã¯å®å šã«å®å šãª Rust ã³ãŒãããŒã¹å ã®åŸ®åŠãªã»ãã³ãã£ã㯠ãšã©ãŒãèŠã€ããããã«èšèšãããŠããŸãã - ç ç©¶ã¬ãã«ã®ç²ŸåºŠ
åŠè¡ç ç©¶ã«åºã¥ããŠæ§ç¯ãããRust ã®åãšåçšãã§ã㯠ã·ã¹ãã ãè£å®ãããæ£ç¢ºã§ãã¹ã«ææãªãã°æ€åºãå®çŸããŸãã - ãªãŒãã³ãœãŒã¹ã§ã³ãã¥ããã£ã¢ã¯ã»ã¹å¯èœ
Rust ã³ãã¥ããã£ã¯å®éšãšæ¹åã®ããã«èªç±ã«å©çšã§ããéçºããµããŒãããç¶ç¶çãªç ç©¶ãè¡ãããŠããŸãã
Seer 㯠Rust ã³ãŒãã®æ·±ãæ£ç¢ºæ§ã®åé¡ãçºèŠããç¬èªã®æ©èœãæäŸããŸãããå®éã®ãããžã§ã¯ãã§ã®äœ¿çšãè©äŸ¡ããéã«ããŒã ãèæ ®ãã¹ãå®éçããã³æŠå¿µçãªå¶éã䌎ããŸãã
æç床ãšçç£æºåãéãããŠãã
Seerã¯ãæçããå®çšŒå察å¿ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããç ç©¶æåã®å®éšçãªããŒã«ã§ãããããã§ãã·ã§ãã«ããŒã ãéèŠãªéçºããŒã«ã«æåŸ ããå®å®æ§ã䜿ãããããæŽç·Žãããçµ±åæ§ãæäŸããŠããªãå¯èœæ§ããããŸããSeerã®ã€ã³ã¹ããŒã«ãèšå®ãä¿å®ã«ã¯ãç ç©¶çšãããã¿ã€ãã®ç¥èãšåŽåãå¿ èŠã«ãªãå ŽåããããŸãã
ã¢ãµãŒã·ã§ã³éåã«çŠç¹ãçµã
Seerã®æå€§ã®åŒ·ã¿ã¯ãæç€ºçãªã¢ãµãŒã·ã§ã³ãåææ¡ä»¶ã«éåããå¯èœæ§ã®ããã³ãŒããã¹ãæ€åºããããšã§ããæ±çšçãªãªã³ã¿ãŒãã¹ã¿ã€ã«ãã§ãã«ãŒãšããŠæ©èœããããã§ã¯ãªããClippyãªã©ã®ããŒã«ãåŠçãããããªæ £çšçãªäœ¿çšæ³ãåœåèŠåãäžè¬çãªRustã®ãã¹ããã©ã¯ãã£ã¹ã匷å¶ããããšãã§ããŸããã
äŸåæ§ã®ãªãè匱æ§åæ
Cargo-auditãªã©ã®ããŒã«ãšã¯ç°ãªããSeerã¯ãããžã§ã¯ãã®Cargo.tomlãã¡ã€ã«ãCargo.lockãã¡ã€ã«ãæ€æ»ããŠäŸåé¢ä¿ã®æ¢ç¥ã®ã»ãã¥ãªãã£è匱æ§ãç¹å®ããããšã¯ãããŸããããŸãããµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£å¯ŸçãæäŸããŠããªãããããã®éèŠãªæžå¿µäºé ã¯ãšã³ã·ã¹ãã å ã®ä»ã®ããŒã«ã«å§ããããŠããŸãã
å®å šã§ãªãã³ãŒããããã¯ã®åæãªã
Seerã®èšèšã¯å®å šãªRustã³ãŒãã«éç¹ã眮ããŠãããunsafeãããã¯ã¯è§£æç¯å²ããã»ãŒé€å€ãããŠããŸããããã©ãŒãã³ã¹ãFFIã®ããã«unsafeã³ãŒããå«ããããžã§ã¯ãã®å ŽåãSeerã¯KaniãRudraãªã©ã®ããŒã«ã«èŠãããã¡ã¢ãªå®å šæ§æ€èšŒãé«åºŠãªãã§ãã¯æ©èœãæäŸããŸããã
ããã©ãŒãã³ã¹ãšã¹ã±ãŒã©ããªãã£ã®å¶çŽ
ã·ã³ããªãã¯å®è¡ã¯æ¬è³ªçã«èšç®è² è·ãé«ãã§ããã³ãŒãã®è€éããå¢ãã«ã€ããŠãå®è¡å¯èœãªãã¹ã®æ°ãççºçã«å¢å ããè§£ææéã®å»¶é·ããªãœãŒã¹æ¯æžã«ã€ãªãããŸããå€§èŠæš¡ãªãããžã§ã¯ããé«åºŠã«åçãªã³ãŒãã®å Žåãéžæçãªè§£æãæ éãªãã¹ãã«ãŒãã³ã°ãè¡ããªããšãSeerã®å®çšæ§ãå¶éãããå¯èœæ§ããããŸãã
ã«ã¹ã¿ã ã«ãŒã«äœææ©èœã®æ¬ åŠ
Seerã¯ãç¹å®ã®ãããžã§ã¯ããçµç¹ã®æšæºã«åãããŠã«ã¹ã¿ãã€ãºãããã«ãŒã«ããã§ãã¯ãå®çŸ©ããããã®ãã¬ãŒã ã¯ãŒã¯ãæäŸããŠããŸããããã®æ€åºæ©èœã¯ã¢ãµãŒã·ã§ã³ãšå¶åŸ¡ãããŒã®æ£ç¢ºæ§ã«éç¹ã眮ããŠãããããããåºç¯ãªéçè§£æããŒãºã«å¯Ÿå¿ããæè»æ§ãå¶éãããŠããŸãã
æå°éã® IDE ãš CI/CD ã®çµ±å
Seerã¯äž»ã«ç ç©¶ã¬ãã«ã®åºåãæäŸããã³ãã³ãã©ã€ã³ããŒã«ã§ããäžè¬çãªRust IDEããšãã£ã¿ãCI/CDã·ã¹ãã ãšã®å ç¢ãªçµ±åãæ¬ ããŠããŸããSeerãå°å ¥ããããŒã ã¯ãSeerãã¯ãŒã¯ãããŒã«å¹æçã«çµã¿èŸŒãããã«ãã«ã¹ã¿ã ã¹ã¯ãªãããšããã»ã¹ãéçºããå¿ èŠãããã§ãããã
ã·ã³ããªãã¯å®è¡æŠå¿µã®åŠç¿æ²ç·
Seerã广çã«äœ¿çšããã«ã¯ãã·ã³ããªãã¯å®è¡ãå¶çŽè§£æ±ºãåäŸè§£éã«é¢ããç¥èãå¿ èŠã§ãããããã®åœ¢åŒææ³ã«ç²ŸéããŠããªãéçºè ã¯ãSeerã®ç¥èŠã广çã«é©çšããããã«ãåŠç¿æ²ç·ã«çŽé¢ããå¯èœæ§ããããŸãã
Seerã¯Rustã®éçè§£æã«é«åºŠãªèª¿æ»ææ³ãå°å ¥ããåŸæ¥ã®ãã¹ããã³ã³ãã€ã©ãã§ãã¯ãããæãããæ·±ããŠãã¹ã«ææãªãã°ãçºèŠãã匷åãªææ®µãæäŸããŸããç¹ã«ãããããªã¢ãµãŒã·ã§ã³éåããã蚱容ãããªããå®å šæ§ã極ããŠéèŠãªããžãã¯ã«é©ããŠããŸããããããªãããSeerã¯å®éšçãªæ§è³ªãæã¡ãã¢ãµãŒã·ã§ã³éåã«çŠç¹ãçµãããŠãããã¢ã³ã»ãŒãã³ãŒãè§£ææ©èœããªããçµ±åæ©èœãéãããŠãããããå°éç¥èãšãªãœãŒã¹ãæã¡ãä»ã®Rustéçè§£æããªã³ãã£ã³ã°ãã»ãã¥ãªãã£ããŒã«ãšäœµçšããŠSeerã®æ©èœã掻çšããããŒã ã«ãšã£ãŠãSeerã¯å°éçãªè£å®ããŒã«ãšããŠæããã®ãé©åã§ãã
ãããŒãªã¹ããªãŒ
Flowistryã¯ãRustã®é«åºŠãªéçè§£æãšå¯èŠåããŒã«ã§ãããçè§£ã«éç¹ã眮ããŠããŸãã ããŒã¿ãã㌠Rustããã°ã©ã ã§ãRustã¢ãã©ã€ã¶ãŒæ¡åŒµæ©èœããã³ã³ãã³ãã©ã€ã³ããŒã«ãšããŠæ§ç¯ãããFlowistryã¯ãéçºè ãã³ãŒãå ã§ããŒã¿ãã©ã®ããã«ç§»åããããææ¡ããã®ã«åœ¹ç«ã¡ãŸããæææš©ãåçšãããã³å€æŽãã¿ãŒã³ãéæåããããšã§ããœãŒã¹ã³ãŒããèªãã ãã§ã¯ææ¡ãã«ããããŒã¿ã®åããå¯èŠåããŸãã
Rustã®æããŠããŒã¯ãªæ©èœã®äžã€ã§ããæææš©ã·ã¹ãã ã«å¯Ÿå¿ããããã«èšèšãããFlowistryã¯ãéçºè ãããå®å šã§æç¢ºããããŠä¿å®æ§ã®é«ãã³ãŒããæžãäžã§ç¹ã«åœ¹ç«ã¡ãŸããRustã®åçšã»ãã³ãã£ã¯ã¹ãåããŠåŠã¶äººã«ãšã£ãŠã¯åŠç¿ããŒã«ãšããŠããŸãè€éãªã©ã€ãã¿ã€ã ãšæææš©ãããŒãæã€è€éãªãããžã§ã¯ãã«åãçµãçµéšè±å¯ãªéçºè ã«ãšã£ãŠã¯å®çšçãªãããã°ããã³ã¬ãã¥ãŒããŒã«ãšããŠæ©èœããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- æ£ç¢ºãªããŒã¿ãããŒåæ
éçåæãå®è¡ããŠã颿°ãã¢ãžã¥ãŒã«éã§ããŒã¿ãã©ã®ããã«ç§»åãåçšã倿ŽããŸãã¯åé€ããããã远跡ããŸãã - èŠèŠçãªæææš©ã®æŽå¯
ç¹å®ã®ããã°ã©ã ãã€ã³ãã§ã©ã®å€æ°ã倿ŽãŸãã¯åçšãããŠããããæç¢ºã«èŠèŠåããŠè¡šç€ºããã³ã³ãã€ã© ãšã©ãŒãæææš©ã®ç«¶åã説æããã®ã«åœ¹ç«ã¡ãŸãã - IDEçµ±å
rust-analyzer ãä»ã㊠Visual Studio Code ãªã©ã®äžè¬ç㪠Rust éçºç°å¢ãšé£æºããããŒã¿ãããŒãšæææš©ããšãã£ã¿ãŒå ã§èŠèŠåã§ããŸãã - ã³ãã³ãã©ã€ã³ã€ã³ã¿ãŒãã§ã€ã¹
IDE å€ã§ã®åæã𿀿»ã®ããã®ã¿ãŒããã«ããŒã¹ã®ã¯ãŒã¯ãããŒããµããŒãããããŸããŸãªéçºã¹ã¿ã€ã«ã«æè»ã«å¯Ÿå¿ããŸãã - äžè¬çãªRustã€ãã£ãªã ã®ãµããŒã
åæã§ã¯åæåããã¿ãŒã³ ãããã³ã°ãç¹æ§ããã®ä»ã®äžè¬ç㪠Rust æ©èœãåŠçãããããå®éã®ã³ãŒãããŒã¹ã«é©çšã§ããŸãã - æè²çŸå Žã§ã®æŽ»çšäºäŸ
ç®ã«èŠããªãã³ã³ãã€ã©ã®ãã§ãã¯ãšã«ãŒã«ãæç€ºçã«ããŠçè§£ãããããããããRust ã®æææš©ã¢ãã«ãæããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã - ãªãŒãã³ãœãŒã¹ã§ã³ãã¥ããã£ã«ãã£ãŠç¶æãããŠãã
éçºè ãèªç±ã«äœ¿çšããã³æ¡åŒµã§ããRust ã³ãã¥ããã£ããã®ç¶ç¶çãªè²¢ç®ã«ããæ©èœãšäœ¿ãããããåäžããŸãã
Flowistry 㯠Rust ã®æææš©ã·ã¹ãã ã«é¢ããç¬èªã®è²ŽéãªæŽå¯ãæäŸããŸãããããŒã ãå®éã«ã©ã®ããã«äœ¿çšããããæ±ºå®ããéã«èæ ®ãã¹ãæç¢ºãªå¶éããããŸãã
ã«ãŒã«ã匷å¶ããã®ã§ã¯ãªãçè§£ããããšã«çŠç¹ãåœãŠã
Flowistryã®äž»ãªç®æšã¯ 説æããŸã æææš©ãšåçšã§ãããã³ãŒãã£ã³ã°èŠçŽã匷å¶ããããæ£ç¢ºæ§ãšã©ãŒããã§ãã¯ããããããã®ã§ã¯ãããŸããããã°ãå ±åãããããªã³ãã匷å¶ããããã³ãŒãããã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠããããšãä¿èšŒãããããããšã¯ãããŸããããã®ä»£ããã«ãéçºè ãæ¯æŽããŸãã ããã ã³ãŒããã³ã³ãã€ã«ãããçç±ããŸãã¯ãããªãçç±ãããã¯åŠç¿ã«ã¯éåžžã«è²Žéã§ãããå質ã®åŒ·åã«ã¯ããŸãçŽæ¥çã§ã¯ãããŸããã
ããžãã¯ã®ãã°ãã»ãã¥ãªãã£äžã®åé¡ã¯æ€åºãããªã
Flowistryã¯ãè«çãšã©ãŒãã¢ãµãŒã·ã§ã³ãšã©ãŒãã»ãã¥ãªãã£è匱æ§ãæ€åºããããã«ã¯èšèšãããŠããŸãããæ£ç¢ºæ§ããããã£ãäŸåé¢ä¿ã®åé¡ããã§ãã¯ããéçã¢ãã©ã€ã¶ãŒãšã¯ç°ãªããFlowistryã¯äŸåé¢ä¿ã«ãããå±éºãªè«çãšã©ãŒãæ¢ç¥ã®CVEãç¹å®ããŸããããããã®æžå¿µäºé ã«ã€ããŠã¯ãcargo-auditãåœ¢åŒæ€èšŒããŒã«ãªã©ã®ä»ã®ããŒã«ãå¿ èŠã§ãã
å®å šã§ãªãã³ãŒãã®ã»ãã³ãã£ã¯ã¹ã®åæãªã
Flowistryã¯å®å šãªRustã³ãŒãã«ãããæææš©ãéåžžã«é©åã«ã¢ãã«åããŸãããå®å šã§ãªããããã¯ã®ã»ãã³ãã£ãã¯æ€èšŒã¯æäŸããŠããŸãããå®å šã§ãªãRustã䜿çšãããããžã§ã¯ãã§ã¯ãæåã«ãããã€ã³ã¿æäœãæªãã§ãã¯æäœã«ãã£ãŠçããæœåšçãªã¡ã¢ãªå®å šæ§éåãçè§£ããã®ã«åœ¹ç«ã¡ãŸããã
CI/CD ãã€ãã©ã€ã³ãšã®çµ±åãéå®ç
Flowistryã¯ãèªååãããã²ãŒãããŒããŒã§ã¯ãªããéçºè æ¯æŽãç®çãšããŠèšèšãããŠããŸããç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ã·ã¹ãã ãšãã€ãã£ãã«çµ±åããŠããªã·ãŒãé©çšãããããã«ãããããã¯ãããããããšã¯ãããŸãããFlowistryã®äŸ¡å€ã¯ãéçºäžã®æåã«ããæ¢çŽ¢ãšå¯èŠåã«ãããŸãã
ãªã³ãã£ã³ã°ããŒã«ã§ã¯ãªã
Flowistryã¯ãClippyã®ããã«ã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ãåœåèŠåãæ £çšçãªçšæ³ã匷å¶ããŸãããé床ã«è€éãªè¡šçŸãã¢ã³ããã¿ãŒã³ãããŒã ã®ã³ãŒãã¹ã¿ã€ã«ããªã·ãŒéåããã©ã°ä»ãããããšã¯ã§ããŸãããã¹ã¿ã€ã«ã®äžè²«æ§ãç¶æããããã«ã¯ãããŒã ã§åå¥ã®ãªã³ã¿ãŒãå¿ èŠã«ãªããŸãã
å€§èŠæš¡ã³ãŒãããŒã¹ã§ã®ããã©ãŒãã³ã¹
Flowistryã¯çŸå®çãªRustãããžã§ã¯ãã«å¯Ÿå¿ã§ããŸãããæææš©ãã§ãŒã³ãæ·±ããã¹ããããéåžžã«å€§èŠæš¡ãªã³ãŒãããŒã¹ã§ã¯ãéçè§£æãé ããªã£ããã管çãå°é£ã«ãªã£ããããå¯èœæ§ããããŸãããã®ãããªç¶æ³ã§ã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšããã«ã¯ãå¿èåãç¹å®ã®ã¢ãžã¥ãŒã«ã®éžæçãªè§£æãå¿ èŠã«ãªãå ŽåããããŸãã
广çãªäœ¿çšã®ããã®åŠç¿æ²ç·
Flowistryã¯Rustã®æææš©ã·ã¹ãã ãããæç¢ºã«ããããã«èšèšãããŠããŸããããã®èŠèŠåã广çã«è§£éããã«ã¯ãéçºè ãæææš©ãåçšããããŠã©ã€ãã¿ã€ã ã®åºæ¬ãçè§£ããŠããå¿ èŠããããŸããRustãå šãç¥ããªãéçºè ã¯ãFlowistryãæå€§éã«æŽ»çšããããã«ããã¥ãŒããªã¢ã«ããã¬ãŒãã³ã°ãšäœµçšããå¿ èŠããããããããŸããã
Flowistryã¯ãRustããŒã«ãšã³ã·ã¹ãã ã«ãããŠãèšèªã®æã匷åã§ãããªãããé£è§£ãªæ©èœã®äžã€ãåããããã解説ããããšã§ãç¬èªã®åœ¹å²ãæãããŠããŸããæææš©ãšåçšé¢ä¿ãæç¢ºãã€èŠèŠçã«ããããšã§ãéçºè ã¯ããå®å šã§æç¢ºãªã³ãŒããèšè¿°ããçŽããããåçšãã§ãã«ãŒã®ãšã©ãŒãããå¹ççã«ãããã°ã§ããããã«ãªããŸããããããFlowistryã®åœ¹å²ã¯è£å®çãªãã®ãšããŠæããã®ãæãé©åã§ããFlowistryã¯éçºè ãæ¯æŽããŸãã ããã Rustã®ã¢ãã«ãä»ã®éçè§£æããªã³ãã£ã³ã°ãã»ãã¥ãªãã£ããŒã«ã圹ç«ã¡ãŸã 匷å¶ããŸã ã³ãŒãããŒã¹å šäœã«ãããæ£ç¢ºæ§ãã»ãã¥ãªãã£ãä¿å®æ§ã
ãããŒããŠã¹
Poloniusã¯ãRustã³ã³ãã€ã©ãããžã§ã¯ãã®äžç°ãšããŠéçºããããRustã®æææš©ãšåçšåæã®ç²ŸåºŠãä¿å®æ§ããããŠå°æ¥ã®æ¡åŒµæ§ãåäžãããããã®é«åºŠãªåçšãã§ãã«ãŒãšã³ãžã³ã§ããã·ã§ã€ã¯ã¹ãã¢ã®ãPoloniusãã®ç»å Žäººç©ã«ã¡ãªãã§åä»ããããŸããã ãã ã¬ããPolonius ã¯ãRust ã®å ã®å®è£ ãšæ¯èŒããŠãåçšãã§ãã¯ã«å¯Ÿãããã圢åŒçã§å®£èšçãªã¢ãããŒãã衚ããŠããŸãã
ãããŒããŠã¹ã®æ žå¿ã¯ãç¹ã«ä»¥äžã®æèã«ãããŠãåæãããæ£ç¢ºãã€å¥å šãªãã®ã«ããããšã§ãçŸåšã®åçšãã§ãã«ãŒã®éçã解決ããããšãç®æããŠããã éèªåœçå¯¿åœ (NLL)ãRustã®æšæºã®åçšãã§ãã«ãŒã¯ãã¬ããŒãžã³ã¬ã¯ã¿ãªãã§å®å šãªã¡ã¢ãªç®¡çãæ¢ã«å®çŸããŠããŸãããç¹å®ã®ã·ããªãªã§ã¯ä¿å®çã«ãªããå®éã«ã¯å®å šãªã³ãŒããæåŠããŠããŸãå¯èœæ§ããããŸããPoloniusã¯ãRustã®åŒ·åãªå®å šæ§ä¿èšŒãç¶æããªãããããæå¹ãªRustããã°ã©ã ãåãå ¥ããããšãã§ããããã詳现ãªããŒã¿é§ååã®è§£æãå°å ¥ããŸãã
Polonius ã¯ãRust ã³ã³ãã€ã©ã«ãªãã·ã§ã³ã®å®éšçãªãšã³ãžã³ãšããŠå®è£ ãããŠããŸããããã¯ãã¹ã¿ã³ãã¢ãã³ã®ãŠãŒã¶ãŒåãéçè§£æããŒã«ã§ã¯ãªãã圢åŒåãããã¢ãã«ãåããå éšã³ã³ããŒãã³ãã§ãããæšè«ãæ€èšŒããããŠæçµçã«ã¯æ¡åŒµã容æã§ãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- 宣èšçåçšãã§ãã¯
宣èšçãªããŒã¿ãã°ããŒã¹ã®ã¢ãã«ã䜿çšããŠåçšãã§ãã¯ã«ãŒã«ã衚ãããšã§ãããžãã¯ãããæç¢ºã«ãªãã圢åŒçã«æ€èšŒãããããªããŸãã - éèªåœçã©ã€ãã¿ã€ã ã®ãµããŒã
Rust ã® NLL ã·ã¹ãã ãæ£ç¢ºã«åŠçããŸããããã«ãããåçšãèªåœã¹ã³ãŒãã®çµäºåã«çµäºã§ããããã«ãªãã誀æ€ç¥ãæžããããæè»ãªåçšãã¿ãŒã³ãå¯èœã«ãªããŸãã - åæç²ŸåºŠã®åäž
åç §ãšåçšã®ãããŒãæ£ç¢ºã«ã¢ãã«åããããšã§ãããæå¹ãªããã°ã©ã ãåãå ¥ããåŸæ¥ã®åçšãã§ãã«ãŒã§èŠããããããªäžèŠãªæåŠãåé¿ããŸãã - 圢åŒä»æ§
ç ç©¶è ãã³ã³ãã€ã© ãšã³ãžãã¢ãåçšãã§ãã¯ã®å¥å šæ§ã«ã€ããŠæšè«ãããããªãããã«ãæç¢ºã§åœ¢åŒåãããäžé£ã®ã«ãŒã«ã䜿çšããŠèšèšãããŠããŸãã - Rustã³ã³ãã€ã©ãšã®çµ±å
Rustc ã®å®éšçãªãšã³ãžã³ãšããŠå®è£ ãããŠããããã¹ããšç ç©¶ã®ããã«ãã€ããªãŒãã«ãã§å©çšå¯èœã§ããéçºè ã¯ãããå®éšçã«äœ¿çšããããšã§ãRust ã®ããã©ã«ãã®åçšãã§ãã¯ã®å°æ¥çãªæ¹åã®å¯èœæ§ãçè§£ããããšãã§ããŸãã - é·æçãªä¿å®æ§
ããé«åºŠãªæææš©ãã¿ãŒã³ã®ãµããŒããªã©ãå°æ¥ã® Rust ã®é²åã«åããŠãåçšãã§ãã«ãŒã®å®è£ ãããä¿å®ããããæ¡åŒµå¯èœã«ããããã«èšèšãããŠããŸãã
Polonius 㯠Rust ã®åçšãã§ãã¯ã®ç ç©¶ãšèšèšã«ããã倧ããªé²æ©ã衚ããŠããŸããããã®ç¹å®ã®åœ¹å²ãšãããæäŸãããã®ã®éçãçè§£ããããšãéèŠã§ãã
ã¹ã¿ã³ãã¢ãã³éçºããŒã«ã§ã¯ãªã
Poloniusã¯ãéçºè ãã³ãã³ãã©ã€ã³ããŒã«ãIDEæ¡åŒµæ©èœãšããŠçŽæ¥äœ¿çšããããšãç®çãšããŠèšèšãããŠããŸããããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãåœ¢åŒæ€èšŒããŒã«ãšã¯ç°ãªããPoloniusã¯ã³ã³ãã€ã©ã®äžéšãšããŠå®è¡ãããå éšãšã³ãžã³ã§ããéçºè ã¯Poloniusãåå¥ã«ã€ã³ã¹ããŒã«ãŸãã¯å®è¡ããŠãã³ã³ãã€ã©ã®å€éšã§ã³ãŒããè§£æããããšã¯ã§ããŸããã
å®éšçã§ãŸã ããã©ã«ãã§ã¯ãªã
çŸæç¹ã§ã¯Poloniusã¯å®é𿮵éã§ãããå®å®çRustã®ããã©ã«ãã®åçšãã§ãã«ãŒã§ã¯ãããŸãããéçºè ã¯ãã€ããªãŒãã«ãã§Poloniusã®äœ¿çšãéžæã§ããŸããããã¹ãŠã®æ¬çªç°å¢ã¯ãŒã¯ããŒãã«å¯ŸããŠå®å®çãŸãã¯å®å šã«æé©åãããŠããããšã¯ä¿èšŒãããŠããŸããã
åå ¥ç¢ºèªã®ã¿ã«çŠç¹ãåœãŠã
Poloniusã¯åçšãã§ãã¯ã®ã¿ã«å¯Ÿå¿ããŠããŸããæ £çšçãªçšæ³ã®ãªã³ãã£ã³ã°ãäŸåé¢ä¿ã®è匱æ§ã«å¯Ÿããã»ãã¥ãªãã£ã¹ãã£ã³ãæ©èœã®æ£ããã®åœ¢åŒæ€èšŒãšãã£ãä»ã®çš®é¡ã®éçè§£æã¯å®è¡ããŸãããã³ãŒãå質ã®ãããã®åŽé¢ãã«ããŒããã«ã¯ãä»ã®ããŒã«ãå¿ èŠã§ãã
ããžãã¯ã®ãã°ãã»ãã¥ãªãã£äžã®æ¬ é¥ã¯æ€åºãããªã
Poloniusã¯åçšãã§ãã¯ã®ç²ŸåºŠãåäžãããŸãããäžè¬çãªè«çãšã©ãŒãã¢ãµãŒã·ã§ã³ãšã©ãŒãæææš©ãæå¹æéã«é¢ä¿ã®ãªãã»ãã¥ãªãã£åé¡ã¯æ€åºããŸãããéçºè ã¯ãå æ¬çãªå®å šæ§ãå®çŸããããã«ããã¹ããã¬ãã¥ãŒããããŠClippyãMIRAIãcargo-auditãªã©ã®éçè§£æããŒã«ãäŸç¶ãšããŠå¿ èŠãšããŸãã
ã¢ã³ã»ãŒãã³ãŒãæ€èšŒããµããŒãããŠããŸãã
Poloniusã¯Rustã®å®å šãªåçšã«ãŒã«ãã¢ãã«åããŸãããéçºè ãæå³çã«åçšãã§ãã«ãŒããã€ãã¹ããunsafeãããã¯ã®ã»ãã³ãã£ã¯ã¹ã¯åæããŸãããunsafeã³ãŒãå ã®ãã°ã¯éçºè ã®è²¬ä»»ã§ãããPoloniusã®åæç¯å²å€ã§ãã
éçºè ã®å¯èŠæ§ãšã¬ããŒãã®å¶é
Poloniusã¯ã³ã³ãã€ã©å éšã®ã³ã³ããŒãã³ãã§ãããããéçºè åãã®ç¹å¥ãªã¬ããŒããããã·ã¥ããŒããæ§é åãããåºåã¯çæããŸããããã®ã¡ãªããã¯ãããæå¹ãªã³ãŒããåãå ¥ããããäžå¥å šãªã³ãŒããããæ£ç¢ºã«æåŠãããããããšã§éæ¥çã«çŸããŸãã
å€§èŠæš¡ã³ãŒãããŒã¹ã«ãããããã©ãŒãã³ã¹ã®èæ ®äºé
Poloniusã®ããŒã¿é§ååã¢ãã«ã¯ç²ŸåºŠãèæ ®ããŠèšèšãããŠããŸãããããã©ãŒãã³ã¹äžã®èª²é¡ããããŸããçŸæç¹ã§ã¯ãå€§èŠæš¡ãããžã§ã¯ãã§ã¯åŸæ¥ã®åçšãã§ãã«ãŒãããé ããªãããšããããããããŸã å®é𿮵éã«ããçç±ã®äžã€ã§ãã
Poloniusã¯ãæææš©ãšåçšã«é¢ãã圢åŒçãæ£ç¢ºããã€ä¿å®å¯èœãªåæãéããŠãRustã®äžæ žãšãªãå®å šæ§ä¿èšŒãé²åããããšããRustã®ã³ãããã¡ã³ããäœçŸããŠããŸããããã¯ãç¹ã«å®å šæ§ãç ç²ã«ããããšãªããããæè»ã§è¡šçŸåè±ããªåçšãã¿ãŒã³ããµããŒããããšããç¹ã§ãèšèªã®é·æçãªãŠãŒã¶ããªãã£ãšå¥å šæ§ã«ãšã£ãŠéèŠãªæè³ã§ããããããªããã仿¥ã®éçºè ã«ãšã£ãŠãPoloniusã¯æ±çšçãªéçè§£æããŒã«ãšããããããã³ã³ãã€ã©ã®è£æ¹çãªæ¹è¯ãšããŠçè§£ããã®ãæãé©åã§ããããŒã ã¯ãRustãããžã§ã¯ãã®å æ¬çãªå質ãšå®å šæ§ã確ä¿ããããã«ãæ¢åã®Rustã³ã³ãã€ã©ãClippyãã»ãã¥ãªãã£ã¹ãã£ãããããŠåœ¢åŒæ€èšŒããŒã«ãåŒãç¶ã䜿çšããRustã®å°æ¥ã®äžéšãšããŠPoloniusã®é²åãèŠå®ãã¹ãã§ãã
ããª
Miriã¯Rustã®äžéã¬ãã«äžé衚çŸïŒMIRïŒã®ã€ã³ã¿ãŒããªã¿ã§ãããRustããã°ã©ã ãæ£ç¢ºã«ã¹ããããã€ã¹ãããã§å®è¡ããŠã æªå®çŸ©ã®åäœ ã³ã³ãã€ã«æã«æ€åºãããŸããåŸæ¥ã®ãã¹ãããŒã«ãéçè§£æããŒã«ãšã¯ç°ãªããMiriã¯Rustã®ã¡ã¢ãªã¢ãã«ã®å³æ Œãªã«ãŒã«ãé©çšããªããå®è¡ãã·ãã¥ã¬ãŒãããç°å¢ã§Rustã³ãŒããå®è¡ããŸããããã«ãããéåžžã®éçºæ®µéã§ã¯èŠéããããŠããŸãå¯èœæ§ã®ããããããã¯å Žåã«ãã£ãŠã¯å®è¡æã«ãããã埮åŠã§å±éºãªãã°ãæ€åºã§ããŸãã
RustããŒã«ãã§ãŒã³ã«ã«ãŒãŽãµãã³ãã³ããšããŠå«ãŸããŠããŸãïŒcargo miriïŒã«ãããŠãMiriã¯ãã¢ã³ã»ãŒãã³ãŒããRustã®ãšã€ãªã¢ã·ã³ã°ãšã¡ã¢ãªå®å
šæ§ã®ã«ãŒã«ã«æºæ ããŠãããã©ãããæ€èšŒããéã«ç¹ã«åœ¹ç«ã¡ãŸãããŸããã³ã³ãã€ã©ã®éçè§£æã ãã§ã¯å®å
šæ§ã蚌æã§ããªãè€éãªã±ãŒã¹ã«ãããŠããã»ãŒãã³ãŒãã®æ£åœæ§ããã§ãã¯ã§ããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- å®å
šãã§ãã¯ã䌎ãMIRã®å®è¡
Rust ã®ã¡ã¢ãªå®å šæ§ä¿èšŒãé©çšããªãããMIR ã¬ãã«ã§ Rust ã³ãŒããè§£éããè§£æŸåŸã®äœ¿çšãæŽåãããŠããªãã¡ã¢ãª ã¢ã¯ã»ã¹ãç¡å¹ãªãã€ã³ã¿éåç §ãªã©ã®ãšã©ãŒããã£ããããŸãã - æªå®çŸ©ã®åäœã®æ€åº
å®å šã§ãªãã³ãŒãå ã®æªå®çŸ©ã®åäœã«ãã©ã°ãä»ããæåã§ç®¡çãããã¡ã¢ãªæäœã§ã Rust ã®ä¿èšŒã«æºæ ããŠããããšãä¿èšŒã§ããããã«ããŸãã - å®å
šãšå±éºã®RustããµããŒã
å®å šãªã³ãŒã ãã¹ãšå®å šã§ãªãã³ãŒã ãã¹ã®äž¡æ¹ããã§ãã¯ããããã©ãŒãã³ã¹ã FFI ã®ããã«å®å šã§ãªããããã¯ã«äŸåããã©ã€ãã©ãªãæ€èšŒããããã®åŒ·åãªããŒã«ã«ãªããŸãã - 貚ç©ãšã®çµ±å
䜿çšå¯èœcargo miriè€éãªèšå®ãªãã§ Rust ã¯ãŒã¯ãããŒã«ç°¡åã«çµã¿èŸŒãããšãã§ããŸãã - 詳现ãªãšã©ãŒå ±å
æªå®çŸ©ã®åäœãçºçããå Žæãšçç±ãæ£ç¢ºã«ç€ºãæ£ç¢ºãªèšºæåºåãæäŸããŸãã - å®å
šãªæœè±¡åã®éçºãæ¯æŽ
å®å šã§ãªãã³ãŒãã®äžã«å®å šãª API ãå®è£ ããæœè±¡åã«ãã£ãŠäžå¥å šãªåäœãé ããªãããã«ããã©ã€ãã©ãªäœæè ã«ãšã£ãŠäžå¯æ¬ ã§ãã - å€éšé¢æ°ã€ã³ã¿ãŒãã§ãŒã¹ïŒFFIïŒã®å®éšçãªãµããŒã
å¶éã¯ãããã®ã®ãMiri 㯠C ã©ã€ãã©ãªãšã®ããã€ãã®ããåããã·ãã¥ã¬ãŒãããããšãã§ããå®å šæ§ã®å¢çãææ§ã«ãªããã¡ãªæ··åèšèªã³ãŒãã®æ€èšŒã«åœ¹ç«ã¡ãŸãã - ãªãŒãã³ãœãŒã¹ã§ãããç©æ¥µçã«ã¡ã³ããã³ã¹ãããŠãã
Rust ãããžã§ã¯ãã®äžéšã§ãããç¶ç¶çãªæ¹åãšãããåºç¯ãª Rust ããŒã«ãã§ãŒã³ãžã®çµ±åãè¡ãããŠããŸãã
Miri ã«ã¯è²Žéãªæ©èœãããã«ãããããããéçºè ãã¯ãŒã¯ãããŒã«å°å ¥ããéã«çè§£ããŠããã¹ãéèŠãªå¶éãšãã¬ãŒããªãããããŸãã
åŸæ¥ã®ãã¹ãã®ä»£æ¿ã§ã¯ãªã
Miriã¯ãã¹ããçæããããæåŸ ãããåºåã®æ£ç¢ºæ§ãæ€èšŒãããã¯ããŸãããæ€åºããããšã«éç¹ã眮ããŠããŸãã æªå®çŸ©ã®åäœ ã¢ã«ãŽãªãºã ãæ£ããçµæãèšç®ãããšæèšããã®ã§ã¯ãªããéçºè ã¯äŸç¶ãšããŠãè«ççãªæ£ãããæ€èšŒããããã«ãåäœãã¹ããçµ±åãã¹ããããããã£ããŒã¹ãã¹ãã宿œããå¿ èŠããããŸãã
åçæ©èœãšã·ã¹ãã ã³ãŒã«ã®ãµããŒããéå®ç
Miriã¯ã·ã¹ãã ã¬ãã«ã®æäœãå®å šã«ãšãã¥ã¬ãŒãããããšã¯ã§ããŸãããOSåºæã®æ©èœãI/Oããããã¯ãŒã¯ããŸãã¯ã¹ã¬ããããªããã£ãã«äŸåããã³ãŒãã¯ãMiriã®ç°å¢ã§ã¯åäœããªããããµããŒããããªãå¯èœæ§ããããŸãããã®ãããéçºè ã¯ç¹å¥ãªããŒãã¹ãäœæããããã³ãŒãã»ã¯ã·ã§ã³ãåé¢ããŠå¹æçã«è§£æãããããå¿ èŠãããå ŽåããããŸãã
ãã€ãã£ãå®è¡ããé ã
Miriã¯ã³ãŒãããã€ãã£ãåœä»€ã«ã³ã³ãã€ã«ããã®ã§ã¯ãªãè§£éãããããéåžžã®å®è¡ãããå€§å¹ ã«é ããªããŸããå€§èŠæš¡ãªã³ãŒãããŒã¹ãè§£æããããè€éãªèšç®ãå®è¡ãããããã«ã¯æéãããããå€§èŠæš¡ãªèªåãã§ãã¯ã«ã¯å®çšçã§ã¯ãããŸããã
äŸåæ§ã®è匱æ§ã®åæãªã
Miriã¯ãcargo-auditãªã©ã®ããŒã«ãšã¯ç°ãªããäŸåé¢ä¿ã®æ¢ç¥ã®è匱æ§ãã¹ãã£ã³ããŸããããŸããã»ãã¥ãªãã£ã¢ããã€ã¶ãªã§å€ãã¯ã¬ãŒãã«ã€ããŠèŠåããããšãã§ããªãããããµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ã«ã¯å¥éããŒã«ãå¿ èŠã§ãã
ã¹ã¿ã€ã«ãæ £çšçãªäœ¿çšæ³ã匷å¶ããªã
Miriã¯ãªã³ã¿ãŒã§ã¯ãªããã³ãŒãã¹ã¿ã€ã«ãåœåèŠåãRustã®æ £çšçãªäœ¿çšæ³ãèæ ®ã«å ¥ããŸãããéçºè ã¯ãäžè²«æ§ãšæ £çšçãªã³ãŒããç¶æããããã«ãClippyãªã©ã®ã¹ã¿ã€ã«éèŠã®ããŒã«ãå¿ èŠãšããŸãã
äžè¬çãªããžãã¯ã®ãã°ã§ã¯ãªããã¡ã¢ãªã®å®å šæ§ã«çŠç¹ãåœãŠã
Miriã¯æªå®çŸ©ã®åäœã®æ€åºã«åªããŠããŸãããã»ãŒãã³ãŒãå ã®1ã€ããã®èª€ããã¢ã«ãŽãªãºã ã®èª€ãããã¡ã€ã³åºæã®äžå€æ¡ä»¶ã®éåãšãã£ãäžè¬çãªè«çãšã©ãŒã¯æ€åºããŸããããããã®ãšã©ãŒã¯ãå¥ã®åœ¢åŒã®ãã¹ããåœ¢åŒæ€èšŒã«ãã£ãŠæ€åºããå¿ èŠããããŸãã
å®éšçãªFFIãµããŒãã®å¶é
Miriã®å€éšé¢æ°åŒã³åºãã®è§£éèœåã¯éå®çã§ãããå®é𿮵éã§ããè€éãªFFIã·ããªãªããã©ãããã©ãŒã åºæã®Cã³ãŒãã¯Miriã§ã¯å®å šã«è§£æã§ããªãå¯èœæ§ããããå¥éã¬ãã¥ãŒãšãã¹ãæŠç¥ãå¿ èŠãšãªããŸãã
广çãªäœ¿çšã®ããã®åŠç¿æ²ç·
Miriã®åºæ¬çãªäœ¿ãæ¹ã¯ç°¡åã§ããã cargo miriåºåã广çã«è§£éããåæçšã«ã³ãŒããæ§é åããããšã¯ãç¹ã«è€éãªæææš©ãã¿ãŒã³ãé«åºŠãªã¢ã³ã»ãŒãã³ãŒããå«ããããžã§ã¯ãã§ã¯ã容æã§ã¯ãããŸãããéçºè
ã¯ãããããã®ç¶æ³ã«ãããŠMiriãæé©ã«æŽ»çšããæ¹æ³ãçè§£ããããã«ãæéãæè³ããå¿
èŠããããããããŸããã
Miriã¯Rustã®æ£åœæ§æ€èšŒããŒã«çŸ€ã«åŒ·åãªè¿œå æ©èœãšããŠè¿œå ãããã³ã³ãã€ã©ã«ã¯èŠãããåŸæ¥ã®ãã¹ãã§ã¯åçŸãé£ããæªå®çŸ©ã®åäœãç¬èªã®æ¹æ³ã§ææããŸããå³å¯ãªå®å šæ§ãã§ãã¯ã䌎ãå®è¡ã·ãã¥ã¬ãŒã·ã§ã³ã«ãããå®å šãªã³ãŒããšå®å šã§ãªãã³ãŒãã®äž¡æ¹ãRustã®å³æ Œãªä¿èšŒã«æºæ ããŠããããšãä¿èšŒããŸããããããMiriã¯ è£æ° ä»ã®ããŒã«ãšçµã¿åãããŠäœ¿çšââãããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãã»ãã¥ãªã㣠ã¹ãã£ããŒã培åºçãªãã¹ããšäœµçšããããšã§ãRust ã³ãŒãããŒã¹ã«å æ¬çãªä¿¡é Œæ§ããããããŸãã
貚ç©ã¹ãã£ã³
cargo-scanã¯ãRustéçºè ãã³ãŒãããŒã¹å ã®è匱æ§ãå®å šã§ãªããã¿ãŒã³ãæ€åºã§ããããã«èšèšããããã»ãã¥ãªãã£éèŠã®éçè§£æããŒã«ã§ããå€éšã¯ã¬ãŒãå ã®æ¢ç¥ã®ã¢ããã€ã¶ãªã«éç¹ã眮ãcargo-auditã®ãããªäŸåé¢ä¿ã¹ãã£ããšã¯ç°ãªããcargo-scan㯠ãããžã§ã¯ãã®å®éã®RustãœãŒã¹ã³ãŒãæœåšçãªã»ãã¥ãªãã£åé¡ãæ¬çªç°å¢ã«å°éããåã«èŠåããŸãã
Semgrepãšã³ãžã³ãããŒã¹ã«æ§ç¯ãããcargo-scanã¯ãã«ãŒã«ããŒã¹ã®ãã¿ãŒã³ãããã³ã°ã掻çšããå®å šã§ãªãã³ãŒãã£ã³ã°ãã¿ãŒã³ãã¢ã³ããã¿ãŒã³ããããŠè匱æ§ã«ã€ãªããå¯èœæ§ã®ãããããããã¹ãç¹å®ããŸããRustéçºã¯ãŒã¯ãããŒã«ã·ãŒã ã¬ã¹ã«çµ±åã§ããããã«èšèšãããŠãããéçºè ã«è»œéãã€å®çšçãªæ¹æ³ã§ãCI/CDãã€ãã©ã€ã³ãããŒã«ã«éçºã«çŽæ¥ã»ãã¥ãªãã£ã¹ãã£ã³ãå°å ¥ã§ããææ®µãæäŸããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- éçã³ãŒãã»ãã¥ãªãã£ã¹ãã£ã³
ããŒãã³ãŒããããã·ãŒã¯ã¬ãããå®å šã§ãªã API ã®äœ¿çšãå®å šã§ãªãæå·åæ¹æ³ãªã©ã®æœåšçãªè匱æ§ã«ã€ã㊠Rust ãœãŒã¹ã³ãŒããåæããŸãã - SemgrepããŒã¹ã®ãšã³ãžã³
Semgrep ã®æè»ãªãã¿ãŒã³ ãããã³ã° ãšã³ãžã³ãå éšã§äœ¿çšããé«åºŠãªã«ãŒã«å®çŸ©ãšã»ãã¥ãªãã£åé¡ã®æ£ç¢ºãªæ€åºãå¯èœã«ããŸãã - å³éžãããã«ãŒã«ã»ãã
äžè¬ç㪠Rust ã®ã»ãã¥ãªãã£äžã®èœãšã穎ã«åãããŠã«ã¹ã¿ãã€ãºããããäºåã«æ§ç¯ãããã«ãŒã«ã®ã»ãããå«ãŸããŠãããéçºè ãæ·±ãã»ãã¥ãªãã£ã®å°éç¥èããªããŠãåé¡ãæ€åºã§ããããã«ããŸãã - ã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒã
ããŒã ãç¬èªã®ã»ãã¥ãªã㣠ã«ãŒã«ãå®çŸ©ããŠãçµç¹åºæã®ã¬ã€ãã©ã€ã³ãããªã·ãŒãé©çšã§ããããã«ããŸãã - 貚ç©çµ±å
Cargoã³ãã³ãã§åäœããŸãïŒcargo scan) ã«ãããéçºè ããã§ã«äœ¿çšããŠããã®ãšåãã¯ãŒã¯ãããŒã§ã¹ãã£ã³ãç°¡åã«å®è¡ã§ããããã«ãªããŸãã - CI/CD ãã€ãã©ã€ã³ã®äºææ§
ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ã·ã¹ãã ã«çµ±åããŠãããŒãžåã«ãã« ãªã¯ãšã¹ããšæ°ããã³ããããèªåçã«ã¹ãã£ã³ããŠã»ãã¥ãªãã£äžã®åé¡ãæ€åºã§ããŸãã - èªã¿ãããå®çšçãªã¬ããŒã
æ€åºãããåé¡ã®æç¢ºãªèª¬æãšä¿®åŸ©ã«é¢ããã¬ã€ãã³ã¹ãå«ããããããããåºåãçæããŸãã - ãªãŒãã³ãœãŒã¹ã§ãããç©æ¥µçã«ã¡ã³ããã³ã¹ãããŠãã
Rust ã³ãã¥ããã£ã«ç¡æã§æäŸãããŠãããã«ãŒã« ã»ãããšæ€åºæ©èœã¯ç¶ç¶çã«æ¹åããã³æŽæ°ãããŠããŸãã
cargo-scan 㯠Rust ãããžã§ã¯ãã«è²Žéãªã»ãã¥ãªã㣠ã¹ãã£ã³æ©èœãæäŸããŸãããå°å ¥ããéã«ã¯éèŠãªå¶éãšãã¬ãŒããªãã«æ³šæããå¿ èŠããããŸãã
ã«ãŒã«ããŒã¹ã®æ€åºéç
cargo-scan ã¯ã詳现ãªã»ãã³ãã£ãã¯åæã圢åŒåæã§ã¯ãªãããã¿ãŒã³ãããã³ã°ã«äŸåããŠããŸããå®çŸ©ãããã«ãŒã«ã«äžèŽããåé¡ã®ã¿ãæ€åºã§ããŸããã€ãŸããæ¢åã®ã«ãŒã«ã§ã¯ã«ããŒãããŠããªãã埮åŠã§ã³ã³ããã¹ãäŸåã®ã»ãã¥ãªãã£è匱æ§ãæ°ããªæ»æãã¿ãŒã³ãèŠéãå¯èœæ§ããããŸãã
誀æ€ç¥ã®å¯èœæ§
ãã¿ãŒã³ããŒã¹ã®ã«ãŒã«ã䜿çšããä»ã®éçã¢ãã©ã€ã¶ãŒãšåæ§ã«ãcargo-scan ã¯èª€æ€ç¥ïŒå®éã«ã¯å®å šãªã³ãŒãã§ãã£ãŠãçããããã¿ãŒã³ã«äžèŽãããšãã©ã°ä»ãããïŒãè¡ãå¯èœæ§ããããŸããéçºè ã¯çµæãæ³šææ·±ã確èªããæåºŠãšãã€ãºã®ãã©ã³ã¹ããšãããã«ã«ãŒã«ã調æŽããå¿ èŠããããŸãã
å®å šã§ãªãã³ãŒãåæã®éå®çãªãµããŒã
cargo-scan ã¯ãRudra ã Miri ã®ãããªããŒã«ã®ããã«ãå®å šã§ãªããããã¯ã®è©³çŽ°ãªæ€èšŒã¯è¡ããŸããããã¿ãŒã³ãçšããŠç¹å®ã®å®å šã§ãªã䜿çšç®æããã©ã°ä»ãããããšã¯ã§ããŸãããè€éãªå®å šã§ãªãã³ãŒãã«ãããã¡ã¢ãªå®å šæ§ã蚌æãŸãã¯å蚌ããããã«å¿ èŠãªã»ãã³ãã£ã¯ã¹ã®çè§£èœåãæ¬ ããŠããŸãã
äŸåæ§ã®è匱æ§ã®åæãªã
cargo-scanã¯ããããžã§ã¯ãã®ãœãŒã¹ã³ãŒããã¹ãã£ã³ããããšã«éç¹ã眮ããŠããŸãã Cargo.lock cargo-audit ãšåæ§ã«ãå€éšã¯ã¬ãŒãå
ã®æ¢ç¥ã®è匱æ§ããã¡ã€ã«ããŸãããµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ãå®å
šã«ç¢ºä¿ããã«ã¯ãããŒã 㯠cargo-audit ã䞊è¡ããŠäœ¿çšããå¿
èŠããããŸãã
åœ¢åŒæ€èšŒæ©èœãªã
cargo-scan ã¯ãæ£åŒãªä»æ§ãå¥çŽã«ç §ãããŠã³ãŒãã®æ£ããã蚌æããããšã¯ããŸãããæ£ç¢ºãªæ©èœç¹æ§ãäžå€æ¡ä»¶ãæ€èšŒããã«ã¯ãPrusti ã MIRAI ã®ãããªããŒã«ãäŸç¶ãšããŠå¿ èŠã§ãã
éå®çãªIDEçµ±å
cargo-scan ã¯ã¿ãŒããã«ã CI ç°å¢ã§ã¯ããŸãæ©èœããŸãããéçºäžã®ã€ã³ã©ã€ã³ ã¹ãã£ã³ããã£ãŒãããã¯ã®ããã«ãäžè¬ç㪠Rust IDE ããšãã£ã¿ãŒãšã®ç·å¯ãªçµ±åã¯æäŸãããŸããã
å€§èŠæš¡ã³ãŒãããŒã¹ã§ã®ããã©ãŒãã³ã¹
éåžžã«å€§èŠæš¡ãªãããžã§ã¯ãã®ã¹ãã£ã³ã¯ãç¹ã«å€ãã®ã«ã¹ã¿ã ã«ãŒã«ãéåžžã«åºç¯ãªãã¿ãŒã³ã䜿çšããŠããå Žåãé ããªãå¯èœæ§ããããŸããéçºè ã¯ãCIãã€ãã©ã€ã³ã§å®çšçãªããã©ãŒãã³ã¹ãç¶æããããã«ãã¹ãã£ã³ã®ã¹ã³ãŒããèšå®ããããã«ãŒã«ãæé©åãããããå¿ èŠããããããããŸããã
ã«ã¹ã¿ã ã«ãŒã«ã«ã¯ã»ãã¥ãªãã£ã®å°éç¥èãå¿ èŠ
cargo-scan ã¯ã«ã¹ã¿ã ã«ãŒã«ã®äœæããµããŒãããŠããŸããã广çã§æ£ç¢ºãªã»ãã¥ãªãã£ã«ãŒã«ãäœæããã«ã¯ãéåžžãã»ãã¥ãªãã£ã«é¢ããç¥èãå¿ èŠã§ããããããå°éç¥èãæããªãããŒã ã§ã¯ããµããŒãããã¬ãŒãã³ã°ãªãã§ã¯ã«ã¹ã¿ã ã«ãŒã«ã»ããã®äŸ¡å€ãæå€§éã«åŒãåºãããšãé£ããå ŽåããããŸãã
cargo-scan ã¯ãRust ã»ãã¥ãªãã£ããŒã«ãããã«è¿œå ããã貎éãªããŒã«ã§ãããããŒã ããããžã§ã¯ãããªãªãŒã¹ããåã«ãå®å šã§ãªãã³ãŒãã£ã³ã°ãã¿ãŒã³ãç¹å®ããä¿®æ£ããã®ã«åœ¹ç«ã¡ãŸããäŸåæ§ã¹ãã£ã³ãã¡ã¢ãªå®å šæ§ãåœ¢åŒæ€èšŒã«ç¹åããä»ã®ããŒã«ãè£å®ããçŸä»£ã®éçºããã³ CI/CD ã¯ãŒã¯ãããŒã«èªç¶ã«ãã£ãããããå®çšçã§ã¢ã¯ã»ã¹ããããéçã»ãã¥ãªãã£åæãæäŸããŸããcargo-scan ãä»ã®ã»ãã¥ãªãã£éèŠã®ãã©ã¯ãã£ã¹ãšçµã¿åãããããšã§ãRust ããŒã ã¯ãRust ã®åªããçç£æ§ãšãšã«ãŽããã¯ã¹ãç¶æããªããããã匷åã§å®å šãªãœãããŠã§ã¢ãæ§ç¯ã§ããŸãã
Rust èšèªãµãŒã㌠(RLS)
Rust Language ServerïŒRLSïŒã¯ãRustããã°ã©ãã³ã°èšèªåãã®ãªã¢ã«ã¿ã€ã ãã€ãšãã£ã¿çµ±ååãµããŒããæäŸããéçºããŒã«ã§ããLanguage Server ProtocolïŒLSPïŒãå®è£ ããŠãããäžè¬çãªIDEããšãã£ã¿ã§ãã³ãŒãè£å®ãå®çŸ©ãžã®ãžã£ã³ããã€ã³ã©ã€ã³ãšã©ãŒãã§ãã¯ãšãã£ãè±å¯ãªã³ã³ããã¹ãå¯Ÿå¿æ©èœãRustã³ãŒãã«æäŸã§ããŸãã
RLSã¯ãRustã®åŒ·åãªã³ã³ãã€ã©èšºæãæ§æãã§ãã¯ããªãã¡ã¯ã¿ãªã³ã°ããŒã«ãéçºè ã®ãšãã£ã¿ã§çŽæ¥å©çšã§ããããã«ããããšã§ãéçºè ã®çç£æ§ãšã³ãŒãå質ãåäžãããããã«èšèšãããŠããŸããåžžæçšŒåã®åæãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã§ãRLSã¯ã³ãŒãã®èšè¿°ãšãã¹ã®æ€åºã®éã®ãã£ãŒãããã¯ã«ãŒããåæžããéçºè ãRustã®ãã¹ããã©ã¯ãã£ã¹ãæ¡çšããé«å質ãªã³ãŒãããŒã¹ãç¶æã§ããããæ¯æŽããŸãã
äž»ãªæ©èœã¯æ¬¡ã®ãšããã§ãã
- ãªã¢ã«ã¿ã€ã ã®ãšã©ãŒãšèŠåã®å ±å
ã³ãŒãã®èšè¿°æã«ã³ã³ãã€ã©ã®ãšã©ãŒãšèŠåããšãã£ã¿ãŒå ã«çŽæ¥è¡šç€ºããããããééããæ©æã«çºèŠã§ããŸãã - ã³ãŒãè£å®
åãç¹æ§ãã¡ãœãããã¢ãžã¥ãŒã«ã®å 容ã«åºã¥ããã€ã³ããªãžã§ã³ããªèªåè£å®ãæäŸããéçºãã¹ããŒãã¢ããããã¿ã€ããã¹ãåæžããŸãã - å®çŸ©ã«ç§»åããŠåç
§ãèŠã€ãã
éçºè ã¯ã·ã³ãã«å®çŸ©ã«çŽæ¥ãžã£ã³ãããã³ãŒãããŒã¹å šäœã§é ç®ã䜿çšãããŠããå Žæãæ€åºã§ããŸãã - ãããŒããã¥ã¡ã³ã
åã颿°ãç¹æ§ã®ã€ã³ã©ã€ã³ ããã¥ã¡ã³ãã衚瀺ãããã®ã§ããšãã£ã¿ãŒãé¢ããã« API ãçè§£ãããããªããŸãã - ã·ã³ãã«ã®æ€çŽ¢ãšããã²ãŒã·ã§ã³
å€§èŠæš¡ãããžã§ã¯ãå ã®é¢æ°ãæ§é äœãç¹æ§ããã®ä»ã®ã·ã³ãã«ã®é«éæ€çŽ¢ãå¯èœã«ããŸãã - æžåŒèšå®ã®ãµããŒã
rustfmt ãšçµ±åããŠãããŒã éã§äžè²«ããã³ãŒã ã¹ã¿ã€ã«ãèªåçã«é©çšããŸãã - 人æ°ã®ãšãã£ã¿ãšã®çµ±å
LSP çµç±ã§ Visual Studio CodeãSublime TextãAtom ãªã©ã®ãšãã£ã¿ãŒããµããŒãããŸãã - rustcã®åæã䜿çš
å®éã® Rust ã³ã³ãã€ã©ã掻çšããŠãRust ã®å³æ Œãªå®å šæ§ä¿èšŒã«æºæ ããæ£ç¢ºã§æ £çšçãªãã£ãŒãããã¯ãæäŸããŸãã - ãªãŒãã³ãœãŒã¹ã§ãããRustãããžã§ã¯ãã«ãã£ãŠã¡ã³ããã³ã¹ãããŠãã
Rust ã³ãã¥ããã£ã«ãã£ãŠéçºãããå ¬åŒããŒã«éçºã«ãã£ãŠãµããŒããããŠãããããRust ã®é²åããèšèªæ©èœãšã®æŽåæ§ã確ä¿ãããŸãã
RLS 㯠Rust ãããžã§ã¯ãã®éçºè ãšã¯ã¹ããªãšã³ã¹ãåçã«åäžãããŸãããããã广çã«äœ¿çšããæ¹æ³ã決å®ããéã«ã¯ãçè§£ããŠããã¹ãéèŠãªèæ ®äºé ãšå¶éããããŸãã
åæã®åŒ·å¶ã§ã¯ãªãéçºè ãšã¯ã¹ããªãšã³ã¹ã«çŠç¹ãåœãŠã
RLSã¯äž»ã«ããšã©ãŒã衚é¢åããçç£æ§åäžæ©èœãæäŸããããšã§éçºãæ¯æŽããããã«èšèšãããŠããŸããCI/CDãã€ãã©ã€ã³ã«ãããŠããªã³ãã£ã³ã°ã«ãŒã«ãã¹ã¿ã€ã«èŠçŽãã»ãã¥ãªãã£ããªã·ãŒãèªåçã«é©çšãããã®ã§ã¯ãããŸãããæ¬çªç°å¢ã®ã¯ãŒã¯ãããŒã«ãããŠããªã·ãŒãé©çšããã»ãã¥ãªãã£è匱æ§ããã§ãã¯ããã«ã¯ãClippyãcargo-auditãªã©ã®ããŒã«ãå¿ èŠã§ãã
ã³ã³ãã€ã©ãšã©ãŒä»¥å€ã®éå®çãªéçè§£æ
RLSã¯ã³ã³ãã€ã©èšºæã衚瀺ããŸãããè«çãšã©ãŒãããŒã¿ãããŒã®åé¡ãã¢ã³ã»ãŒãã³ãŒãã®ã¡ã¢ãªå®å šæ§ã®åé¡ã®æ€åºãšãã£ãé«åºŠãªéçè§£æã¯å®è¡ããŸããããã詳现ãªè§£æã«ã¯ãClippyãRudraãMIRAIãªã©ã®ããŒã«ãå¿ èŠã§ãã
圢åŒçãªæ€èšŒãèšŒææ©èœããªã
RLSã¯ãPrustiãCreusotã®ãããªããŒã«ã®ããã«ã圢åŒä»æ§ãåææ¡ä»¶ãäºåŸæ¡ä»¶ã®èšè¿°ãæ€èšŒããµããŒãããŠããŸãããã³ã³ãã€ã©ã匷å¶ããç¯å²ãè¶ ããŠãæ©èœã®æ£ãããäžå€æ¡ä»¶ã蚌æããããšã¯ã§ããŸããã
ã»ãã¥ãªãã£è匱æ§ã¹ãã£ã³ãªã
RLSã¯äŸåé¢ä¿ã«ãããæ¢ç¥ã®ã»ãã¥ãªãã£è匱æ§ããã§ãã¯ããŸãããcargo-auditãšã¯ç°ãªããCargo.lockãã¡ã€ã«ãåæããŠã¢ããã€ã¶ãªãå ¥æãããããµãã©ã€ãã§ãŒã³ã«å€ããªã£ãã¯ã¬ãŒããè匱ãªã¯ã¬ãŒãããªããç£èŠãããããããšã¯ãããŸããã
å€§èŠæš¡ã³ãŒãããŒã¹ã«ãããããã©ãŒãã³ã¹ã®èæ ®äºé
RLSã¯ãå€§èŠæš¡ãããžã§ã¯ãã®ã€ã³ããã¯ã¹äœæãšåææã«ã¡ã¢ãªãšCPUãªãœãŒã¹ã倧éã«æ¶è²»ããå¯èœæ§ãããããšãã£ã¿ã®ããã©ãŒãã³ã¹ãäœäžããããšããããŸããéåžžã«å€§èŠæš¡ãªã¢ããªããžããªãé«åºŠã«ã¢ãžã¥ãŒã«åããããããžã§ã¯ãã®å Žåãéçºè ã¯èšå®ã調æŽããããå¿çæ§ã®äœäžãåãå ¥ããå¿ èŠãããå ŽåããããŸãã
äžéšã®é«åºŠãªèšèªæ©èœã®ãµããŒããéå®ç
RLSã¯Rustã®ã³ã³ãã€ã©å éšãåºç€ãšããŠãããããææ°ã®Rustãã€ããªãŒæ©èœãå®éšçãªæ§æã«é ãããšãå ŽåããããŸããæå 端ã®èšèªæ©èœã䜿çšããŠããéçºè ã¯ããµããŒããå¶éãããããrust-analyzerãªã©ã®ä»£æ¿ããŒã«ã«é ŒããããåŸãªããªã£ããããå¯èœæ§ããããŸãã
rust-analyzerãžã®ç§»è¡
Rustãããžã§ã¯ãã¯ãrust-analyzerãRLSã®æ¬¡äžä»£ä»£æ¿ãšãªãããšãçºè¡šããŸãããrust-analyzerã¯ãããåªããããã©ãŒãã³ã¹ãè±å¯ãªæ©èœããããŠé·æçãªä¿å®æ§ã®åäžãå®çŸããŸããRLSã¯åŒãç¶ã䜿çšå¯èœã§ã¡ã³ããã³ã¹ãããŠããŸãããå°æ¥ãèŠæ®ããéçºã®ããã«ãå€ãã®ããŒã ã«rust-analyzerã®å°å ¥ãæšå¥šããŸãã
Rust Language ServerïŒRLSïŒã¯ãRustã«äžæµã®IDEãµããŒãããããããåŠç¿æ²ç·ãççž®ããåå¿è ã«ãšã£ãŠãã䜿ããããããããã§ãã·ã§ãã«ã«ãšã£ãŠçç£æ§ã®é«ãèšèªã«ããããã®åºç€ããŒã«ã§ããã³ã³ãã€ã©ã«ãããã£ãŒãããã¯ããšãã£ã¿ã«çŽæ¥çµ±åããããšã§ãRLSã¯éçºäžã®ã³ãŒãå質ãåäžãããŸããããããRLSã¯ããªã³ã¿ãŒãã»ãã¥ãªãã£ã¹ãã£ããåœ¢åŒæ€èšŒããŒã«ãCI/CDèªååãªã©ãå«ããRustãããžã§ã¯ãã«å æ¬çãªå質ãšå®å šæ§ããããããããåºç¯ãªããŒã«ãããã®äžéšã§ãããšæããã®ãé©åã§ãã
å ç¢ã§å®å šããããŠä¿å®æ§ã®é«ãRustãããžã§ã¯ãã®äœæ
Rustãããžã§ã¯ãã®å質ãã»ãã¥ãªãã£ãä¿å®æ§ã確ä¿ããã«ã¯ãã³ã³ãã€ã©ã ãã«é Œãã ãã§ã¯äžååã§ããRustã®å®å šæ§ä¿èšŒã¯æ¥çæé«æ°Žæºã§ãããè€æ°ã®åæãæ€èšŒãçç£æ§åäžããŒã«ãçµã¿åãããéå±€åã¢ãããŒãã®äžéšãšããŠæŽ»çšããããšã§ãæå€§éã®å¹æãçºæ®ããŸããä»å調æ»ããåããŒã«ã¯ããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«ã«ãããããããç°ãªãç®æšãç®æšãšãã€ã€ããäºãã«è£å®ãåã圹å²ãæãããå ç¢ãªRustã·ã¹ãã ãæ§ç¯ããããã®å æ¬çãªæŠç¥ãããŒã ã«æäŸããŸãã
åºç€ãšãªãã®ã¯æ¬¡ã®ãããªããŒã«ã§ã rustc (ã³ã³ãã€ã©èŠå) ã®äžèãš ã¯ãªãã¯ãéçºè ã®ã¯ãŒã¯ãããŒã«ãããŠãæ£ç¢ºæ§ãæ £çšçãªã¹ã¿ã€ã«ããããŠãã¹ããã©ã¯ãã£ã¹ã匷å¶çã«é©çšããŸããããã«ãããåºæ¬çãªãšã©ãŒãæ©æã«åæžããããŒã éã§äžè²«ããã³ãŒãå質ãç¶æã§ããŸãã
ã»ãã¥ãªãã£ã®ããã«ã 貚ç©ç£æ» ã®äžè㚠貚ç©ã¹ãã£ã³ éèŠãªåœ¹å²ãæãããŸããcargo-auditã¯ãå ¬éãããŠããã¢ããã€ã¶ãªã®äŸåé¢ä¿ããã§ãã¯ããããšã§ããµãã©ã€ãã§ãŒã³ã®æ¢ç¥ã®è匱æ§ããä¿è·ããŸããäžæ¹ãcargo-scanã¯ãç¬èªã®ãœãŒã¹ã³ãŒãã«çŠç¹ãåœãŠãåºè·åã«å®å šã§ãªããã¿ãŒã³ãæ€åºããŸãããããã®ããŒã«ã¯ãäœæããã³ãŒããšäŸåããã©ã€ãã©ãªã®ã»ãã¥ãªãã£ã確ä¿ããŸãã
é«åºŠãªéçè§£æããã³åœ¢åŒæ€èšŒããŒã«ã以äžãå«ã ã¿ãã, ãã«ã¹ãã£, ã¯ã«ãŒãŸ, å¯å , ã·ãŒã¢, ã«ãã©ããæ·±ãæ£ç¢ºæ§ãšå®å šæ§ã®èª²é¡ã«å¯ŸåŠããŸãããããã®ããŒã«ã¯ã埮åŠãªè«çãšã©ãŒã®æ€åºãéèŠãªäžå€æ¡ä»¶ã®èšŒæãããã«ã¯å®å šã§ãªããããã¯å ã«ãããã¡ã¢ãªã®å®å šæ§æ€èšŒã«åœ¹ç«ã¡ãŸããé«ãä¿èšŒèŠä»¶ãæã€ãããžã§ã¯ããå®å šæ§ã極ããŠéèŠãªã³ã³ããŒãã³ãã§ã¯ãå®è¡æãã¹ãã§ã¯èŠéãããå¯èœæ§ã®ããæ§ã ãªãã°ãå®å šã«æé€ããããã«ããããã®ããŒã«ã¯äžå¯æ¬ ã§ãã
ã㪠Rust ã³ãŒããè§£éããŠã³ã³ãã€ã«æã«æªå®çŸ©ã®åäœãæ€åºããç¬èªã®ã¢ãããŒããæäŸããŸããããã¯ãå®å šã§ãªãã³ãŒããæ±ããšãã«ç¹ã«åœ¹ç«ã¡ãŸãã ãããŒããŠã¹å®éšçãªåçšãã§ãã«ãŒ ãšã³ãžã³ã§ãã ã¯ãã³ã³ãã€ã©ãŒã®ç²ŸåºŠãåäžãããRust ã®å°æ¥ã«ãããŠãã衚çŸåè±ãã§å®å šãªãã¿ãŒã³ã®åºç€ãç¯ããŠããŸãã
éçºè ãšã¯ã¹ããªãšã³ã¹ããµããŒããã Rust èšèªãµãŒã㌠(RLS) ã®äžèãš ãããŒãªã¹ããªãŒ Rustã®é«åºŠãªã»ãã³ãã£ã¯ã¹ããã䜿ããããããŸããRLSã¯ãIDEã§ãªã¢ã«ã¿ã€ã ã®ãšã©ãŒãã§ãã¯ãã³ãŒãããã²ãŒã·ã§ã³ãçç£æ§åäžæ©èœãæäŸããŸããäžæ¹ãFlowistryã¯æææš©ãšããŒã¿ãããŒãèŠèŠåããRustã®åçšã¢ãã«ããããããã説æããŸãã
ãããã®ããŒã«ãçµã¿åãããããšã§ãRust ããŒã ã¯ã³ãŒãå質ã®ããããå±€ã«å¯ŸåŠã§ããããã«ãªããŸãã
- æ£ç¢ºããšæ £çšçãªäœ¿çšæ³ ã³ã³ãã€ã©ãã§ãã¯ãšãªã³ãã£ã³ã°ä»ã
- ã»ãã¥ãªã㣠äŸåé¢ä¿ã¹ãã£ã³ãšéçã³ãŒãåæ
- ã éèŠãªç¹æ§ãšäžå€éã®
- ã¡ã¢ãªã®å®å šæ§ä¿èšŒ å®å šã§ãªãã³ãŒãã§ã
- éçºè ã¯ãŒã¯ãããŒã®æ¹å çµ±åããããªã¢ã«ã¿ã€ã ãã£ãŒãããã¯ãšèŠèŠå
åäžã®ããŒã«ã§ãã¹ãŠãå®çŸã§ããããã§ã¯ãããŸãããçã®åŒ·ã¿ã¯ãããŒã ã®ããŒãºããããžã§ã¯ãã®è€éãããªã¹ã¯ãããã¡ã€ã«ã«åãããŠã«ã¹ã¿ãã€ãºãããã¯ãŒã¯ãããŒã«ãããã®ããŒã«ãçµã¿åãããããšã§çºæ®ãããŸãããããã®ããŒã«ãéçºãã¬ãã¥ãŒãCI/CDãã€ãã©ã€ã³ã«æ éã«çµ±åããããšã§ãRustããŒã ã¯ãRustã®å®å šæ§ãšããã©ãŒãã³ã¹ã劥åããããšãªãå®çŸãããä¿¡é Œæ§ãé«ããå®å šã§ãä¿å®æ§ã®é«ãã³ãŒããäœæãããšããäž»èŠãªç®æšãéæã§ããŸãã