ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ãšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®æŠå¿µãå©ç¹ã課é¡ãå®è£ æŠç¥ãããã³ã¹ã±ãŒã©ãã«ã§ä¿å®å¯èœãªWebã¢ããªã±ãŒã·ã§ã³ã«ããããéžæããã¿ã€ãã³ã°ã«ã€ããŠèª¬æããŸãã
ããã³ããšã³ãã¢ãŒããã¯ãã£ïŒãã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ â å æ¬çãªã¬ã€ã
仿¥ã®è€éãªãŠã§ãéçºã®ç¶æ³ã§ã¯ãå€§èŠæš¡ãªããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãšä¿å®ã¯å°é£ãªå ŽåããããŸããåŸæ¥ã®ã¢ããªã·ãã¯ãªããã³ããšã³ãã¢ãŒããã¯ãã£ã¯ãã³ãŒãã®è¥å€§åããã«ãæéã®é å»¶ãããŒã ã³ã©ãã¬ãŒã·ã§ã³ã®å°é£ãã«ã€ãªããããšããããããŸãããã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãããå°ãããç¬ç«ããã管çããããéšåã«åå²ããããšã«ããããããã®åé¡ã«å¯Ÿãã匷åãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ããã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ãšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®æŠå¿µãå©ç¹ã課é¡ãå®è£ æŠç¥ãããã³ããããéžæããã¿ã€ãã³ã°ã«ã€ããŠèª¬æããŸãã
ãã€ã¯ãããã³ããšã³ããšã¯ïŒ
ãã€ã¯ãããã³ããšã³ãã¯ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ããåã ã®ããŒã ãææããç¬ç«ããèªå·±å®çµåã®ãŠãããã®éåãšããŠæ§æããã¢ãŒããã¯ãã£ã¹ã¿ã€ã«ã§ãããããã®ãŠãããã¯ãåå¥ã«éçºããã¹ããããã³ãããã€ã§ãããããããé«ãæè»æ§ãšã¹ã±ãŒã©ããªãã£ãå®çŸããŸããåäžã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«ã·ãŒã ã¬ã¹ã«çµ±åãããç¬ç«ãããŠã§ããµã€ãã®ã³ã¬ã¯ã·ã§ã³ãšèããŠãã ããã
ãã€ã¯ãããã³ããšã³ãã®èåŸã«ããäžå¿çãªèãæ¹ã¯ããã€ã¯ããµãŒãã¹ã®ååãããã³ããšã³ãã«é©çšããããšã§ãããã€ã¯ããµãŒãã¹ãããã¯ãšã³ããããå°ããã管çãããããµãŒãã¹ã«åè§£ããã®ãšåãããã«ããã€ã¯ãããã³ããšã³ãã¯ããã³ããšã³ããããå°ããã管çããããã¢ããªã±ãŒã·ã§ã³ãŸãã¯æ©èœã«åè§£ããŸãã
ãã€ã¯ãããã³ããšã³ãã®å©ç¹ïŒ
- ã¹ã±ãŒã©ããªãã£ã®åäžïŒãã€ã¯ãããã³ããšã³ãã®ç¬ç«ãããããã€ã¡ã³ãã«ãããããŒã ã¯ã¢ããªã±ãŒã·ã§ã³ã®ä»ã®ããŒã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³å šäœã«åœ±é¿ãäžããããšãªããã¢ããªã±ãŒã·ã§ã³ã®ããŒããã¹ã±ãŒã«ã§ããŸãã
- ä¿å®æ§ã®åäžïŒå°ããã³ãŒãããŒã¹ã¯çè§£ããã¹ããããã³ä¿å®ã容æã§ããåããŒã ã¯ç¬èªã®ãã€ã¯ãããã³ããšã³ããæ åœãããããåé¡ã®ç¹å®ãšä¿®æ£ã容æã«ãªããŸãã
- ãã¯ãããžãŒã®å€æ§æ§ïŒããŒã ã¯ç¹å®ã®ãã€ã¯ãããã³ããšã³ãã«æé©ãªãã¯ãããžãŒã¹ã¿ãã¯ãéžæã§ãããããããé«ãæè»æ§ãšã€ãããŒã·ã§ã³ãå®çŸããŸããããã¯ãç°ãªãããŒã ãç°ãªããã¬ãŒã ã¯ãŒã¯ã®å°éç¥èãæã£ãŠããå¯èœæ§ãããå€§èŠæš¡ãªçµç¹ã§ã¯éåžžã«éèŠã§ãã
- ç¬ç«ãããããã€ã¡ã³ãïŒãã€ã¯ãããã³ããšã³ãã¯åå¥ã«ãããã€ã§ããããããªãªãŒã¹ãµã€ã¯ã«ãé«éåããããªã¹ã¯ã軜æžãããŸããããã¯ãé »ç¹ãªæŽæ°ãå¿ èŠãªå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ç¹ã«éèŠã§ãã
- ããŒã ã®èªåŸæ§ïŒããŒã ã¯ãã€ã¯ãããã³ããšã³ãã®å®å šãªæææš©ãæã¡ã責任æãšèª¬æè²¬ä»»ãè²ã¿ãŸããããã«ãããããŒã ã¯æææ±ºå®ãè¡ããè¿ éã«å埩ããããšãã§ããŸãã
- ã³ãŒãã®åå©çšæ§ïŒå ±éã®ã³ã³ããŒãã³ããšã©ã€ãã©ãªã¯ãã€ã¯ãããã³ããšã³ãéã§å ±æã§ãããããã³ãŒãã®åå©çšãšäžè²«æ§ãåäžããŸãã
ãã€ã¯ãããã³ããšã³ãã®èª²é¡ïŒ
- è€éãã®å¢å ïŒãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ãå®è£ ãããšãã·ã¹ãã å šäœã®è€éããå¢ããŸããè€æ°ã®ããŒã ã調æŽãããã€ã¯ãããã³ããšã³ãéã®éä¿¡ã管çããããšã¯å°é£ãªå ŽåããããŸãã
- çµ±åã®èª²é¡ïŒãã€ã¯ãããã³ããšã³ãéã®ã·ãŒã ã¬ã¹ãªçµ±åãä¿èšŒããã«ã¯ãæ éãªèšç»ãšèª¿æŽãå¿ èŠã§ããå ±æäŸåé¢ä¿ãã«ãŒãã£ã³ã°ãã¹ã¿ã€ãªã³ã°ãªã©ã®åé¡ã«å¯ŸåŠããå¿ èŠããããŸãã
- ããã©ãŒãã³ã¹ãªãŒããŒãããïŒè€æ°ã®ãã€ã¯ãããã³ããšã³ããããŒããããšãç¹ã«æé©åãããŠããªãå Žåãããã©ãŒãã³ã¹ãªãŒããŒããããçºçããå¯èœæ§ããããŸããããŒãæéãšãªãœãŒã¹äœ¿çšçã«æ³šæãæãå¿ èŠããããŸãã
- å ±æç¶æ 管çïŒãã€ã¯ãããã³ããšã³ãéã§å ±æç¶æ ã管çããããšã¯è€éã«ãªãå¯èœæ§ããããŸããå ±æã©ã€ãã©ãªãã€ãã³ããã¹ããŸãã¯éäžåç¶æ 管çãœãªã¥ãŒã·ã§ã³ãªã©ã®æŠç¥ããã°ãã°å¿ èŠã§ãã
- éçšãªãŒããŒãããïŒè€æ°ã®ãã€ã¯ãããã³ããšã³ãã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããããšã¯ãåäžã®ã¢ããªã·ãã¯ã¢ããªã±ãŒã·ã§ã³ã管çãããããè€éã«ãªãå¯èœæ§ããããŸãã
- ã¯ãã¹ ã«ããã£ã³ã°ãªæžå¿µäºé ïŒèªèšŒãèªå¯ãåæãªã©ã®ã¯ãã¹ ã«ããã£ã³ã°ãªæžå¿µäºé ãåŠçããã«ã¯ãããŒã éã§æ éãªèšç»ãšèª¿æŽãå¿ èŠã§ãã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ãšã¯ïŒ
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãWebpack 5ã§å°å ¥ãããJavaScriptã¢ãŒããã¯ãã£ã§ãããåå¥ã«æ§ç¯ããã³ãããã€ãããã¢ããªã±ãŒã·ã§ã³éã§ã³ãŒããå ±æã§ããŸããããã«ãããã©ã³ã¿ã€ã æã«ä»ã®ã¢ããªã±ãŒã·ã§ã³ããã³ãŒããåçã«ããŒãããã³å®è¡ããããšã§ããã€ã¯ãããã³ããšã³ããäœæã§ããŸããåºæ¬çã«ãç°ãªãJavaScriptã¢ããªã±ãŒã·ã§ã³ãçžäºã«æ§ç¯ãããã¯ãšããŠæ©èœã§ããããã«ããŸãã
iframeãŸãã¯Webã³ã³ããŒãã³ãã«äŸåããããšãå€ãåŸæ¥ã®ãã€ã¯ãããã³ããšã³ãã®ã¢ãããŒããšã¯ç°ãªããã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšãããšããã€ã¯ãããã³ããšã³ãéã®ã·ãŒã ã¬ã¹ãªçµ±åãšå ±æç¶æ ãå¯èœã«ãªããŸããå ±æããã±ãŒãžã¬ãžã¹ããªã«å ¬éããªããŠããããã¢ããªã±ãŒã·ã§ã³ããå¥ã®ã¢ããªã±ãŒã·ã§ã³ã«ã³ã³ããŒãã³ãã颿°ããŸãã¯ã¢ãžã¥ãŒã«å šäœãå ¬éã§ããŸãã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®äž»èŠãªæŠå¿µïŒ
- ãã¹ãïŒä»ã®ã¢ããªã±ãŒã·ã§ã³ïŒãªã¢ãŒãïŒããã¢ãžã¥ãŒã«ãæ¶è²»ããã¢ããªã±ãŒã·ã§ã³ã
- ãªã¢ãŒãïŒä»ã®ã¢ããªã±ãŒã·ã§ã³ïŒãã¹ãïŒãæ¶è²»ããããã«ã¢ãžã¥ãŒã«ãå ¬éããã¢ããªã±ãŒã·ã§ã³ã
- å ±æäŸåé¢ä¿ïŒãã¹ãã¢ããªã±ãŒã·ã§ã³ãšãªã¢ãŒãã¢ããªã±ãŒã·ã§ã³ã®éã§å ±æãããäŸåé¢ä¿ãã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšãããšãå ±æäŸåé¢ä¿ã®éè€ãåé¿ããããã©ãŒãã³ã¹ãåäžããããã³ãã«ãµã€ãºãåæžã§ããŸãã
- Webpackæ§æïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãWebpackæ§æãã¡ã€ã«ãä»ããŠæ§æãããŸããããã§ã¯ãå ¬éããã¢ãžã¥ãŒã«ãšæ¶è²»ãããªã¢ãŒããå®çŸ©ããŸãã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®å©ç¹ïŒ
- ã³ãŒãã®å ±æïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšãããšãåå¥ã«æ§ç¯ããã³ãããã€ãããã¢ããªã±ãŒã·ã§ã³éã§ã³ãŒããå ±æããã³ãŒãã®éè€ãæžãããã³ãŒãã®åå©çšãæ¹åã§ããŸãã
- ç¬ç«ãããããã€ã¡ã³ãïŒãã€ã¯ãããã³ããšã³ãã¯åå¥ã«ãããã€ã§ããããããªãªãŒã¹ãµã€ã¯ã«ãé«éåããããªã¹ã¯ã軜æžãããŸãã1ã€ã®ãã€ã¯ãããã³ããšã³ããžã®å€æŽã¯ãä»ã®ãã€ã¯ãããã³ããšã³ãã®åãããã€ãå¿ èŠãšããŸããã
- ãã¯ãããžãŒã«äŸåããªãïŒããçšåºŠïŒïŒäž»ã«WebpackããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŸãããã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãããçšåºŠã®åŽåã§ä»ã®ãã«ãããŒã«ããã³ãã¬ãŒã ã¯ãŒã¯ãšçµ±åã§ããŸãã
- ããã©ãŒãã³ã¹ã®åäžïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãäŸåé¢ä¿ãå ±æããã¢ãžã¥ãŒã«ãåçã«ããŒãããããšã«ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããããã³ãã«ãµã€ãºãåæžã§ããŸãã
- éçºã®ç°¡çŽ åïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãããŒã ãçµ±åã®åé¡ãå¿é ããããšãªããç¬ç«ãããã€ã¯ãããã³ããšã³ãã§äœæ¥ã§ããããã«ããããšã§ãéçºããã»ã¹ãç°¡çŽ åããŸãã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®èª²é¡ïŒ
- Webpackã®äŸåé¢ä¿ïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯äž»ã«Webpackã®æ©èœã§ããããããã«ãããŒã«ãšããŠWebpackã䜿çšããå¿ èŠããããŸãã
- æ§æã®è€éãïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã®æ§æã¯ãç¹ã«å€æ°ã®ãã€ã¯ãããã³ããšã³ããæã€å€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯è€éã«ãªãå¯èœæ§ããããŸãã
- ããŒãžã§ã³ç®¡çïŒå ±æäŸåé¢ä¿ãšå ¬éã¢ãžã¥ãŒã«ã®ããŒãžã§ã³ã管çããããšã¯å°é£ã«ãªãå¯èœæ§ããããŸããç«¶åãåé¿ããäºææ§ã確ä¿ããã«ã¯ãæ éãªèšç»ãšèª¿æŽãå¿ èŠã§ãã
- ã©ã³ã¿ã€ã ãšã©ãŒïŒãªã¢ãŒãã¢ãžã¥ãŒã«ã®åé¡ã«ããããã¹ãã¢ããªã±ãŒã·ã§ã³ã§ã©ã³ã¿ã€ã ãšã©ãŒãçºçããå¯èœæ§ããããŸããé©åãªãšã©ãŒåŠçãšç£èŠãäžå¯æ¬ ã§ãã
- ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒã¢ãžã¥ãŒã«ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã«å ¬éãããšãã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ãçºçããŸããå ¬éããã¢ãžã¥ãŒã«ãšãäžæ£ã¢ã¯ã»ã¹ããä¿è·ããæ¹æ³ãæ éã«æ€èšããå¿ èŠããããŸãã
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ïŒããŸããŸãªã¢ãããŒã
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ãå®è£ ããã«ã¯ãããã€ãã®ç°ãªãã¢ãããŒãããããããããã«ç¬èªã®é·æãšçæããããŸããæãäžè¬çãªã¢ãããŒããæ¬¡ã«ç€ºããŸãã
- ãã«ãæã®çµ±åïŒãã€ã¯ãããã³ããšã³ãã¯ãã«ãæã«æ§ç¯ãããåäžã®ã¢ããªã±ãŒã·ã§ã³ã«çµ±åãããŸãããã®ã¢ãããŒãã¯å®è£ ãç°¡åã§ãããä»ã®ã¢ãããŒãã»ã©ã®æè»æ§ã¯ãããŸããã
- iframeãä»ããã©ã³ã¿ã€ã çµ±åïŒãã€ã¯ãããã³ããšã³ãã¯ã©ã³ã¿ã€ã æã«iframeã«ããŒããããŸãããã®ã¢ãããŒãã¯åŒ·åãªåé¢ãæäŸããŸãããããã©ãŒãã³ã¹ã®åé¡ããã€ã¯ãããã³ããšã³ãéã®éä¿¡ã®å°é£ãã«ã€ãªããå¯èœæ§ããããŸãã
- Webã³ã³ããŒãã³ããä»ããã©ã³ã¿ã€ã çµ±åïŒãã€ã¯ãããã³ããšã³ãã¯Webã³ã³ããŒãã³ããšããŠããã±ãŒãžåãããã©ã³ã¿ã€ã æã«ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã«ããŒããããŸãããã®ã¢ãããŒãã¯åªããåé¢ãšåå©çšæ§ãæäŸããŸãããå®è£ ãããè€éã«ãªãå¯èœæ§ããããŸãã
- JavaScriptãä»ããã©ã³ã¿ã€ã çµ±åïŒãã€ã¯ãããã³ããšã³ãã¯ã©ã³ã¿ã€ã æã«JavaScriptã¢ãžã¥ãŒã«ãšããŠããŒããããŸãããã®ã¢ãããŒãã¯æå€§ã®æè»æ§ãšããã©ãŒãã³ã¹ãæäŸããŸãããæ éãªèšç»ãšèª¿æŽãå¿ èŠã§ããã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ããã®ã«ããŽãªã«åé¡ãããŸãã
- Edge Side IncludesïŒESIïŒïŒHTMLã®ãã©ã°ã¡ã³ããCDNã®ãšããžã§çµã¿ç«ãŠããããµãŒããŒãµã€ãã¢ãããŒãã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšãããã€ã¯ãããã³ããšã³ãã®å®è£ æŠç¥
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšããŠãã€ã¯ãããã³ããšã³ããå®è£ ããã«ã¯ãæ éãªèšç»ãšå®è¡ãå¿ èŠã§ããèæ ®ãã¹ãäž»ãªæŠç¥ã次ã«ç€ºããŸãã
- æç¢ºãªå¢çãå®çŸ©ããïŒãã€ã¯ãããã³ããšã³ãéã®å¢çãæç¢ºã«å®çŸ©ããŸããåãã€ã¯ãããã³ããšã³ãã¯ãç¹å®ã®ãã¡ã€ã³ãŸãã¯æ©èœãæ åœããå¿ èŠããããŸãã
- å ±æã³ã³ããŒãã³ãã©ã€ãã©ãªã確ç«ããïŒãã¹ãŠã®ãã€ã¯ãããã³ããšã³ãã§äœ¿çšã§ããå ±æã³ã³ããŒãã³ãã©ã€ãã©ãªãäœæããŸããããã«ãããäžè²«æ§ãåäžããã³ãŒãã®éè€ãåæžãããŸããã³ã³ããŒãã³ãã©ã€ãã©ãªèªäœã¯ããã§ãã¬ãŒã·ã§ã³ã¢ãžã¥ãŒã«ã«ããããšãã§ããŸãã
- éäžã«ãŒãã£ã³ã°ã·ã¹ãã ãå®è£ ããïŒãã€ã¯ãããã³ããšã³ãéã®ããã²ãŒã·ã§ã³ãåŠçããéäžã«ãŒãã£ã³ã°ã·ã¹ãã ãå®è£ ããŸããããã«ãããã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒãããŸãã
- ç¶æ ç®¡çæŠç¥ãéžæããïŒã¢ããªã±ãŒã·ã§ã³ã«é©ããç¶æ ç®¡çæŠç¥ãéžæããŸãããªãã·ã§ã³ã«ã¯ãå ±æã©ã€ãã©ãªãã€ãã³ããã¹ããŸãã¯ReduxãVuexãªã©ã®éäžåç¶æ 管çãœãªã¥ãŒã·ã§ã³ãå«ãŸããŸãã
- å ç¢ãªãã«ãããã³ãããã€ã¡ã³ããã€ãã©ã€ã³ãå®è£ ããïŒãã€ã¯ãããã³ããšã³ãã®ãã«ãããã¹ããããã³ãããã€ã¡ã³ãã®ããã»ã¹ãèªååããå ç¢ãªãã«ãããã³ãããã€ã¡ã³ããã€ãã©ã€ã³ãå®è£ ããŸãã
- æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ã確ç«ããïŒç°ãªããã€ã¯ãããã³ããšã³ãã§äœæ¥ããããŒã éã®æç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãã£ãã«ã確ç«ããŸããããã«ããã誰ããåãèªèãæã¡ãåé¡ãè¿ éã«è§£æ±ºãããããšãä¿èšŒãããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããã³æž¬å®ããïŒãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã®ããã©ãŒãã³ã¹ãç£èŠããã³æž¬å®ããŸããããã«ãããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç¹å®ããŠå¯ŸåŠã§ããŸãã
äŸïŒã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšããåçŽãªãã€ã¯ãããã³ããšã³ãã®å®è£ ïŒReactïŒ
ReactãšWebpackã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã䜿çšããç°¡åãªäŸã瀺ããŸãããããã¹ãã¢ããªã±ãŒã·ã§ã³ãšãªã¢ãŒãã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®ã¢ããªã±ãŒã·ã§ã³ããããŸãã
ãªã¢ãŒãã¢ããªã±ãŒã·ã§ã³ïŒRemoteAppïŒ-ã³ã³ããŒãã³ããå ¬éããŸã
1.äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ïŒ
npm install react react-dom webpack webpack-cli webpack-dev-server html-webpack-plugin --save-dev
2.åçŽãªã³ã³ããŒãã³ãã®äœæïŒRemoteComponent.jsx
ïŒïŒ
import React from 'react';
const RemoteComponent = () => {
return <div style={{ border: '2px solid blue', padding: '10px', margin: '10px' }}>
<h2>Remote Component</h2>
<p>This component is being served from the Remote App!</p>
</div>;
};
export default RemoteComponent;
3. index.js
ã®äœæïŒ
import React from 'react';
import ReactDOM from 'react-dom';
import RemoteComponent from './RemoteComponent';
ReactDOM.render(<RemoteComponent />, document.getElementById('root'));
4. webpack.config.js
ã®äœæïŒ
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
const path = require('path');
module.exports = {
entry: './index',
mode: 'development',
devServer: {
port: 3001,
},
output: {
publicPath: 'auto',
},
resolve: {
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-react', '@babel/preset-env'],
},
},
},
],
},
plugins: [
new ModuleFederationPlugin({
name: 'RemoteApp',
filename: 'remoteEntry.js',
exposes: {
'./RemoteComponent': './RemoteComponent',
},
shared: {
...require('./package.json').dependencies,
react: { singleton: true, eager: true, requiredVersion: require('./package.json').dependencies['react'] },
'react-dom': { singleton: true, eager: true, requiredVersion: require('./package.json').dependencies['react-dom'] },
},
}),
new HtmlWebpackPlugin({
template: './index.html',
}),
],
};
5. index.html
ã®äœæïŒ
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Remote App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
6. Babelæ§æã®è¿œå ïŒ.babelrcãŸãã¯babel.config.jsïŒïŒ
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
7.ãªã¢ãŒãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ïŒ
npx webpack serve
ãã¹ãã¢ããªã±ãŒã·ã§ã³ïŒHostAppïŒ-ãªã¢ãŒãã³ã³ããŒãã³ããæ¶è²»ããŸã
1.äŸåé¢ä¿ã®ã€ã³ã¹ããŒã«ïŒ
npm install react react-dom webpack webpack-cli webpack-dev-server html-webpack-plugin --save-dev
2.åçŽãªã³ã³ããŒãã³ãã®äœæïŒHome.jsx
ïŒïŒ
import React, { Suspense } from 'react';
const RemoteComponent = React.lazy(() => import('RemoteApp/RemoteComponent'));
const Home = () => {
return (
<div style={{ border: '2px solid green', padding: '10px', margin: '10px' }}>
<h1>Host Application</h1>
<p>This is the main application consuming a remote component.</p>
<Suspense fallback={<div>Loading Remote Component...</div>}>
<RemoteComponent />
</Suspense>
</div>
);
};
export default Home;
3. index.js
ã®äœæïŒ
import React from 'react';
import ReactDOM from 'react-dom';
import Home from './Home';
ReactDOM.render(<Home />, document.getElementById('root'));
4. webpack.config.js
ã®äœæïŒ
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ModuleFederationPlugin = require('webpack/lib/container/ModuleFederationPlugin');
const path = require('path');
module.exports = {
entry: './index',
mode: 'development',
devServer: {
port: 3000,
},
output: {
publicPath: 'auto',
},
resolve: {
extensions: ['.js', '.jsx'],
},
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-react', '@babel/preset-env'],
},
},
},
],
},
plugins: [
new ModuleFederationPlugin({
name: 'HostApp',
remotes: {
RemoteApp: 'RemoteApp@http://localhost:3001/remoteEntry.js',
},
shared: {
...require('./package.json').dependencies,
react: { singleton: true, eager: true, requiredVersion: require('./package.json').dependencies['react'] },
'react-dom': { singleton: true, eager: true, requiredVersion: require('./package.json').dependencies['react-dom'] },
},
}),
new HtmlWebpackPlugin({
template: './index.html',
}),
],
};
5. index.html
ã®äœæïŒ
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Host App</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
6. Babelæ§æã®è¿œå ïŒ.babelrcãŸãã¯babel.config.jsïŒïŒ
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
7.ãã¹ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ïŒ
npx webpack serve
ãã®äŸã¯ããã¹ãã¢ããªã±ãŒã·ã§ã³ãã©ã³ã¿ã€ã æã«ãªã¢ãŒãã¢ããªã±ãŒã·ã§ã³ããRemoteComponentãã©ã®ããã«æ¶è²»ã§ãããã瀺ããŠããŸããéèŠãªç¹ã«ã¯ããã¹ãã®webpackæ§æã§ãªã¢ãŒããšã³ããªãã€ã³ããå®çŸ©ããReact.lazyãšSuspenseã䜿çšããŠãªã¢ãŒãã³ã³ããŒãã³ããéåæçã«ããŒãããããšãå«ãŸããŸãã
ãã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ãéžæããã¿ã€ãã³ã°
ãã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãäžèœã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã䞊è¡ããŠäœæ¥ããè€æ°ã®ããŒã ãæã€å€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãããã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ãæçãªã·ããªãªã次ã«ç€ºããŸãã
- å€§èŠæš¡ãªããŒã ïŒè€æ°ã®ããŒã ãåãã¢ããªã±ãŒã·ã§ã³ã§äœæ¥ããŠããå Žåããã€ã¯ãããã³ããšã³ãã¯ã³ãŒããåé¢ããç«¶åãæžããã®ã«åœ¹ç«ã¡ãŸãã
- ã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³ïŒãã€ã¯ãããã³ããšã³ãã䜿çšããŠãã¬ã¬ã·ãŒã¢ããªã±ãŒã·ã§ã³ãåŸã ã«ææ°ã®ã¢ãŒããã¯ãã£ã«ç§»è¡ã§ããŸãã
- ç¬ç«ãããããã€ã¡ã³ãïŒã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«åœ±é¿ãäžããããšãªããæŽæ°ãé »ç¹ã«ãããã€ããå¿ èŠãããå Žåããã€ã¯ãããã³ããšã³ãã¯å¿ èŠãªåé¢ãæäŸã§ããŸãã
- ãã¯ãããžãŒã®å€æ§æ§ïŒã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåã«ç°ãªããã¯ãããžãŒã䜿çšãããå Žåããã€ã¯ãããã³ããšã³ãã䜿çšãããšããããå¯èœã«ãªããŸãã
- ã¹ã±ãŒã©ããªãã£èŠä»¶ïŒã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåãç¬ç«ããŠã¹ã±ãŒã«ããå¿ èŠãããå Žåããã€ã¯ãããã³ããšã³ãã¯å¿ èŠãªæè»æ§ãæäŸã§ããŸãã
ãã ãããã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ãåžžã«æè¯ã®éžæè¢ã§ãããšã¯éããŸãããå°èŠæš¡ã§åçŽãªã¢ããªã±ãŒã·ã§ã³ã®å Žåã远å ã®è€éãã¯ã¡ãªããã«èŠåããªãå¯èœæ§ããããŸãããã®ãããªå Žåã¯ãã¢ããªã·ãã¯ã¢ãŒããã¯ãã£ã®æ¹ãé©åã§ãã
ãã€ã¯ãããã³ããšã³ããžã®ä»£æ¿ã¢ãããŒã
ã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãã€ã¯ãããã³ããšã³ããæ§ç¯ããããã®åŒ·åãªããŒã«ã§ãããå¯äžã®ã¢ãããŒãã§ã¯ãããŸãããä»£æ¿æŠç¥ã次ã«ç€ºããŸãã
- IframesïŒåçŽã§ãããå€ãã®å Žåãããã©ãŒãã³ã¹ã®äœãã¢ãããŒãã§ããã匷åãªåé¢ãæäŸããŸãããéä¿¡ãšã¹ã¿ã€ãªã³ã°ã«èª²é¡ããããŸãã
- Webã³ã³ããŒãã³ãïŒåå©çšå¯èœãªUIèŠçŽ ãäœæããããã®æšæºããŒã¹ã®ã¢ãããŒãããã¬ãŒã ã¯ãŒã¯ã«äŸåããªããã€ã¯ãããã³ããšã³ããæ§ç¯ããããã«äœ¿çšã§ããŸãã
- Single-SPAïŒåäžã®ããŒãžã§è€æ°ã®JavaScriptã¢ããªã±ãŒã·ã§ã³ã調æŽããããã®ãã¬ãŒã ã¯ãŒã¯ã
- Server-Side IncludesïŒSSIïŒ/ Edge-Side IncludesïŒESIïŒïŒHTMLã®ãã©ã°ã¡ã³ããæ§æããããã®ãµãŒããŒãµã€ãã®æè¡ã
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã®ãã¹ããã©ã¯ãã£ã¹
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã广çã«å®è£ ããã«ã¯ããã¹ããã©ã¯ãã£ã¹ãéµå®ããå¿ èŠããããŸãã
- åäžè²¬ä»»ã®ååïŒåãã€ã¯ãããã³ããšã³ãã¯ãæç¢ºã§æç¢ºã«å®çŸ©ããã責任ãæã€å¿ èŠããããŸãã
- ç¬ç«ãããããã€å¯èœæ§ïŒåãã€ã¯ãããã³ããšã³ãã¯ãç¬ç«ããŠãããã€å¯èœã§ããå¿ èŠããããŸãã
- ãã¯ãããžãŒã«äŸåããªãïŒå¯èœãªå ŽåïŒïŒããŒã ããžã§ãã«æé©ãªããŒã«ãéžæã§ããããã«ããã¯ãããžãŒã«äŸåããªãããã«åªããŸãã
- å¥çŽããŒã¹ã®éä¿¡ïŒãã€ã¯ãããã³ããšã³ãéã®éä¿¡ã«æç¢ºãªå¥çŽãå®çŸ©ããŸãã
- èªåãã¹ãïŒåãã€ã¯ãããã³ããšã³ããšã·ã¹ãã å šäœã®å質ã確ä¿ããããã«ãå æ¬çãªèªåãã¹ããå®è£ ããŸãã
- éäžåãã®ã³ã°ãšç£èŠïŒãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã®ããã©ãŒãã³ã¹ãšãã«ã¹ã远跡ããããã«ãéäžåãã®ã³ã°ãšç£èŠãå®è£ ããŸãã
çµè«
ãã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãã¹ã±ãŒã©ãã«ã§ä¿å®å¯èœã§æè»ãªããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åŒ·åãªã¢ãããŒããæäŸããŸããå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ãããå°ãããç¬ç«ãããŠãããã«åå²ããããšã«ãããããŒã ã¯ããå¹ççã«äœæ¥ããããé »ç¹ã«æŽæ°ããªãªãŒã¹ããããè¿ éã«ã€ãããŒã·ã§ã³ãèµ·ããããšãã§ããŸãããã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã®å®è£ ã«ã¯èª²é¡ããããŸãããç¹ã«å€§èŠæš¡ã§è€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã¡ãªãããã³ã¹ããäžåãããšããããããŸããã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ããã€ã¯ãããã³ããšã³ãéã§ã³ãŒããšã³ã³ããŒãã³ããå ±æããããã®ãç¹ã«ãšã¬ã¬ã³ãã§å¹ççãªãœãªã¥ãŒã·ã§ã³ãæäŸããŸãããã€ã¯ãããã³ããšã³ãæŠç¥ãæ éã«èšç»ããã³å®è¡ããããšã§ãçµç¹ãšãŠãŒã¶ãŒã®ããŒãºã«é©ããããã³ããšã³ãã¢ãŒããã¯ãã£ãäœæã§ããŸãã
Webéçºã®ç¶æ³ãé²åãç¶ããã«ã€ããŠããã€ã¯ãããã³ããšã³ããšã¢ãžã¥ãŒã«ãã§ãã¬ãŒã·ã§ã³ã¯ãŸããŸãéèŠãªã¢ãŒããã¯ãã£ãã¿ãŒã³ã«ãªãå¯èœæ§ããããŸãããããã®ã¢ãããŒãã®æŠå¿µãå©ç¹ãããã³èª²é¡ãçè§£ããããšã§ã次äžä»£ã®Webã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®æºåãæŽããããšãã§ããŸãã