ãã€ã¯ãããã³ããšã³ãã®ããã®Module Federationã培åºè§£èª¬ãã©ã³ã¿ã€ã ã§ã³ãŒããšäŸåé¢ä¿ãå ±æãããã³ãã«ãµã€ãºãåæžããç¬ç«ãããããã€ãå®çŸããæ¹æ³ãåŠã³ãŸãã
Module Federation: ãã€ã¯ãããã³ããšã³ãã«ãããã©ã³ã¿ã€ã ã¢ãžã¥ãŒã«å ±æã®æ±ºå®çã¬ã€ã
çµ¶ããé²åããWebéçºã®äžçã«ãããŠãç§ãã¡ã¯é倧ãªã¢ãŒããã¯ãã£ã®è»¢æãç®ã®åœããã«ããŠããŸãããç§ãã¡ã¯ãã¹ã±ãŒã©ããªãã£ãšããŒã ã®èªåŸæ§ãæ±ããã¢ããªã·ãã¯ã¢ãŒããã¯ãã£ããããã¯ãšã³ãã®ãã€ã¯ããµãŒãã¹ãžãšæ ãããŠããŸãããä»ãåãé©åœãããã³ããšã³ããå€é©ããŠããŸãããã€ã¯ãããã³ããšã³ãã®æä»£ãå°æ¥ãããã®äžå¿ã«ã¯ãããããã¹ãŠå®çšçãªãã®ã«ãã匷åãªãã¯ãããžãŒããããŸãããããModule Federationã§ãã
ãã€ã¯ãããã³ããšã³ãã®äžå¿çãªèª²é¡ã¯ãåžžã«è¿°ã¹ãã®ã¯ç°¡åã§ã解決ããã®ã¯å°é£ã§ãããããã¯ãè€æ°ã®ç¬ç«ããŠãããã€ãããã¢ããªã±ãŒã·ã§ã³ãããåäžã§ãŸãšãŸãã®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ããé ããè¥å€§åãã管çäžèœãªæ··ä¹±ãçããããããšãªããã©ã®ããã«æ§ç¯ããããšããããšã§ããã³ã³ããŒãã³ãã©ã€ãã©ãªãReactã®ãããªãã¬ãŒã ã¯ãŒã¯ãšãã£ãå ±éã®ã³ãŒãããããŒãžã§ãã³ã°ã®æªå€¢ãå調ãªãªãŒã¹ã匷å¶ããããšãªããã©ã®ããã«å ±æããã°ããã®ã§ããããïŒ
ããããããModule Federationããšã¬ã¬ã³ãã«è§£æ±ºããåé¡ã§ããWebpack 5ã§å°å ¥ããããã®æ©èœã¯ãåãªãæ°æ©èœã§ã¯ãªããç§ãã¡ãWebã¢ããªã±ãŒã·ã§ã³ã®æ§ç¯ãšãããã€ã«ã€ããŠèããæ¹æ³ã«ããããã©ãã€ã ã·ããã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ãModule Federationã®ãäœããããªãããã©ã®ããã«ããæ¢ãããã®æãå€é©çãªèœåã§ããã©ã³ã¿ã€ã ã¢ãžã¥ãŒã«å ±æã«çŠç¹ãåœãŠãŸãã
ç°¡åãªåŸ©ç¿ïŒãã€ã¯ãããã³ããšã³ããšã¯ïŒ
Module Federationã®ã¡ã«ããºã ã«é£ã³èŸŒãåã«ããã€ã¯ãããã³ããšã³ããäœãæå³ããã®ãã«ã€ããŠèªèãåãããŸããããå€§èŠæš¡ãªeã³ããŒã¹ãµã€ããæ³åããŠã¿ãŠãã ãããã¢ããªã·ãã¯ãªäžçã§ã¯ãããã³ããšã³ãå šäœïŒååæ€çŽ¢ãåå詳现ãã·ã§ããã³ã°ã«ãŒãããã§ãã¯ã¢ãŠãïŒãåäžã®å·šå€§ãªã¢ããªã±ãŒã·ã§ã³ã§ãããã§ãã¯ã¢ãŠããã¿ã³ãžã®å€æŽããã¢ããªã±ãŒã·ã§ã³å šäœã®ãã¹ããšåãããã€ãå¿ èŠãšãããããããŸããã
ãã€ã¯ãããã³ããšã³ãã¢ãŒããã¯ãã£ã¯ããã®ã¢ããªã¹ãããžãã¹ãã¡ã€ã³ã«æ²¿ã£ãŠåå²ããŸããäŸãã°ã次ã®ãããªããŒã ãååšãããããããŸããã
- æ€çŽ¢ããŒãšçµæããŒãžãææããæ€çŽ¢ããŒã
- ååè©³çŽ°ãšæšå¥šååãææããååããŒã
- ã·ã§ããã³ã°ã«ãŒããšæ¯æãããã»ã¹ãææãããã§ãã¯ã¢ãŠãããŒã
åããŒã ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èªèº«ã®æ åœéšåãç¬ç«ããŠæ§ç¯ããã¹ãããããã€ã§ããŸããããã«ãããããã€ãã®äž»èŠãªå©ç¹ãããããããŸãã
- èªåŸçãªããŒã ïŒ ããŒã ã¯ç¬èªã®ã¹ã±ãžã¥ãŒã«ã§äœæ¥ããªãªãŒã¹ã§ãããããéçºãå éããŸãã
- ç¬ç«ãããããã€ïŒ æšå¥šãšã³ãžã³å ã®ãã°ããæ¯æããããŒãžã®éèŠãªæŽæ°ã劚ããããšã¯ãããŸããã
- æè¡ã®æè»æ§ïŒ æ€çŽ¢ããŒã ãVue.jsã䜿çšããååããŒã ãReactã䜿çšãããªã©ãããŒã ã¯ç¹å®ã®ãã¡ã€ã³ã«æé©ãªããŒã«ãéžæã§ããŸãïŒãã ããããã«ã¯æ éãªç®¡çãå¿ èŠã§ãïŒã
ãããããã®ã¢ãããŒãã¯å ±æãšäžè²«æ§ã«é¢ããç¬èªã®èª²é¡ãããããããããç§ãã¡ãå€ãããæ¹ã«åŒãæ»ããŸãã
åŸæ¥ã®ã³ãŒãå ±ææ¹æ³ïŒãããŠããªãããããäžååãªã®ãïŒ
æŽå²çã«ãããŒã ã¯ç°ãªãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³éã§ã³ãŒããå ±æããããã«ããã€ãã®æ¹æ³ã詊ããŠããŸããããããããã«ãã€ã¯ãããã³ããšã³ãã®æèã§ã¯éå€§ãªæ¬ ç¹ããããŸããã
NPMããã±ãŒãž
æãäžè¬çãªã¢ãããŒãã¯ãå ±æã³ã³ããŒãã³ãããŠãŒãã£ãªãã£ãããŒãžã§ã³ç®¡çãããNPMããã±ãŒãžãšããŠå ¬éããããšã§ããå ±æã³ã³ããŒãã³ãã©ã€ãã©ãªãå žåçãªäŸã§ãã
- åé¡ç¹ïŒ ããã¯ãã«ãæã®äŸåé¢ä¿ã§ããããŒã Aãå ±æã®`Button`ã³ã³ããŒãã³ãã`my-ui-library`ã§ããŒãžã§ã³1.1ãã1.2ã«æŽæ°ããŠããããŒã BãšããŒã Cã¯ãæåã§`package.json`ãæŽæ°ãã`npm install`ãå®è¡ãããã€ã¯ãããã³ããšã³ãå šäœãåãããã€ãããŸã§ããã®æŽæ°ãååŸã§ããŸãããããã¯å¯çµåãçã¿åºããç¬ç«ãããããã€ã®ç®çãæãªããŸãããŸããåãã³ã³ããŒãã³ãã®è€æ°ã®ããŒãžã§ã³ããã©ãŠã¶ã«ããŒããããããšã«ãªããæçµçãªãã³ãã«ãè¥å€§åããŸãã
å ±æã¯ãŒã¯ã¹ããŒã¹ãæã€ã¢ãã¬ã
ã¢ãã¬ãïŒLernaãYarn/NPMã¯ãŒã¯ã¹ããŒã¹ãªã©ã®ããŒã«ã䜿çšïŒã¯ããã¹ãŠã®ãã€ã¯ãããã³ããšã³ããåäžã®ãªããžããªã«ä¿æããŸããããã«ãããå ±æããã±ãŒãžã®ç®¡çãç°¡çŽ åãããŸãã
- åé¡ç¹ïŒ ã¢ãã¬ãã¯éçºè äœéšã®åäžã«ã¯åœ¹ç«ã¡ãŸãããäžå¿çãªã©ã³ã¿ã€ã ã®åé¡ã¯è§£æ±ºããŸãããäŸç¶ãšããŠãã«ãæã®äŸåé¢ä¿ã«äŸåããŠããŸããå ±æã©ã€ãã©ãªãžã®å€æŽã¯ã倿Žãåæ ããããã«ããããæ¶è²»ãããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãåãã«ãããã³åãããã€ããå¿ èŠããããŸãã