Y.Subbotnik Proã§ã®è¬æŒã§ããæšæºçãªææ°ãããžã§ã¯ããã®çµã¿ç«ãŠãšã¢ãŒããã¯ãã£ã§äœãã©ã®ããã«çµäºãããããããŠã©ã®ãããªçµæãåŸãããããæãåºããŸããã
-ãã®1幎åã®éãç§ã¯Serpã¢ãŒããã¯ãã£ããŒã ã§åããŠããŸããããã§ãReactãšTypeScriptã§æ°ããã³ãŒãã®ã©ã³ã¿ã€ã ãšã¢ã»ã³ããªãéçºããŸãã
ãã®è©±ã§åãäžããç§ãã¡ã®å ±éã®çã¿ã«ã€ããŠè©±ããŸããããReactã§å°ããªãããžã§ã¯ããäœæããå Žåã¯ã3æåãšåŒã°ããæšæºã®ããŒã«ã»ããïŒCRAïŒã䜿çšããå¿ èŠããããŸããããã«ã¯ããã«ãã¹ã¯ãªããããã¹ããå®è¡ããããã®ã¹ã¯ãªãããéçºç°å¢ã®ã»ããã¢ãããå«ãŸãããã¹ãŠããã§ã«æ¬çªç°å¢ã§å®è¡ãããŠããŸãããã¹ãŠã¯NPMã¹ã¯ãªãããä»ããŠéåžžã«ç°¡åã«å®è¡ãããReactã®çµéšããã人ãªã誰ã§ãç¥ã£ãŠããã§ãããã
ãããããããžã§ã¯ãã倧ãããªããã³ãŒããå€ããéçºè ãå€ãã翻蚳ãªã©ã®ãããã¯ã·ã§ã³æ©èœã衚瀺ãããCreate ReactAppãäœãç¥ããªããšããŸãããŸãã¯ãããçš®ã®è€éãªCI / CDãã€ãã©ã€ã³ããããŸããæ¬¡ã«ãCreate React AppãããŒã¹ãšããŠäœ¿çšããç¬èªã®ãããžã§ã¯ãã«åãããŠã«ã¹ã¿ãã€ãºããããšãæ€èšãå§ããŸãããããããã®æåºã®èåŸã§ãããã§äœãåŸ ã£ãŠããã®ãã¯å®å šã«ã¯æããã§ã¯ãããŸãããã€ãžã§ã¯ããããšéåžžã«å±éºãªæäœã ãšèšãããã®ã§ãå ã«æ»ããªããªã©ããšãŠãæãã§ããã€ãžã§ã¯ããæŒãã人ã¯ãå€ãã®èšå®ãããã«ã¹ããŒãããããšãç¥ã£ãŠããŸãããããçè§£ããå¿ èŠããããŸããäžè¬çã«ããªã¹ã¯ã¯å€ããäœããã¹ããæç¢ºã§ã¯ãããŸããã
ã©ãã ã£ããã話ãããŸãããŸããç§ãã¡ã®ãããžã§ã¯ãã«ã€ããŠãç§ãã¡ã®ããã³ããšã³ããããžã§ã¯ãã¯ãSerpãæ€çŽ¢ãšã³ãžã³ã®çµæããŒãžãYandexã®æ€çŽ¢çµæããŒãžã§ãã 2018幎以éãReactãšTypeScriptã¯ç§»åããŠããŸãããæšå¹ŽãçŽ12ã¡ã¬ãã€ãã®ã³ãŒãããã§ã«Serpaã«æžã蟌ãŸããŠããŸããããã€ãã®ã¹ã¿ã€ã«ãšå€ãã®TSããã³SCSSã³ãŒãããããŸããåãã«ã2018幎ã«ãç§ãæžããŠããªãã£ããéåžžã«å°ãªããéåžžã«æ¥æ¿ãªãžã£ã³ãããã£ãæ°ããããŸããã
ãããããããã®ã³ãŒãã§ãããã©ãããèŠãŠã¿ãŸãããã webpack-4ã®ãœãŒã¹ã³ãŒããšæ¯èŒãããšãwebpack-4ã®ã³ãŒãã¯ã¯ããã«å°ãªããªã£ãŠããŸãã TypeScriptãªããžããªã§ããã³ãŒããå°ãªããªã£ãŠããŸãã
ããããvs-codeã«ã¯ããå€ãã®ã³ãŒããããã30ã¡ã¬ãã€ããã®TypeScriptã³ãŒããåããåªãããããžã§ã¯ãã§ããã¯ãããããTypeScriptã§æžãããŠãããSickleã¯å°ããããã§ãã 2018幎ã«éå§ãã2019幎ã«ã¯12ã¡ã¬ãã€ããããã70人ã®éçºè ãäœæ¥ããé±ã«100åã®ãã«ãªã¯ãšã¹ããè¡ããŸããã 1幎ã§ã圌ãã¯ãã®ãµã€ãºã3åã«ããæ£ç¢ºã«30ã¡ã¬ãã€ããåãåããŸãããä»ææž¬å®ãè¡ããŸãããçŸåšãåèš30ã¡ã¬ãã€ãã®ã³ãŒãããããããã¯ãã§ã«vs-codeãããå€ããªã£ãŠããŸãã
ã»ãŒåãã§ãããå°ãå€ãã§ãããããç§ãã¡ã®ãããžã§ã¯ãã®é åºã§ãã
ãããŠãæåã«ã€ãžã§ã¯ããå®è¡ããŸãããããã¯ã倧éã®ã³ãŒãããããCreate ReactAppã«ããåææ§æãæ©èœããªãå¯èœæ§ãé«ãããšãããã«ããã£ãããã§ããããããåãæ¹æ³ã§Create ReactAppããå§ããŸããã
ãããç©èªã®å 容ã§ããç§ãã¡ã®çµéšãå ±æããããšæããŸããYandexSerpãé©åã«æ©èœãããããã«CreateReactAppã§äœãããªããã°ãªããªãã£ããã説æããŸããã€ãŸãããã©ãŠã¶ã§ã®èªã¿èŸŒã¿ãšåæåãé«éåããæ¹æ³ããã«ãã®é床ãèœãšããªãããã«ããæ¹æ³ãããã«äœ¿çšããèšå®ããã©ã°ã€ã³ããã®ä»ã®ãã®ã§ãããããŠåœç¶ãç§ãã¡ãéæããçµæã¯æåŸã«æ¥ãã§ãããã
ã©ã®ããã«æšè«ããŸãããïŒåœåã®ã¢ã€ãã¢ã¯ãSickleã¯éåžžã«é«éã«ã¬ã³ããªã³ã°ããå¿ èŠãããããŒãžã§ãããšãããã®ã§ãããããã¯ãåºæ¬çã«éåžžã«åçŽãªããã¹ãçµæãããããµãŒããŒåŽã®ãã³ãã¬ãŒããå¿ èŠã§ããããã§ãããããé«éã¬ã³ããªã³ã°ãå®çŸããå¯äžã®æ¹æ³ã ããã§ããã€ãŸããã¯ã©ã€ã¢ã³ãã§äœããåæåãããåã§ããäœããæç»ããå¿ èŠããããŸãã
åæã«ãäœåãªãã®ãããŒããããåæåãé«éã«ãªãããã«ãã¹ã¿ãã£ãã¯ã®æå°ãµã€ãºãäœæãããã£ãã®ã§ããã€ãŸããæåã®ã¬ã³ããªã³ã°ãé«éã«ããåæåãé«éã«ããå¿ èŠããããŸãã
Create React Appã¯äœãæäŸããŸããïŒæ®å¿µãªããããµãŒããŒã®ã¬ã³ããªã³ã°ã«ã€ããŠã¯äœãæäŸãããŠããŸããã
Create ReactAppã§ã¯ãµãŒããŒã¬ã³ããªã³ã°ããµããŒããããŠããªãããšãçŽæ¥ç€ºããŠããŸããããã«ãCreate React Appã«ã¯ãã¢ããªã±ãŒã·ã§ã³å šäœã«å¯ŸããŠ1ã€ã®ãšã³ããªãããããŸãããã€ãŸããããã©ã«ãã§ã¯ãå€çš®å€æ§ãªããŒãžãã¹ãŠã«å¯ŸããŠ1ã€ã®å€§ããªãã³ãã«ãåéãããŸããããã¯ãããããããŸãã 30ã¡ã¬ãã€ãã®ãã¡ãçŽååãTSã¿ã€ãã§ããããšã¯æããã§ãããããã§ãå€ãã®ã³ãŒããçŽæ¥ãã©ãŠã¶ãŒã«éãããŸãã
åæã«ãCreate React Appã«ã¯ããã€ãã®é©åãªèšå®ããããŸããããšãã°ãwebpackã©ã³ã¿ã€ã ã¯å¥ã®ãã£ã³ã¯ã§ããã«ç§»åããŸããåå¥ã«ããŒããããéåžžã¯å€æŽãããªãããããã£ãã·ã¥ã§ããŸãã
ããã«ãnode_modulesã®ã¢ãžã¥ãŒã«ãåå¥ã®ãã£ã³ã¯ã«åéãããŸãããŸãã倿Žãããããšã¯ãã£ãã«ãªãããããã©ãŠã¶ã«ãã£ãŠããã£ãã·ã¥ãããŸããããã¯ãã°ãããããšã§ããä¿åããå¿ èŠããããŸãããããåæã«ãCreate ReactAppã®ç¿»èš³ã«ã€ããŠã¯äœããããŸããã
ç§ãã¡ã®å Žåããã©ãããã©ãŒã ã®æ©èœã®ãªã¹ããã©ã®ããã«èŠãããã«ã€ããŠã®ãªã¹ãããŸãšããŸãããããŸããå ã»ã©èšã£ãããã«ãååãã®ã¬ã³ããªã³ã°ã§ãã°ããã¬ã³ããªã³ã°ããå¿ èŠããããŸããããã«ãæ€çŽ¢çµæããšã«åå¥ã®ãšã³ããªãã¡ã€ã«ãå¿ èŠã§ãã
ããšãã°ãSerpaã«èšç®æ©ãããå Žåãèšç®æ©ä»ãã®ãã³ãã«ãé ä¿¡ããå¿ èŠãããããã©ã³ã¹ã¬ãŒã¿ä»ãã®ãã³ãã«ãè¿ éã«é ä¿¡ããå¿ èŠã¯ãããŸãããããããã¹ãŠã1ã€ã®å€§ããªãã³ãã«ã«éããããŠããå Žåããããã®ååãç¹å®ã®åé¡ã«é¢ä¿ããŠããªããŠãããã¹ãŠãåžžã«å®è¡ãããŸãã
ããã«ããã§ã«ããŒããããŠãããã®ãããŒãããªãããã«ãå ±éã®ã¢ãžã¥ãŒã«ãå¥ã ã®ãã£ã³ã¯ã§æäŸããããšæããŸãã
ãããã·ãã¯ã«ã®å¥ã®äŸã§ããèšç®æ©ããããèšç®æ©ãã³ãã«ããããŸããäžè¬çãªã³ã³ããŒãã³ãããããŸãããããã¯ã¯ã©ã€ã¢ã³ãã«é ä¿¡ãããŸããããã®åŸãå¥ã®æ©èœãç»å ŽããŸãã-ãããããããã®ãã³ãã«ãé転ããä»ã®äžè¬çãªã³ã³ããŒãã³ãããããã§ã«é ä¿¡ãããŠãããã®ãé€ãããã®ãé転ããŸããã
å ±éã®ã³ã³ããŒãã³ããåå¥ã«åéãããŠããå Žåãæé©åã®çµ¶å¥œã®æ©äŒããããå¿ èŠãªãã®ã ããæäŸãããdiffã ããæäŸãããŸãããããŠãåžžã«ããŒãžäžã«ããæã人æ°ã®ããã¢ãžã¥ãŒã«ãããšãã°ããã®ã€ã³ãã©ã¹ãã©ã¯ãã£å šäœã§åžžã«å¿ èŠãšãããWebpackã©ã³ã¿ã€ã ã¯ãåžžã«ããŒãããå¿ èŠããããŸãã
ãããã£ãŠãå¥ã®ãã£ã³ã¯ã«åéããããšã¯çã«ããªã£ãŠããŸããã€ãŸãããããã®äžè¬çãªã³ã³ããŒãã³ãã¯ãåžžã«å¿ èŠãšã¯éããªãã³ã³ããŒãã³ããšãåžžã«å¿ èŠãšãããã³ã³ããŒãã³ãã«åé¡ããããšãã§ããŸãããã¿ã³/ãªã³ã¯ãªã©ã®ãããã®äžè¬çãªã³ã³ããŒãã³ãã¯ããŸãé »ç¹ã«å€æŽãããªãããããããã¯å¥ã®ãã¡ã€ã«ã«åéããŠåžžã«ããŒããããã£ãã·ã¥ããããšãã§ããŸããäžè¬ã«ããã£ãã·ã¥ããå©çãåŸãããšãã§ããŸãã
åæã«ã翻蚳ã®çµã¿ç«ãŠã«ã€ããŠæ±ºå®ãäžãå¿ èŠããããŸãã
ããã§ã¯ãã¹ãŠãååã«æç¢ºã§ããã¿ãŒããã·ã¥ã»ã«ãã«è¡ãå Žåãããã¯äœåãªã³ãŒãã§ããããããã«ã³èªã®ç¿»èš³ã®ã¿ãããŠã³ããŒãããä»ã®ãã¹ãŠã®ç¿»èš³ã¯ããŠã³ããŒãããªãããã«ããŸãã
ç§ãã¡ã¯äœãããŸãããïŒãŸãããµãŒããŒã³ãŒãã«ã€ããŠã§ããããã«é¢ããŠã¯ãçç£ã®ããã®æ§ç¯ãšéçºã®ããã®ç«ã¡äžããšãã2ã€ã®æ¹åæ§ããããŸãã
äžè¬ã«ãæåã«TypeScriptã«ã€ããŠãã®ãããªå¥åã®ã¹ããŒãã¡ã³ããäœæããå¿ èŠããããŸããéåžžããããžã§ã¯ãã§ã¯ãç§ãèããããã«ãbabelã䜿çšããŸããããããæ°ããTypeScriptæ©èœãããæ©ãå°éãããšä¿¡ããŠãããããããã«æšæºã®TypeScriptã³ã³ãã€ã©ã䜿çšããããšã«ããŸããããããã£ãŠãç§ãã¡ã¯ããã«babelãæŸæ£ããtscã䜿çšããŸããã
ãããã£ãŠãããã¯çŸåšã®ã³ãŒããµã€ãºã§ãã30ã¡ã¬ãã€ãã§ãã©ãããããäžã§3åã§ã³ã³ãã€ã«ãããŸããããªãã®ãåãã§ãã¯ãæåŠããåã³ã³ãã€ã«äžã«tscãã©ãŒã¯ã䜿çšããå ŽåïŒæ®å¿µãªãããTSCã«ã¯åãã§ãã¯ãç¡å¹ã«ããèšå®ããªãããããã©ãŒã¯ããå¿ èŠããããŸããïŒãæéã2åç¯çŽã§ããŸããã³ãŒãã®ã³ã³ãã€ã«ã«ã¯1ååããããããŸããã
ã³ã³ãã€ã«æã®åãã§ãã¯ãã§ããªãã®ã¯ãªãã§ããïŒããšãã°ãäºåã³ãããããã¯ã§ãããããã§ãã¯ã§ããããã§ããåãã§ãã¯ã®ã¿ãå®è¡ãããªã³ã¿ãŒãäœæãããšãåãã§ãã¯ãªãã§ã¢ã»ã³ããªèªäœãå®è¡ã§ããŸããç§ãã¡ã¯ãã®æ±ºå®ãããŸããã
éçºã§ã©ã®ããã«å®è¡ããŸããïŒ Devã¯éåžžãwebpackãšäžç·ã«babelã®ãã³ãã«ã䜿çšããŸãããts-nodeã®ãããªããŒã«ã䜿çšããŸãã
ããã¯éåžžã«ã·ã³ãã«ãªããŒã«ã§ãããããå®è¡ããã«ã¯ããã®ãããªrequireïŒts-nodeïŒãå ¥åJavaScriptãã¡ã€ã«ã«æžã蟌ãã ãã§ååã§ãããããã»ã¹ã®åŸåã§TSã³ãŒãå šäœã®require-sããªãŒããŒã©ã€ãããŸãããŸããTSã³ãŒããéäžã§ãã®ããã»ã¹ã«ããŒãããããšããã®å Žã§ã³ã³ãã€ã«ãããŸãããšãŠãç°¡åãªããšã§ãã
åœç¶ããã®ããã»ã¹ã§ãã¡ã€ã«ããŸã ããŒããããŠããªãå Žåã¯ããã¡ã€ã«ãåã³ã³ãã€ã«ããå¿ èŠããããšããäºå®ã«é¢é£ããå°ããªãªãŒããŒãããããããŸãããããå®éã«ã¯ããã®ãªãŒããŒãããã¯æå°éã§ãããäžè¬çã«èš±å®¹ãããŸãã
ããã«ããã®ãªã¹ãã«ã¯ããã«è峿·±ãè¡ãããã€ããããŸãã 1ã€ç®ã¯ããµãŒããŒåŽã®ãã³ãã¬ãŒãäœæã«ã¹ã¿ã€ã«ãå¿ èŠãªããããã¹ã¿ã€ã«ãç¡èŠããããšã§ãã HTMLãååŸããã ãã§æžã¿ãŸãããããã£ãŠããã®ãããªã¢ãžã¥ãŒã«ïŒignore-stylesïŒã䜿çšããŸããããã«ãts-nodeã®äœæ¥ãé«éåããããã«ãTSCã§è¡ã£ãã®ãšãŸã£ããåãããã«åãã§ãã¯ïŒãã©ã³ã¹ãã€ã«ã®ã¿ïŒããªãã«ããŸãã
ã¯ã©ã€ã¢ã³ãã³ãŒãã«ç§»ããŸãã Webpackã§tsã³ãŒããåéããã«ã¯ã©ãããã°ããã§ããïŒ ts-loaderãštranspileOnlyãªãã·ã§ã³ãã€ãŸãã»ãŒåããã³ãã«ã䜿çšããŸãã babel-loaderã®ä»£ããã«ãå€ããå°ãªããæšæºã®ts-loaderããã³transpileOnlyããŒã«ã
æ®å¿µãªãããã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã¯ts-loaderã§ã¯æ©èœããŸãããã€ãŸããçµå±ã®ãšãããts-loaderã¯å®å šã«æšæºçãªããŒã«ã§ã¯ãªããTypeScriptãå®è¡ããã®ãšåã人ã«ãã£ãŠäœæããããã®ã§ããããŸããããããã£ãŠããã¹ãŠã®ã³ã³ãã€ã©ãªãã·ã§ã³ãããã§ãµããŒããããŠããããã§ã¯ãããŸãããããšãã°ãã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã¯ãµããŒããããŠããŸããã
ã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ãã¯ãéçºã«éåžžã«åœ¹ç«ã€å¯èœæ§ã®ãããã®ã®1ã€ã§ããåæ§ã«ããããã®ãã£ãã·ã¥ããã€ãã©ã€ã³ã«è¿œå ã§ããŸããäžè¬ã«ã倿Žãå°ããå Žåããã¹ãŠã®TypeScriptãå®å šã«åã³ã³ãã€ã«ããããšã¯ã§ããã倿Žããããã®ã ããåã³ã³ãã€ã«ã§ããŸããããã¯éåžžã«å¹æçã«æ©èœããŸãã
äžè¬ã«ãã€ã³ã¯ãªã¡ã³ã¿ã«ãã«ããªãã§è¡ãã«ã¯ããã£ãã·ã¥ããŒããŒã䜿çšããŸããããã¯webpackã®æšæºãœãªã¥ãŒã·ã§ã³ã§ãããã¹ãŠãéåžžã«æç¢ºã§ãã TypeScriptã³ãŒããWebpackãã«ãäžã«æ¥ç¶ã詊ã¿ããšãã³ã³ãã€ã©ã«ãã£ãŠåŠçããããã£ãã·ã¥ã«è¿œå ãããŸããæ¬¡ã«ããœãŒã¹ãã¡ã€ã«ã«å€æŽããªãå Žåããã£ãã·ã¥ããŒããŒã¯ts-loaderãå®è¡ããããã£ãã·ã¥ããååŸããŸããã€ãŸããããã§ã¯ãã¹ãŠãéåžžã«åçŽã§ãã
äœã«ã§ã䜿çšã§ããŸãããç¹ã«TypeScriptã®å Žåãts-loaderã¯ããªãéãããŒããŒã§ãããããããã§ã¯ãã£ãã·ã¥ããŒããŒãéåžžã«é©ããŠãããããããã¯äŸ¿å©ã§ãã
ãã ãããã£ãã·ã¥ããŒããŒã«ã¯1ã€ã®æ¬ ç¹ããããŸããããã¯ããã¡ã€ã«ã®å€æŽæã«æ©èœããŸããããããœãŒã¹ã³ãŒãã®æç²ã§ãããããŠãããã¯ç§ãã¡ã«ãšã£ãŠã¯ããŸããããŸããã§ããã
ãã€ãã©ã€ã³ã§ãã£ãã·ã¥ããŒããŒã䜿çšããã®ã«é©ããŠããªãããããã¡ã€ã«ã³ã³ãã³ãã®ããã·ã¥ã«åºã¥ããŠãã£ãã·ã¥ã¢ã«ãŽãªãºã ããã©ãŒã¯ããŠããçŽãå¿ èŠããããŸããã
å®éãè€æ°ã®ãã«ãªã¯ãšã¹ãéã§ãã«ãçµæãåå©çšããå Žåããã®ã¡ã«ããºã ã¯æ©èœããŸããããªããªããããšãã°ãã¢ã»ã³ããªããã£ãšåã ã£ãå Žåã§ããæ¬¡ã«ãåååéããããã¡ã€ã«ã倿Žããªãæ°ãããã«ãªã¯ãšã¹ããäœæããããšããŸãã
ãããã圌ãã®mtimeã¯ãã£ãšæè¿ã®ãã®ã§ãããããã£ãŠããã£ãã·ã¥ããŒããŒã¯ãã¡ã€ã«ãæŽæ°ããããšèŠãªããŸãããããã¯å€æŽæéã§ã¯ãªããã§ãã¯ã¢ãŠãæéã§ãããããå®éã«ã¯ããã§ã¯ãããŸããããããŠããã®ããã«ãããšãã³ã³ãã³ãã®ããã·ã¥ãæ¯èŒãããŸããå 容ã¯å€æŽãããŠããããå€ãçµæã䜿çšãããŸãã
ããã§ãbabelã䜿çšããŠããå Žåãbabel-loaderã«ã¯ããã©ã«ãã§å éšã«ãã£ãã·ã¥ã¡ã«ããºã ããããmtimeã§ã¯ãªããã³ã³ãã³ãããã®ããã·ã¥ã§ãã§ã«äœæãããŠããããšã«æ³šæããŠãã ããããããã£ãŠãå€åç§ãã¡ã¯ããå°ãèããŠãããã«ã«ç®ãåããã§ãããã
次ã«ããã£ã³ã¯ã®ã¢ã»ã³ããªã«ã€ããŠèª¬æããŸãã
webpackãããã©ã«ãã§äœããããã«ã€ããŠå°ã話ããŸããããå ¥åã€ã³ããã¯ã¹ãã¡ã€ã«ãããå Žåãã³ã³ããŒãã³ãã¯ããã«æ¥ç¶ãããŠããŸãããŸããã³ã³ããŒãã³ããªã©ããããŸããããã«ãReactãReact-domãlodashãªã©ã®å ±éã¢ãžã¥ãŒã«ãæ¥ç¶ãããŠããŸãã
ãããã£ãŠãããã©ã«ãã§ã¯ã誰ããç¥ã£ãŠããããã«ãwebpackã¯ã念ã®ããã«ç¹°ãè¿ããŸããããã¹ãŠã®äŸåé¢ä¿ã1ã€ã®å€§ããªãã³ãã«ã«åéããŸãã
åæã«ãnode_modulesãä»ããŠæ¥ç¶ãããŠãããã¹ãŠã®ãã®ã¯ãå€éšãšããŠã¢ã»ã³ãã«ããããåå¥ã®ã¹ã¯ãªããã§ããŒãããããwebpackã§ç¹å¥ãªoptimization.splitChunksèšå®ãèšå®ããããšã§åå¥ã®ãã£ã³ã¯ã«ãŸãšããããšãã§ããŸããç§ã®æèŠã§ã¯ãããã©ã«ãã§ãããããã®ãã³ããŒã¢ãžã¥ãŒã«ã¯å¥ã®ãã£ã³ã¯ã«åéãããŸãã CRAã«ã¯ããã®splitChunksã®ãããã«èª¿æŽãããããŒãžã§ã³ããããŸãã
runtimeChunksãšã¯äœããèŠããŠãããŸããããç§ã¯åœŒã«èšåãããããã¯ãã¯ã©ã€ã¢ã³ãã§ã®ã¢ãžã¥ã©ãŒã·ã¹ãã ã®åäœãä¿èšŒããã¹ã¯ãªãããšé¢æ°ãããŒããããã®ãããªãããããŒããå«ãçš®é¡ã®ã³ãŒãã§ãããããŠãå®éã«ã¯ã¢ãžã¥ãŒã«ãå«ãé åïŒãŸãã¯ãã£ãã·ã¥ïŒã
ãªãç§ã¯ããã«ã€ããŠããªãã«è©±ããŸãããïŒ Create React Appã¯ããã®runtimeChunksãå¥ã®ãã¡ã€ã«ã«åéããèšå®ãåŒãç¶ã䜿çšããããã§ãããã®ãã¡ã€ã«ã¯ãå ã®æ£åžžãªãã³ãã«ã§ã¯ãªããå¥ã®ãã¡ã€ã«ã«è²Œãä»ããããŸãããã©ãŠã¶ãªã©ã«ãã£ãã·ã¥ã§ããŸãã
ã§ã¯ãCreate React Appã§äœãæ©èœããªãã®ã§ããããïŒ
ããã©ã«ãã§ããã§äœ¿çšããããã®splitChunksã¯ãnode_modulesã®ã¿ãåå¥ã®ãã£ã³ã¯ã«åéããŸããããããå®éã«ã¯ããããžã§ã¯ãã¬ãã«ã«ããå ±éã®ã³ã³ããŒãã³ããå ±éã®ã©ã€ãã©ãªããããŸãããŸããããããã»ãšãã©å€æŽãããªãã®ã§ãããããå¥ã ã®ãã£ã³ã¯ã«åéããããšæããŸãã node_modulesã«ãããã®ã ãã«å¶éããã®ã¯ãªãã§ããïŒ
ããã«ãruntimeChunksã«é¢ããŠã¯ãæåã«èª¬æããããã«ãã©ã³ã¿ã€ã èªäœã«å ããŠãåžžã«å¿ èŠãªåããã£ã³ã¯ã«ã¢ãžã¥ãŒã«ãåéããããšãçŽ æŽããããšèšããŸããåããã¿ã³/ãªã³ã¯ã Serpã«ã¯åžžã«ãªã³ã¯ããããŸãããã€ããªã³ã¯ãéãããã§ããã€ãŸããWebpackã©ã³ã¿ã€ã ã ãã§ãªããããã€ãã®éåžžã«äººæ°ã®ããã³ã³ããŒãã³ãããããŸãã
ããã¯CreateReactAppã«ã¯ãããŸãããã©ããã£ãŠãã£ãã®ïŒ
splitChunksã埮調æŽããŠããã¹ãŠã®æšæºåäœãç¡å¹ã«ããnode_modulesã«ãããã®ã ãã§ãªãããããžã§ã¯ãã®å ±éã³ã³ããŒãã³ããšãããžã§ã¯ãã®ã©ã€ãã©ãªã³ãŒããsrc / libã«ãããã®ãå ±éã®ã³ãŒãã«åéããããã«äŸé ŒããŸããã ãsrc /ã³ã³ããŒãã³ãã«å«ãŸããŠããŸãã
ããã«ãåçã€ã³ããŒããä»ããŠæ¥ç¶ãããŠãããã®ãšãéåžžã¯éåæãã£ã³ã¯ãšåŒã°ãããã®ãå¥ã ã®ãã£ã³ã¯ã«åéããŸãã
ããã§ã¯ã2ã€ã®ãªãã·ã§ã³ã«æ³šæãæãå¿ èŠããããŸãã 1ã€ã¯åŒ·å¶ã§ããã1ã€ã¯åæã§ããäžè¬ã«ãenforceã¯éåžžã«äŸ¿å©ãªèšå®ã§ãããããsplitChunksã®è€éãªãã¥ãŒãªã¹ãã£ãã¯ãç¡å¹ã«ããŸãã
ããã©ã«ãã§ã¯ãsplitChunksã¯ãèŠæ±ãããŠããã¢ãžã¥ãŒã«ã®éãçè§£ãããããã®çµ±èšãåå²ã§èæ ®ã«å ¥ããããšããŸããããããããã«åŸãããšã¯å°é£ã§ãããã¢ãžã¥ãŒã«ã®éèŠã¯æã å€åããå¯èœæ§ããããã¢ãžã¥ãŒã«ã¯ãã£ã³ã¯éã§ããžã£ã³ããããŸããäžè¬çãªãã£ã³ã¯ããæ©èœãã³ãã«ãŸã§ããããŠãã®éãã€ãŸããããã¯éåžžã«äºæž¬äžå¯èœãªåäœã§ãããããç¡å¹ã«ããŸãã
ã€ãŸãããã¹ããã£ãŒã«ãã®æ¡ä»¶ãæºãããã¹ãŠã®ãã®ãåžžã«èšããå ±éã®ãã£ã³ã¯ã«å ¥ããŸãããã¥ãŒãªã¹ãã£ãã¯ã¯å¿ èŠãããŸããã
ãããããã£ã³ã¯ïŒåæãè¯ãããšã§ãããããã®åæã¢ãžã¥ãŒã«ãã€ãŸãåçã€ã³ããŒããä»ããŠæ¥ç¶ãããã¢ãžã¥ãŒã«ã¯ãããŸããŸãªå Žæã§ããŸããŸãªæ¹æ³ã§æ¥ç¶ã§ãããšããäºå®ã«ã€ããŠã§ããã€ãŸããåçã€ã³ããŒããŸãã¯éåžžã®ã€ã³ããŒãã®ããããã«ãã£ãŠåãã¢ãžã¥ãŒã«ãæ¥ç¶ã§ããŸãã
ãŸããåæå€ã䜿çšãããšãåãã¢ãžã¥ãŒã«ã2ã€ã®æ¹æ³ã§æ§ç¯ã§ããŸããã€ãŸããéåæãšåæã®äž¡æ¹ã§ã¢ã»ã³ãã«ããããããäž¡æ¹ã®æ¹æ³ã§äœ¿çšã§ããŸããååã«äŸ¿å©ã§ããããã«ãããåéãããçµ±èšã®ãµã€ãºããããã«å€§ãããªããŸãããä»»æã®ã€ã³ããŒãã䜿çšã§ããŸãã
ã¡ãªã¿ã«ãããã¥ã¡ã³ãããã¯ããããçè§£ããã®ã¯éåžžã«å°é£ã§ããç§ã¯æè¿ãŠã§ãããã¯ã®ããã¥ã¡ã³ããèªã¿çŽããŸããããã€ãã·ã£ã«ã«ã€ããŠã¯éåžžã®ããšã¯äœãæžãããŠããŸããã
ããã¯ãsplitChunksã§è¡ã£ãããšã§ããããã§ãruntimeChunksã§äœãããŸãããã runtimeChunksã§ã©ã³ã¿ã€ã ã®ã¿ãåéããã®ã§ã¯ãªããéåžžã«äººæ°ã®ããã³ã³ããŒãã³ããããã«è¿œå ããããšæããŸãã
ããã§ãMainChunkPluginãšããç¬èªã®ãã©ã°ã€ã³ãäœæããŸããããããŠãããã¯éåžžã«äºçްãªèšå®ã§ããããã«åéããå¿ èŠã®ããã¢ãžã¥ãŒã«ã®ãªã¹ããããã人æ°ããããšèããŸããã
A / Bãã¹ãããŒã«ãããŸããŸãªãªãã©ã€ã³ããŒã«ã䜿çšããã ãã§ãæ€çŽ¢çµæã«æãé »ç¹ã«è¡šç€ºãããã³ã³ããŒãã³ããç¹å®ã§ããŸãããããã¯åœŒããã¡ããã©ãã®ãããªãã©ãããªã¹ãã«æžããããšããã§ãããããŠæåŸã«ãç§ãã¡ã®ãã©ã°ã€ã³ã¯ããªã¹ããããããã®ã³ã³ããŒãã³ããã©ã€ãã©ãªãããã³ãã®æšæºã®optimization.splitChunksãåéããwebpackã©ã³ã¿ã€ã ãåéããŸãã
ã¡ãªã¿ã«ãããã«ã©ã³ã¿ã€ã ãæ¥çããã³ãŒãããããŸãããŸãããã©ã°ã€ã³ãäœæããã®ãããã»ã©ç°¡åã§ã¯ãªãããšã瀺ãã®ã¯ããã»ã©ç°¡åã§ã¯ãããŸãããããããäœããããããããèŠãŠã¿ãŸãããã
äžè¬çã«èšãã°ãwebpackã«ã¯DLLPluginãšåŒã°ãããããè¡ãããã®æšæºçãªã¡ã«ããºã ãããããšã«ã泚æããŠãã ããããŸããäŸåé¢ä¿ã®ãªã¹ãã䜿çšããŠåå¥ã®ãã£ã³ã¯ãåéããããšãã§ããŸããããããããã«ã¯ããã€ãã®æ¬ ç¹ããããŸããããšãã°ãruntimeChunksã¯å«ãŸããŠããŸãããã€ãŸããruntimeChunksã«ã¯åžžã«åå¥ã®ãã£ã³ã¯ããããDLLPluginã«ãã£ãŠã¢ã»ã³ãã«ããããã£ã³ã¯ããããŸããããã¯ããŸã䟿å©ã§ã¯ãããŸããã
ãŸããDLLPluginã«ã¯å¥ã®ã¢ã»ã³ããªãå¿ èŠã§ããã€ãŸããDLLPluginã䜿çšããŠæãããŒã«ãã·ããªã³ã³ããŒãã³ãã§ãã®åå¥ã®ãã£ã³ã¯ãæ§ç¯ããå Žåã¯ã2ã€ã®ã¢ã»ã³ããªãå®è¡ããå¿ èŠããããŸãã
ã€ãŸãããã®åå¥ã®ãã£ã³ã¯ããããã§ã¹ããã¡ã€ã«ã§ã¢ã»ã³ãã«ããã¢ã»ã³ããªã®æ®ãã®éšåã¯ããããã§ã¹ããã¡ã€ã«ãå·®ãåŒãã ãã§ä»ã®ãã¹ãŠãåéãã人æ°ã®ããã³ã³ããŒãã³ãã§ãã£ã³ã¯ã«ãã§ã«å ¥ã£ãŠãããã®ãåéããŸããããŸããDLLPluginã®å®è£ ã«ããŒã«ã«ã§7ç§ããã£ãããããã«ããé ããªããŸããããã¯å€ãã§ãããŸããå³å¯ãªé 次å®è¡ã®ãããæé©åã§ããŸããã
ããã«ãããæç¹ã§ãCSSã䜿çšãããJSã®ã¿ã䜿çšããŠããã®äž»èŠãªãã£ã³ã¯ãæ§ç¯ããå¿ èŠããããŸããã DLLPluginã¯ãããè¡ããŸãããã€ã³ããŒããéããŠrequireãéããŠå©çšå¯èœãªãã®ã¯ãã¹ãŠåžžã«åéããŸããã€ãŸããCSSãå«ãããšãåžžã«ãããããŸããããã¯ç§ãã¡ã«ãšã£ãŠäžå¿«ã§ããããããããããããªãã«ãšã£ãŠåé¡ã§ã¯ãªãããã®ãããªããªãããŒãªã³ãŒããæžããããªãã®ã§ããã°ãDLLPluginã¯ããæ®éã®è§£æ±ºçã§ãã圌ã¯äž»ãªåé¡ã解決ããŸããã€ãŸããæã人æ°ã®ããã³ã³ããŒãã³ããå¥ã®ãã¡ã€ã«ã§æäŸããŸãã䜿çšã§ããŸãã
ããã§ãç§ãã¡ã¯äœãåŸãŸãããïŒç§ãã¡ã®æ©èœã¯ãåãååã®ç¹å¥ãªãã©ã°ã€ã³ã«ãã£ãŠçµã¿ç«ãŠãããMainChunkã®éåžžã«äººæ°ã®ããã³ã³ããŒãã³ãã䜿çšã§ããŸããããã«ãããããçš®é¡ã®å ±éã³ã³ããŒãã³ããå«ãå ±éãã£ã³ã¯ããããåçã€ã³ããŒãã«ãã£ãŠããŒããããéåæãã£ã³ã¯ããããŸãã
æ®ãã®ã³ãŒãã¯æ©èœãã³ãã«ã«å«ãŸããŠããŸããååãšããŠãããã¯ãã£ã³ã¯æ§é ã§ãã
翻蚳ã®çµã¿ç«ãŠã«ã€ããŠãç§ãã¡ã®ç¿»èš³ã¯ã翻蚳ãå¿ èŠãªã³ã³ããŒãã³ãã®é£ã«ããtsãã¡ã€ã«ã§ããããã«9ã€ã®èšèªããããããã«9ã€ã®ãã¡ã€ã«ããããŸãã
ç¿»èš³ã¯æ¬¡ã®ããã«ãªããŸããããã¯ãããŒãã¬ãŒãºãšç¿»èš³ããããã¬ãŒãºã®æå³ãå«ãåãªããªããžã§ã¯ãã§ãã
ããã¯ã翻蚳ãã³ã³ããŒãã³ãã«æ¥ç¶ãããæ¹æ³ã§ãããç¹å¥ãªãã«ããŒã䜿çšãããŸãã
ãããã®ç¿»èš³ã¯ã©ã®ããã«åéã§ããŸããïŒç§ãã¡ã¯ã翻蚳ãåéããã€ã³ã¿ãŒããããèŠãŠã圌ããäœãæžããŠããã®ããã©ãããã°ãããã§ããã®ããç¥ãå¿ èŠããããšèããŠããŸãã
圌ãã¯ã€ã³ã¿ãŒãããäžã§èšãïŒãã«ãã³ã³ãã€ã«ã䜿çšãããã€ãŸãã1ã€ã®Webpackãã«ããå®è¡ãã代ããã«ãèšèªããšã«Webpackãã«ããå®è¡ããã ãã§ãããããã圌ãã¯ããã£ãã·ã¥ããŒããŒããããTypeScriptã§ã®ãã®äžè¬çãªäœæ¥ããŸãã¯ããªããæã£ãŠãããã®ã¯ãã¹ãŠãã£ãã·ã¥ãããã®ã§ããã¹ãŠãããŸããããšèšããŸãããããã£ãŠãé·ãã¯ãããŸããã
èœèããªãã§ãã ãããããã9åã®å®éã®Webããã¯ã®å®è¡ã«ãªããšã¯æããªãã§ãã ãããããã§ã¯ãªãã§ããããããã¯è¯ãã§ãããã
ä¿®æ£ãå¿ èŠãªã®ã¯ãReplacementPluginã¢ãžã¥ãŒã«ã远å ããããšã ãã§ããããã¯ããã¹ãŠã®èšèªãæ¥ç¶ããã€ã³ããã¯ã¹ãã¡ã€ã«ã®ä»£ããã«ãç¹å®ã®èšèªã«çœ®ãæããŸãããã¹ãŠãéåžžã«äºçްãªããšã§ãããã¯ããåºåãä¿®æ£ããå¿ èŠããããŸããããã§ãèšèªããšã«åå¥ã®ãã³ãã«ãåéããå¿ èŠãããããšãããããŸããã
ãã®ã¬ã·ãã®å³ã¯æ¬¡ã®ãšããã§ãã翻蚳è ãããŸããã圌ã¯ç¿»èš³è ã®ç¿»èš³ãçµã³ã€ããŸããã圌ã¯èšèªãæ¥ç¶ãããã®1ã€ã®æ§é ãåéãã代ããã«ãèšèªããšã«è€è£œããåå¥ã®æ§é ãååŸããŠããããããåå¥ã®ã³ã³ãã€ã«ãšããŠåéããŸããã
æ®å¿µãªãããããã¯æ©èœããŸãããçŸåšã®30MBã³ãŒãã«å¯ŸããŠãã®ãã«ãã³ã³ãã€ã«ãªãã·ã§ã³ãå®è¡ããããšããŸãããã1æéååŸ ã£ããšããããã®ãšã©ãŒãçºçããŸããã
ããã¯éåžžã«é·ããäžå¯èœã§ããããã§äœãããŸãããïŒå¥ã®ãã©ã°ã€ã³ãäœæããŸãããåºåãã¡ã€ã«ããã£ã¹ã¯ã«ä¿åããããšããŠãããšãã«ãåãæ§é ã䜿çšããŠWebpackã®äœæ¥ã«åãçµã¿ãŸãããã®æ§é ãèšèªã®æ°ã ãã³ããŒããããããã«1ã€ã®èšèªãæ¥çããŸãããããŠããã®æã ããã¡ã€ã«ãäœæããŸãã
åæã«ãã³ã³ãã€ã«ã®äŸåé¢ä¿ããã€ãã¹ããããã«webpackãè¡ãäž»ãªäœæ¥ã¯ç¹°ãè¿ãããŸãããã€ãŸããæåŸã®æ®µéã§ããã³ãå ¥ããŠããã®ã§ãéããªãããšãæåŸ ã§ããŸãã
ãããããã©ã°ã€ã³ã³ãŒãã¯è€éã§ããããšã倿ããŸãããããã¯æåéããã©ã°ã€ã³ã®8åã®1ã§ããç§ã¯ãããã©ãã»ã©é£ãããã瀺ããŠããã ãã§ãããããŠãããã«ã¯å®æçã«å°ããªäžå¿«ãªãã°ããããŸãããããããããå®è£ ããã®ã¯ç°¡åã§ã¯ãããŸããã§ãããããããããã¯éåžžã«ããŸãæ©èœããŸãã
ã€ãŸãããšã©ãŒãçºçãã1æéåã§ã¯ãªãããã®ãã©ã°ã€ã³ã䜿çšããŠ5åéã®ã¢ã»ã³ããªãååŸããŸãã
ä»é ä¿¡ãšåæåã
é ä¿¡ãšåæåã¯ç°¡åã§ããå¥ã ã®ãªãœãŒã¹ã«ããŒããããã®ã¯ãä»ã®äººãšåãããã«ããªããŒãã䜿çšããŠãããšæããŸããæ¬¡ã«ãCSSãJSãå®éã«ã¯ã³ã³ããŒãã³ãã®HTMLãå«ãããããã®ãªãœãŒã¹ãããŒãããŸãããéåæã¯äœ¿çšããŸããã
å®éšããŸãããéåæã䜿çšãããšã察話æ§ã®éå§æéãé ããŸãããããã¯æãŸãããããŸããããããã£ãŠãããªããŒãã䜿çšããŠãããŒãžã®æåŸã«ããŒãããã ãã§ããäžè¬çã«ãç¹å¥ãªããšã¯äœããããŸããã
åæã«ãä»ã®ãã¹ãŠãã€ã³ã©ã€ã³åããŸããã€ãŸããããã¯MainChunkã§ãããCSSãã€ã³ã©ã€ã³åããŸããäžè¬çãªã³ã³ããŒãã³ããã¹ã¿ã€ã«ãäžè¬çã«ãã¹ã©ã€ãã«æžãããŠãããã¹ãŠã®ãã®ãã€ã³ã©ã€ã³åããŸããããã¯ããã€ã³ã©ã€ã³ããæåã®ã¬ã³ããªã³ã°ãšå¯Ÿè©±æ§ã®éå§ã«å¯ŸããŠæè¯ã®çµæãããããããšã瀺ããäžé£ã®å®éšã§ããããŸããã
ãããŠä»ãæ°åã«ãæ°å€ã«ã€ããŠè©±ãã«ã¯ãã¡ããªãã¯ã«ã€ããŠ2ã€ã®åèªãèšãå¿ èŠããããŸãã
ãã¹ãŠã®ããã³ããšã³ãã³ãŒããå¹ççã«æ©èœãããããšã«å°å¿µããå°ä»»ã®ã¹ããŒãããŒã ããããŸããããã¯ããµãŒããŒåŽã®ãã³ãã¬ãŒãåããªãœãŒã¹ã®ããŒããããã³ã¯ã©ã€ã¢ã³ãã§ã®åæåã«é¢ä¿ããŸããäžè¬çã«ã¯ãããããã¹ãŠã§ãã
ãããã¯ã·ã§ã³ããç¹å¥ãªãã®ã³ã°ã·ã¹ãã ã«éä¿¡ãããã¡ããªãã¯ããããããããŸããããã¯A / Bå®éšã§å¶åŸ¡ã§ããŸããç§ãã¡ã¯ãªãã©ã€ã³ããŒã«ãæã£ãŠããŸããäžè¬çã«ãç§ãã¡ã¯ãããã¹ãŠãéåžžã«ç©æ¥µçã«ãã©ããŒããŠããŸãã
ãããŠãReactãšTypeScriptã§ãã®æ°ããã³ãŒããå®è£ ãããšãã«ããããã®ããŒã«ã䜿çšããŸããã
ãªãã©ã€ã³ããŒã«ã䜿çšããŠè¿œè·¡ããŸãããïŒãã¹ãŠã®ã¡ããªãã¯ã䜿çšããæ£çŽãªãªã³ã©ã€ã³å®éšããŸãšããããšãã§ããªãã£ãããïŒãçŸåšã®ãœãªã¥ãŒã·ã§ã³ãããããã®äž»èŠãªææšã§ReactAppãäœæããããã«ããŒã«ããã¯ãããšã©ããªããèŠãŠã¿ãŸãããã
ãã®ããŒã«ã¯éåžžã«ç°¡åã«æ©èœããŸãããã¹ãŠã®SerpããŸã Reactã§æžãæããããŠããªãããããªã¯ãšã¹ãã®ã¹ã©ã€ã¹ãååŸãããŸãããã®å ŽåãReactã®æ©èœãåãããªã¯ãšã¹ããååŸãããŸããæ¬¡ã«ããã³ãã¬ãŒããæ»æãããæž¬å®å€ãåéããããããã®çµæãšã¡ããªãã¯ãæ¯èŒããŠèŠã€ããç¹å¥ãªãŠãŒãã£ãªãã£ã«æ¿å ¥ãããŸãããã®å Žåãçµ±èšçã«ææãªçµæã®ã¿ãæ®ããŸããäžè¬çã«ããã¹ãŠãããã«åççã§ãã
ãã°ããæ§åãèŠãŠã¿ãŸãããã
å®éãå¿ èŠãªç¿»èš³ã ãã§ãªããã¹ãŠã®ç¿»èš³ãåéããMultiPluginãç¡å¹ã«ããŠããçµ±èšçã«ææãªå€åã¯èŠãããŸããã§ããã
æåã¯å°ãåæºããŠããŸããããå®éã«ã¯ãããã¯åé¡ã§ã¯ãªãããšã«æ°ä»ããŸãããçŸåšãå€ãã®ç¿»èš³ãReactã«å€æãããŠããæ©èœãããŸããªãããã§ãããããã£ãŠããã®ãããªæ©èœãããã«ããå Žåããããã®éèŠãªå€æŽã¯ééããªã衚瀺ãããŸããçŸåšãäž»ã«ãã·ã¢ã§è¡šç€ºãããŠããæ©èœãããã翻蚳ããããŸããããŸããã³ã³ããŒãã³ãã«å«ãŸããã³ãŒãã®éã¯ã翻蚳ã®éãå€§å¹ ã«äžåã£ãŠããŸãããããã£ãŠããã¹ãŠã®ç¿»èš³ãé²è¡äžã§ããããšã¯èªèã§ããŸããã
æ£çŽãªå®éšãè¡ãããå Žåãããããããã¯ããæ£çŽãªå®éšã§é¡èã«ãªãã§ãããããããããªãã©ã€ã³ããŒã«ã¯ãããã®å€æŽã衚瀺ããŸããã§ããã
MainChunkPluginãç¡å¹ã«ãããšã察話æ©èœã®éå§æéãé ããªããHTMLã®èªã¿èŸŒã¿ãå€§å¹ ã«é ããªããŸãããããã£ãŠãããã¯éåžžã«å¿ èŠã§ãã
åå¥ã®ãªãœãŒã¹ã«ãã£ãŠãã®åå¥ã®ãã£ã³ã¯ã«ããŒããããŠãããã¹ãŠã®ã³ãŒããHTMLã«ã€ã³ã©ã€ã³åãããããã«ãªã£ããããHTMLã®ããŒããé ããªãã®ã¯ãªãã§ããããã¹ãŠãã€ã³ã©ã€ã³åãããããªãã®ã§ããã察話æ§ãé ããªããŸããååãšããŠãããªãæåŸ ãããŠããŸãã
ãããŠä»ã質åïŒãã¹ãŠã1ã€ã®ãã³ãã«ã«å ¥ããå ±éã®ã³ã³ããŒãã³ãã§ãã£ã³ã¯ã䜿çšããªããšã©ããªãã§ãããããããã¯ãŸã£ãã幞ããªçµµã§ã¯ãªãããšãããããŸããã
æåã®ã¬ã³ããªã³ã°ã¯åçã«é ããªããŸããã€ã³ã¿ã©ã¯ãã£ãæ§ãã»ãŒ2åã«ãªããŸãããããã«ããããã¹ãŠã®ã³ãŒããå¥ã®ãªãœãŒã¹ã§é ä¿¡ããå§ãããããHTMLãå°ãããªããŸããããããã芧ã®ãšããã察話æ§ã¯åœ¹ã«ç«ã¡ãŸããã
ãããŠçµã¿ç«ãŠãæåŸã®ã¹ã©ã€ãã
çŸåšã®ãããžã§ã¯ãã®CreateReact Appã®ãã«ãæéã¯ãã©ãããããã§3åããããŸãããããŠãç§ãã¡ã®ãã¹ãŠã®éãšç¬ã§-5åãé·ãã§ãïŒ
ããããå®éã«ã¯ã1ã€ã®ãã³ãã«ã«ãŸãšãããšã3åã«ãªããŸãã MultiPluginãªãã§ãã«ããããšãCreate ReactAppãããããã«é«éã«ãªããŸãããã ããåã®ã¹ã©ã€ãã§ç€ºããããã«ãå ã®ãã«ãã¹ã¯ãªããã«å¯Ÿãããããã®å€æŽãæåŠããããšã¯ã§ããŸãããããããªããšãé床ã¡ããªãã¯ãéåžžã«æªããªãããã§ãã
ããã§ã¯ããã®ã¬ããŒãããåŠã¶ã®ã«åœ¹ç«ã€ããšãèŠãŠãããŸãããã
TypeScriptã䜿çšããæ¹æ³ã¯Babelã ãã§ã¯ãããŸããã TSCãts-nodeããã³ts-loaderã䜿çšã§ããŸããããã¯éåžžã«ããŸãæ©èœããŸãã
ããã¯èšã£ãŠããTypeScriptãã§ãã¯ãã¿ã€ããã§ãã¯ã¯ããã«ããããã³ã«å®è¡ããå¿ èŠã¯ãããŸãããããã«ãããé床ãå€§å¹ ã«äœäžããŸããèŠããŠããããã«ã2åã§ãããããã£ãŠããã®ãããªãã®ãå¥ã ã®ãã§ãã¯ãããšãã°äºåã³ãããããã¯ã«é 眮ããããšããå§ãããŸãã
é »ç¹ã«äœ¿çšããã³ã³ããŒãã³ããå¥ã®ãã£ã³ã¯ã«åéããããšããå§ãããŸããå ±éã®ã³ã³ããŒãã³ããå¥ã ã®ãã£ã³ã¯ã«åéããããšãæãŸããã§ããããã«ãããå¿ èŠãªãã®ã ããããŒãã§ããdiffã ããããŒãã§ããããã§ãã
æãéèŠãªããšã¯ããã¹ãŠã®ããŒãžã§ãã¹ãŠã®ã³ãŒãã䜿çšããŠããªãå Žåã¯ãã³ãŒããåå¥ã®ãšã³ããªã«åå²ããåå¥ã®ãã³ãã«ãåéããŠããŠãŒã¶ãŒã«å¯Ÿå¿ããã¿ã€ãã®æ€çŽ¢çµæã衚瀺ããããããŠã³ããŒãããå¿ èŠãããããšã§ããå¿ èŠãªãã¡ã€ã«ã®ã¿ãããŠã³ããŒãããŠãã ãããããªããèŠãŠããããã«ãããã¯æå€§ã®çµæããããããŸããããªãæçœãªããšã§ããããŸã Create React Appã«æ®ã£ãŠãããããå šå¡ããããè¡ããã©ããã¯ããããŸããã
ãã«ãã³ã³ãã€ã«ã¯éåžžã«é·ãã§ãããã«ãã³ã³ãã€ã«ã¯åé¡ãªããå éšã®ã©ããã«ãããã£ãã·ã¥ã§ããããã¹ãŠãåŠçã§ãããšèª°ããèšã£ãŠããä¿¡ããªãã§ãã ãããããªããŒããšã€ã³ã©ã€ã³ã䜿çšããŠãçµæãåŸãããŸãã
ã·ãã¯ã«ã«é¢ããããã€ãã®ãªã³ã¯ïŒ
- clck.ru/PdRdhãšclck.ru/PdRjb-Reactã§SerpãæžãçŽãããšã«é¢ãã2ã€ã®ã¬ããŒããããã¯æåã®æ®µéã§ãããã©ã®ããã«ããŠããã«å°éããã®ãããªããããå§ããã®ãã«ã€ããŠã§ãã2çªç®ã®ã¬ããŒãã¯ã管çã®èгç¹ããããããã¹ãŠãã©ã®ããã«èšç»ããã³å®è¡ããããã¹ããŒãžã¯ã©ã®ãããªãã®ã§ãã£ããã«ã€ããŠã§ãã
- clck.ru/PdRnr-é床ã¡ããªãã¯ã«é¢ããã¬ããŒãããªã³ã©ã€ã³ããŒã«ãã©ã®ããã«æ©èœããã®ããä»ã«äœãããã®ãââãšçªç¶çåã«æã£ã人åãã§ãã
ããããšãããããŸãã