ãå³è§£ã§æ¯èŒãnpm vs yarn vs pnpm â JSããã±ãŒãžãããŒãžã£ãŒå¯Ÿæ±º
JavaScriptã®ãããžã§ã¯ãã§ãnpm installãã£ãŠããèŠããã©ãyarnãšãpnpmã£ãŠããã®ããããã ããäœãéãã®ïŒ
ã©ãããããã±ãŒãžãããŒãžã£ãŒããšãã£ãŠãJavaScriptã®ã©ã€ãã©ãªãããŠã³ããŒãã»ç®¡çããŠãããããŒã«ã ããnpmã¯Node.jsãã€ã³ã¹ããŒã«ãããšæåããä»ããŠããæšæºããŒã«ã§ãyarnãšpnpmã¯åŸããç»å Žãã代æ¿ããŒã«ãªãã ã
æšæºã®npmãããã®ã«ããªãã§ããããå¥ã®ããŒã«ãçãŸããã®ïŒ
npmã¯æãã€ã³ã¹ããŒã«ãé ãã£ããããŒãžã§ã³ã®åçŸæ§ã«åé¡ããã£ãããããã ãããã§FacebookïŒçŸMetaïŒã2016幎ã«yarnãäœã£ãŠã䞊åããŠã³ããŒããããã¯ãã¡ã€ã«ã§é«éåãšåçŸæ§ãå®çŸãããã ããnpmã察æããŠã©ãã©ãæ¹åãããŠãä»ã¯ããªãå·®ãçž®ãŸã£ãŠãããã©ãã
ãããpnpmã¯ã©ãããç¹åŸŽãããã®ïŒ
pnpmã®æå€§ã®ç¹åŸŽã¯ãã³ã³ãã³ãã¢ãã¬ããµãã«ã¹ãã¬ãŒãžããšããä»çµã¿ã ããæ®éã¯ãããžã§ã¯ãããšã«node_modulesã«ã©ã€ãã©ãªã®ã³ããŒã眮ããã ãã©ãpnpmã¯PCå šäœã§1ãæã«ã©ã€ãã©ãªãä¿åããŠãåãããžã§ã¯ãããã¯ãªã³ã¯ã貌ãã ããªãã ãã ãããã£ã¹ã¯å®¹éãå€§å¹ ã«ç¯çŽã§ãããã
ãªãã»ã©ãåãã©ã€ãã©ãªãäœåãããŠã³ããŒãããªããŠãããã ããé床ã¯ã©ããäžçªéãã®ïŒ
ãã³ãããŒã¯ã«ããããã©ãäžè¬çã«ã¯pnpmãæéã§ãyarnãããã«ç¶ããŠãnpmã3çªæãšããçµæãå€ããããã ãnpmãããŒãžã§ã³7以éã§ããªãé«éåãããŠããŠãå°èŠæš¡ãããžã§ã¯ããªãäœæå·®ã¯ã»ãšãã©ãªããã ããã£ãã·ã¥ãå¹ããŠãã2åç®ä»¥éã®ã€ã³ã¹ããŒã«ã ãšãpnpmã®éããç¹ã«éç«ã€ãã
ããã¯ãã¡ã€ã«ã£ãŠããã®ãçš®é¡ãéãã®ïŒ
ããã ããnpmã¯package-lock.jsonãyarnã¯yarn.lockãpnpmã¯pnpm-lock.yamlã䜿ããã ãã©ããããã®ãããžã§ã¯ãã§äœ¿ãã©ã€ãã©ãªã®æ£ç¢ºãªããŒãžã§ã³ããèšé²ãããã¡ã€ã«ã§ãããŒã ã¡ã³ããŒå šå¡ãåãããŒãžã§ã³ã䜿ããããã«ãã圹å²ãããããããã¯ãã¡ã€ã«ã¯å¿ ãGitã«ã³ãããããŠããã®ãéåã ãã
ã¢ãã¬ãã£ãŠãã倧ããªãããžã§ã¯ãæ§æã«ã察å¿ããŠããã®ïŒ
3ã€ãšãã¯ãŒã¯ã¹ããŒã¹æ©èœã§ã¢ãã¬ãã«å¯Ÿå¿ããŠããããnpmãšyarnã¯package.jsonã®workspacesãã£ãŒã«ãã§èšå®ããŠãpnpmã¯pnpm-workspace.yamlãšããå°çšãã¡ã€ã«ã§ç®¡çãããã ãå€§èŠæš¡ãªã¢ãã¬ãã ãšpnpmã®ãã£ã¹ã¯å¹çãšã€ã³ã¹ããŒã«é床ãç¹ã«æŽ»ããŠãããã
æè¿ãcorepackãã£ãŠããã®ãèããã©ãããã¯äœãªã®ïŒ
corepackã¯Node.jsæ¬äœã«å梱ãããŠããããŒã«ã§ããããžã§ã¯ãããšã«äœ¿ãããã±ãŒãžãããŒãžã£ãŒã®ããŒãžã§ã³ãèªåã§åãæ¿ããŠããããã ãpackage.jsonã«packageManagerãã£ãŒã«ããæžããŠãããšãããã®ãããžã§ã¯ãã¯pnpm 9.xãããã£ã¡ã¯yarn 4.xãã¿ããã«èªåã§åãããŠãããããããŒã éçºã§ã¯ç¹ã«äŸ¿å©ã ãã
ãžãã䟿å©ã ãããšããã§pnpmã®ã峿 Œãªnode_modulesãã£ãŠäœãããã®ïŒ
ãã質åã ããnpmãyarnã¯ããã©ããããªnode_modulesãäœããããpackage.jsonã«æžããŠããªãã©ã€ãã©ãªã§ãå¶ç¶ã¢ã¯ã»ã¹ã§ããŠããŸãããšããããã ããããããã¡ã³ãã ãã£ãã³ãã³ã·ãŒïŒå¹œéäŸåïŒããšåŒã¶ãã ãã©ãpnpmã¯ã·ã³ããªãã¯ãªã³ã¯ã®æ§é ã§å³å¯ã«ã¢ã¯ã»ã¹ãå¶éããããããã®åé¡ãèµ·ããªããã ããæç€ºçã«äŸåãæžããªããšäœ¿ããªãã®ã§ãäŸåé¢ä¿ãã¯ãªãŒã³ã«ä¿ããããã ã
幜éäŸåã£ãŠæããâŠãæè¿ã¯Bunã£ãŠããæ°ããã®ãåºãŠããã£ãŠèãããã©ãã©ããªã®ïŒ
Bunã¯ã©ã³ã¿ã€ã ãšããã±ãŒãžãããŒãžã£ãŒãäžäœåããæ°èããŒã«ã§ãã€ã³ã¹ããŒã«é床ã¯pnpmããããã«éããšèšãããŠãããããã ããŸã ãšã³ã·ã¹ãã ã®æç床ã§ã¯npmã»yarnã»pnpmã«åã°ãªãéšåããããããæ¬çªãããžã§ã¯ãã§ã¯æ éã«éžã¶å¿ èŠããããã
çµå±ãåå¿è ã¯ã©ãã䜿ãã°ããã®ïŒ
è¿·ã£ãããŸãã¯npmã§å§ããã®ãäžçªç¡é£ã ããNode.jsã«ä»ããŠãããã远å ã€ã³ã¹ããŒã«äžèŠã ããããã¥ã¡ã³ããæ å ±éãäžçªå€ãããããæ £ããŠããŠãã£ã¹ã¯å®¹éãéåºŠãæ°ã«ãªã£ããpnpmã詊ããŠã¿ããšããããããŒã ã§éçºãããªãããããžã§ã¯ãã§çµ±äžãããŠãããã®ã«åãããã®ã倧äºã ãã