ããã±ãŒãžãããŒãžã£ãŒã®ä»çµã¿
ããã±ãŒãžãããŒãžã£ãŒã£ãŠããèããã©ãçµå±äœãããŠããããã®ãªã®ïŒ
ã©ã€ãã©ãªãããŒã«ã®ãã€ã³ã¹ããŒã«ã»æŽæ°ã»åé€ããèªåã§ãã£ãŠãããä»çµã¿ã ããJavaScriptãªãnpmãPythonãªãPipãLinuxãªãaptãYumãRustãªãCargoãæåã ããæã¯ã©ã€ãã©ãªã®ZIPãæåã§èœãšããŠãã¹ãéããŠâŠã£ãŠããèŠè¡ã ã£ããã ãã©ãã³ãã³ãäžçºã§å šéšãã£ãŠãããããã«ãªã£ããã ã
ãã®ã©ã€ãã©ãªã£ãŠãã©ãããããŠã³ããŒãããŠãã®ïŒ
ãããã±ãŒãžã¬ãžã¹ããªãã£ãŠããäžå€®ãªããžããªããããã ãnpmãªãnpmã¬ãžã¹ããªïŒregistry.npmjs.orgïŒãPythonãªãPyPIãRustãªãCrates.ioã ããéçºè ãããã±ãŒãžãå ¬éãããšãäžçäžã®èª°ã§ã `npm install ããã±ãŒãžå` ã§ããŠã³ããŒãã§ããããã«ãªããã¬ãžã¹ããªã«ã¯æ°çŸäžã®ããã±ãŒãžãç»é²ãããŠããŠããŸãã«ãœãããŠã§ã¢ã®å·šå€§ãªå³æžé€šã ãã
ã©ã€ãã©ãªAãã©ã€ãã©ãªBã«äŸåããŠãŠãBãCã«äŸåããŠãŠâŠã¿ãããªã®ã£ãŠã©ã管çããŠãã®ïŒ
ããããäŸå解決ãã£ãŠããããã±ãŒãžãããŒãžã£ãŒã®æãéèŠãªä»äºã ããåããã±ãŒãžã¯ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ïŒsemverïŒã§ `^1.2.0` ãšã `~2.0.0` ã¿ããã«ããŒãžã§ã³å¶çŽãæå®ãããã ã`^` ã¯ãã¡ãžã£ãŒããŒãžã§ã³ãåããªãOKãã`~` ã¯ããã€ããŒããŒãžã§ã³ãŸã§åããªãOKããšããæå³ãããã±ãŒãžãããŒãžã£ãŒã¯ãã®å¶çŽããã¹ãŠæºããããŒãžã§ã³ã®çµã¿åãããæ¢ãåºããã ãã©ãAãBã®v1ããCãBã®v2ãèŠæ±ããŠãããããšè¡çªãèµ·ããããã®è§£æ±ºããšãŠãé£ãããã ã
ããŒãžã§ã³ã®çµã¿åãããæ±ºãŸã£ããããããã©ããã£ãŠåºå®ããã®ïŒ
ãããã¯ãã¡ã€ã«ãã£ãŠããä»çµã¿ãããããnpmãªã package-lock.jsonãYarnãªãYarn.lockãPythonãªãPipfile.lockã ããããã¯ãå®éã«ã€ã³ã¹ããŒã«ããããŒãžã§ã³ã®æ£ç¢ºãªäžèЧããèšé²ãããã¡ã€ã«ãªãã ãããã¯ãã¡ã€ã«ããªããšãåã package.json ã§ããã€ã³ã¹ããŒã«ããã¿ã€ãã³ã°ã«ãã£ãŠåŸ®åŠã«éãããŒãžã§ã³ãå ¥ã£ãŠãèªåã®ç°å¢ã§ã¯åãã®ã«CIã§ã¯å£ãããã£ãŠããšãèµ·ãããåçŸæ§ã®ãããã«ãã«ã¯ããã¯ãã¡ã€ã«ãäžå¯æ¬ ã ãã
npmã ãš node_modules ãããã巚倧ã«ãªãã£ãŠèããã©ãããã¯äœãèµ·ããŠãã®ïŒ
npmã¯v3以éããã©ããåïŒãã€ã¹ãã£ã³ã°ïŒãã£ãŠããæŠç¥ãæ¡ã£ãŠãŠãäŸåããã±ãŒãžãã§ããã ã node_modules ã®çŽäžã«äžŠã¹ããã ãã§ãããŒãžã§ã³è¡çªããããšãã¹ãããããããçµå±ãã©ã«ããèšãäžãããããã«åä»ãªã®ãããã¡ã³ãã äŸåãã§ãçŽæ¥ package.json ã«æžããŠãªãã®ã«ãã€ã¹ãã£ã³ã°ã®ãããã§ããŸããŸäœ¿ãã¡ããããã±ãŒãžããããã ãpnpmã¯ãã®åé¡ã解決ããããã«ãã³ã³ãã³ãã¢ãã¬ããµãã«ã¹ãã¬ãŒãžã£ãŠããä»çµã¿ã§å šããã±ãŒãžãäžç®æã«ä¿åããŠã·ã³ããªãã¯ãªã³ã¯ã§åç §ããããã«ããŠããã
ããã±ãŒãžã誰ã§ãå ¬éã§ãããªããã»ãã¥ãªãã£ã¯å€§äžå€«ãªã®ïŒ
å®ã¯ããã倧ããªèª²é¡ãªãã ããã¿ã€ãã¹ã¯ã¯ããã£ã³ã°ãã£ãŠããæ»æããã£ãŠãæåããã±ãŒãžã«äŒŒãååïŒäŸãã° lodash ã lodahs ã«ãããšãïŒã§æªæã®ããã³ãŒããä»èŸŒãã ããã±ãŒãžãå ¬éããæå£ã ãã`npm audit` ã GitHub ã® Dependabot ãæ¢ç¥ã®è匱æ§ãèªåæ€ç¥ããŠããããã©ãæªç¥ã®æªæããããã±ãŒãžã¯æ€åºãé£ãããäŸåã®äŸåã®äŸåâŠãšèŸ¿ããšæ°çŸããã±ãŒãžã«ãªãããšããã£ãŠããã®ã©ããäžã€ã§ãæ±æããããšãµãã©ã€ãã§ãŒã³æ»æãæç«ããŠããŸããã ã
ã¢ãã¬ãã£ãŠèããã©ãããã±ãŒãžç®¡çãšäœãé¢ä¿ããã®ïŒ
ã¢ãã¬ãã¯è€æ°ã®ããã±ãŒãžã1ã€ã®ãªããžããªã§ç®¡çããææ³ã§ãnpmãYarnã®ãã¯ãŒã¯ã¹ããŒã¹ãæ©èœã䜿ããã ãäŸãã°ããã³ããšã³ããšããã¯ãšã³ããšUIã©ã€ãã©ãªã1ã€ã®ãªããžããªã«å ¥ããŠãå ±éã®äŸåã¯1åã ãã€ã³ã¹ããŒã«ãããpnpmã¯ããã«é²ãã§ããŠãã³ã³ãã³ãã¢ãã¬ããµãã«ã¹ãã¬ãŒãžã®ãããã§ãã£ã¹ã¯äœ¿çšéãåçã«æžããããåãããã±ãŒãžã®åãããŒãžã§ã³ã¯ç©ççã«1ã€ããä¿åãããªããã ãGoogle ã Meta ã¿ãããªå€§äŒæ¥ãã¢ãã¬ããæ¡çšããŠãã®ã¯ãäŸå管çã®äžå åã倧ããªçç±ã ãã
ããã±ãŒãžãããŒãžã£ãŒã§éå»ã«å€§ããªäºä»¶ã£ãŠãã£ãã®ïŒ
2016幎ã®ãleft-padäºä»¶ãã¯äŒèª¬çã ãããã£ã11è¡ã®ã³ãŒãã®ããã±ãŒãžãnpmããåé€ãããã ãã§ãReactãBabelãæ°åã®ãããžã§ã¯ããäžæã«ãã«ãäžèœã«ãªã£ããã ãå€éšã¬ãžã¹ããªãžã®äŸåãããã«èãããäžçã«ç¥ããããäºä»¶ã ãããã£ãšæ·±å»ãªã®ã¯ãã¡ã³ãããŒã¢ã«ãŠã³ãä¹ã£åããã§ã2021幎ã®ua-parser-jsäºä»¶ã§ã¯æ£èŠããã±ãŒãžã«æå·é貚ãã€ããŒãæ³šå ¥ããããé±é1200äžããŠã³ããŒãã®ããã±ãŒãžã ã£ããã圱é¿ã¯ç倧ã ã£ããã
ããã¯ãã¡ã€ã«ã«ãæ»æãããã£ãŠæ¬åœïŒ
ãããã¯ãã¡ã€ã«ã€ã³ãžã§ã¯ã·ã§ã³ãã£ãŠããæ¯èŒçæ°ããæ»æææ³ããããã ãæ»æè ããã«ãªã¯ãšã¹ãã§ããã¯ãã¡ã€ã«ã ãããã£ããæžãæããŠãæ£èŠããã±ãŒãžã®ä»£ããã«æªæããããŒãžã§ã³ãæãããã«ãããããã¯ãã¡ã€ã«ã¯å·®åãèšå€§ã§ã¬ãã¥ãŒããã«ãããããæ°ã¥ãããã«ããŒãžãããããã察çãšããŠã¯ãCIã§ããã¯ãã¡ã€ã«ã®æŽåæ§ãã§ãã¯ãå ¥ãããã`npm ci`ïŒããã¯ãã¡ã€ã«ã«å³å¯ã«åŸãã€ã³ã¹ããŒã«ïŒã䜿ãããšã倧äºã ããããã±ãŒãžãããŒãžã£ãŒã¯äŸ¿å©ã ãã©ããä¿¡é Œã®é£éãã§æãç«ã£ãŠãããããã®éã®ã©ãã匱ãããç¥ã£ãŠããããšãéçºè ãšããŠå€§åã ãã