Node.jsã¯ã軜éAPIããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ãŸã§ããããããã®ãæ¯ããçŸä»£ã®ããã¯ãšã³ãéçºã®äžæ žæè¡ãšãªã£ãŠããŸãããã³ããããã³ã°I/Oãå å®ãããšã³ã·ã¹ãã ããããŠå¹ åºãã³ãã¥ããã£ã®ãµããŒãã«ãããã¹ã±ãŒã©ãã«ãªãµãŒããŒãµã€ãã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ããéçºããŒã ãNode.jsã«TypeScriptãæ¡çšããããšã§ãæ°çŸã®ãµãŒãã¹ãæ°çŸäžè¡ã®ã³ãŒãã«ãŸã§æ¡å€§ããå¯èœæ§ã®ãããããžã§ã¯ãã«ãããŠã匷åãªåä»ããåªããããŒã«ããããŠããä¿å®æ§ã®é«ãã³ãŒããšãã£ãã¡ãªãããåŸãããŸãã
TypeScriptã¯ãåå¥çŽã®åŒ·å¶ãéçºäžã®ç¹å®ã¯ã©ã¹ã®ãšã©ãŒã®ææãã€ã³ããªãžã§ã³ããªãªãŒãã³ã³ããªãŒãããªãã¡ã¯ã¿ãªã³ã°å¯èœãªããã²ãŒã·ã§ã³ãšãã£ãæ©èœã«ããéçºè ã®çç£æ§åäžãªã©ãJavaScriptã«äºæž¬å¯èœæ§ãšãã貎éãªã¬ã€ã€ãŒã远å ããŸãããã®ãµããŒãã«ãããããŒã ã¯ããä¿¡é Œæ§ã®é«ãNode.jsã³ãŒããèšè¿°ããããæç¢ºãªã€ã³ã¿ãŒãã§ãŒã¹ãšå¥çŽãçšããŠåæ£ããŒã éã§å ±åäœæ¥ãè¡ãããšãã§ããŸãã
ããããTypeScriptã®åã·ã¹ãã ãå°å ¥ãããšããŠãããã¹ãŠã®ãªã¹ã¯ãæé€ã§ããããã§ã¯ãããŸãããå®è¡æãšã©ãŒãå®å šã§ãªãããŒã¿åŠçãã¢ãŒããã¯ãã£ã®éžè±ããããŠåŸ®åŠãªããžãã¯ã®æ¬ é¥ã¯ãåãã§ãã¯ããŠããããã¹ããããæããŠããŸãå¯èœæ§ããããŸããåçãã¿ãŒã³ããµãŒãããŒãã£è£œã©ã€ãã©ãªããããŠé²åããããžãã¹èŠä»¶ã¯ãTypeScriptã³ã³ãã€ã©ã ãã§ã¯å®å šã«è§£æã§ããªãè€éãããããããŸããåä»ãã«ãã£ãŠããå®å šãªã³ãŒããå®çŸã§ãããšããæåŸ ã¯ãå€§èŠæš¡ãªNode.jsã¢ããªã±ãŒã·ã§ã³ã®åè³ªç¶æãšããçŸå®çãªèª²é¡ã«å¯Ÿããçãã®äžéšã«éããŸããã
éçè§£æã¯ãã³ãŒããå®è¡ããã«æ€èšŒããããšã§ãéçºããã»ã¹ã®æ©ææ®µéã§åé¡ãçºèŠãããã®ã®ã£ãããåããã®ã«åœ¹ç«ã¡ãŸããããã«ãããããŒã ã¯è«çãšã©ãŒãæ€åºããã³ãŒãã£ã³ã°æšæºãé©çšããã¢ãŒããã¯ãã£ã®å¢çã確ä¿ããæœåšçãªã»ãã¥ãªãã£è匱æ§ãç¹å®ããããšãã§ããŸããéçè§£æãéçºã¯ãŒã¯ãããŒã«çµ±åããããšã§ãããŒã ã¯ä¿¡é Œæ§ãåäžããããªã°ã¬ãã·ã§ã³ãåæžãããããžã§ã¯ãã®èп𡿡倧ãé²åã«ãããŠãäžè²«ããèšèšååãç¶æã§ããŸãã
TypeScriptã§æ§ç¯ãããNode.jsãããžã§ã¯ãã¯ã éçåæ åãã§ãã¯ãè¶ ããåæã§ãããã®ãããªåæã«ãããé ããããŒã¿ãããŒã®åé¡ãæããã«ãããã¡ã€ã³é§åèšèšã«ãŒã«ãé©çšããéåæã³ãŒãå ã®å®å šã§ãªããã¿ãŒã³ãææãã客芳çã§ç¹°ãè¿ãå¯èœãªãã§ãã¯ã«ãã£ãŠã³ãŒãã¬ãã¥ãŒãæ¯æŽããããšãã§ããŸããé©åãªã¢ãããŒããæ¡çšããã°ãéçåæã¯åãªãå質ã²ãŒãã§ã¯ãªããçŸä»£ã®ããã¯ãšã³ãã·ã¹ãã ã«ãããé·æçãªä¿å®æ§ãšéçšå®å®æ§ãæ¯ããåºç€çãªãã©ã¯ãã£ã¹ãšãªããŸãã
SMART TS XL
å€ãã® éçè§£æããŒã« ãªã³ãã£ã³ã°ãã¹ã¿ã€ã«åŒ·å¶ãã»ãã¥ãªãã£ã¹ãã£ã³ãªã©ã®ç¹å®ã®åéã§äŸ¡å€ãæäŸãã äŸåé¢ä¿ç®¡ç, SMART TS XL ææ°ã® Node.js ããã³ TypeScript ãããžã§ã¯ãã®è€éãªããŒãºã«å¯Ÿå¿ããããã«ç¹å¥ã«æ§ç¯ãããå æ¬çãªãã©ãããã©ãŒã ãšããŠéç«ã£ãŠããŸãã
Node.jsã¢ããªã±ãŒã·ã§ã³ã¯ãAPIãããŒã¿ããŒã¹ããã€ã¯ããµãŒãã¹ããµãŒãããŒãã£è£œããã±ãŒãžãšçµ±åãããå€§èŠæš¡ãªã¢ãžã¥ãŒã«åã·ã¹ãã ãžãšçºå±ããããšããããããŸããè€éããå¢ãã«ã€ããŠã埮现ãªããžãã¯ãšã©ãŒã®ãªã¹ã¯ãé«ãŸããŸãã ã»ãã¥ãªãã£è匱æ§ãã¢ãŒããã¯ãã£ã®éžè±ãä¿å®æ§ã®èª²é¡ãªã©ã SMART TS XL ã¯ãåºæ¬ãã¯ããã«è¶ ããé«åºŠãªéçè§£ææ©èœã«ããããããã®èª²é¡ã«æ£é¢ããåãçµãããã«èšèšãããŠããŸãã
é«åºŠãªã³ãŒãçè§£
SMART TS XL TypeScriptã®é«åºŠãªåã·ã¹ãã ãšNode.jsã¢ããªã±ãŒã·ã§ã³ã®åçãªæ§è³ªãå®å šã«çè§£ããã詳现ãªã»ãã³ãã£ãã¯è§£æãæäŸããŸãã以äžã®ããšãå¯èœã§ãã
- ã¢ãã¬ããéå±€åã¢ãŒããã¯ãã£ãå«ãå®å šãªãããžã§ã¯ãæ§é ãåæãã
- è€éãªåé¢ä¿ããžã§ããªãã¯ãé«åºŠãªåæšè«ãã¢ãã«åãã
- ã¢ãžã¥ãŒã«éã®ã€ã³ããŒããšäŸåé¢ä¿ãèªåçã«è§£æ±ºãã
- async/awaitããã³ã¬ãŒã¿ããªãã·ã§ãã«ãã§ãŒã³ãªã©ã®ææ°ã® JavaScript ãš TypeScript ã®æ©èœãçè§£ãã
ãã®æ·±ãã«ãããé«åºŠã«ã¢ãžã¥ãŒã«åããã Node.js ããã¯ãšã³ããå€§èŠæš¡ãª TypeScript ãããžã§ã¯ãã§ãã£ãŠããåæã¯æ£ç¢ºãã€é¢é£æ§ã®ãããã®ã«ãªããŸãã
ã¢ãŒããã¯ãã£ãšèšèšã«ãŒã«ã®é©çš
ã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ãç¶æããããšã¯ãNode.js ã·ã¹ãã ã®æé·ã«ãããŠéåžžã«éèŠã§ãã SMART TS XL ããŒã ã¯ä»¥äžãå¯èœã«ãªããŸã:
- æç¢ºãªã¢ãžã¥ãŒã«å¢çãå®çŸ©ããŠåŒ·å¶ãã
- ã¬ã€ã€ãŒéã®äžèŠãªäŸåé¢ä¿ãé²ãïŒããšãã°ãAPI ã«ãŒãããããŒã¿ããŒã¹ ã¯ã©ã€ã¢ã³ããžã®çŽæ¥åŒã³åºãããããã¯ããïŒ
- å€§èŠæš¡ãªã³ãŒãããŒã¹å šäœã§ãã¡ã€ã³é§åèšèšã®ååãéµå®ãããŠããããšã確èªãã
- éçºããã³ CI ãã€ãã©ã€ã³äžã«ã¢ãŒããã¯ãã£éåãèªåçã«æ€åºããŠå ±åããŸã
ãããã®æ©èœã¯ãèšèšå質ã®é·æçãªäœäžãé²ããæ°ããããŒã ã¡ã³ããŒã®ãªã³ããŒãã£ã³ã°ã容æã«ããã¡ã³ããã³ã¹ ã³ã¹ããåæžããã®ã«åœ¹ç«ã¡ãŸãã
ã»ãã¥ãªãã£éèŠã®éçè§£æ
ã»ãã¥ãªãã£ã¯çŸä»£ã®éçºã«ãããŠæåªå äºé ã§ãã SMART TS XL 以äžã®æ©èœãå«ãŸããŸã:
- éèŠãªAPIãããŒã¿ããŒã¹ã¯ãšãªã«å°éããæªæ€èšŒã®å ¥åãªã©ãå®å šã§ãªãããŒã¿ãããŒãæ€åºããŸãã
- éåæåŒã³åºããšããã«ãŠã§ã¢ ãã§ãŒã³ã«ãããã¢ãã«æ±æè¿œè·¡
- ã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ããµãŒãããŒãã£ããã±ãŒãžã®å®å šã§ãªã䜿çšãªã©ã®äžè¬çãªè匱æ§ãã¿ãŒã³ãç¹å®ããŸãã
- éçºè ãèªä¿¡ãæã£ãŠåé¡ã解決ã§ããããã«è©³çްãªä¿®åŸ©ã¢ããã€ã¹ãæäŸããŸã
ãããã®æ©èœã«ãããéçºããŒã ã¯æåã¬ãã¥ãŒã ãã«é Œãããšãªããå®å šãªã³ãŒãã£ã³ã°ææ³ãæ¥åžžæ¥åã«çµ±åããããšãã§ããŸãã
匷åãªã«ã¹ã¿ã ã«ãŒã«äœæ
ãã¹ãŠã®ãããžã§ã¯ãã«ã¯ç¬èªã®ããŒãºããããŸãã SMART TS XL æè»ãªã«ãŒã«ã®ã«ã¹ã¿ãã€ãºããµããŒãããããŒã ã¯æ¬¡ã®ããšãå¯èœã«ãªããŸãã
- ããžãã¹ããžãã¯ã«åãããŠãããžã§ã¯ãåºæã®ã«ãŒã«ãèšè¿°ãã
- äžè¬çãªãªã³ãã£ã³ã°ãè¶ ããå éšã³ãŒãã£ã³ã°æšæºã®é©çš
- åœåèŠåããã©ã«ãæ§é ããµãŒãã¹å±€ã®çžäºäœçšãæ€èšŒãã
- äžè²«æ§ãä¿ã€ããã«è€æ°ã®ãªããžããªéã§ã«ãŒã«ãå ±æããã³ããŒãžã§ã³ç®¡çãã
ã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒãã«ãããå€§èŠæš¡ãªããŒã ãè€æ°ã®ãããžã§ã¯ãã«ããã£ãŠå質ãšä¿å®æ§ãæšæºåã§ããŸãã
ããŒã ããã³ãšã³ã¿ãŒãã©ã€ãºå¯Ÿå¿æ©èœ
SMART TS XL ãããã§ãã·ã§ãã«ãªã¯ãŒã¯ãããŒãšå€§èŠæš¡çµç¹åãã«èšèšãããŠããŸãã以äžã®æ©èœãå«ãŸããŠããŸãã
- äžè¬çãªCI/CDã·ã¹ãã ãšã®ã·ãŒã ã¬ã¹ãªçµ±åã«ããèªåã¹ãã£ã³
- éçºè ãããŒã ãªãŒããŒãã»ãã¥ãªãã£æ åœè åãã®è©³çްãªåœ¹å²å¥ã¬ããŒã
- åŸåã远跡ããåé¡ã®åªå é äœãä»ããæéã®çµéãšãšãã«ä¿®åŸ©ã管çããããã®ããã·ã¥ããŒã
- ã³ã³ãã©ã€ã¢ã³ã¹ã®ããŒãºã«å¿ããããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãšããªã·ãŒç®¡ç
ãããã®æ©èœã«ãããåæãããŒã ã«åãããŠæ¡åŒµããã忣ãããšã³ãžãã¢ãªã³ã° ã°ã«ãŒãéã®ã³ã©ãã¬ãŒã·ã§ã³ããµããŒããããŸãã
éçºè ã«åªãããšã¯ã¹ããªãšã³ã¹
ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®æ©èœã«ããããããã SMART TS XL éçºè ã«éç¹ã眮ãããŸãŸ:
- ã³ãŒãã£ã³ã°äžã«å³æãã£ãŒãããã¯ãåŸããã IDE çµ±å
- ããŒã«ã«ã¹ãã£ã³ãšã«ã¹ã¿ã ã¯ãŒã¯ãããŒã®èªååã®ããã® CLI ããŒã«
- å€§èŠæš¡ãªã³ãŒãããŒã¹ã§ãé«éãªçµæãåŸãããã®å¢ååæ
- æç¢ºã§å®çšçãªåºåã«ãããéçºè ã¯ãã€ãºã誀æ€ç¥ãªãã«åé¡ãè¿ éã«è§£æ±ºã§ããŸãã
詳现ãªéçåæãã»ãã¥ãªãã£ã«éç¹ã眮ããæŽå¯ãã¢ãŒããã¯ãã£ã®é©çšãæè»ãªã«ãŒã«ã®ã«ã¹ã¿ãã€ãºãçµã¿åãããããšã§ã SMART TS XL é«å質ã§å®å šãã€ä¿å®ãããã Node.js ããã³ TypeScript ã¢ããªã±ãŒã·ã§ã³ãå€§èŠæš¡ã«ç¶æããããã®çµ±åãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
æšæºJS
StandardJSã¯ãçµ±äžãããJavaScriptã¹ã¿ã€ã«ã¬ã€ãããªã³ã¿ãŒããã©ãŒããã¿ã§ããéçºããŒã å ã®æ©æŠã軜æžããåäžã®äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã匷å¶ããããšãç®çãšããŠããŸããæå°éã®èšå®ã念é ã«èšèšãããStandardJSã¯ããã©ãŒãããã«ãŒã«ã®åŸ¹åºçãªèŠçŽããåé¿ããã·ã³ãã«ãã远æ±ããŠããŸããå°å ¥ã容æã§ãåºãåãå ¥ããããŠãããã¹ããã©ã¯ãã£ã¹ã匷å¶ã§ãããããNode.jsãããã³ããšã³ãJavaScriptã³ãã¥ããã£ã§äººæ°ãåããŠããŸãã
TypeScriptãããžã§ã¯ãã§ã¯ãStandardJSãã³ãã¥ããã£ãã©ã°ã€ã³ã§æ¡åŒµããŠlintããããšãã§ããŸãã .ts ãã¡ã€ã«åœ¢åŒã¯å€æ§ã§ããããã®ã³ã¢èšèšã¯JavaScriptãã¡ãŒã¹ãã®ãŸãŸã§ããNode.jsãšTypeScriptã䜵çšããããŒã ã¯ãJSãšTSãæ··åšããã³ãŒãããŒã¹å
šäœã§åºæ¬çãªã¹ã¿ã€ã«ã®äžè²«æ§ã確ä¿ããããã«ãTypeScriptãçµ±åããããšããããããŸãã
äž»ãªæ©èœ
- ã«ã¹ã¿ã èšå®ãå¿ èŠãšããã«ãåäžã®ç¬èªã®JavaScriptã¹ã¿ã€ã«ã匷å¶ããŸã
- äžè¬çãªãšã©ãŒãæªäœ¿çšã®å€æ°ãäžé©åãªãã¿ãŒã³ãã³ãŒãããæ€åºããŸã
- ããã«äœ¿ããæžåŒèšå®ã«ãŒã«ãå«ãŸããŠããŸã
- ä¿åæã«ã¹ã¿ã€ã«ãé©çšããããã® CLI çµ±åãšã³ãããåããã¯ããµããŒã
- ã¹ã¿ã€ã«ã®è°è«ãæé€ããããšã§ã³ãŒãã¬ãã¥ãŒã®æ©æŠã軜æžããŸã
StandardJS ã¯ãã«ã¹ã¿ã ã¹ã¿ã€ã«æ§æãç¶æãããªãŒããŒããããåé¿ããæ§æãããèŠåãåªå ããããŒã ã«æé©ã§ãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. ã¹ã¿ã€ã«ã®ã¿ã«çŠç¹ãåœãŠã
StandardJSã¯åºæ¬çã«ã¹ã¿ã€ã«ã¬ã€ããšãªã³ã¿ãŒã§ããäžè²«ãããã©ãŒããããšã·ã³ãã«ãªã³ãŒãã®æ£ç¢ºæ§ãç¶æããããšã«éç¹ã眮ããŠããŸããã詳现ãªéçè§£æã¯è¡ããŸãããNode.jsã¢ããªã±ãŒã·ã§ã³ã®è«ççãªãã°ãå®å
šã§ãªããã¿ãŒã³ãæ§é çãªèšèšäžã®åé¡ãæ€åºããããšã¯ã§ããŸããã
2. TypeScriptã®ãµããŒããéå®ç
ã³ãã¥ããã£ãã©ã°ã€ã³ã¯TypeScriptã®Lintæ©èœã远å ã§ããŸãããStandardJSã¯TypeScriptåãã«æ§ç¯ãããŠããŸãããTypeScriptã®åã·ã¹ãã ãé«åºŠãªæ§æãã³ã³ãã€ã«æã®ãã§ãã¯ããã€ãã£ãã«çè§£ã§ããŸãããåå®å
šæ§ã®ããã«TypeScriptã«äŸåããŠããããŒã ã¯ãTypeScriptã³ã³ãã€ã©ããã®ä»ã®éçè§£æããŒã«ã§è£å®ããå¿
èŠããããŸãã
3. ã»ãã¥ãªãã£åæãªã
StandardJSã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å
šã§ãªãã·ãªã¢ã«åãå®å
šã§ãªãAPIã®äœ¿çšãšãã£ãã»ãã¥ãªãã£äžã®è匱æ§ãç¹å®ããŸãããæ±æãããããŒã¿ãããŒãæ€åºããããNode.jsã¢ããªã±ãŒã·ã§ã³ã«ãããå
¥ååŠçãæ€èšŒãããããããšãã§ããªããããã»ãã¥ãªãã£å¯Ÿçã¯ä»ã®ããŒã«ãæåã¬ãã¥ãŒã«å®å
šã«å§ããããŠããŸãã
4. 建ç¯äžã®åŒ·å¶åãªã
StandardJSã¯ãããžã§ã¯ãã®ã¢ãŒããã¯ãã£ãéå±€åã«ãŒã«ã匷å¶ããŸãããã¢ãžã¥ãŒã«éã®äžé©åãªäŸåé¢ä¿ãé²ãã ããã¯ãªãŒã³ã¢ãŒããã¯ãã£ãã¿ãŒã³ã®éåãæ€åºããããå€§èŠæš¡ãªã³ãŒãããŒã¹ã«ãããé¢å¿ã®åé¢ã確ä¿ãããããããšã¯ã§ããŸããã
5. é«åºŠãªããžãã¯ãå¶åŸ¡ãããŒã®ãã§ãã¯ããªã
ããé«åºŠãªéçã¢ãã©ã€ã¶ãŒãšã¯ç°ãªããStandardJS 㯠Node.js ã¢ããªã±ãŒã·ã§ã³ã®å¶åŸ¡ãããŒãããŒã¿ãããŒãè§£æã§ããŸãããå°éäžå¯èœãªã³ãŒããã¹ãæå³ããªãæ¡ä»¶ä»ãããžãã¯ãäžé©å㪠Promise åŠçãšãã£ãåé¡ãæ€åºã§ããŸããã
6. æå°éã®ã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒã
StandardJSã¯æå³çã«ã«ã¹ã¿ãã€ãºãå¶éããç¬èªã®ã¹ã¿ã€ã«ãæ¡çšããŠããŸããããã«ããèšå®ã®ãªãŒããŒãããã軜æžãããäžæ¹ã§ãããã©ã«ãã®ã¹ã¿ã€ã«ã¬ã€ããè¶
ãã瀟å
ã³ãŒãã£ã³ã°èŠçŽããã¡ã€ã³åºæã®ã«ãŒã«ã匷å¶ããããšãã§ããªããªããŸãã
7. ãšã³ã¿ãŒãã©ã€ãºèŠæš¡ã®ã¬ããã³ã¹åãã«èšèšãããŠããªã
å€§èŠæš¡ãªããŒã ã§ã¯ãã³ãŒãå質ã«é¢ãã詳现ãªã¬ããŒããåŸå远跡ãããŒã«ããŒã¹ã®ããªã·ãŒãæ±ããããããšããããããŸããStandardJS ã«ã¯ããšã³ã¿ãŒãã©ã€ãºç°å¢ã«ãããã³ãŒãã®å¥å
šæ§ãçµæçã«è¿œè·¡ããããã®ããã·ã¥ããŒããå±¥æŽåæãã¬ããã³ã¹æ©èœããããŸããã
XO
XOã¯ãJavaScriptãšNode.jsã®Lintãç°¡çŽ åããããã«èšèšããããç¬èªã®ESLintã©ãããŒã§ãã匷åãªããã©ã«ãèšå®ãåããŠãããã«ã¹ã¿ã èšå®ãå¿ èŠãšããã«ãäžè²«ããã¹ã¿ã€ã«ãšãã¹ããã©ã¯ãã£ã¹ãé©çšã§ããŸããXOã¯ãæç¢ºãªã«ãŒã«ã峿 ŒãªLintãè¿ éãªãã£ãŒãããã¯ãçµã¿åããããŒãèšå®ã®ã»ããã¢ãããæ±ããNode.jséçºè ã®éã§ç¹ã«äººæ°ããããŸãã
TypeScriptãããžã§ã¯ãåãã«ãXOã¯ãã©ã°ã€ã³çµç±ã§TypeScriptãµããŒããçµã¿èŸŒã¿ã§æäŸããŠãããJS/TSãæ··åšããã³ãŒãããŒã¹å šäœã§äžè²«ãããªã³ãã£ã³ã°ã容æã«é©çšã§ããŸããXOã¯ãé©åãªESLintã«ãŒã«ãšãã©ãŒãããã¬ã€ãã©ã€ã³ãããã«éžæã§ããããã«ããããšã§ãæææ±ºå®ã®è² æ ã軜æžããããšãç®æããŠããŸãã
äž»ãªæ©èœ
- ããã©ã«ãã§å³æ Œã§å³éžããã ESLint ã«ãŒã«ã»ããã匷å¶ããŸã
- æå°éã®ã»ããã¢ããã§TypeScriptãªã³ãã£ã³ã°ããµããŒã
- ã³ãŒãã®äžè²«æ§ãä¿ã€ããã®é©åãªãã©ãŒãããã«ãŒã«ãå«ãŸããŠããŸã
- ãã«ã ã¹ã¯ãªãããã³ãããåã®ããã¯ãšã®è¿ éãªçµ±åã®ããã® CLI ãæäŸããŸã
- ã·ã³ãã«ããæ±ããå°èŠæš¡ããäžèŠæš¡ã® Node.js ãããžã§ã¯ãã«é©ããŠããŸã
XO ã¯ãè€é㪠ESLint æ§æã®ç¶æãé¿ãã匷åã§äžè²«æ§ã®ãã linting æšæºã奜ãããŒã ã«æé©ã§ãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. ã¹ã¿ã€ã«ãšæ§æã®ã¿ã«çŠç¹ãåœãŠã
XOã¯åºæ¬çã«ãã³ãŒãã¹ã¿ã€ã«ãšæ§æã®æ£ç¢ºæ§ã匷å¶ãããªã³ã¿ãŒã§ããå®è¡æã®æåã«äŸåããNode.jsã¢ããªã±ãŒã·ã§ã³ã®æ·±å»ãªããžãã¯ãšã©ãŒãããžãã¹ã«ãŒã«éåããããã¯åŸ®çްãªãã°ãæ€åºããããšã¯ã§ããŸããã
2. TypeScriptã®èªèãéãããŠãã
XOã¯TypeScriptãã©ã°ã€ã³ãåããESLintã«äŸåããŠããŸãã .ts ãµããŒããããŠããŸããåé¢é£ã®å€ãã®lintåé¡ãæ€åºã§ããŸãããTypeScriptã³ã³ãã€ã©ã®åãã§ãã¯ãšã¯çŽæ¥çµ±åãããŠããŸãããé«åºŠãªåé¢ä¿ããžã§ããªãã¯ãåæšè«ã®æ£ç¢ºæ§ãæ€èšŒããããšã¯ã§ããŸããã
3. ããŒã¿ãããŒãå¶åŸ¡ãããŒã®åæããªã
XOã¯ãéåæé¢æ°ãPromiseãè€éãªæ¡ä»¶ä»ãããžãã¯ãä»ããããŒã¿ã®åããåæã§ããŸãããæ€èšŒãããŠããªãå
¥åãæ©å¯æ§ã®é«ãæäœã«å°éããããã³ãŒã«ããã¯ã誀ã£ãŠäœ¿çšãããããšãã£ããå®è¡æç¹æã®åé¡ãç¹å®ããããšã¯ã§ããŸããã
4. ã»ãã¥ãªãã£åææ©èœãªã
XOã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å
šã§ãªãå
¥ååŠçããµãŒãã¹éããŒã¿æŒæŽ©ãšãã£ãã»ãã¥ãªãã£è匱æ§ãæ€åºããŸãããã»ãã¥ãªãã£éèŠã®éçè§£æã«ã¯ãã¹ã¿ã€ã«ãªã³ãã£ã³ã°ãè£å®ããå°çšããŒã«ãå¿
èŠã§ãã
5. ã¢ãŒããã¯ãã£ã«ãŒã«ã®åŒ·å¶ãªã
XOã¯ãNode.jsã¢ããªã±ãŒã·ã§ã³ã«ãããŠãã¢ãžã¥ãŒã«å¢çãäŸåé¢ä¿ã®éå±€åãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã«ãŒã«ã匷å¶ããããšãã§ããŸãããã€ã³ããŒãå¶éããããžã§ã¯ãå
šäœã®æ§é èšèšã¬ã€ãã©ã€ã³ãæ€èšŒããæ©èœãåããŠããŸããã
6. çã®ESLintã«æ¯ã¹ãŠã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒããæå°é
XOã¯ESLintãããŒã¹ã«æ§ç¯ãããŠããŸããããã®èšèšã¯ç¬æçãªãããé«åºŠã«ã«ã¹ã¿ãã€ãºããããªã³ãã£ã³ã°ã«ãŒã«ãæ±ããããŒã ã«ãšã£ãŠã¯æè»æ§ãäœããªããŸãããã¡ã€ã³åºæã®æšæºã«é©åãããã«ã¯ã远å ã®èšå®ãããªã»ããã®ãã©ãŒã¯ãå¿
èŠã«ãªãå ŽåããããŸãã
7. ãšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®æ©èœããªã
XOã¯ã·ã³ãã«ããšããŒã«ã«éçºããã®ãã£ãŒãããã¯ãéèŠããŠæé©åãããŠããŸããè€æ°ã®ãªããžããªã管çããå€§èŠæš¡ããŒã ã«å¿
èŠãªãäžå
管çãããããã·ã¥ããŒããããªã·ãŒç®¡çããã¬ã³ã远跡ãããŒã«ããŒã¹ã®å¶åŸ¡æ©èœã¯æäŸãããŠããŸããã
8. éå®çãªã¬ããŒããšCIçµ±å
XO ã¯ååŠå€å®çšã® CI ã·ã¹ãã ãšçµ±åããŸãããããŒã ãé·æçãªã³ãŒãå質ãç¶æããããã«å¿
èŠãšãªãå¯èœæ§ã®ããç£æ»ãå±¥æŽåæã修埩èšç»ãªã©ã®é«åºŠãªã¬ããŒãæ©èœãæ¬ ããŠããŸãã
JSHint
JSHintã¯ãéçºè ãæœåšçãªåé¡ãç¹å®ããåºæ¬çãªã³ãŒãã£ã³ã°èŠçŽãéµå®ã§ããããã«ããããã«éçºããããæãåæãã€æãããç¥ãããJavaScriptãªã³ã¿ãŒã®äžã€ã§ããã·ã³ãã«ããéèŠããŠèšèšãããŠãããJavaScriptãœãŒã¹ã³ãŒããã¹ãã£ã³ããŠããããããšã©ãŒãå®å šã§ãªããã¿ãŒã³ããããŠã¹ã¿ã€ã«äžã®åé¡ãæ€åºããŸããæŽå²çã«ãJSHintã¯ããããã€åã«èŠéãããããã°ãæ€åºããããã«ãããã³ããšã³ããããžã§ã¯ããNode.jsãããžã§ã¯ãã§åºãæ¡çšãããŠããŸããã
Node.js ãããžã§ã¯ãã®å ŽåãJSHint ã¯éçºã¯ãŒã¯ãããŒã«çµ±åã§ããç°¡å㪠CLI ãæäŸããã·ã³ãã«ãªã³ãŒãã£ã³ã° ã¬ã€ãã©ã€ã³ãé©çšããéåæ JavaScript ã³ãŒãã§ããããèœãšã穎ãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã
äž»ãªæ©èœ
- æ§æãšã©ãŒãããããJavaScriptã®ééãã匷調衚瀺ããŸã
- ã¹ã¿ã€ã«èšå®ã匷å¶ããããã®èšå®å¯èœãªã«ãŒã«ã»ããããµããŒã
- ããŒã«ã«ãã§ãã¯ãšCIãã€ãã©ã€ã³ã®ããã®ç°¡åãªCLIçµ±åãæäŸããŸã
- å€ã JavaScript ã³ãŒãããŒã¹ã§ããå®å šãªã³ãŒãã£ã³ã°ãã¿ãŒã³ã匷å¶ããã®ã«åœ¹ç«ã¡ãŸã
- ã»ããã¢ãããäŸåé¢ä¿ãæå°éã§è»œé
JSHint ã¯ãææ°ã®ããŒã«æ§æã®ãªãŒããŒããããªãã§åºæ¬ç㪠linting ãå¿ èŠãšããåŸæ¥ã® Node.js ãããžã§ã¯ãã«ç¹ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. åŸæ¥ã®JavaScriptæ§æã«éå®
JSHint ã¯ãå€ãã®çŸä»£ç㪠JavaScript æ©èœãååšãã以åã«èšèšãããŸãããæ°ãã ECMAScript æ§æã®ãµããŒãã¯éšåçã«ããæäŸãããŠããªããããES ã¢ãžã¥ãŒã«ãasync/awaitãé«åºŠãªæ§é ååè§£ã«äŸåããçŸä»£ã® Node.js ãããžã§ã¯ãã§ã¯å¹æãäœããªããŸãã
2. ãã€ãã£ãTypeScriptãµããŒããªã
JSHint ã¯ãã®ãŸãŸã§ã¯ TypeScript ãã¡ã€ã«ãè§£æã§ããŸãããNode.js éçºã« TypeScript ãæ¡çšããããŒã ã¯ãåå®å
šæ§ã確ä¿ããããã«ä»ã®ããŒã«ã䜿çšããå¿
èŠãããããããã®ã¯ãŒã¯ãããŒã§ã¯ JSHint ãäžèŠã«ãªããŸãã
3. æµ
ãåæã®çŠç¹
JSHintã¯äž»ã«æ§æã®æ£ç¢ºæ§ãšåçŽãªãšã©ãŒããã§ãã¯ããŸããå¶åŸ¡ãããŒãããŒã¿ãããŒãã¢ããªã±ãŒã·ã§ã³ããžãã¯ã®ã»ãã³ãã£ã¯ã¹ã¯åæããŸãããéåæãã¿ãŒã³ãã³ãŒã«ããã¯ã®èª€çšã«èµ·å ããè€éãªãã°ã¯ãéåžžæ€åºãããŸããã
4. ã»ãã¥ãªãã£æèã®æ¬ åŠ
JSHintã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å
šã§ãªãããŒã¿äŒæãå
¥åæ€èšŒã®æ¬ èœãšãã£ãã»ãã¥ãªãã£è匱æ§ãç¹å®ã§ããŸããããããã®æžå¿µã«å¯ŸåŠããã«ã¯ãã»ãã¥ãªãã£ã«ç¹åããéçè§£æããŒã«ã䜿çšããå¿
èŠããããŸãã
5. ã¢ãŒããã¯ãã£ã«ãŒã«ã®åŒ·å¶ãªã
JSHintã¯ãã¢ãžã¥ãŒã«å¢çãéå±€åèšèšååãšãã£ãã¢ãŒããã¯ãã£äžã®å¶çŽã®é©çšããµããŒãããŠããŸãããNode.jsã¢ããªã±ãŒã·ã§ã³ã«ããããããžã§ã¯ãã¬ã€ã€ãŒéã®å¯çµåãæå³ããªãã€ã³ããŒããé²ãããšã¯ã§ããŸããã
6. æå°éã®ã«ã¹ã¿ã ã«ãŒã«ã®ãµããŒã
ææ°ã®ãªã³ãã£ã³ã°ãšã³ã·ã¹ãã ãšæ¯èŒãããšãJSHint ã®æ¡åŒµæ§ã¯éåžžã«éãããŠããŸããããŒã ã¯ããããžã§ã¯ãåºæã®æšæºããã¡ã€ã³é§ååã®å¶çŽãé©çšããããã®ã«ã¹ã¿ã ã«ãŒã«ãç°¡åã«å®çŸ©ããããšãã§ããŸããã
7. IDEçµ±åéçºè
ãã£ãŒãããã¯ãªã
JSHintã¯CLIããŒã¹ã®ãã£ãŒãããã¯ãæäŸããŸãããææ°ã®ãšãã£ã¿ãšã®é«åºŠãªçµ±åãæ¬ ããŠããŸããVS Codeãªã©ã®ç°å¢ã§äœæ¥ããéçºè
ã¯ããšãã£ã¿ãµããŒããçµã¿èŸŒãŸãããªã³ã¿ãŒãšæ¯ã¹ãŠãã·ãŒã ã¬ã¹ãªãšã¯ã¹ããªãšã³ã¹ã«æ¬ ãããšæãããããããŸããã
8. é«åºŠãªã¬ããŒãæ©èœãããŒã æ©èœããªã
JSHintã¯ãããŒã«ã«ã§ã®äœ¿çšãã·ã³ãã«ãªCIã¹ã¯ãªããã«æé©ã§ããããã·ã¥ããŒããå±¥æŽãã¬ã³ãåæãå€§èŠæš¡ãªããŒã ãè€æ°ã®ãªããžããªã«ãããã³ãŒãå質ã匷åããããã®ããªã·ãŒç®¡çæ©èœã¯æäŸããŠããŸããã
9. ææ°ã®JavaScriptãã¿ãŒã³ã«å¯Ÿå¿ããŠããªã
JSHintã¯çŸåšãå©çšå¯èœã§ãããéçºã¯å€§å¹
ã«é
ããŠããŸããææ°ã®JavaScriptãNode.jsã®ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãããé©åã«ãµããŒãããæ°ããããŒã«ã«è¿œãæãããããšãå€ããææ°ã®éçè§£æããŒã«ãšããŠã¯ããŸãä¿¡é Œæ§ãé«ããããŸããã
ã¹ããã¯
Snykã¯ããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«å šäœãéããŠéçºè ãè匱æ§ãçºèŠã»ä¿®æ£ã§ããããèšèšãããã人æ°ã®ã»ãã¥ãªãã£ãã©ãããã©ãŒã ã§ããNode.jsãããžã§ã¯ãåãã«ã¯ããœãŒã¹ã³ãŒãã®éçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ãïŒSASTïŒãšäŸåé¢ä¿ã®è匱æ§ã¹ãã£ã³ã®èªååãšãã2ã€ã®äž»èŠãªã»ãã¥ãªãã£æ©èœãæäŸããŸããéçºè ã®ã¯ãŒã¯ãããŒãCI/CDãã€ãã©ã€ã³ã«çŽæ¥çµ±åããããšã§ãSnykã¯ããŒã ããªã¹ã¯ãæ©æã«ç¹å®ããé·æã«ããã£ãŠå®å šãªã¢ããªã±ãŒã·ã§ã³ãç¶æã§ããããã«ããŸãã
Snykã®SASTãšã³ãžã³ã¯Node.jsãšTypeScriptã®ãœãŒã¹ã³ãŒããåæãããã®äŸåé¢ä¿ã¹ãã£ãã¯å®å
šã§ãªããã¿ãŒã³ããã§ãã¯ããŸãã package.json ã®äžèãš package-lock.json ãªãŒãã³ãœãŒã¹ ã©ã€ãã©ãªã®æ¢ç¥ã®è匱æ§ã«ã€ããŠã
äž»ãªæ©èœ
- ãœãŒã¹ã³ãŒããã¹ãã£ã³ããŠãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å šã§ãªãå ¥ååŠçãªã©ã®ã»ãã¥ãªãã£åé¡ãæ€åºããŸãã
- è匱ãªnpmããã±ãŒãžãèªåçã«èå¥ããå®å šãªããŒãžã§ã³ãææ¡ããŸã
- GitHubãGitLabãBitbucketãCI/CDãã€ãã©ã€ã³ãšçµ±åããç¶ç¶çãªç£èŠãå®çŸããŸãã
- äŸåé¢ä¿ãä¿®æ£ããããã®ä¿®åŸ©ã¬ã€ãã³ã¹ãšèªåãã«ãªã¯ãšã¹ããæäŸããŸã
- ã€ã³ã©ã€ã³ ã»ãã¥ãªã㣠ãã£ãŒãããã¯ã®ããã® IDE çµ±åãåããéçºè ããŒã«ããµããŒã
- è匱æ§ã远跡ããããªã·ãŒãé©çšããããã®éäžããã·ã¥ããŒã
Snyk ã¯ãã»ãã¥ãªãã£ã«å¯ŸããŠãã·ããã¬ãããã¢ãããŒããæ¡çšããããšããŠããããŒã ã§åºã䜿çšãããŠãããéçºè ãåé¡ãã§ããã ãæ©ãçºèŠããŠè§£æ±ºããã®ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. ã»ãã¥ãªãã£éèŠãäžè¬çãªéçè§£æã§ã¯ãªã
Snykã¯ã»ãã¥ãªãã£ã¹ãã£ã³ã«ç¹åããŠèšèšãããŠããŸããã³ãŒãã¹ã¿ã€ã«ã®é©çšãããžãã¯ãšã©ãŒã®æ€åºãä¿å®æ§ã®åé¡ã®ç¹å®ãšãã£ãäžè¬çãªéçè§£æã¿ã¹ã¯ã¯å®è¡ããŸããããããã®é åãã«ããŒããã«ã¯ããªã³ã¿ãŒãã³ãŒãå質管çããŒã«ãå¿
èŠã§ãã
2. TypeScriptã®åã·ã¹ãã ã®èªèãéãããŠãã
Snykã¯TypeScriptæ§æããµããŒãããŠããŸããããã®éçè§£æã§ã¯TypeScriptã®é«åºŠãªåã·ã¹ãã ãååã«æŽ»çšããŠããŸããããžã§ããªãã¯ãè€éãªã€ã³ã¿ãŒãã§ãŒã¹ãTypeScriptã³ã³ãã€ã©ã匷å¶ãã埮åŠãªåå¶çŽã®åå®å
šãªäœ¿çšãæ€èšŒããããšã¯ã§ããŸããã
3. é«åºŠãªã¬ãã«ã§ã®å¶åŸ¡ãããŒãããŒã¿ãããŒåæããªã
Snykã®SASTã¯å®å
šã§ãªããã¿ãŒã³ãã¹ãã£ã³ããŸããã詳现ãªããŒã¿ãããŒã¢ããªã³ã°ã¯å®è¡ããŸãããç¹ã«ãŠãŒã¶ãŒå
¥åãNode.jsããã¯ãšã³ãã«å
žåçãªéåæããžãã¯ãä»ããŠäŒæããå Žåãè€éãªå€æ©èœãŸãã¯ã¢ãžã¥ãŒã«éè匱æ§ãèŠéãå¯èœæ§ããããŸãã
4. äŸåæ§ã¹ãã£ãã¯æ¢ç¥ã®CVEã«éå®ããã
Snykã®äŸåé¢ä¿ã¹ãã£ã³ã¯ãå
¬éããŒã¿ããŒã¹å
ã®æ¢ç¥ã®è匱æ§ã«äŸåããŠããŸããããŒã«ã«ã³ãŒããããžãã¹ããžãã¯ã«ãã£ãŠå°å
¥ãããã«ã¹ã¿ã è匱æ§ãæ€åºããããšã¯ã§ããŸããããæç€ºçãªçµ±åã®ãªãç¬èªããã±ãŒãžãç£æ»ããããšãã§ããŸããã
5. 建ç¯äžã®åŒ·å¶åãªã
Snykã¯ãéå±€åã¢ãŒããã¯ãã£ãã¢ãžã¥ãŒã«å¢çããã¡ã€ã³é§åèšèšã«ãŒã«ãšãã£ãèšèšååã匷å¶ããŸããããã®ãããããŒã ã¯Snykã䜿çšããŠãæå³ããªãã€ã³ããŒãããããã¯ããããNode.jsã³ãŒãããŒã¹ã«ãããæç¢ºãªé¢å¿ã®åé¢ãç¶æãããããããšã¯ã§ããŸããã
6. 誀æ€ç¥ãšãã€ãºã®å¯èœæ§
Snykã®éçè§£æã¯åŒ·åã§ããã誀æ€ç¥ããæåã«ããã¬ãã¥ãŒãå¿
èŠãšãªãäžè¬çãªã»ãã¥ãªãã£èŠåãçæããå¯èœæ§ããããŸããã»ãã¥ãªãã£æèã®é«ãéçºè
ãæ
éã«èª¿æŽã»ããªã¢ãŒãžãè¡ããªãå Žåãã¯ãŒã¯ãããŒã®é
å»¶ã«ã€ãªããå¯èœæ§ããããŸãã
7. èªèšŒãšã¯ã©ãŠãçµ±åãå¿
èŠ
Snykã¯äž»ã«ã¯ã©ãŠãããŒã¹ã®ãã©ãããã©ãŒã ã§ããããŠãŒã¶ãŒã¢ã«ãŠã³ããšãããžã§ã¯ãã®ã¢ããããŒããå¿
èŠã§ãã峿 ŒãªããŒã¿ã¬ããã³ã¹ããªãã©ã€ã³éçºç°å¢ãæã€ããŒã ã«ãšã£ãŠããããã®èŠä»¶ã¯å¶éçãŸãã¯äžé©åã§ãããšæããå¯èœæ§ããããŸãã
8. ãã«æ©èœã®ã³ã¹ãã«é¢ããèæ
®äºé
Snykã¯ãããžã§ã¯ããšã¹ãã£ã³ã«å¶éã®ããç¡æãã©ã³ãæäŸããŠããŸãããããŒã 管çãã«ã¹ã¿ã ããªã·ãŒãç¶ç¶çãªç£èŠãšãã£ãé«åºŠãªæ©èœã¯ææãã©ã³ã§ã®ã¿å©çšå¯èœã§ããããã¯ãäºç®ãéãããŠããå°èŠæš¡ããŒã ããªãŒãã³ãœãŒã¹ãããžã§ã¯ãã«ãšã£ãŠã¯éå£ãšãªãå¯èœæ§ããããŸãã
9. ä¿å®æ§ãã¹ã¿ã€ã«ã®åŒ·å¶ãèæ
®ããŠèšèšãããŠããªã
Snykã¯ã»ãã¥ãªãã£ä»¥å€ã«ããè€éããéè€ãã³ãŒãèãšãã£ãä¿å®æ§ã«é¢ããæžå¿µã«ã¯å¯ŸåŠããŠããŸãããNode.jsãTypeScriptã«ãããå
æ¬çãªéçè§£æã«å¿
èŠãªãªã³ã¿ãŒããã©ãŒããã¿ãã¢ãŒããã¯ãã£æ€èšŒããŒã«ã眮ãæããããšã¯ã§ããŸããã
npmç£æ»
npmç£æ»ã¯npm CLIã«çµã¿èŸŒãŸããã»ãã¥ãªãã£ããŒã«ã§ãNode.jséçºè
ãããââãžã§ã¯ãã®äŸåé¢ä¿ã«ãããæ¢ç¥ã®è匱æ§ãç¹å®ãã察åŠããã®ã«åœ¹ç«ã€ããã«èšèšãããŠããŸãã package.json ã®äžèãš package-lock.jsonãå
¬éãããã»ãã¥ãªãã£å§åã®ããããã±ãŒãžããã§ãã¯ããæšå¥šãããæŽæ°ãŸãã¯ä¿®æ£ãææ¡ããŸãã
npm Auditã¯npmã¯ãŒã¯ãããŒã«çŽæ¥çµã¿èŸŒãŸããŠããããã远å ããŒã«ãè€éãªèšå®ãå¿ èŠãšããã«ã»ãã¥ãªãã£ã¹ãã£ã³ãå®è¡ã§ããåºãå©çšãããŠããŸããéçºè ã¯äŸåé¢ä¿ã®å¥å šæ§ã«é¢ãããã£ãŒãããã¯ãå³åº§ã«åŸãããšãã§ããŸãã
äž»ãªæ©èœ
- ãããžã§ã¯ãã®äŸåé¢ä¿ããªãŒãåæããŠæ¢ç¥ã®è匱æ§ãæ€åºããŸã
- npmã®å ¬éã»ãã¥ãªãã£å§åãšè匱æ§ããŒã¿ããŒã¹ã䜿çšãã
- é倧床è©äŸ¡ãšæšå¥šããã修埩æé ãæäŸããŸã
- npm CLI ã«çµ±åãããŠãããããŒã«ã«ã§ã®äœ¿çšãç°¡å
- CI ãã€ãã©ã€ã³ã§èªååããŠãé倧ãªåé¡ã®ããããŒãžããããã¯ã§ããŸãã
- ã客æ§ãµããŒã
npm audit fixå®å šãªã¢ããã°ã¬ãŒããèªåçã«é©çšãããã
npm ç£æ»ã¯ãå€ãã® Node.js ããŒã ã®åºæ¬çãªã»ãã¥ãªãã£è¡çã®éèŠãªéšåã§ãããã¢ããªã±ãŒã·ã§ã³ãå€ãäŸåé¢ä¿ãè匱ãªäŸåé¢ä¿ãæããã«åºè·ãããããšãé²ãã®ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. äŸåæ§ã®è匱æ§ã®ã¿ã«çŠç¹ãåœãŠã
npm ç£æ»ã¯ãµãŒãããŒãã£è£œããã±ãŒãžã®æ¢ç¥ã®åé¡ããã§ãã¯ããŸããããããžã§ã¯ãç¬èªã®ãœãŒã¹ã³ãŒããåæãããã®ã§ã¯ãããŸãããã«ã¹ã¿ã ããžãã¹ããžãã¯ãå
¥ååŠçãšã©ãŒãå®å
šã§ãªãèšèšäžã®æ±ºå®ã«ãã£ãŠçããã»ãã¥ãªãã£ãªã¹ã¯ãæ€åºããããšã¯ã§ããŸããã
2. ããžãã¯ãã¹ã¿ã€ã«ã®éçã³ãŒãåæããªã
npm Auditã¯ã³ãŒãã®Lintãã³ãŒãã£ã³ã°èŠçŽã®é©çšãè€éããéè€ãšãã£ãä¿å®æ§ã®åé¡ã®ãã§ãã¯ãè¡ããŸããããããã®åé¡ã«å¯ŸåŠããã«ã¯ãããŒã ã¯å¥éLintããŒã«ãšéçã¢ãã©ã€ã¶ãŒã䜿çšããå¿
èŠããããŸãã
3. TypeScriptã®åã·ã¹ãã èªèãªã
npm Audit 㯠TypeScript ã³ã³ãã€ã©ããã®åã·ã¹ãã ãšçµ±åãããŠããŸãããTypeScript ã³ãŒãããŒã¹ã«ãããåãšã©ãŒããžã§ããªãã¯ã®èª€çšãnull ãã§ãã¯ã®æ¬ èœãæ€åºããããšã¯ã§ããŸããã
4. æ¢ç¥ã®è匱æ§ã«éå®
ãã®ããŒã«ã¯å
¬éãããŠããè匱æ§ã«äŸåããŠããŸããè匱æ§ãæ°èŠãæªå
¬éããŸãã¯éå
¬éããã±ãŒãžã«ååšããå Žåãnpm audit ã§ã¯æ€åºãããŸãããããã«ãããã»ãã¥ãªãã£å¯Ÿçã«ã®ã£ãããçããå¯èœæ§ããããŸãã
5. 誀ã£ãå®å¿æã®å¯èœæ§
éçºè
ã¯ãnpm ç£æ»ã§åé¡ãå ±åãããªããã°ãããžã§ã¯ãããå®å
šãã§ãããšæ³å®ãããããããŸããããããã¯ããœãŒã¹ã³ãŒãã®éçåæã§æ€åºãããã«ã¹ã¿ã ã³ãŒãã®ãªã¹ã¯ãå®å
šã§ãªããã¿ãŒã³ãããã³æ§æãã¹ãç¡èŠããŸãã
6. 建ç¯ãŸãã¯èšèšã«ãŒã«ã®åŒ·å¶ãªã
npm Auditã¯ãããžã§ã¯ãã¢ãŒããã¯ãã£ãè©äŸ¡ããããã¢ãžã¥ãŒã«å¢çã匷å¶ãããããŸãããNode.jsã¢ããªã±ãŒã·ã§ã³ã«ãããå¯çµåã埪ç°äŸåé¢ä¿ãã¯ãªãŒã³ã¢ãŒããã¯ãã£éåãé²ãããšã¯ã§ããŸããã
7. ããŒã¿ãããŒãå¶åŸ¡ãããŒã®åæããªã
npm Auditã¯ãã¢ããªã±ãŒã·ã§ã³å
ã§ã®ããŒã¿ã®ç§»åãåæãããã®ã§ã¯ãããŸãããæ€èšŒãããŠããªãå
¥åãéèŠãªAPIãããŒã¿ããŒã¹ã¯ãšãªã«å°éãããªã©ãå®å
šã§ãªãããŒã¿ãããŒãæ€åºããããšã¯ã§ããŸããã
8. æå°éã®ã«ã¹ã¿ãã€ãº
ãã®ããŒã«ã¯ãnpmã®å
¬éã¬ãžã¹ããªããŒã¿ãšèªåçã«é£æºããããã«èšèšãããŠããŸããããŒã ã¯ãã©ã®ã¢ããã€ã¶ãªãç¡èŠããããã©ã®ç£æ»ã¬ãã«ãé©çšããããå¶åŸ¡ãã以å€ã«ãã«ãŒã«ãããªã·ãŒãã«ã¹ã¿ãã€ãºããæ©èœãéãããŠããŸãã
9. éçºè
åãIDEçµ±åãªã
npm ç£æ»ã¯CLIãšCIã§å®è¡ãããŸãããäžè¬çãªãšãã£ã¿ã§ã¯ã€ã³ã©ã€ã³ãã£ãŒãããã¯ãæäŸãããŸãããéçºè
ã¯ãæåã§ç£æ»ãå®è¡ããªãéããã³ãŒããèšè¿°ããªããç£æ»çµæã確èªããããšã¯ã§ããŸããã
10. ä»ã®ã»ãã¥ãªãã£ããŒã«ãå質ããŒã«ã«ä»£ãããã®ã§ã¯ãªã
npm ç£æ»ã¯äŸåé¢ä¿ã®ãã§ãã¯ã«äžå¯æ¬ ã§ããããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãã»ãã¥ãªã㣠SAST ããŒã«ãã¢ãŒããã¯ãã£åŒ·å¶ãŠãŒãã£ãªãã£ã®ä»£ããã«ã¯ãªããŸãããå®å
šãªã«ãã¬ããžãå®çŸããã«ã¯ãããŒã ã¯å€å±€çãªã¢ãããŒããæ¡çšããå¿
èŠããããŸãã
ããŒãã»ãã¥ã¢
NodeSecureã¯ãã»ãã¥ãªãã£ã«éç¹ã眮ããCLIããã³ãã©ãããã©ãŒã ã§ãããNode.jsãããžã§ã¯ãã®äŸåé¢ä¿ãåæããŠæœåšçãªãªã¹ã¯ãæ€åºããŸããã€ã³ã¹ããŒã«ãããããã±ãŒãžãæ€æ»ããæ¢ç¥ã®è匱æ§ãå ¬éã³ãŒãå ã®å®å šã§ãªããã¿ãŒã³ããµãã©ã€ãã§ãŒã³ã®è åšã瀺åããã¡ã¿ããŒã¿ã®åé¡ãæ€åºããŸããã¢ããã€ã¶ãªã®ã¿ã«åºã¥ãåçŽãªè匱æ§ã¹ãã£ã³ãšã¯ç°ãªããNodeSecureã¯ããã±ãŒãžã®å®éã®å 容ãè§£æã»è©äŸ¡ããããšã§ãããæ·±å»ãªããããã¯ãããŸã§ç¥ãããŠããªãã£ããªã¹ã¯ãæ€åºããŸãã
NodeSecureã¯ãé£èªåãããã³ãŒããçãããã¹ã¯ãªãããå®å šã§ãªãå ¬éèšå®ãšãã£ãé ãããªã¹ã¯ãNode.jsãããžã§ã¯ããnpmããã±ãŒãžã«æ€åºããç£æ»ããéã«ç¹ã«åœ¹ç«ã¡ãŸããããã«ãããããŒã ã¯äŸåé¢ä¿ããªãŒã®å¥å šæ§ãšä¿¡é Œæ§ãããè©³çŽ°ã«ææ¡ã§ããããã«ãªããŸãã
äž»ãªæ©èœ
- ã€ã³ã¹ããŒã«ãããnpmäŸåé¢ä¿ãã¹ãã£ã³ããŠæ¢ç¥ã®è匱æ§ãæ€åºããŸã
- ããã±ãŒãžã®å 容ãåæããŠãé£èªåãçž®å°ãããã³ãŒããªã©ã®çããããã¿ãŒã³ãæ€åºããŸãã
- å±éºãªãã¹ãã€ã³ã¹ããŒã«ã¹ã¯ãªãããã©ã€ã»ã³ã¹æ å ±ã®äžè¶³ãªã©ããªã¹ã¯ã®ããã¡ã¿ããŒã¿ã«ãã©ã°ãç«ãŠãŸã
- ããŒã ã¬ãã¥ãŒçšã« JSON ã¬ããŒããšäººéãèªããç£æ»ãçæããŸã
- ããŒã«ã«éçºããã³ CI ãã€ãã©ã€ã³ãšçµ±åãã CLI ããŒã«
- npm ããã±ãŒãžé åžãæªçšãããµãã©ã€ãã§ãŒã³æ»æã®æ€åºã«åœ¹ç«ã¡ãŸã
NodeSecure ã¯ããµãã©ã€ ãã§ãŒã³ã®ã»ãã¥ãªãã£ãåªå ããåºæ¬çãªã¢ããã€ã¶ãªã®ã¿ã§ã¯ãªããµãŒãããŒã㣠ããã±ãŒãžã®ãã詳现ãªåæãå¿ èŠãšãã Node.js ãããžã§ã¯ãã§ç¹ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. äŸåé¢ä¿ã®ã¿ã«çŠç¹ãåœãŠã
NodeSecureã¯ãã¢ããªã±ãŒã·ã§ã³èªäœã®ãœãŒã¹ã³ãŒãã§ã¯ãªããã€ã³ã¹ããŒã«ãããnpmããã±ãŒãžãåæããããã«èšèšãããŠããŸããã«ã¹ã¿ã Node.jsãŸãã¯TypeScriptã³ãŒãã«ãã£ãŠçºçãããã°ãããžãã¯ãšã©ãŒãã»ãã¥ãªãã£äžã®åé¡ãæ€åºããããšã¯ã§ããŸããã
2. TypeScriptã®åãã§ãã¯ãåæã¯è¡ãããªã
NodeSecureã¯TypeScriptã³ã³ãã€ã©ãåã·ã¹ãã ãšçµ±åãããŠããŸããããããžã§ã¯ãã³ãŒãå
ã®åãšã©ãŒãå®å
šã§ãªããã£ã¹ãããžã§ããªãã¯ã®äžé©åãªäœ¿çšãæ€åºããããšã¯ã§ããŸããã
3. ã³ãŒãã¹ã¿ã€ã«ãå質ã®åŒ·å¶ããªã
ãã®ããŒã«ã¯ãªã³ã¿ãŒããã©ãŒããã¿ãŒã§ã¯ãããŸãããã³ãŒãã£ã³ã°èŠçŽã®åŒ·å¶ãã³ãŒãã®èãã®æ€åºãNode.jsã³ãŒãããŒã¹å
šäœã§ã®ã¹ã¿ã€ã«ã®äžè²«æ§ã®ç¢ºä¿ã¯è¡ããŸããã
4. ããŒã¿ãããŒãå¶åŸ¡ãããŒã®åæããªã
NodeSecureã¯ãã¢ããªã±ãŒã·ã§ã³å
ã§ã®ããŒã¿ã®ç§»åãã¢ãã«åããŸãããæ±ææºãç¹å®ããããæ©å¯æ§ã®é«ãã·ã³ã¯ãžã®ãŠãŒã¶ãŒå
¥åã远跡ããããå¶åŸ¡ãããŒãåæããŠããžãã¯ã®è匱æ§ãæ€åºãããããããšã¯ã§ããŸããã
5. ã«ã¹ã¿ã ã³ãŒãã«å¯Ÿããéå®çãªã»ãã¥ãªãã£ãã§ãã¯
NodeSecure ã¯ããã±ãŒãž ã¬ãã«ã®åæã«ã¯åŒ·åã§ãããã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ãäžé©åãªå
¥åæ€èšŒãèªèšŒããžãã¯ã®èª€æ§æãªã©ããããžã§ã¯ãç¬èªã®ã³ãŒãããŒã¹å
ã®ã»ãã¥ãªãã£åé¡ãèŠã€ããããšã¯ã§ããŸããã
6. 建ç¯äžã®åŒ·å¶åãªã
NodeSecureã¯ãããžã§ã¯ãæ§é ãæ€èšŒããããã¢ãžã¥ãŒã«å¢çã匷å¶ãããããŸãããã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ååãä¿èšŒããããNode.jsã¢ããªã±ãŒã·ã§ã³å
ã®ã¬ã€ã€ãŒéã®å¯çµåã鲿¢ãããããããšã¯ã§ããŸããã
7. 調æ»çµæãæåã§ç¢ºèªããå¿
èŠããã
NodeSecure ã®æ€åºçµæã®å€ãã¯ãçãããã¹ã¯ãªãããé£èªåãããã³ãŒããªã©ãæäœæ¥ã«ããè§£éãå¿
èŠã§ãã誀æ€ç¥ãçºçããå¯èœæ§ããããããŒã ã¯ãã©ã°ãä»ããããããã±ãŒãžãæ¬åœã«å±éºã§ãããã©ãããã±ãŒã¹ãã€ã±ãŒã¹ã§å€æããå¿
èŠããããŸãã
8. ããŒã åãã®å
æ¬çãªã¬ããŒãããªã
NodeSecure ã¯è©³çްãªç£æ»åºåãçæããŸãããå€§èŠæš¡ãªçµç¹ã§å¿
èŠãšããããšã³ã¿ãŒãã©ã€ãº ã°ã¬ãŒãã®ããã·ã¥ããŒããããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ããŸãã¯ããŒã ã¬ãã«ã®åŸåè¿œè·¡ãæ¬ ããŠããŸãã
9. npmã¡ã¿ããŒã¿ã®å質ã«äŸåãã
NodeSecure ã®åæã®äžéšã¯ãããã±ãŒãžäœæè
ãæäŸããã¡ã¿ããŒã¿ã«äŸåããŠããŸããã¡ã¿ããŒã¿ãäžå®å
šãŸãã¯äžæ£ç¢ºãªå Žåãç¹å®ã®ãªã¹ã¯ã®æ€åºèœåãå¶éãããå¯èœæ§ããããŸãã
10. ä»ã®ããŒã«ãè£å®ãããã代æ¿ãããã®ã§ã¯ãªã
NodeSecureã¯ãµãã©ã€ãã§ãŒã³ã»ãã¥ãªãã£ã«é«åºŠã«ç¹åããŠããŸããå®å
šãªã³ãŒãå質ãšã»ãã¥ãªãã£ã«ãã¬ããžãå®çŸããã«ã¯ããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãSASTããŒã«ãã¢ãŒããã¯ãã£åŒ·å¶ãŠãŒãã£ãªãã£ãå¿
èŠã§ãã
ãã§ãã¯ããŒã¯
Checkmarxã¯ããšã³ã¿ãŒãã©ã€ãºã°ã¬ãŒãã®éçã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ãã¹ãïŒSASTïŒãã©ãããã©ãŒã ã§ãããçµç¹ããœãŒã¹ã³ãŒãã«æœãã»ãã¥ãªãã£è匱æ§ããããã€åã«ç¹å®ããã®ã«åœ¹ç«ã¡ãŸããJavaScriptãTypeScriptãå«ãå€ãã®èšèªãšãã¬ãŒã ã¯ãŒã¯ããµããŒãããŠããã峿 Œãªã»ãã¥ãªãã£èŠä»¶ãšã³ã³ãã©ã€ã¢ã³ã¹ããŒãºãæã€æ¥çã§åºãå©çšãããŠããŸãã
Node.jsãããžã§ã¯ãã®å ŽåãCheckmarxã¯ãµãŒããŒãµã€ãJavaScriptããã³TypeScriptã³ãŒããè§£æããäžè¬çãªè匱æ§ã«é¢é£ãããã¿ãŒã³ãæ€åºããŸããCI/CDãã€ãã©ã€ã³ãããŒãžã§ã³ç®¡çã·ã¹ãã ãéçºè ã¯ãŒã¯ãããŒãšçµ±åããããšã§ãããŒã å šäœã§å®å šãªéçºãã©ã¯ãã£ã¹ã匷åã§ããŸãã
äž»ãªæ©èœ
- Node.js ããã³ TypeScript ã®ã³ãŒãããŒã¹ãã¹ãã£ã³ããŠãã€ã³ãžã§ã¯ã·ã§ã³ã®æ¬ é¥ãå®å šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãXSS ãªã¹ã¯ãªã©ã®ã»ãã¥ãªãã£äžã®è匱æ§ãæ€åºããŸãã
- ã¢ããªã±ãŒã·ã§ã³å¶åŸ¡ãããŒãã¢ãã«åããŠå®å šã§ãªãããŒã¿ã®äŒæãèå¥ãã
- CI/CD ãã€ãã©ã€ã³ã§ããªã·ãŒé§ååã®ã»ãã¥ãªã㣠ã²ãŒãããµããŒã
- è匱æ§ç®¡çãšä¿®åŸ©è¿œè·¡ã®ããã®éäžããã·ã¥ããŒã
- GitHubãGitLabãJenkinsãAzure DevOpsãªã©ã®ãã©ãããã©ãŒã ãšçµ±å
- OWASP Top 10ãPCI DSSãªã©ã®æšæºãžã®ã³ã³ãã©ã€ã¢ã³ã¹ãµããŒããæäŸããŸã
Checkmarx ã¯ãã»ãã¥ãªã㣠ã¹ãã£ã³ããœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«ã«çŽæ¥çµã¿èŸŒã¿ãã³ãŒã ã»ãã¥ãªãã£ã«å¯Ÿãã匷åãªã¬ããã³ã¹ãç¶æããããšãç®æãå€§èŠæš¡ãªçµç¹ã«ãã£ãŠããéžæãããŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. äžè¬çãªã³ãŒãå質ã§ã¯ãªããã»ãã¥ãªãã£ã«äž»çŒã眮ããŠãã
Checkmarxã¯ã»ãã¥ãªãã£è匱æ§ã®æ€åºãç®çãšããŠèšèšãããŠããŸããã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ã®åŒ·å¶ãä¿å®æ§ã®åé¡ã®æ€åºãã»ãã¥ãªãã£ãšã¯ç¡é¢ä¿ãªã³ãŒãèã®æ€åºã¯è¡ããŸããããããã®æžå¿µäºé
ã«ã€ããŠã¯ãããŒã ã¯äŸç¶ãšããŠå¥éãªã³ã¿ãŒãå質管çããŒã«ã䜿çšããå¿
èŠããããŸãã
2. éå®çãªTypeScriptåã·ã¹ãã çµ±å
Checkmarx 㯠TypeScript ããµããŒãããŠããŸããããã®åæãšã³ãžã³ã¯ TypeScript ã®é«åºŠãªåã·ã¹ãã ãååã«æŽ»çšããŠããŸããããžã§ããªãã¯ãè€éãªåæšè«ããã¬ãŒã ã¯ãŒã¯åºæã®åä»ããšãã£ãåŠçãããŸããããã誀æ€ç¥ãåé¡ã®èŠéãã«ã€ãªããå¯èœæ§ããããŸãã
3. ãã£ãŒãããã¯ãµã€ã¯ã«ãé
ã
Checkmarxã¯éåžžãCIãŸãã¯å®æã¹ãã£ã³ã®äžéšãšããŠå®è¡ãããã³ãŒããããã·ã¥ãããåŸã«çµæãæäŸããŸãããã®é
ããã£ãŒãããã¯ã«ãŒãã¯ãã³ãŒãã®èšè¿°æã«åé¡ãææããIDEçµ±åããŒã«ãšæ¯èŒããŠãéçºè
ã®æ¡çšçãäœäžãããå¯èœæ§ããããŸãã
4. è€éãªæ§æãšãªã³ããŒãã£ã³ã°
Node.jsããã³TypeScriptãããžã§ã¯ãã«Checkmarxãã»ããã¢ããããã«ã¯ãå€§èŠæš¡ãªåæèšå®ãå¿
èŠã«ãªãå ŽåããããŸããã¹ãã£ã³ã«ãŒã«ããããžã§ã¯ãæ§é ããã€ãã©ã€ã³ã®çµ±åã調æŽããã«ã¯ãå°çšã®ã»ãã¥ãªãã£ãšã³ãžãã¢ãªã³ã°æéãå¿
èŠã«ãªãå ŽåããããŸãã
5. ã»ãã¥ãªãã£ä»¥å€ã®æžå¿µäºé
ã«å¯Ÿããéå®çãªè£å
Checkmarxã¯ãã¢ãžã¥ãŒã«å¢çããã¡ã€ã³éå±€åãšãã£ãã¢ãŒããã¯ãã£äžã®å¶çŽã匷å¶ããŸãããã¯ãªãŒã³ã¢ãŒããã¯ãã£ã®éåãæ€åºãããããããžã§ã¯ãèšèšã®ååã®äžè²«æ§ã確ä¿ãããããããšã¯ã§ããŸããã
6. éçºè
ãã¬ãŒãã³ã°ãå¿
èŠ
Checkmarxã®çµæãè§£éããã«ã¯ã誀æ€ç¥ãããªã¢ãŒãžããã»ãã¥ãªãã£ãžã®åœ±é¿ãçè§£ããããã®å°éç¥èãå¿
èŠã«ãªãå ŽåããããŸããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«ç²ŸéããŠããªãéçºè
ã¯ã远å ã®ã¬ã€ãã³ã¹ããªããã°ãçºèŠäºé
ã«åºã¥ããŠè¡åããããšãå°é£ãªå ŽåããããŸãã
7. ã³ã¹ããšã©ã€ã»ã³ã¹ã®è€éã
Checkmarxã¯ããšã³ã¿ãŒãã©ã€ãºåãã®äŸ¡æ Œã¢ãã«ãæ¡çšããåçšãã©ãããã©ãŒã ã§ããç¹ã«é«åºŠãªæ©èœãçµ±åãå¿
èŠãªå Žåã¯ãå°èŠæš¡ãªããŒã ãã¹ã¿ãŒãã¢ããã«ãšã£ãŠã³ã¹ããé«ããããšæãããããããŸããã
8. ã«ã¹ã¿ã ã«ãŒã«äœæã®æè»æ§ãäœã
Checkmarxã¯ã«ã¹ã¿ã ã¯ãšãªããµããŒãããŠããŸãããã«ã¹ã¿ã ã«ãŒã«ã®äœæãšç¶æã«ã¯ãç¬èªã®ã¯ãšãªèšèªãšå
éšããŒã«æ§é ãç¿åŸããå¿
èŠãããå Žåãå€ããããŸããããã¯ãçµç¹åºæã®ã»ãã¥ãªãã£ããªã·ãŒãé©çšãããããŒã ã«ãšã£ãŠéå£ãšãªãå¯èœæ§ããããŸãã
9. å€§èŠæš¡ã³ãŒãããŒã¹ã«ãããããã©ãŒãã³ã¹ã®èæ
®äºé
å€§èŠæš¡ãª Node.js ã¢ãã¬ããžããªãäŸåé¢ä¿ã®å€ããããžã§ã¯ãã®å Žåãç¹ã«æ
éãªèª¿æŽãå¢åã¹ãã£ã³æŠç¥ããªããã°ãã¹ãã£ã³ã¯ãªãœãŒã¹ã倧éã«æ¶è²»ããé床ãé
ããªãå¯èœæ§ããããŸãã
10. éçºè
ãšã¯ã¹ããªãšã³ã¹ãå€éšçµ±åã«äŸå
Checkmarxã¯DevSecOpsããã»ã¹å
šäœã®äžéšãšããŠäœ¿çšããã®ãæé©ã§ãããéçºè
ã¯ãŒã¯ãããŒã®çµ±åã«ã¯å€éšé£æºã«äŸåããŠããŸããããŒãžã§ã³ç®¡çãCI/CDãIDEãšã®ç·å¯ãªé£æºããªããã°ãã»ãã¥ãªãã£ã«é¢ãããã£ãŒãããã¯ããµã€ãåãããè¿
éãªå¯Ÿå¿ãå°é£ã«ãªãå¯èœæ§ããããŸãã
ã»ã ã°ã¬ãã
Semgrepã¯ãã³ãŒããã¿ãŒã³ãèå¥ããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãé©çšãããã¿ãŒã³ããŒã¹ã®ã¹ãã£ã³ãéããŠã³ãŒãå質ãåäžãããããã«èšèšãããæè»ãªéçè§£æããŒã«ã§ããJavaScriptãTypeScriptãå«ãå¹ åºãèšèªããµããŒãããã·ã³ãã«ãªYAML圢åŒã§èšè¿°ãããã«ã¹ã¿ãã€ãºå¯èœãªã«ãŒã«ã§ç¥ãããŠããŸãã
Semgrepã¯ãéçºè ã®ã¯ãŒã¯ãããŒã«ã¹ãã£ã³æ©èœãçŽæ¥çµã¿èŸŒã¿ãå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ã培åºãããªããžããªéã§äžè²«ããã³ãŒãæšæºãç¶æãããã»ãã¥ãªãã£ããŒã ãéçºããŒã ã«åºãå©çšãããŠããŸããããŒã«ã«ç°å¢ãCIãã€ãã©ã€ã³ã§å®è¡ã§ããã»ãããã«ãªã¯ãšã¹ãã«çµ±åããŠæ©æãã£ãŒãããã¯ãåŸãããšãã§ããŸãã
äž»ãªæ©èœ
- JavaScriptãTypeScriptããã®ä»å€ãã®èšèªã«å¯Ÿå¿ãããã¿ãŒã³ããŒã¹ã®éçè§£æ
- ã»ãã¥ãªãã£åé¡ãã³ãŒãå質ããã¹ããã©ã¯ãã£ã¹ã®ããã®çµã¿èŸŒã¿ã«ãŒã«ã»ãã
- ãããžã§ã¯ãåºæã®ãã§ãã¯ã®ããã®çŽæç㪠YAML æ§æã䜿çšããã«ã¹ã¿ã ã«ãŒã«ã®äœæ
- ããŒã«ã«éçºãCI/CDèªååã«é©ããé«éå®è¡
- GitHubãGitLabãBitbucketããã®ä»ã®éçºãã©ãããã©ãŒã ãšã®çµ±å
- ããŒã åãã®Semgrep Cloudã«ããéäžç®¡çãšã¬ããŒã
Semgrep ã¯ãå®å šã§ãªãã³ãŒã ãã¿ãŒã³ãæ€åºããå éšæšæºãé©çšããã¬ãã¥ãŒããã«ãäžã«éçºè ã«å®çšçãªãã£ãŒãããã¯ãæäŸãããšããç¹ã§ãNode.js ãããžã§ã¯ãã§ç¹ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. ãã€ãã£ãåã·ã¹ãã çµ±åãªã
Semgrep 㯠TypeScript æ§æããµããŒãããŠããŸãããåã®è§£æ±ºã« TypeScript ã³ã³ãã€ã©ã䜿çšããŸããããã®ãããåã®é¢ä¿ãé«åºŠãªãžã§ããªãã¯ãè€éãªåæšè«ã«äŸåããåé¡ãæ€åºããèœåãå¶éãããŸãã
2. æ·±ãæå³çè§£ã®ãªããã¿ãŒã³ãããã³ã°
Semgrepã¯ASTãã¿ãŒã³ãããã³ã°ãéããŠã³ãŒãæ§é ãåæããŸãããå¶åŸ¡ãããŒãããŒã¿ãããŒãå®å
šãªã³ã³ããã¹ãã§ã¢ãã«åããŸãããè€æ°ã®é¢æ°ããã¡ã€ã«ã«ãŸããã倿°ã®è¿œè·¡ãå¿
èŠãšãªãè匱æ§ãè«çãšã©ãŒãèŠéãå¯èœæ§ããããŸãã
3. ããŒã¿ãããŒãæ±æåæããªã
Semgrepã¯ãããŒã¿ãã¢ããªã±ãŒã·ã§ã³å
ãã©ã®ããã«ç§»åãããã远跡ããŠãä¿¡é Œã§ããªãå
¥åãæ©å¯æ§ã®é«ãæäœã«å°éãããã¹ãç¹å®ããããšã¯ã§ããŸããããããã®åé¡ãæ€åºããã«ã¯ãå€ãã®å Žåãæ±æåææ©èœãåããå°çšã®SASTããŒã«ãå¿
èŠã§ãã
4. éå®çãªå»ºç¯èŠå¶
Semgrep ã¯ç¹å®ã®ã€ã³ããŒã ãã¿ãŒã³ã«é¢ããã«ãŒã«ãèšè¿°ããããã«äœ¿çšã§ããŸãããNode.js ãããžã§ã¯ãã§éå±€åã¢ãŒããã¯ãã£ãè€éãªäŸåé¢ä¿ã®å¢çãé©çšããããã®çµã¿èŸŒã¿ãµããŒãããããŸããã
5. åœéœæ§ãŸãã¯åœé°æ§ã®å¯èœæ§
Semgrep ã®ãã¿ãŒã³ãããã³ã°ã¯ãŠãŒã¶ãŒå®çŸ©ã®ã«ãŒã«ã«äŸåããŠãããããã«ãŒã«ã®èšè¿°ãäžååã§ãã£ãããç¯å²ãåºããããšããã€ãºãçºçããããé倧ãªåé¡ãèŠéãããããå¯èœæ§ããããŸããä¿¡é Œæ§ã®é«ãã«ãŒã«ã»ãããç¶æããã«ã¯ãç¶¿å¯ãªèšèšãšç¶ç¶çãªãã¥ãŒãã³ã°ãå¿
èŠã§ãã
6. ãããžã§ã¯ãåºæã®ãã§ãã¯ã«ã¯æåã§ã«ãŒã«ãäœæããå¿
èŠããã
Semgrep ã®ã«ã¹ã¿ãã€ãºæ§ã®é«ãã¯ãããŒã ããã¡ã€ã³åºæã®ããžãã¯ãå
éšããªã·ãŒã«é¢ããç¬èªã®ã«ãŒã«ãäœæããç¶æããããã«æéãæè³ããå¿
èŠãããããšãæå³ããŸããããã¯ãããŒã«ãå®å
šã«å°å
¥ããããã®ãªãŒããŒããããå¢å ãããŸãã
7. è€éãªãã¬ãŒã ã¯ãŒã¯ãããã«äœ¿çšã§ããç¯å²ãéãããŠãã
é«åºŠãªãã¿ãŒã³ãé«åºŠã«æœè±¡åããããã¬ãŒã ã¯ãŒã¯ã䜿çšããNode.jsã¢ããªã±ãŒã·ã§ã³ã®å ŽåãSemgrepã§ã¯é¢é£ããåé¡ãæ€åºããããã«ã«ã¹ã¿ãã€ãºãããã«ãŒã«ãå¿
èŠã«ãªãå ŽåããããŸããäžè¬çãªã³ãã¥ããã£ã«ãŒã«ã¯ããã¹ãŠã®ãããžã§ã¯ãæ§é ã«é©åãããšã¯éããŸããã
8. ã¹ã¿ã€ã«ãæžåŒã®åŒ·å¶ãç®çãšããŠèšèšãããŠããªã
Semgrepã¯ãESLintãPrettierã®ãããªãªã³ã¿ãŒããã©ãŒããã¿ã眮ãæãããã®ã§ã¯ãããŸãããTypeScriptãšJavaScriptã®ã³ãŒãããŒã¹å
šäœã§ã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ãšãã©ãŒãããã®äžè²«æ§ãä¿ã€ã«ã¯ãäŸç¶ãšããŠå¥ã
ã®ããŒã«ãå¿
èŠã§ãã
9. å®å
šãªã»ãã¥ãªãã£ã³ã³ãã©ã€ã¢ã³ã¹ã¬ããŒãããªã
Semgrepã¯ã»ãã¥ãªãã£åé¡ã®çºèŠã«ã¯åœ¹ç«ã¡ãŸãããå®å
šãªã»ãã¥ãªãã£ã¬ããã³ã¹ãã©ãããã©ãŒã ã§ã¯ãããŸãããäžéšã®ãšã³ã¿ãŒãã©ã€ãºç°å¢ã§æåŸ
ãããããªã·ãŒç®¡çãããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ãã³ã³ãã©ã€ã¢ã³ã¹ããã·ã¥ããŒããªã©ã®æ©èœã¯æäŸããŠããŸããã
10. 广çãªäœ¿çšã«ã¯éçºè
ã®ãã¬ãŒãã³ã°ãå¿
èŠ
Semgrep ãæå€§éã«æŽ»çšããã«ã¯ãéçºè
ãšã»ãã¥ãªã㣠ããŒã ãã«ãŒã«æ§æãåŠç¿ããAST ãã¿ãŒã³ãçè§£ããç¡é¢ä¿ãªæ€åºçµæã§éçºè
ã«é倧ãªè² æ
ããããã«ã¹ãã£ã³ãã¯ãŒã¯ãããŒã«çµ±åããæŠç¥ãéçºããå¿
èŠããããŸãã
ã¯ãªããã¯.js
Clinic.jsã¯ãNode.jsã¢ããªã±ãŒã·ã§ã³åãã«ç¹å¥ã«æ§ç¯ããã匷åãªããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ããã³èšºæããŒã«ã¹ã€ãŒãã§ããéçºè ã¯ãå®è¡æããã©ãŒãã³ã¹ã®åæãããã«ããã¯ã®ç¹å®ãé«è² è·æã®ãµãŒããŒåäœã®æé©åãè¡ãããšãã§ããŸããClinic.jsã¯ãCPU䜿çšçãã€ãã³ãã«ãŒãã®é å»¶ãã¡ã¢ãªãªãŒã¯ãéåæåŒã³åºããã¿ãŒã³ã«é¢ããèŠèŠçãªã¬ããŒããšé«åºŠãªåææ å ±ãæäŸãããããNode.jsãµãŒãã¹ã«ãããæ¬çªç°å¢ã¬ãã«ã®åé¡ã®èšºæã«ç¹ã«åœ¹ç«ã¡ãŸãã
ãã®ã¹ã€ãŒãã«ã¯ãDoctorãFlameãBubbleprofãHeap Profiler ãªã©ã®ããŒã«ãå«ãŸããŠãããããããã Node.js ããã»ã¹ã®å®è¡æããã©ãŒãã³ã¹ã«é¢ããå°éçãªãã¥ãŒãæäŸããŸãã
äž»ãªæ©èœ
- CPU ãããã¡ã€ã«ãèšé²ããŠèŠèŠåããããã©ãŒãã³ã¹ã®ããã«ããã¯ãèŠã€ããŸã
- ã€ãã³ãã«ãŒãã®é å»¶ãç£èŠããŠãããã¯æäœãæ€åºããŸã
- Bubbleprof ã§è€éãªãããã¹ãã§ãŒã³ã®éåææäœãåæãã
- ã¡ã¢ãªå²ãåœãŠã远跡ããŠãªãŒã¯ãçºèŠãã
- ããŒã«ã«ç°å¢ãšæ¬çªç°å¢åãã® CLI é§ååã¯ãŒã¯ãããŒ
- æ ¹æ¬åå åæãæ¯æŽããã€ã³ã¿ã©ã¯ãã£ããªã¬ããŒããçæããŸã
Clinic.js ã¯ããµãŒããŒã®ããã©ãŒãã³ã¹ãæé©åããã¹ã ãŒãºãªæ¬çªç°å¢ã®å±éãå®çŸããããšèããŠãã Node.js éçºè ãéçšããŒã ã«ãã£ãŠåºã䜿çšãããŠããŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. éçè§£æã§ã¯ãªãå®è¡æãããã¡ã€ãªã³ã°çšã«èšèšãããŠãã
Clinic.jsã¯éçè§£æããŒã«ã§ã¯ãããŸããããããã¡ã€ãªã³ã°ããŒã¿ãåéããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿
èŠããããŸããå®è¡ããã«ãœãŒã¹ã³ãŒããè§£æããããTypeScriptãJavaScriptãã¡ã€ã«ã®èªã¿åãã®ã¿ã§åé¡ãç¹å®ãããããããšã¯ã§ããŸããã
2. åãã§ãã¯ããªã³ãã£ã³ã°æ©èœããªã
Clinic.js ã¯ãTypeScript ã®åãæ€èšŒããããã³ãŒãã£ã³ã°èŠçŽã匷å¶ããããã¹ã¿ã€ã«ã®äžè²«æ§ããã§ãã¯ãããããŸãããã³ãŒãã®æ£ç¢ºæ§ãä¿èšŒããäžã§ããªã³ã¿ãŒã TypeScript ã³ã³ãã€ã©ã眮ãæããããšã¯ã§ããŸããã
3. ã»ãã¥ãªãã£èåŒ±æ§æ€åºãªã
Clinic.js ã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãæªæ€èšŒã®å
¥åãå®å
šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãªã©ã®ã»ãã¥ãªãã£äžã®æ¬ é¥ãç¹å®ããããã«æ§ç¯ãããŠããŸãããã»ãã¥ãªãã£ã¹ãã£ã³ã¯ãå°çšã® SAST ããŒã«ãŸãã¯äŸåé¢ä¿è§£æããŒã«ã«ãã£ãŠåŠçããå¿
èŠããããŸãã
4. ããŒã¿ãããŒãå¶åŸ¡ãããŒã®æ€èšŒããªã
Clinic.js ã¯å®è¡æã³ãŒã«ã°ã©ããèŠèŠåããŸãããã³ãŒãå
ã§ã®ããŒã¿ã®ç§»åãå¶åŸ¡ãããŒãèšèšäžã®æåŸ
ãæºãããŠãããã©ãããéçã«åæããããšã¯ã§ããŸããããŸããå®è¡ãããŠããªããã¹ã®è«çãšã©ãŒãæ€åºããããšã¯ã§ããŸããã
5. 建ç¯ã«é¢ããæŽå¯åã®éç
Clinic.jsã¯ããããžã§ã¯ãæ§é ã§ã¯ãªãå®è¡æããã©ãŒãã³ã¹ã¡ããªã¯ã¹ã«éç¹ã眮ããŠããŸããã³ãŒãããŒã¹ã«ãããŠãã¢ãŒããã¯ãã£ã«ãŒã«ãã¢ãžã¥ãŒã«å¢çãã¬ã€ã€ãŒåã®ååã匷å¶ããããšã¯ãããŸããã
6. äŸåé¢ä¿ããµãã©ã€ãã§ãŒã³åæããªã
ãã®ããŒã«ã¯ãnpm ããã±ãŒãžã®æ¢ç¥ã®è匱æ§ãã©ã€ã»ã³ã¹ãªã¹ã¯ããµãã©ã€ãã§ãŒã³æ»æãè©äŸ¡ãããã®ã§ã¯ãããŸãããäŸåé¢ä¿ã®å®å
šæ§ã確ä¿ããã«ã¯ãnpm Audit ã NodeSecure ãªã©ã®ããŒã«ã䜵çšããå¿
èŠããããŸãã
7. 代衚çãªã¯ãŒã¯ããŒããå¿
èŠ
Clinic.js ã®åæçµæã¯ããããã¡ã€ãªã³ã°äžã«äœ¿çšããããã©ãã£ãã¯ãã¯ãŒã¯ããŒãã«å¿ããŠç²ŸåºŠãå·Šå³ãããŸããã·ããªãªãæ¬ èœããŠãããââã代衚çã§ãªãå Žåã¯ãããã©ãŒãã³ã¹ã®åé¡ãçºèŠãããªãå¯èœæ§ããããŸãã
8. æ¬çªç°å¢ã«ãããæœåšçãªããã©ãŒãã³ã¹ãžã®åœ±é¿
詳现ãªãããã¡ã€ãªã³ã°ããŒã¿ãåéãããšãå®çšŒåã·ã¹ãã ã«ãªãŒããŒããããçºçããå¯èœæ§ããããŸããæ¬çªç°å¢ã§å®å
šãªã¢ãŒãã¯æäŸãããŠããŸãããæ¬çªç°å¢ã§åºç¯å²ã«äœ¿çšããå Žåã¯ããŠãŒã¶ãŒãžã®åœ±é¿ãåé¿ããããã«æ
éãªèšç»ãå¿
èŠã§ãã
9. CI éçãã§ãã¯ãçµ±åãããŠããªã
Clinic.js ã¯ãCI ãã€ãã©ã€ã³ã§éçè§£æã®æ€åºçµæã«åºã¥ããŠãã«ãã倱æãããããã«ã¯èšèšãããŠããŸãããäž»ã«æåãŸãã¯ããŒã«ã«ããã©ãŒãã³ã¹èª¿æ»ã§äœ¿çšãããŸãã
10. ä»ã®ããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
Clinic.js ã¯å®è¡æã®ããã©ãŒãã³ã¹ã®åé¡ãçè§£ããŠä¿®æ£ããã®ã«ã¯åªããŠããŸãããNode.js ããã³ TypeScript ãããžã§ã¯ãã®å
šäœçãªã³ãŒãå質ãã»ãã¥ãªãã£ããŸãã¯ã¢ãŒããã¯ãã£ã®æŽåæ§ã確ä¿ããã«ã¯äžååã§ãã
ã©ã€ãããŠã¹CI
Lighthouse CI ã¯ãç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ ã¯ãŒã¯ãããŒã®äžç°ãšã㊠Google ã® Lighthouse ç£æ»ãå®è¡ããããã®èªååããŒã«ã§ãããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ããã¹ã ãã©ã¯ãã£ã¹ãSEOããããŠããã°ã¬ãã·ã ãŠã§ãã¢ããªã®ã³ã³ãã©ã€ã¢ã³ã¹ãè©äŸ¡ããŸããLighthouse CI ã䜿çšãããšãããŒã ã¯ãã«ãªã¯ãšã¹ãããããã€ã¡ã³ããæ¬çªç°å¢ãµã€ãã§ãããã®ç£æ»ãèªååããäžè²«æ§ã®ããé«å質ãªãŠãŒã¶ãŒ ãšã¯ã¹ããªãšã³ã¹ã確ä¿ã§ããŸãã
Lighthouse èªäœã¯ Chrome DevTools ã§ã®æåãã¹ãã«ãã䜿çšãããŸãããLighthouse CI ã¯æéã®çµéã«äŒŽãã¹ã³ã¢ãæ¯èŒããããã©ãŒãã³ã¹ ããžã§ãããé©çšããããšã§ããã®æ©èœãèªååããããã€ãã©ã€ã³ã«å°å ¥ããŸãã
äž»ãªæ©èœ
- CI ãã€ãã©ã€ã³ã§ Lighthouse ç£æ»ãèªååããäžè²«ãããã¹ããå®çŸããŸãã
- ããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãSEOãªã©ã®äž»èŠãªã¹ã³ã¢ã®å€åã远跡ããŸã
- ç£æ»ãå®çŸ©ããããããå€ãäžåããšãã«ãã倱æããŸã
- GitHub ActionsãGitLab CIãCircleCIããã®ä»ã®äžè¬çãªCIããŒã«ããµããŒã
- å·®åãšå±¥æŽè¿œè·¡ãæäŸãããµã€ãã®å質ãé·æã«ããã£ãŠç£èŠããŸãã
- ããŒã ããããã€ã¡ã³ãå šäœã§ããã©ãŒãã³ã¹äºç®ã®é©çšãæ¯æŽ
Lighthouse CI ã¯ãé«éã§ã¢ã¯ã»ã¹ãããããæé©åããããŠãŒã¶ãŒ ãšã¯ã¹ããªãšã³ã¹ãç¶æããããšèããŠãããNode.js ããŒã¹ã® Web ã¢ããªã±ãŒã·ã§ã³ãSPAãPWA ãæ§ç¯ããããã³ããšã³ãéçºè ãããŒã ã®éã§ç¹ã«äººæ°ããããŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. ãããã€ãããWebåºåã«éç¹ã眮ã
Lighthouse CIã¯ããœãŒã¹ã³ãŒãã§ã¯ãªãã¬ã³ããªã³ã°ããããŠã§ããµã€ããè©äŸ¡ããŸããTypeScriptãJavaScriptãã¡ã€ã«ã®ãã°ãä¿å®æ§ã®åé¡ãã»ãã¥ãªãã£äžã®æ¬ é¥ãçŽæ¥åæããããšã¯ã§ããŸããã
2. åãã§ãã¯ããªã³ãã£ã³ã°ããªã
Lighthouse CI 㯠TypeScript ã®åã JavaScript ã®ã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ã匷å¶ããŸãããæ§æãšã©ãŒãæ€åºããã³ãŒãã¹ã¿ã€ã«ã®äžè²«æ§ãç¶æããããã«ãããŒã ã¯äŸç¶ãšããŠãªã³ã¿ãŒãšã³ã³ãã€ã©ãå¿
èŠãšããŸãã
3. ã»ãã¥ãªãã£éçåæãªã
Lighthouse ã«ã¯ããããŒãš HTTPS ã®åºæ¬çãªã»ãã¥ãªã㣠ãã§ãã¯ãå«ãŸããŠããŸãããã€ã³ãžã§ã¯ã·ã§ã³ã®ãªã¹ã¯ãå®å
šã§ãªãå
¥ååŠçãNode.js API ã®å®å
šã§ãªã䜿çšãªã©ã®ã³ãŒã ã¬ãã«ã®è匱æ§ãæ€åºããããšã¯ã§ããŸããã
4. ã³ãŒãå質ãããžãã¯ã®æ€èšŒããªã
Lighthouse CI ã¯ãããã¯ãšã³ãã® Node.js ãŸã㯠TypeScript ãµãŒãã¹ã«ãããããžãã¯ã®ãã°ãã³ãŒãã®èããä¿å®æ§ã®åé¡ãç¹å®ããããšã¯ã§ããŸãããã¯ã©ã€ã¢ã³ãåŽã®ããã©ãŒãã³ã¹ãšã¬ã³ããªã³ã°ãããããŒãžã®å質ã®ã¿ãè©äŸ¡ããŸãã
5. ã¢ãŒããã¯ãã£ã«ãŒã«ã®åŒ·å¶ãªã
Lighthouse CIã¯ããããžã§ã¯ãæ§é ãã¢ãžã¥ãŒã«å¢çãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã®ååãçè§£ããŸãããNode.jsã¢ããªã±ãŒã·ã§ã³ã«ãããé¢å¿ã®åé¢ãéå±€åã匷å¶ããããšã¯ã§ããŸããã
6. ãããã€ãŸãã¯ãã«ãåºåãå¿
èŠ
ç£æ»ã¯ããã«ãããã³ãããã€æžã¿ã®ãµã€ãããŸãã¯URLã§æäŸãããããŒã«ã«ãã«ãã«å¯ŸããŠå®è¡ãããŸãããã«ãããã»ã¹ãå®è¡ããªããšããªããžããªå
ã®ãã«ããããŠããªããœãŒã¹ã³ãŒããåæããããšã¯ã§ããŸããã
7. çŽç²ãªããã¯ãšã³ããµãŒãã¹ã®äŸ¡å€ã¯éãããŠãã
ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã®ãªãçŽç²ãªãµãŒããŒãµã€ãAPIã®ã¿ã§æ§æãããNode.jsãããžã§ã¯ãã®å ŽåãLighthouse CIã¯é©åãªãã£ãŒãããã¯ãæäŸããŸãããLighthouse CIã®äŸ¡å€ã¯ããã©ãŠã¶ããŒã¹ã®ããã³ããšã³ããæã€ã¢ããªã±ãŒã·ã§ã³ã«ç¹åããŠããŸãã
8. TypeScriptã³ã³ãã€ã©ãšã®çµ±åãªã
Lighthouse CI 㯠TypeScript èšèªãµãŒãã¹ã䜿çšããŸãããåãšã©ãŒãäžé©åãªåã®äœ¿çšãåå®çŸ©ã®æ¬ èœãæ€åºã§ããŸããã
9. äŸåé¢ä¿ã®ã»ãã¥ãªãã£ãèæ
®ããŠããªã
Lighthouse CIã¯ãnpmããã±ãŒãžã®æ¢ç¥ã®è匱æ§ãå€ãäŸåé¢ä¿ãã©ã€ã»ã³ã¹ã³ã³ãã©ã€ã¢ã³ã¹ãã¹ãã£ã³ããŸããããµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£ã確ä¿ããã«ã¯ãnpm AuditãSnykãªã©ã®ããŒã«ãå¿
èŠã§ãã
10. ä»ã®ããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
Lighthouse CIã¯ããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãSASTããŒã«ãäŸåé¢ä¿ãã§ãã«ãŒãšäœµçšããã®ãæé©ã§ããNode.jsãTypeScriptã®ã³ãŒãããŒã¹ã®éçè§£æã§ã¯ãªããã¯ã©ã€ã¢ã³ãã®ããã©ãŒãã³ã¹ãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«éç¹ã眮ããŠããŸãã
ãããž
Madgeã¯ãJavaScriptããã³TypeScriptã®ã³ãŒãããŒã¹ãè§£æããã¢ãžã¥ãŒã«äŸåé¢ä¿ã®èŠèŠçãªã°ã©ããçæãã人æ°ã®CLIããŒã«ã§ããã¢ãžã¥ãŒã«éã®çžäºæ¥ç¶ã®çè§£ã埪ç°äŸåé¢ä¿ã®æ€åºãå€§èŠæš¡Node.jsãããžã§ã¯ãã«ãããæœåšçãªã¢ãŒããã¯ãã£äžã®åé¡ã®ç¹å®ã«åœ¹ç«ã¡ãŸããMadgeã¯ãã·ã³ãã«ãªçµ±åãæç¢ºãªåºåããããŠãããžã§ã¯ãæ§é ã«æœãè€éããæããã«ããæ©èœã§ç¥ãããŠããŸãã
TypeScript ã§äœæ¥ãã Node.js ããŒã ã«ãšã£ãŠãMadge ã¯ææ°ã®æ§æãè§£æããã€ã³ããŒããšãšã¯ã¹ããŒãããããžã§ã¯ãå šäœã®äŸåé¢ä¿ã°ã©ããã©ã®ããã«åœ¢æãããã«ã€ããŠã®è²ŽéãªæŽå¯ãæäŸããŸãã
äž»ãªæ©èœ
- JavaScript ããã³ TypeScript ãããžã§ã¯ãã®ã¢ãžã¥ãŒã«äŸåé¢ä¿ã®èŠèŠçãªã°ã©ããçæããŸãã
- 埪ç°äŸåé¢ä¿ãèªåçã«æ€åºããŠå ±åããŸã
- CommonJSãESã¢ãžã¥ãŒã«ãTypeScriptæ§æããµããŒã
- ãã«ã ã¹ã¯ãªããã CI ãã€ãã©ã€ã³ãšç°¡åã«çµ±åã§ãã CLI ã€ã³ã¿ãŒãã§ãŒã¹
- ã«ã¹ã¿ã åæãä»ã®ããŒã«ãšã®çµ±åã®ããã®JSONåºå
- ããŒã ãå¯çµåããã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããæç¢ºãªã¢ãžã¥ãŒã«å¢çãç¶æããã®ã«åœ¹ç«ã¡ãŸã
Madge ã¯ãäŸåé¢ä¿ã®ç®¡çãå°é£ã«ãªããã¢ãŒããã¯ãã£ã®äŸµé£ãé²ãããšãåªå ãããå€§èŠæš¡ãª Node.js ã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. äŸåã°ã©ãã®ã¿ã«çŠç¹ãåœãŠã
Madgeã¯ã¢ãžã¥ãŒã«éã®é¢ä¿æ§ãåæã»å¯èŠåããŸããããœãŒã¹ã³ãŒãå
ã®ããžãã¯ãšã©ãŒããã°ãã»ãã¥ãªãã£åé¡ãæ€æ»ããããšã¯ã§ããŸããã颿°å®è£
ã®èª€ããæ€åºããããããžãã¹ããžãã¯ãæ€èšŒãããããããšã¯ã§ããŸããã
2. åãã§ãã¯ãTypeScriptæ€èšŒããªã
Madgeã¯TypeScriptæ§æè§£æããµããŒãããŠããŸãããTypeScriptã³ã³ãã€ã©ãšã¯çµ±åãããŠããŸãããåãšã©ãŒãäžé©åãªåã®äœ¿çšããžã§ããªãã¯ãåæšè«ã«é¢ããåé¡ãæ€åºããããšã¯ã§ããŸããã
3. ã³ãŒãã¹ã¿ã€ã«ããªã³ãã£ã³ã°ã®åŒ·å¶ããªã
Madgeã¯ãªã³ã¿ãŒã§ã¯ãããŸãããã³ãŒãã®ãã©ãŒããããåœåèŠåãã¹ã¿ã€ã«ã®äžè²«æ§ããã§ãã¯ããŸãããã¹ã¿ã€ã«ã¬ã€ãã©ã€ã³ã匷å¶é©çšããã«ã¯ãããŒã ã§å¥éããŒã«ãçšæããå¿
èŠããããŸãã
4. ã»ãã¥ãªãã£èåŒ±æ§æ€åºãªã
Madgeã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãæªæ€èšŒã®å
¥åãäŸåé¢ä¿ã«é¢é£ããCVEãªã©ã®è匱æ§ãã¹ãã£ã³ããŸãããã»ãã¥ãªãã£ç£æ»ãæ±æåæã¯æäŸããŸããã
5. å¶åŸ¡ãããŒãããŒã¿ãããŒåæããªã
Madgeã¯éçã¢ãžã¥ãŒã«ã®ã€ã³ããŒããšãšã¯ã¹ããŒãã«éç¹ã眮ããŠããŸãã颿°å
ã§ã®ããŒã¿ã®ç§»åã倿°ã®ã©ã€ããµã€ã¯ã«ã®è¿œè·¡ã¯è¡ããŸããããŸããå®å
šã§ãªãå
¥åã®äŒæãšãã£ãå®è¡æã®åé¡ãæ€åºã§ããŸããã
6. éå®çãªå»ºç¯èŠå¶
Madge ã¯åŸªç°äŸåé¢ä¿ãèŠèŠåããŠæ€åºã§ããŸãããã«ã¹ã¿ã ã¢ãŒããã¯ãã£ã«ãŒã«ãã¬ã€ã€å¢çãèªåçã«é©çšããããšã¯ã§ããŸããã埪ç°äŸåé¢ä¿ãè¶
ããæå³ããªãçµåãé²ãã«ã¯ãæåã«ããã¬ãã¥ãŒãå¿
èŠã§ãã
7. ã°ã©ãã®æåè§£éãå¿
èŠ
éçºè
ã¯ãçæãããã°ã©ããJSONã¬ããŒããã¬ãã¥ãŒããŠè§£éããåé¡ã®ãããã¿ãŒã³ãç¹å®ããå¿
èŠããããŸããMadgeã¯ãè€éãªã¢ãŒããã¯ãã£äžã®åé¡ã«å¯ŸããŠèªåçãªææ¡ãä¿®æ£ãæäŸããŸããã
8. ã€ã³ã©ã€ã³ãã£ãŒãããã¯ã®ããã®IDEçµ±åããªã
Madgeã¯äž»ã«CLIããŒã«ã§ããäžè¬çãªãšãã£ã¿ãšçµ±åãããŠããªããããã³ãŒãã®èšè¿°æã«äŸåé¢ä¿ã®åé¡ããªã¢ã«ã¿ã€ã ã§è¡šç€ºã§ãããéçºè
ãžã®å³æãã£ãŒãããã¯ãå¶éãããŸãã
9. å€§èŠæš¡ãããžã§ã¯ãã«ãããããã©ãŒãã³ã¹ã®èæ
®äºé
äœåãã®ã¢ãžã¥ãŒã«ãå«ãéåžžã«å€§èŠæš¡ãªã¢ãã¬ããžããªã®å ŽåãäŸåé¢ä¿ã°ã©ãã®çæãé
ããªã£ããããã£ã«ã¿ãªã³ã°ãæ
éãªããã²ãŒã·ã§ã³ãå¿
èŠãšããèšå€§ãªåºåãçæããããããå¯èœæ§ããããŸãã
10. ä»ã®åæããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
Madgeã¯ããªã³ã¿ãŒãåãã§ãã«ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒãéçã¢ãã©ã€ã¶ãŒãšäœµçšããã®ãæé©ã§ããäŸåé¢ä¿ã®æ§é ãçè§£ã管çãããšããç¹å®ã®ããŒãºã«å¯Ÿå¿ããŸãããå
æ¬çãªéçè§£æã«ãã¬ããžã¯æäŸããŸããã
Nx
Nxã¯ãææ°ã®JavaScriptããã³TypeScriptéçºåãã«èšèšããã匷åãªãã«ãã·ã¹ãã ããã³ã¢ãã¬ããžããªç®¡çããŒã«ãããã§ããè€æ°ã®ã¢ããªã±ãŒã·ã§ã³ãã©ã€ãã©ãªãå ±éã®äŸåé¢ä¿ãæã€è€éãªãªããžããªãããŒã ã管çããã®ã«åœ¹ç«ã¡ãŸããå ã ã¯Angularãããžã§ã¯ãåãã«éçºãããNxã§ãããçŸåšã§ã¯ReactãNode.jsãNestJSãã¯ãããå€ãã®ãã¬ãŒã ã¯ãŒã¯ããµããŒãããŠããŸãã
Node.jsããŒã åãã«ãNxã¯äŸåé¢ä¿ã°ã©ãã®å¯èŠåãã¿ã¹ã¯ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ãã³ãŒãçæããããžã§ã¯ãå¢çã®åŒ·å¶ãšãã£ãé«åºŠãªããŒã«ãæäŸããŸããäŸåé¢ä¿ç®¡çãç°¡çŽ åããéçºè ã®ã³ââã©ãã¬ãŒã·ã§ã³ãåäžãããããã«ã¢ãã¬ãæŠç¥ãæ¡çšããå€§èŠæš¡çµç¹ã§äººæ°ãåããŠããŸãã
äž»ãªæ©èœ
- è€æ°ã® Node.js ã¢ããªã±ãŒã·ã§ã³ãšã©ã€ãã©ãªãåããã¹ã±ãŒã©ãã«ãªã¢ãã¬ãããµããŒãããŸã
- äŸåé¢ä¿ã°ã©ããèŠèŠåããŠã¢ãžã¥ãŒã«ã®é¢ä¿ãæããã«ããã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ã匷åããŸãã
- äžè²«ããã¹ãã£ãã©ãŒã«ãã£ã³ã°ã®ããã®ã³ãŒããžã§ãã¬ãŒã¿ãšåè·¯å³ãæäŸãã
- CI/CD ãã€ãã©ã€ã³ãé«éåããããã«ãã£ãã·ã¥ãšå¢åãã«ããæäŸããŸã
- ReactãAngularãNestJS ãªã©ã®ãã©ã°ã€ã³ ãšã³ã·ã¹ãã ãå«ãŸããŠããŸã
- ãããžã§ã¯ãã®å¢çã匷å¶ããã¬ã€ã€ãŒéã®æå³ããªãã€ã³ããŒãã鲿¢ããŸãã
Nx ã¯ã峿 Œãªå¢çãšäžè²«ããã¯ãŒã¯ãããŒã®æ©æµãåããå€§èŠæš¡ãªã¢ãžã¥ãŒã«åŒ Node.js ã·ã¹ãã ãç¶æããããŒã ã«ãšã£ãŠç¹ã«äŸ¡å€ããããŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. éçè§£æãšã³ãžã³ã§ã¯ãªã
Nxã¯ãã«ãããã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŒã«ã§ãããéçã¢ãã©ã€ã¶ãŒã§ã¯ãããŸãããã³ãŒãã®è«çãšã©ãŒãã»ãã¥ãªãã£äžã®è匱æ§ããœãŒã¹ãã¡ã€ã«å
ã®å®å
šã§ãªããã¿ãŒã³ãæ€æ»ãããã®ã§ã¯ãããŸãããã³ãŒãã¬ãã«ã®æ€èšŒã«ã¯ãå°çšã®ãªã³ã¿ãŒãšã¢ãã©ã€ã¶ãŒã䜿çšããå¿
èŠããããŸãã
2. ãªã³ãã£ã³ã°ãšåãã§ãã¯ã«å€éšããŒã«ã«äŸåãã
Nxã¯ESLintãšTypeScriptã³ã³ãã€ã©ãçµ±åããŠããŸãããç¬èªã®ã«ãŒã«ãåæããžãã¯ã¯æäŸããŠããŸããããããã®ããŒã«ãã¿ã¹ã¯ãšããŠå®è¡ããã ããªã®ã§ãåæã®å質ã¯å®å
šã«å€éšèšå®ã«äŸåããŸãã
3. ããŒã¿ãããŒãå¶åŸ¡ãããŒã®åæããªã
Nxã¯ãã¢ããªã±ãŒã·ã§ã³å
ãã¢ãžã¥ãŒã«éã§ããŒã¿ãã©ã®ããã«ç§»åããããåæã§ããŸãããè«ççãªæ¬ é¥ãå®å
šã§ãªãéåæãã¿ãŒã³ããããã¯åŸ®åŠãªãã°ãåŒãèµ·ããå¯èœæ§ã®ããè€éãªåå²ãšã©ãŒãæ€åºã§ããŸããã
4. ã»ãã¥ãªãã£èåŒ±æ§æ€åºãªã
Nxã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãå®å
šã§ãªãå
¥ååŠçãäŸåé¢ä¿ã®è匱æ§ãšãã£ãã»ãã¥ãªãã£åé¡ãã¹ãã£ã³ããŸãããã»ãã¥ãªãã£äžã®æžå¿µã«å¯ŸåŠããã«ã¯ãSnykãnpm Auditããã®ä»ã®SASTãœãªã¥ãŒã·ã§ã³ãªã©ã®ããŒã«ãçµ±åããå¿
èŠããããŸãã
5. å¢çãæ
éã«èšå®ããå¿
èŠããã
Nxã§ã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ãå®çŸããã«ã¯ããããžã§ã¯ãã®å¢çãæåã§å®çŸ©ããå¿
èŠããããŸããç¶ç¶çãªã¡ã³ããã³ã¹ããªããã°ãNxã ãã§ã¯èªåçã«é²ãããšã®ã§ããªããæå³ããªãçµåãã¬ã€ã€ãŒéåãçºçããå¯èœæ§ããããŸãã
6. ã€ã³ããŒã以å€ã§ã¯ã¢ãŒããã¯ãã£ã«ãŒã«ã®é©çšãªã
Nxã¯ãããžã§ã¯ãéã®çŠæ¢ãããã€ã³ããŒãã鲿¢ããŸããããã¡ã€ã³é§åèšèšã¬ã€ã€ãŒããµãŒãã¹åé¢ãšãã£ãé«ã¬ãã«ã®ã¢ãŒããã¯ãã£ãã¿ãŒã³ãã¢ãã«åãããé©çšãããããããšã¯ã§ããŸããããŸããããžãã¹ããžãã¯ããã¡ã€ã³ã«ãŒã«ãæ€èšŒããããšãã§ããŸããã
7. ã³ãŒãã®å質ãä¿å®æ§ã®åæããªã
Nxã¯è€éããéè€ãã³ãŒãèãæž¬å®ã§ããŸããã远å ã®ããŒã«ããªããã°ãããŒã ãä¿å®æ§ãªã¹ã¯ãç¹å®ããããã¹ã¿ã€ã«ã®äžè²«æ§ãç¶æãããããããšã¯ã§ããŸããã
8. åŠç¿æ²ç·ãšã»ããã¢ããã®è€éã
å€§èŠæš¡ãªNode.jsãããžã§ã¯ãã«Nxã广çã«å°å
¥ããã«ã¯ãç¶¿å¯ãªèšç»ãå¿
èŠã§ããããŒã ã¯ãèšå®ãã¹ãæ©èœã®æŽ»çšäžè¶³ãé¿ããããã«ãNxã®èšå®ããã©ã°ã€ã³ã·ã¹ãã ãã¯ãŒã¯ã¹ããŒã¹ã®æ
£ç¿ãç¿åŸããå¿
èŠããããŸãã
9. IDEãã£ãŒãããã¯èªäœã®å¶é
Nx 㯠CLI ãš CI ã§å®è¡ãããŸãããESLint ããã³ TypeScript ã®çµ±åãšçµã¿åãããªããã°ãã«ãŒã«éåãå¢çã®åé¡ã«é¢ãããªã¢ã«ã¿ã€ã ã®ãšãã£ã¿ãŒ ãã£ãŒãããã¯ã¯æäŸãããŸããã
10. ä»ã®ããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
Nxã¯ã¢ãã¬ããžããªã®ç®¡çãšãããžã§ã¯ãã¬ãã«ã§ã®äŸåé¢ä¿ã®å¢çèšå®ã«éåžžã«å¹æçã§ããããªã³ã¿ãŒãéçã¢ãã©ã€ã¶ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒããã©ãŒããã¿ãŒã眮ãæãããã®ã§ã¯ãããŸãããå®å
šãªéçè§£æã«ãã¬ããžãå®çŸããã«ã¯ããããã®ããŒã«ãçµ±åããå¿
èŠããããŸãã
æŒã
Leakageã¯ãéçºè ãã³ãŒãå ã®ã¡ã¢ãªãªãŒã¯ãç¹å®ãã鲿¢ããã®ã«åœ¹ç«ã€Node.jsçšã®ãã¹ããŠãŒãã£ãªãã£ã§ãã颿°ãç¹°ãè¿ãå®è¡ããã¡ã¢ãªäœ¿çšéãçµæçã«ç£èŠããããšã§ãLeakageã¯ãªããžã§ã¯ãããªãœãŒã¹ãé©åã«ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãããŠããªãç¶æ³ãæ€åºã§ããŸãããã®ãããã¡ã¢ãªãªãŒã¯ã«ãã£ãŠå®å®æ§ãäœäžããããã€ã³ãã©ã¹ãã©ã¯ãã£ã³ã¹ããå¢å ãããããå¯èœæ§ããããããã©ãŒãã³ã¹éèŠã®Node.jsã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãLeakageã¯è²ŽéãªããŒã«ãšãªããŸãã
Leakage ã¯è»œéã§ãæ¢åã®ãã¹ã ã¹ã€ãŒããšç°¡åã«çµ±åã§ãããããä¿¡é Œæ§ãé«ãå¹ççãªãµãŒãã¹ã®ç¶æãç®æã Node.js ããŒã ãå©çšã§ããŸãã
äž»ãªæ©èœ
- å¯Ÿè±¡é¢æ°ãç¹°ãè¿ãå®è¡ããŠã¡ã¢ãªãªãŒã¯ããã¹ãããŸã
- ããŒãã®äœ¿çšç¶æ³ãç£èŠããæéã®çµéãšãšãã«ä¿æããããªããžã§ã¯ããæ€åºããŸãã
- 人æ°ã®ãã¹ãã©ã³ããŒãšçµ±åã§ããã·ã³ãã«ãªAPI
- ãªãŒã¯ã®å®å šæ§ã確ä¿ããããã«ãåã ã®ã¢ãžã¥ãŒã«ãŸãã¯é¢æ°ã®ãŠããããã¹ãã«åœ¹ç«ã¡ãŸãã
- CI ãã€ãã©ã€ã³ã§ã®èªåãã¹ãããµããŒãããæ©æã«ååž°ãæ€åºããŸãã
- Node.js ã¢ããªã±ãŒã·ã§ã³ãæéã®çµéãšãšãã«è² è·ãããã£ãŠãå®å®ããç¶æ ãä¿ã€ããšãä¿èšŒããŸãã
ãªãŒã¯ã¯ãé·æéå®è¡ããããµãŒã㌠ããã»ã¹ããã€ã¯ããµãŒãã¹ããŸã㯠API ãæ§ç¯ããããŒã ã«ãšã£ãŠç¹ã«åœ¹ç«ã¡ãŸãããããã®ããŒã ã§ã¯ãå°ããªã¡ã¢ãª ãªãŒã¯ã§ãæ¬çªç°å¢ã§ã®ã¯ã©ãã·ã¥ãããã©ãŒãã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸãã
Node.js ãš TypeScript ã«ãããéçè§£æã®å¶é
1. éçè§£æã§ã¯ãªãå®è¡æãã¹ãçšã«èšèšãããŠãã
ãªãŒã¯ã¯ãã³ãŒããå®è¡ããå®è¡æã«ã¡ã¢ãªäœ¿çšéãæž¬å®ããããšã§æ©èœããŸããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ããœãŒã¹ã³ãŒãã®ãšã©ãŒãå®å
šã§ãªããã¿ãŒã³ããã°ãåæããããšã¯ã§ããŸããã
2. TypeScriptã®åãã§ãã¯ããªã
ãªãŒã¯ã¯TypeScriptã³ã³ãã€ã©ãåã·ã¹ãã ãšã¯é£æºããŸãããTypeScriptã³ãŒãå
ã®åãšã©ãŒãäžé©åãªãžã§ããªãã¯ã®äœ¿çšãå®å
šã§ãªããã£ã¹ããæ€åºããããšã¯ã§ããŸããã
3. ã¡ã¢ãªãªãŒã¯æ€åºã«éå®
Leakage ã®ã¹ã³ãŒãã¯ã¡ã¢ãªãªãŒã¯ã®ç¹å®ã«ç¹åããŠãããè«çãšã©ãŒãã»ãã¥ãªãã£äžã®è匱æ§ãããŒã¿æ€èšŒã®åé¡ãªã©ãä»ã®çš®é¡ã®ãã°ã¯æ€åºããŸããã
4. ã³ãŒãã®å質ãã¹ã¿ã€ã«ã®åŒ·å¶ããªã
Leakage ã¯ã³ãŒãã® lint ãå®è¡ããããåœåèŠåã匷å¶ããããäžè²«ãããã©ãŒããããä¿èšŒãããããŸãããã³ãŒãã£ã³ã°æšæºãšå¯èªæ§ãç¶æããã«ã¯ãå¥éããŒã«ãå¿
èŠã§ãã
5. ã»ãã¥ãªãã£åæã«ã¯é©ããªã
Leakageã§ã¯ãã€ã³ãžã§ã¯ã·ã§ã³ãªã¹ã¯ãæ€èšŒãããŠããªãå
¥ååŠçãå®å
šã§ãªãAPIã®äœ¿çšãšãã£ãè匱æ§ã¯æ€åºãããŸãããã»ãã¥ãªãã£éèŠã®éçè§£æã«ã¯ãå°çšã®SASTããŒã«ãŸãã¯äŸåé¢ä¿ã¹ãã£ã³ããŒã«ãå¿
èŠã§ãã
6. å¶åŸ¡ãããŒãããŒã¿ãããŒåæããªã
ãªãŒã¯ã¯ãããŒã¿ãã¢ããªã±ãŒã·ã§ã³å
ãã©ã®ããã«ç§»åãããããããã¯å¶åŸ¡æ§é ãæå³ãããšããã«åäœããããã¢ãã«åããããšã¯ã§ããŸãããå°éäžå¯èœãªã³ãŒãã誀ã£ãåå²ããžãã¯ãèŠã€ããããšãã§ããŸããã
7. æå³ã®ãããã¹ãã·ããªãªãå¿
èŠ
ã¡ã¢ãªãªãŒã¯ã®æå¹æ§ã¯ãã¹ãã±ãŒã¹ã®å質ã«äŸåããŸãããã¹ãã§é©åãªã³ãŒããã¹ãã¯ãŒã¯ããŒããå®è¡ãããªãå Žåãã¡ã¢ãªãªãŒã¯ãæ€åºãããªãå¯èœæ§ããããŸãã
8. ã¢ãŒããã¯ãã£ã«ãŒã«ã®åŒ·å¶ãªã
ãªãŒã¯ã¯ãã¢ãžã¥ãŒã«æ§ã®ç¶æãã¯ãªãŒã³ã¢ãŒããã¯ãã£ã®ååã®é©çšã«ã¯åœ¹ç«ã¡ãŸãããNode.jsãããžã§ã¯ãã«ãããŠãå¯çµåãé²ãã ããäŸåé¢ä¿ã®å¢çã匷å¶ãããããããšãã§ããŸããã
9. æåã«ããè§£éãå¿
èŠ
ãªãŒã¯ã¯ã¡ã¢ãªäœ¿çšéã®å¢å ãæµ®ã圫ãã«ããäžæ¹ã§ãéçºè
ã¯çµæãè§£éããæ ¹æ¬åå ãç¹å®ããå¿
èŠããããŸãããã®ããããããã¡ã€ã©ãããŒãã¹ãããã·ã§ãããçšãããã詳现ãªãããã°ãå¿
èŠã«ãªãå Žåãå€ããããŸãã
10. ä»ã®ããŒã«ã眮ãæããã®ã§ã¯ãªãè£å®ãã
Leakage ã¯ããªã³ã¿ãŒãåãã§ãã«ãŒãéçã¢ãã©ã€ã¶ãŒãã»ãã¥ãªãã£ã¹ãã£ããŒããããã¡ã€ãªã³ã°ããŒã«ãšäœµçšããã®ãæé©ã§ããã¡ã¢ãªãªãŒã¯ãšããç¹å®ã®ããã©ãŒãã³ã¹åé¡ã«å¯ŸåŠãããã®ã§ãããã³ãŒãã®å質ãã»ãã¥ãªãã£ãå
æ¬çã«ã«ããŒãããã®ã§ã¯ãããŸããã
Node.js éçè§£æããŒã«ã解決ããäž»ãªåé¡ãšèª²é¡
çŸä»£ã®Node.jsããã³TypeScriptéçºã§ã¯ãæ§æãšã©ãŒã®åé¿ãã¯ããã«è¶ ããè€éããçããŸãããããžã§ã¯ãã®èŠæš¡ã倧ãããªãã«ã€ããŠãããŒã ã¯ã³ãŒãã®å質ãã»ãã¥ãªãã£ãããã©ãŒãã³ã¹ãä¿å®æ§ãšãã£ã課é¡ã«çŽé¢ããŸããéçè§£æããŒã«ã¯ããããã®èª²é¡ãäœç³»çã«è§£æ±ºããåé¡ãæ©æã«çºèŠããããŒã å šäœã«ãã¹ããã©ã¯ãã£ã¹ãé©çšããã®ã«åœ¹ç«ã¡ãŸãã以äžã§ã¯ããããã®ããŒã«ã解決ã«åœ¹ç«ã€äž»ãªåé¡ãšãããããã®ã¿ã€ãã«ã€ããŠè©³ãã説æããŠãããŸãã
ã³ãŒãã¹ã¿ã€ã«ãšäžè²«æ§
äžè²«ããã³ãŒãã¹ã¿ã€ã«ã¯ãå ±åéçºã«ãããŠäžå¯æ¬ ã§ããèªåé©çšããªããã°ãããŒã ã¯ã¬ãã¥ãŒäžã«ã€ã³ãã³ããåœåèŠåããã©ãŒãããã«ã€ããŠè°è«ããããšã«æéãç¡é§ã«ããŠããŸãã§ãããããªã³ã¿ãŒããã©ãŒããã¿ãªã©ã®éçè§£æããŒã«ã¯ãæç¢ºã§äžè²«æ§ã®ããã¹ã¿ã€ã«ã«ãŒã«ãèªåçã«é©çšããŸãããããã¯ãã³ãŒãã®ä¹±éããé²ããããŒãžæã®ç«¶åãæžããã確ç«ãããèŠåã«åŸãããšã§æ°ããããŒã ã¡ã³ããŒãã¹ã ãŒãºã«æ¥åã«æ £ããã®ã«åœ¹ç«ã¡ãŸããããã«ããããããžã§ã¯ãã«ããããè¯ãã³ãŒãããšã¯ã©ã®ãããªãã®ããšããå ±éèªèãçãŸããŸãã
æ§æãšã©ãŒãšåå®å šæ§
JavaScript ã®åçãªæ§è³ªã«ãããéçºäžã«æ€åºãããªãå®è¡æãšã©ãŒãçºçãããããªããŸããTypeScript ã¯éçåä»ãã«ãã£ãŠå®å šæ§ãåäžãããŸããããã®åã·ã¹ãã ã«ã¯äžè²«ããé©çšãå¿ èŠã§ããåãã§ãã¯ããŒã«ã¯ãã³ãŒããåæããç¡å¹ãªåã®äœ¿çšãã¢ãããŒã·ã§ã³ã®æ¬ èœãå®å šã§ãªããã£ã¹ããæ€åºããŸããäºææ§ã®ãªã颿°ã®åŒæ°ãæªå®çŸ©ã®ããããã£ãžã®ã¢ã¯ã»ã¹ãnull ãã§ãã¯ã®æ¬ èœãšãã£ãåé¡ããæ¬çªç°å¢ã§ã®é害ã«ã€ãªããåã«æ€åºããŸããããã«ãããããŒã ã¯å€§èŠæš¡ãª Node.js ããã¯ãšã³ãã§å ç¢ãã€äºæž¬å¯èœãªã³ãŒããç¶æã§ããŸãã
ã³ãŒãã®å質ãšä¿å®æ§
å€§èŠæš¡ãããžã§ã¯ãã§ã¯ãæéã®çµéãšãšãã«æè¡çè² åµãèç©ãããä¿å®ãé²åãå°é£ã«ãªãããšããããããŸããããããåé¡ãšããŠã¯ãé床ã«è€éãªé¢æ°ãæ·±ããã¹ããããã³ãŒã«ããã¯ãéè€ããããžãã¯ãæªäœ¿çšã®ã³ãŒããªã©ãæããããŸããéçè§£æããŒã«ã¯ãè€éããæž¬å®ãããããã³ãŒãããã©ã°ä»ãããéè€ãç¹å®ããããšã§ããããã®ãã¿ãŒã³ãæ€åºããã®ã«åœ¹ç«ã¡ãŸãããããã®åé¡ãæ©æã«è§£æ±ºããããšã§ãã³ãŒãããŒã¹ã®ç¡ç§©åºãªæ¡åŒµãé²ããé·æçãªå€æŽã³ã¹ããåæžããããŒã ã«ããã¢ããªã±ãŒã·ã§ã³ã®ãªãã¡ã¯ã¿ãªã³ã°ãšã¹ã±ãŒãªã³ã°ã容æã«ããŸãã
è«çãšã©ãŒãšå®è¡æãã°
ã¹ã¿ã€ã«ãå以å€ã«ããå€ãã®ãã°ã¯ããžãã¯ã®æ¬ é¥ããçããŸããäŸãã°ãæ¡ä»¶æã®èª€ããã«ãŒãå ã®äžã€ãããšã©ãŒãæå³ããªãéåæåäœãªã©ã§ããé«åºŠãªéçè§£æããŒã«ã¯ãå¶åŸ¡ãããŒãšããŒã¿ãããŒãã¢ãã«åããå°éäžèœãªã³ãŒããççŸããæ¡ä»¶ãnullåç §ãæ€åºã§ããŸãããã®ã¬ãã«ã®ãã§ãã¯ã¯ãNode.jsãµãŒãã¹ã®å®è¡æãšã©ãŒãé²ãã®ã«åœ¹ç«ã¡ãŸããåäžã®ãã°ãææãããªããšãAPIãããŠã³ããããéèŠãªããŒã¿ãç Žæãããããå¯èœæ§ãããããã§ãã
ã»ãã¥ãªãã£ã®è匱æ§
Node.jsã¢ããªã±ãŒã·ã§ã³ã¯ãå€ãã®å Žåãæ©å¯æ§ã®é«ããŠãŒã¶ãŒå ¥åãæ±ããããŒã¿ããŒã¹ãAPIãšçµ±åãããŸããéçè§£æããŒã«ã¯ãã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãå®å šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãããŒãã³ãŒããããã·ãŒã¯ã¬ãããšãã£ââãå±éºãªãã¿ãŒã³ãæ€åºã§ããŸããã»ãã¥ãªãã£éèŠã®è§£æããŒã«ã¯ããŒã¿ãããŒã远跡ããä¿¡é Œã§ããªãå ¥åãéèŠãªæäœã«å°éããåã«é©åã«ãµãã¿ã€ãºãããŠããããšã確èªããŸãããããã®ããŒã«ã¯ãå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãæ©æã«å°å ¥ããããšã§ãæåã¬ãã¥ãŒã®è² æ ã軜æžããã³ã³ãã©ã€ã¢ã³ã¹åºæºã®éµå®ãæ¯æŽãããŠãŒã¶ãŒãšããžãã¹ã®äž¡æ¹ãä¿è·ããŸãã
äŸåé¢ä¿ã®è匱æ§ãšãµãã©ã€ãã§ãŒã³ã®ãªã¹ã¯
Node.jsãããžã§ã¯ãã¯ãªãŒãã³ãœãŒã¹ããã±ãŒãžã«å€§ããäŸåããŠãããæ¢ç¥ã®è匱æ§ãæªæã®ããã³ãŒããã¡ã³ããã³ã¹ã®æŸæ£ãªã©ã«ãã£ãŠãªã¹ã¯ãçããå¯èœæ§ããããŸãã package.json ã®äžèãš package-lock.json ããŒã ãå€ãããã±ãŒãžãå®å
šã§ãªãããã±ãŒãžãæ€åºããå®å
šãªããŒãžã§ã³ãæšå¥šããçãããã€ã³ã¹ããŒã«ã¹ã¯ãªãããé£èªåãããã³ãŒããªã©ã®å±éºãªãã¿ãŒã³ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸããCIã«ãããäŸåé¢ä¿ã®èªåã¹ãã£ã³ã¯ããããã€åã«ãµãã©ã€ãã§ãŒã³æ»æã鲿¢ããŸãã
ã¢ãŒããã¯ãã£ã®äžè²«æ§ãšã¢ãžã¥ãŒã«å¢ç
Node.jsã¢ããªã±ãŒã·ã§ã³ãæé·ããã«ã€ããŠã管çäžèœãªè€éããåé¿ããããã«ãã¯ãªãŒã³ãªã¢ãŒããã¯ãã£ãç¶æããããšãäžå¯æ¬ ã«ãªããŸããå¢çã匷å¶ãããªãå Žåãéçºè ã¯ã¬ã€ã€ãŒéã«æå³ããªãäŸåé¢ä¿ãå°å ¥ããé¢å¿ã®åé¢ã«éåããå¯èœæ§ããããŸããéçè§£æããŒã«ã¯ãäŸåé¢ä¿ã°ã©ããèŠèŠåãã埪ç°ã€ã³ããŒããæ€åºããå®çŸ©ãããã¢ãžã¥ãŒã«å¢çã匷å¶ããããšãã§ããŸããããã«ãããããŒã ãã³ãŒãããŒã¹ãæ¡å€§ããŠããã¢ãŒããã¯ãã£ã«ãŒã«ã®äžè²«æ§ãç¶æãããŸãã
ããã©ãŒãã³ã¹ãšã¡ã¢ãªã®åé¡
ããã©ãŒãã³ã¹ãã°ã¯æ¬çªç°å¢å°å ¥åã«æ€åºããã®ãé£ããå ŽåãããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãšã€ã³ãã©ã³ã¹ãã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸããNode.jsã®ã·ã³ã°ã«ã¹ã¬ããã€ãã³ãã«ãŒãã¯ãããããã³ã°ã³ãŒã«ãšã¡ã¢ãªãªãŒã¯ã®åœ±é¿ãåããããã§ãããããã¡ã€ãªã³ã°ããŒã«ã¯ãéçºè ãã³ãŒããç¹°ãè¿ãå®è¡ããããŒã䜿çšéãèŠèŠåããããšã§ãé ããã¹ãç¹å®ããã¡ã¢ãªäœ¿çšéãç£èŠãããªãŒã¯ãæ€åºããã®ã«åœ¹ç«ã¡ãŸãããããã®åé¡ãæ©æã«çºèŠããããšã§ãããŒã ã¯å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ãå®å®ããå¿çæ§ã確ä¿ã§ããŸãã
éçºè ã®çç£æ§ãšèªååã®ç®æš
éçè§£æããŒã«ã¯ããšã©ãŒãææããã ãã§ãªããè¿ éãã€èªååããããã£ãŒãããã¯ãæäŸããããšã§éçºè ã®ã¯ãŒã¯ãããŒããµããŒãããŸããIDEçµ±åã«ãããã³ãŒãäœææã«åé¡ç¹ã匷調衚瀺ãããCIçµ±åã«ããåé¡ã®ããã³ãŒãã®ããŒãžã鲿¢ãããèªåä¿®æ£æ©èœã«ãããç¹°ãè¿ãã®ä¿®æ£ã«ãããæéãççž®ãããŸãããããã®ãã§ãã¯ãèªååããããšã§ãããŒã ã¯ã³ãŒãã¬ãã¥ãŒã«ãããŠãã¹ã¿ã€ã«ã®çްéšã«ãã ãã£ããã埮åŠãªãã°ãèŠéãããããããšãªããèšèšãšããžãã¹ããžãã¯ã«éäžã§ããããã«ãªããŸãã
éçåæã¯ãã°ãé²ãã ãã§ã¯ãªããèªä¿¡ãæã£ãŠæ¡åŒµã§ãããå®å šã§ä¿å®å¯èœã§é«å質㮠Node.js ããã³ TypeScript ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åºæ¬çãªæ¹æ³ã§ãã
Node.js ãæåã«å°ãå®å šãªéçè§£ææŠç¥
é«å質ã§å®å šãã€ã¹ã±ãŒã©ãã«ãªNode.jsããã³TypeScriptãããžã§ã¯ããç¶æããã«ã¯ãé©åãªéçè§£æããŒã«ã®éžæãäžå¯æ¬ ã§ããéçºããŒã ã®èŠæš¡ãæ¡å€§ããã³ãŒãããŒã¹ãè€éåããã«ã€ããŠãæåã¬ãã¥ãŒãåºæ¬çãªãªã³ãã£ã³ã°ã ãã«é Œãã ãã§ã¯ãã¯ãååã§ã¯ãããŸããã
ã³ãŒãã¹ã¿ã€ã«ãåå®å šæ§ãã»ãã¥ãªãã£ã¹ãã£ã³ãäŸåé¢ä¿ç£æ»ãã¢ãŒããã¯ãã£ã®é©çšãããã©ãŒãã³ã¹ãããã¡ã€ãªã³ã°ã®ããã®å°çšããŒã«ãçµã¿åãããããšã§ãéçºã©ã€ããµã€ã¯ã«å šäœã«ãããå æ¬çãªã«ãã¬ããžãå®çŸããŸãããã®éå±€åãããã¢ãããŒãã«ãããããŒã ã¯åŸ®åŠãªããžãã¯ãã°ãæ€åºããã»ãã¥ãªãã£è匱æ§ã鲿¢ããã¢ãŒããã¯ãã£ã®å¢çã匷åããä¿¡é Œæ§ã®é«ããœãããŠã§ã¢ãããèªä¿¡ãæã£ãŠæäŸã§ããããã«ãªããŸãã
åã ã®ããŒã«ã¯ç¹å®ã®åéã§åªããŠããŸãããããããç¶¿å¯ãªéçè§£ææŠç¥ã®äžç°ãšããŠçµ±åããããšã§ãçã®äŸ¡å€ãçãŸããŸãããã®ç©æ¥µçãªå質管çãžã®æè³ã¯ãæè¡çè² åµã軜æžããã³ã¹ãã®ãããæ¬çªç°å¢ã«ããããšã©ãŒãé²ãããããžã§ã¯ãã®ã¹ã±ãŒã«ã¢ããã«äŒŽãä¿å®æ§ãç¶æããŸãããããã§ãã·ã§ãã«ã§æ¬çªç°å¢ã¬ãã«ã®Node.jsãµãŒãã¹ã®æ§ç¯ã«å°œåããããŒã ã«ãšã£ãŠãéçè§£æã®åãæŽ»çšããããšã¯ãåãªããã¹ããã©ã¯ãã£ã¹ã§ã¯ãªããäžå¯æ¬ ãªèŠçŽ ã§ãã