ã¯ããã«
RealWorldã«ã€ããŠ
èè ã¯ããããžã§ã¯ãã®ã¢ã€ãã¢ãšæå³ã次ã®ããã«èª¬æããŠããŸãã
ã ãã1幎ã»ã©åã«ãç§ãæ±ããŠããåé¡ã«ã€ããŠãã®å®è£ ãããŸããïŒ
æ°ãããã¬ãŒã ã¯ãŒã¯ã®ã³ã¢æŠå¿µãšã€ããªãã®ãŒãç¿åŸããããšã¯ãäžå¿ èŠã«ã€ã©ã€ã©ãããããŸãã
ããã¥ã¡ã³ããèªãã§ãã³ãŒããã³ã§äžèªç¶ãªäŸãå®è¡ãããtodoããµã³ãã«ã¢ããªããªããã³ã°ããŠå床çµã¿ç«ãŠãCLIãããŒã«ã«ã«ã€ã³ã¹ããŒã«ããŠ...ã¬ãŒã¹ã«åºçºããŸãïŒ
ããªããããã§ãªãããšãé€ããŠã è¿ããããããŸããã ããªããå®éã«ããªãèªèº«ã®ã¢ããªãæ§ç¯ããããšãå§ãããšããããã¯ããŒãã£ãŒã®æ³åãããªãã襲ã£ããšãã ããã§ãã
-ãšãªãã¯ãµã€ã¢ã³ãº
å®éã RealWorldã¯MediumãŸãã¯Habrãªã©ã®ããã°ç€ŸäŒãã©ãããã©ãŒã ã®ã¯ããŒã³ã§ããã ãConduitããšåŒã°ããŸããããã¯ãåãä»æ§ãšã¬ã€ã¢ãŠãã«åŸã£ãŠããŸããŸãªããã³ããšã³ãããã³ããã¯ãšã³ãïŒã¯ãããã«ã¹ã¿ãã¯ïŒãã¯ãããžãŒã䜿çšããæ奜家ã«ãã£ãŠéçºãããŠããŸãã ãããžã§ã¯ãã«åå ããã人ã¯ã ãã§ããGitHubã®ãªããžããªã«æ°ããåé¡ãäœæããå¿ èŠããããŸããããã§ãç®çã®æè¡ã¹ã¿ãã¯ãèšè¿°ãããããžã§ã¯ãã®ã¹ã¿ãŒã¿ãŒãããããã©ãŒã¯ããŠãéçºãéå§ããŸãã ããã«ãéçºè ã¯ãAngularJSã§Ericã«ãã£ãŠäœæããããã¢ã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãå®éã®æçµçµæã確èªããæ©äŒããããŸãã
å®éãããããã®æ°ããå®è£ ã®çµæã¯ãŸã£ããåãã¢ããªã±ãŒã·ã§ã³ã§ãããä»ã®ãã¯ãããžãŒãŸãã¯ã¢ãããŒãã䜿çšããŠèšè¿°ãããŠããå¿ èŠããããŸãã React / Redux ã Elm ã Angular2 ã React / MobX ã Svelte / Sapperããã³ãã®ä»ã®ãã¬ãŒã ã¯ãŒã¯ã®ãã©ãŒã¯ã¯ ãæ¢ã«å®è£ ããã³å ¬éãããŠããŸãã éäžã§ã Vue ã Emberãªã©ãã
ããã¯ãšã³ããã¯ãããžãŒã®äžã§ãããããžã§ã¯ãã¯Node / ExpressãLaravelãDjangoãASP.NET CoreãRailsãªã©ã«å®è£ ãããŠããŸãã
2017幎ã®çµããã«ããããžã§ã¯ãã¯ãããã©ãŒãã³ã¹ïŒæåã®æå³ã®ãããã€ã³ãïŒããã³ãã«ã®ãµã€ãºïŒgzipïŒããããžã§ã¯ãã®å®è£ ã«å¿ èŠãªã³ãŒãã®è¡æ°ïŒlocïŒã®3ã€ã®åºæºã«åŸã£ãŠãæã人æ°ã®ãã 9ã€ã®ããã³ããšã³ãå®è£ ã®æ¯èŒãæºåããŸãã ã
çŸæç¹ã§ã¯ã RealWorldã¯Webéçºã«æé©ãªãã¢ãããžã§ã¯ãã®1ã€ã§ãã ããªãå®éã®Webã¢ããªã±ãŒã·ã§ã³ãšææ°ã®æè¡ã¹ã¿ãã¯ã®äŸã䜿çšããŠãæãäžè¬çãªåé¡ã®è§£æ±ºçãå«ãŸããŠããŸãã ãã®ãããžã§ã¯ãã«ã¯githubã«12,000以äžã®æããããç§ã®æèŠã§ã¯ãéåžžã«æçšã§èå³æ·±ããã®ã§ãã ãã ããããããããšã§ãããHabréã«ã¯åœŒã«é¢ããæ å ±ã¯ã»ãšãã©ãããŸããã ãã€ãžã§ã¹ãã§èšåããããšã2ã3å ã
ç§ã¯äœã«ã€ããŠè©±ããŠãã
ã ããããªãç§ã¯ããããã¹ãŠæžããŠããã®ã§ããïŒ ããæ°å¹Žãç§ã¯å®éã«Webã¢ããªã±ãŒã·ã§ã³ãäœæããååïŒèšãæããã°ãããŠãããŒãµã«ãïŒã¢ãããŒãã®äŒéè ã§ãã åœç€Ÿã¯ãŸãã ãç°å¢ã«äŸåããªãã¢ããªããšåŒã°ããã¢ãããŒããå®è·µããŠããŸã ã å€æŽããã«ä»»æã®ç°å¢ïŒããæ£ç¢ºã«ã¯ãç°å¢ã®ãªã¹ãïŒã§åäœã§ããã¢ããªã±ãŒã·ã§ã³ã ããã¯ç§ãã¡ã«ãšã£ãŠç¹ã«éèŠã§ãããªããªããå瀟ã¯WebããããŸããŸãªIoTãŸã§ãå¹ åºããã©ãããã©ãŒã ã®ãªã¹ããéçºããŠããããã§ãã
ãäŒéè ããšããèšèã¯ããŸãã«å€§ãããããããŸãããããã®éãç§ã¯ããªãã®æ°ã®è°è«ãäŒè°ã«åå ãããã®å°é£ã§ç©è°ãéžããããã¯ã«é¢ããèªåã®ã¬ããŒããäœ å ãèªã¿ãŸããã ããã«ãç§ã¯ãWebã¹ã¿ãã¯ã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ã ãã§ãªããææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã®ãã¢ã¯ã»ã·ããªãã£ã ã ãããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãã ãããã³ãSEOãã®åé¡ãé·ãéåžžã«å¿é ããŠããŸãã
ååã¢ãããŒãã«ã€ããŠã®å
責äºé
ãšãã®è°è«ã
ååïŒæ±çšïŒéçºã¢ãããŒããããªãè€éã§ãå
šäœè«çãªãããã¯ã§ãããšããäºå®ãããç¥ã£ãŠããŸãã å€ãã®èšäºãæžãããå€ãã®é±å±±ãå£ããŠããŸãã ååã«å€æ°ã®éçºè
ããã®ã¢ãããŒããåãå
¥ããŠããããäžéšã®éçºè
ã¯ãŸã£ããã®å«æªè
ãšããŠè¡åããŠããŸãã
芪æãªãéçºè ã®çãããäœããã®çç±ã§ãã®éçºã¢ãããŒãã«åœã®æš©å©ããªããšæãããå Žåã¯ããŸããã®ã¬ããŒãã®ããã«ãYouTubeã§ç§ã®ã¬ããŒãã®å°ãªããšãåé éšåãã芧ãã ããã ããããããã«ãããè°è«ã®æéãç¯çŽããããã®ãã¥ãŒããªã¢ã«ã®ãã®èšäºãŸãã¯ä»ã®èšäºãžã®ã³ã¡ã³ãã§ãã®ãããã¯ã®ããªããŒãé 眮ããããšããåžæããæãããã§ãããã
ãäºããå°éããŸãããã ãŸãããã®ãããžã§ã¯ããéçºãããã®éçšã§è©³çŽ°ãªãã¥ãŒããªã¢ã«ãäœæããããšã«ãããã³ãã¥ããã£ã®å©çã«æè³ããäºå®ã®äœæ¥ãåå¥ã«å°éãããããé¡ãããŸãã ãã®äžé£ã®èšäºããããªããä»ã®èª°ãã«ãããã®ã¢ãããŒãã䜿çšããããã«åŒ·ããã®ã§ã¯ãªãã§ãã ããã äžçïŒ
芪æãªãéçºè ã®çãããäœããã®çç±ã§ãã®éçºã¢ãããŒãã«åœã®æš©å©ããªããšæãããå Žåã¯ããŸããã®ã¬ããŒãã®ããã«ãYouTubeã§ç§ã®ã¬ããŒãã®å°ãªããšãåé éšåãã芧ãã ããã ããããããã«ãããè°è«ã®æéãç¯çŽããããã®ãã¥ãŒããªã¢ã«ã®ãã®èšäºãŸãã¯ä»ã®èšäºãžã®ã³ã¡ã³ãã§ãã®ãããã¯ã®ããªããŒãé 眮ããããšããåžæããæãããã§ãããã
ãäºããå°éããŸãããã ãŸãããã®ãããžã§ã¯ããéçºãããã®éçšã§è©³çŽ°ãªãã¥ãŒããªã¢ã«ãäœæããããšã«ãããã³ãã¥ããã£ã®å©çã«æè³ããäºå®ã®äœæ¥ãåå¥ã«å°éãããããé¡ãããŸãã ãã®äžé£ã®èšäºããããªããä»ã®èª°ãã«ãããã®ã¢ãããŒãã䜿çšããããã«åŒ·ããã®ã§ã¯ãªãã§ãã ããã äžçïŒ
ã¬ããŒãã®äžéšãšããŠãMaterial Design Lite ãã³ãã¬ãŒãã® 1ã€ã«åºã¥ãå°ããªããã°ã®åœ¢ã§å圢ãã¢ã¢ããªã±ãŒã·ã§ã³ãå®è£ ããŸããã ççŽã«èšã£ãŠãå®éã«ã¯ããã¯ãšã³ãã®ãªãå°ããªã¢ããªã±ãŒã·ã§ã³ã ãšããŸããã-ãã®ååšã¯JSON Placeholderãªã©ã®å©ããåããŠã®ã¿ãšãã¥ã¬ãŒããããŸã ã
æ®å¿µãªããšã«ãæšå¹Žã®çµããã«RealWorldãããžã§ã¯ãã«ã€ããŠããç¥ããŸããã§ãããããã®ãããžã§ã¯ãã«åå ããæéã足ããŸããã§ããã æéãçµã€ã«ã€ããŠå°ãç°¡åã«ãªã£ãã®ã§ã次ã®ç¹æ§ãæºããïŒçŸåšã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªãïŒRealWorldã¢ããªã±ãŒã·ã§ã³ãå®è£ ããããšæããŸãã
ãããžã§ã¯ã宣èšïŒ
- RealWorldãããžã§ã¯ãã®ä»æ§ã«æºæ ããŸãã
- ãµãŒããŒäœæ¥ãå®å šã«ãµããŒãïŒSSRããã³ãã®ä»ãã¹ãŠïŒã
- æ¬æ ŒçãªSPAãšããŠã¯ã©ã€ã¢ã³ãã«åãçµã¿ãŸãã
- æ€çŽ¢ãšã³ãžã³ã«ãã£ãŠçŽ¢åŒä»ããããŸãã
- ã¯ã©ã€ã¢ã³ãã§JSããªãã«ããŠäœæ¥ããŸãã
- 100ïŒ å圢ïŒäžè¬ïŒã³ãŒã; *
- å®è£ ã®ããã«ããããŒãã¡ãžã£ãŒããšãã¯ã©ã³ããã䜿çšããªãã§ãã ããã **
- æ倧ã®ã·ã³ãã«ã§ããç¥ãããæè¡ã¹ã¿ãã¯ã䜿çšããŸãã ***
- æçµçãªãã³ãã«ã®ãµã€ãºã¯ã100Kb gzipãè¶ ããªãããã«ããŠãã ããã
- ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®è¡æ°ã¯1000 locãè¶ ããŠã¯ãªããŸããã
*-äžè¬çãªã³ãŒãã®èªã¿æ¹ã«ã€ããŠã
ããã¯å°ãéèŠãªãã€ã³ãã§ãã äžè¬çãªïŒå圢ã®ïŒã³ãŒããæ£ç¢ºã«ã©ã®ããã«èæ
®ãã¹ããã«ã€ããŠå€ãã®ããšãèãããã®ãããªã³ãŒãã¯ãå®è£
ã®ããã«ç§ãæžããã¢ããªã±ãŒã·ã§ã³èªäœã®ã³ãŒãã§ãããšããçµè«ã«éããŸããã ã€ãŸããçŸåšã®ãããžã§ã¯ãã®æ©èœãå®è£
ããã³ãŒããã€ãŸã ãããžã§ã¯ãäŸåã³ãŒãã
ã¢ããªã±ãŒã·ã§ã³ã®åºç€ïŒããšãã°ãWebãµãŒããŒã®ã³ãŒããªã©ïŒã®ã¿ã§ãããå¥ã®ãããžã§ã¯ãã§å€æŽãªãã§äœ¿çšã§ããã³ãŒãã®éšåã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããšããŠèæ ®ãããŸããã ãã®ã³ãŒãããã¹ã¿ãŒã¿ãŒãããããŸãã¯ãå®åããªã©ãšåŒã¶ããšãã§ããŸãã ãããã«ããããã®ã³ãŒãã¯ç¹å®ã®ããžãã¹ã¿ã¹ã¯ã®çŽæ¥çãªéšåã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®èšè¿°ã«åºã¥ããŠäžè¬åãããããŒã¹ãå®è£ ããŸãã
ãã®å Žåããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãç¹å®ã®ãããžã§ã¯ãã®å®è£ ã®ããã«ç§ãå人çã«äœæããã³ãŒããšèŠãªãããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®åºç€ïŒããšãã°ãWebãµãŒããŒã®ã³ãŒããªã©ïŒã®ã¿ã§ãããå¥ã®ãããžã§ã¯ãã§å€æŽãªãã§äœ¿çšã§ããã³ãŒãã®éšåã¯ãã¢ããªã±ãŒã·ã§ã³ã³ãŒããšããŠèæ ®ãããŸããã ãã®ã³ãŒãããã¹ã¿ãŒã¿ãŒãããããŸãã¯ãå®åããªã©ãšåŒã¶ããšãã§ããŸãã ãããã«ããããã®ã³ãŒãã¯ç¹å®ã®ããžãã¹ã¿ã¹ã¯ã®çŽæ¥çãªéšåã§ã¯ãªããã¢ããªã±ãŒã·ã§ã³ã®èšè¿°ã«åºã¥ããŠäžè¬åãããããŒã¹ãå®è£ ããŸãã
ãã®å Žåããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãç¹å®ã®ãããžã§ã¯ãã®å®è£ ã®ããã«ç§ãå人çã«äœæããã³ãŒããšèŠãªãããŸãã
**-æŸèæãšååã®å¯Ÿçã«ã€ããŠã®ç§ã®ç解ã
ååã¢ããªã±ãŒã·ã§ã³ã®äŸã調ã¹ããšã次ã®ãããªãŸã£ããæ£åœåãããŠããªãããšããã䜿çšããããšããäºå®ã«æ³šæãæãããšãã§ããŸããïŒ1ïŒãµãŒããŒã¢ããªã±ãŒã·ã§ã³ãšã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®å¥ã
ã®ãšã³ããªãã€ã³ãã ïŒ2ïŒçŸåšã®ç°å¢ïŒãisServerããªã©ïŒããã³å
±æãã¡ã€ã«ã®ãã¬ãŒã ã¯ãŒã¯å
ã®åã
ã®ã³ãŒããã©ã³ãããã§ãã¯ãããã¹ãŠã®çš®é¡ã®æ¡ä»¶ã¹ããŒãã¡ã³ãã ïŒ3ïŒãµãŒããŒã«ãŒãã£ã³ã°ãšããŒã¿ãã§ããã¯ãã¯ã©ã€ã¢ã³ãã«ãŒãã£ã³ã°ãªã©ãšã¯ç°ãªãæ¹æ³ã§å®è¡ãããŸãã ãªã©
ãã®äžååãªå®èšŒæžã¿ã®è€éããšã³ãŒãã®é£èªåããå°æ°ã®éçºè ãè©Šè¡ããããšãæããããŠããã®ã§ã¯ãªãããšæããŸãã ç§ã®å®è£ ã§ã¯ãå°ããªçºã®æŸèæã®ä»£ããã«ã建ç¯èšç»ã®æ å ±ã«åºã¥ãã決å®ã䜿çšããããåªããŸãã
ãã®äžååãªå®èšŒæžã¿ã®è€éããšã³ãŒãã®é£èªåããå°æ°ã®éçºè ãè©Šè¡ããããšãæããããŠããã®ã§ã¯ãªãããšæããŸãã ç§ã®å®è£ ã§ã¯ãå°ããªçºã®æŸèæã®ä»£ããã«ã建ç¯èšç»ã®æ å ±ã«åºã¥ãã決å®ã䜿çšããããåªããŸãã
***-ã¹ã¿ãã¯ã«ã€ããŠã
å€ãã®å Žåãååã¢ããªã±ãŒã·ã§ã³ã«é¢ããŠã¯ã ã¯ãžã© ã ããã ã¬ãã«ã® ãã¬ãŒã ã¯ãŒã¯ããŸãã¯éåžžã®æè¡ã¹ã¿ãã¯ãå€æŽããä»ã®ç¹å¥ãª ãã®ã䜿çšããå¿
èŠããããšããèãããããŸãã
ãããã£ãŠãæãåçŽã§ãæãã¢ã¯ã»ã¹ãããããããç¥ãããŠãããã¯ãããžãŒã¹ã¿ãã¯ã䜿çšããããšããŸãã ã€ãŸããç¹å¥ãªããŒã«ã®äœ¿çšãæå°éã«æããŸãã
ãããã£ãŠãæãåçŽã§ãæãã¢ã¯ã»ã¹ãããããããç¥ãããŠãããã¯ãããžãŒã¹ã¿ãã¯ã䜿çšããããšããŸãã ã€ãŸããç¹å¥ãªããŒã«ã®äœ¿çšãæå°éã«æããŸãã
ã芧ã®ãšããããªã¹ãã¯ããªãéå¿çã§ãã ããã«ã¯ãè°è«ã®äœå°ã®ãããååããšã誰ããåæããŠãããéæã§ããªããé²æ©çãªåŒ·åãããããŸãã ãããŠãSPAã®ã¹ã¿ã€ã«ã§åäœããããã°ãã©ãããã©ãŒã ã§ãããåæã«SEOããµããŒãããŸãã ãããã¯ãã¹ãŠãæ¢åã®ããã¯ãšã³ãäžã«ããåäžã®ã³ãŒãããŒã¹ã§ãTORã«åŸã£ãŠå€æŽã§ããŸããã
ããããã°ã ååã¢ãããŒããå«ã人ã®å€ãã¯ãæ¬æ Œçãªååã¢ããªã±ãŒã·ã§ã³ãäœæããããã«ã¯ãç¹å¥ãªæ¹æ³ã§ããã¯ãšã³ããæžãæããå¿ èŠããããšãã°ãã°èšãã®ã§ããã®ãããžã§ã¯ãã¯ç§ã«ãšã£ãŠèå³æ·±ããã®ã§ãã ã€ãŸããæ¢åã®ããã¯ãšã³ãã¯æ©èœããŸããã ãŸãã¯ãééããªãNodeJSãããã¯ãšã³ããšããŠäœ¿çšããå¿ èŠããããŸããããèªäœã¯fu fu fuã§ãã ãŸãã¯ãäœããã®ç¹å¥ãªæ¹æ³ã§èŠä»¶ãšTKããã³ãã®ä»ã®ãã³ã»ã³ã¹ãçå®ããå¿ èŠãããããšã
ãŸããååã³ãŒãã¯ã¯ããã«è€éã§ãããäžè¬ã«ååã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããããšã¯é£ãããæéãããããçµæžçã§ãããšèããããŸãã ç§ã®ããããã§ã¹ããã®æåŸã®3ã€ã®ãã©ã°ã©ãã¯ããããã®èª€è§£ããçããŠããŸãã
èŠããã«ãç§ã«ãšã£ãŠããã®ãããžã§ã¯ãã¯ããããå®å šã«ãŸãã¯éšåçã«åè«ããæ©äŒã§ãããåæã«æ¥œããããšã§ããããŸãã ç§ã¯æ¬åœã«æåããããšãé¡ã£ãŠããŸãã ãããã¯ã«èå³ãããããã®ãã¹ãã¹ãããã§ãã©ããŒãããå Žåã¯ãåãæ¿ããªãã§ãã ããïŒ
ã¹ã¿ãã¯éžæ
ããªãã¯ãã§ã«ç解ããŠãããšç¢ºä¿¡ããŠããŸãããããã§ãªãå Žåã¯æ確ã«ããŸã-ã¢ããªã±ãŒã·ã§ã³ã®ããã³ããšã³ãéšåãäœæããŸãã ãã®ãããRealWorldãããžã§ã¯ãã¯ä»¥äžãå«ãä»æ§ãããã³ããšã³ãã«æäŸããŸãã
- å¿ èŠãªãã¹ãŠã®æ©èœããµããŒãããREST APIãåããã¬ãã£ããã¯ãšã³ã ã
- Bootstap 4ã®ã«ã¹ã¿ã ããŒã ã
- ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãŠã®ããŒãžã®HTMLããŒã¯ã¢ããã
- ã«ãŒãã£ã³ã°ã®ã¬ã€ãã©ã€ã³ã
æ瀺ã®å®å šãªãªã¹ãã¯ããã«ãããŸã ã
ãã®ãããããã«ãããã§ã¹ãã®ã¹ããã8ãå®è¡ããå¯èœãªéãæãåçŽãªã¹ã¿ãã¯ãéžæããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®Ractive +ãã©ã°ã€ã³ã
- WebãµãŒããŒã®Express +ãã©ã°ã€ã³ã
- Webpack +ã¢ã»ã³ããªçšãã©ã°ã€ã³ã
- httpãªã¯ãšã¹ãã®Axios ã
ã芧ã®ãšãããéåžžã«ã·ã³ãã«ã«èŠããŸãã æ¥é èŸãisomorphic-ããä»ããè¶ å€§åã®ç¹å¥ãªãœãªã¥ãŒã·ã§ã³ã¯ãããŸããã
ããããããã®ãªã¹ãã®å€ãã®ãããŒã¯ããŒã¹ãã¯RactiveJSãããããŸãã ã ã¯ãã確ãã«ãããã°ã¹ãªãŒã®äžéšã§ã¯ãªãã人æ°ã®èšé²ãç Žããªããã¬ãŒã ã¯ãŒã¯ã®éžæã¯å¥åŠã«æãããããããŸããã ãã ãããã®ã¿ã¹ã¯ã«ã¯æé©ã§ããããã¯ç§ã®ãæ°ã«å ¥ãã®ããŒã«ã®1ã€ã§ããããåå¿è§ãã¥ãŒããã¥ãŒããªã¢ã«ã®éåžžã®æ¥åžžçãªã«ãŒãã³ãå°ãå€æ§åããããšèããŠããŸãã ããã«ãããããããããããšã§ãç§ã¯ããã€ãã®èº«è¿ãªããšã«ã€ããŠæ°ããèŠæ¹ã瀺ãããšãã§ããã§ãããã ããã¯ç§ã®ç®æšã§ã¯ãããŸãããã
ãµãŒããŒåŽ
Habrã¯äŸç¶ãšããŠæè¡çãªãªãœãŒã¹ã§ãããããçµæãšããŠãã®èšäºã¯åãªãæå³ã®å®£èšã§ã¯ãªãããããããã®éšåã§ã¯æ¢ã«WebãµãŒããŒã®åæã³ãŒããå®è£ ããããšã«ãªããŸãã ãã®ã³ãŒãã¯ãç¹å®ã®ãããžã§ã¯ãã®å®è£ ã«äŸåããŸããã å®éãã¬ããŒãçšã«äœæããæ¢åã®ãã¢ãããžã§ã¯ãããã³ãŒããååŸããããã調æŽããŸãã
å
責äºé
ãã®ãã¥ãŒããªã¢ã«ã¯ãäž»ã«äžã¬ãã«ä»¥äžã®ããã³ããšã³ãéçºè
ã察象ãšããŠããŸãã 誰ãææ°ã®éçºããŒã«ã«ç²ŸéããŠãããSPAããã³ååãšã¯äœããç¥ã£ãŠããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãnpmã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãwebpackã®å ¥éãã³ãã³ãã©ã€ã³ããã®ä»ã®åºæ¬çãªæäœã®åé¡ã«ã€ããŠã¯èª¬æããŸããã ã»ãšãã©ã®èªè ã«ãšã£ãŠãåŠå¥³ç°å¢ãèšå®ããéçºããŒã«ã§äœæ¥ããããã®æ¥åžžçãªæäœãªã©ã ãšæããŸãã æ¢ã«ããªãã¿ã§ãããã°æžã¿ã§ãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãnpmã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã«ãwebpackã®å ¥éãã³ãã³ãã©ã€ã³ããã®ä»ã®åºæ¬çãªæäœã®åé¡ã«ã€ããŠã¯èª¬æããŸããã ã»ãšãã©ã®èªè ã«ãšã£ãŠãåŠå¥³ç°å¢ãèšå®ããéçºããŒã«ã§äœæ¥ããããã®æ¥åžžçãªæäœãªã©ã ãšæããŸãã æ¢ã«ããªãã¿ã§ãããã°æžã¿ã§ãã
建ç¯ã«ã€ããŠ
ããã¯ãã¢ããªã±ãŒã·ã§ã³ã¢ãŒããã¯ãã£å šäœã®å€èŠ³ã§ãã ããã€ãã®éèŠãªãã€ã³ãïŒ
- Fontendã®éšåã¯ãRactiveã®ã¯ã©ã€ã¢ã³ããµãŒããŒã¢ããªã±ãŒã·ã§ã³ãšExpress / Nodeã®çŽç²ã«ãµãŒããŒããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã«åãããŠããŸãã
- RealWorldããã¯ãšã³ãã¯ãããã³ããšã³ããµãŒããŒã®èåŸã«ãããŸãã
- REST APIãžã®HTTPãªã¯ãšã¹ãã¯ãããã³ããšã³ããµãŒããŒãä»ããŠããã¯ãšã³ãã«ãããã·ãããŸãã
ã¯ãŒã¯ãããŒ
- ãŠãŒã¶ãŒã¯URLãã¢ãã¬ã¹ããŒã«å ¥åããŸãã
- ã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã«åæèŠæ±ãè¡ããŸãã
- ãµãŒããŒã¯çä¿¡èŠæ±ãåŠçããã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå®è¡ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããæç¹ã§ããµãŒããŒã¯ã¢ããªã±ãŒã·ã§ã³ã®çŸåšã®ç¶æ ãHTMLã§ã¬ã³ããªã³ã°ããå¿çãè¿ããŸãã
- ã¯ã©ã€ã¢ã³ãã¯åä¿¡ããHTMLã解éããé¢é£ãªãœãŒã¹ïŒCSSãJSãç»åããã©ã³ããªã©ïŒã®èªã¿èŸŒã¿ãéå§ããŸãã
- ãŠãŒã¶ãŒã¯ã³ã³ãã³ããåãåããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ããã¯ã°ã©ãŠã³ãã§ããŠã³ããŒããããåæåãããŸãã
- ãŠãŒã¶ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ãæäœããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ã€ã¢ã³ãã³ãŒãã¯ãã¢ã¯ã·ã§ã³ãåŠçãããµãŒããŒãžã®éåæèŠæ±ãäœæããç¶æ ãæŽæ°ããŸãã
ãã®ããã»ã¹ã¯ãå圢ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯å®å šã«æ£åžžã§ããããã®å Žåã§ãåæ§ã«æ©èœããŸãã
ãããžã§ã¯ãæ§é
ç§ãããç¥ã£ãŠããåæ§ã®ãããžã§ã¯ãã®æ§é ã䜿çšããŸãã
- /è³ç£ -éçãªãœãŒã¹ã
- / config -jsonã¢ããªã±ãŒã·ã§ã³ã®æ§æã
- / dist -webpackã®åºåãã£ã¬ã¯ããªã
- /ããã«ãŠã§ã¢ -ãµãŒããŒã¹ã¯ãªããã®ãã£ã¬ã¯ããªã
- / src-ã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã
- /ãã¹ã -ãã¹ãã
- /ããŒã« -ãŠãŒãã£ãªãã£ã
- / views-çŽç²ã«ãµãŒããŒåŽã®HTMLãã³ãã¬ãŒãã
- server.js -Expressäžã®WebãµãŒããŒã®ã³ãŒãã
ãããŠãã¡ããããã¹ãŠã®çš®é¡ã®package.json ã webpack.config.jsããã³ãã®ä»ã®æ§æãã¡ã€ã«ã®å®å šãªæããã®èª¬æã¯ãã¥ãŒããªã¢ã«ã®ç¯å²å€ã§ãã
ã³ãŒããæžã
WebãµãŒããŒã®ã¡ã€ã³ã³ãŒãã¯./server.jsãã¡ã€ã«ã«ãããŸãã Expressèªäœã«å ããŠãå®çšçãªã¿ã¹ã¯ã解決ããããã«ãã©ã°ã€ã³ïŒ ããšã¯ã¹ãã¬ã¹ããã«ãŠã§ã¢ã ïŒã®ããã€ãã䜿çšããŸãã 以åã¯ããã¡ãããå¿ èŠãªã¢ãžã¥ãŒã«ã¯ãã¹ãŠã npm iã³ãã³ãã䜿çšããŠpackage.jsonã«ç»é²ããå¿ èŠããããŸãã
æåã«ããµãŒãããŒãã£ã®ã¢ãžã¥ãŒã«ãšExpressèªäœãæ¥ç¶ããŸãã
const express = require('express'), helmet = require('helmet'), compress = require('compression'), cons = require('consolidate');
䜿çšãããŠãããã¹ãŠã®Expressæ¡åŒµæ©èœã¯å®å šã«æ®éã®ãã®ã§ãããååãšã¯é¢ä¿ãããŸããã ãããã®ã»ãšãã©ã¯éåžžã«æšæºçã§ãã 以äžã«ç°¡åãªèª¬æãšç®çã瀺ããŸãã
- ãã«ã¡ãã -ç¹å®ã®HTTPããããŒãèšå®ããããšã«ãããããã€ãã®äžè¬çãªæ»æããããã³ããšã³ããä¿è·ããŸãã
- å§çž® -ãµãŒããŒå¿çã®gzipå§çž®ã
- çµ±å -Expressã®ãã³ãã¬ãŒãã¢ãžã¥ãŒã«ã
次ã«ããããŸã§äœãããªãããã«ãŠã§ã¢ãããã€ãäœæããããããæ¥ç¶ããŸãã
const app = require('./middleware/app'), api = require('./middleware/api'), req = require('./middleware/req'), err = require('./middleware/err');
- app-ãµãŒããŒã§ã¢ããªã±ãŒã·ã§ã³ãèµ·åããã³ãŒãã¯ããã«ãããŸãã
- apiã¯ãAPIããã¯ãšã³ãã®httpèŠæ±ã®ãããã·ã§ãã
- req-ãã¹ãŠã®HTTPèŠæ±ã®ååŠçã
- err-ãµãŒããŒãšã©ãŒåŠçã
ã¡ã€ã³ãµãŒããŒã®èšå®common.jsonãæ¥ç¶ããExpressãšæ¡åŒµæ©èœãåæåããŸãã
const config = require('./config/common'); const server = express(); server.engine('html', cons.mustache); server.set('view engine', 'html'); server.use(helmet()); server.use(compress({ threshold: 0 })); server.use(express.static('dist'));
Expressã®ãã³ãã¬ãŒããšã³ãžã³ãšããŠå£ã²ããã€ã³ã¹ããŒã«ããŸãã ãªã圌ã¯æ£ç¢ºã«ïŒ Ractiveã¯ãã³ãã¬ãŒãã«å£ã²ãæ§æã䜿çšããŠããã ããªã®ã§ãåäžæ§ãå®çŸããŸãã
次ã«ãéçå šäœãå§çž®ãããããšãããã³éçãã./distããã©ã«ããŒã«ããããšãéç¥ããŸãïŒWebpackãããã«çæãããŸãïŒã
次ã«ãæåŸã®ä»äžãïŒ
server.use(req()); server.all('/api/*', api()); server.use(app()); server.use(err()); server.listen(config.port);
ã³ãŒãã«ã¯ç¹å¥ãªèª¬æã¯å¿ èŠãããŸããã ããã§ã®ããŒãã€ã³ãã¯æ¬¡ã®ãšããã§ãã
- / api / *ãžã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯REST APIïŒapiããã«ãŠã§ã¢ïŒã«ãããã·ãããŸãã
- ä»ã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯ãã¢ããªã±ãŒã·ã§ã³ïŒã¢ããªããã«ãŠã§ã¢ïŒãèµ·åããHTMLãè¿ããŸãã
- ç¹å®ã®ã±ãŒã¹ïŒoauthãªã©ïŒãåŠçããããã«ãè¿œå ã®ãããã«ãŠã§ã¢ããè¿œå ããããšãå¯èœã§ãã äžéã®ãããã«ãŠã§ã¢ããæ©èœããªãã£ãå ŽåããŸãã¯nextïŒïŒã«é²ãã å Žåãå¶åŸ¡ã¯åžžã«ãã¢ããªããã«ãŠã§ã¢ãã«è»¢éãããŸãã
- ãµãŒããŒåŽã®ãšã©ãŒãçºçãããšã ãerrããã«ãŠã§ã¢ãã§ã¹ããŒã«ãçºçããŸãã
WebãµãŒããŒã®æŠèŠã³ãŒã
const express = require('express'), helmet = require('helmet'), compress = require('compression'), cons = require('consolidate'); const app = require('./middleware/app'), api = require('./middleware/api'), req = require('./middleware/req'), err = require('./middleware/err'); const config = require('./config/common'); const server = express(); server.engine('html', cons.mustache); server.set('view engine', 'html'); server.use(helmet()); server.use(compress({ threshold: 0 })); server.use(express.static('dist')); server.use(req()); server.all('/api/*', api()); server.use(app()); server.use(err()); server.listen(config.port);
Expressã®çµéšãããŸããªãçŽç²ãªããã³ããšã³ãã®éçºè ã§ããããã®ãããªããªããã£ãã³ãŒããç°¡åã«ç解ã§ããããã«æããŸãã ãã¡ããã圌ããããã«ãŠã§ã¢ããšã¯äœãããããŠäžè¬ã«ãã®æŠå¿µãç解ããŠããå Žåã
ãããŸã§ã®ãšããããã®ã³ãŒãã¯å®éã«ã¯äœãããŸããã ãããã®å Žåã§ãããããžã§ã¯ãå ã§è¡ãå¿ èŠãããããšã¯è¡ããŸããã 次ã®èšäºã§ã¯ãçŽç²ã«ãµãŒããŒåŽã®ã³ãŒããè¿œå ããã¢ããªã±ãŒã·ã§ã³èªäœã®ã³ãŒãã«é²ã¿ãŸãã
ãæž èŽããããšãããããŸããïŒ
UPDïŒ SSRãšProgressive Enhancementã䜿çšããå圢RealWorldã¢ããªã±ãŒã·ã§ã³ã®éçºã ããŒã2-Hello World
UPD 2ïŒ RactiveJSããŽãæŽæ°ãããããã§ã¹ãã«ãã©ã°ã©ã9ããã³10ãè¿œå ããŸããïŒ ããŒã3ãåç §ïŒ