æ©èœããªã¯ãšã¹ãããŸããããããšããã°ãå ±åããŸããïŒ
ç¹åŸŽ
çŸåšã®åäœã¯äœã§ããïŒ
æ£ããããšãè¡ãããšãæå³ããŠããéçºè
ã¯ãPRODã¢ãŒãã§ã¯ãªãDEVã¢ãŒãã誀ã£ãŠæ¬çªç°å¢ã«åºè·ããããšããããããŸãã ããã¯ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããå¯èœæ§ããããŸãã DEV-> PRODã¯1è¡ã®å€æŽã§ãããReactãåæ°ã¥ããŠæ¢æ±ã§ãããã®ã§ãã
ããã«ã¯çŽ æŽããããã¥ã¢ã³ã¹ãããããããããããå šäœçãªDXå€ãšUXã®éã«ã¯ãã©ã³ã¹ãåããŠããããšãç§ã¯ç¥ã£ãŠããŸãã ãã1ã€ã®èª²é¡ã¯ãå€æŽèªäœãç°¡åãªããšã§ãã ããã§ã®æ£ãã解決çãããè¯ãããã©ã«ããªã®ãããã匷åãªã¢ããã«ã·ãŒãªã®ãã¯äžæã§ãã @sebmarkbageã®ãããªäººã ã¯ããããæ¢ç¥ã®åé¡ã§ããããšãèªããŠããã®ã§ããããããããæ¹åããã®ã«åœ¹ç«ã€è°è«ã®äœå°ããããŸãã
ãŸããèŠåãªãããDEVã«åãæ¿ããã«ã¯ãã³ãŒãããŒã¹å šäœãä¿®æ£ããå¿ èŠãããå ŽåããããŸããããããæé©ã§ã¯ãããŸããã ãã ããããã§èª¬æãã䟡å€ã®ããäžéã®è§£æ±ºçããããããããŸããã
æåŸ ãããåäœã¯äœã§ããïŒ
Reactã¯ããŠãŒã¶ãŒãDEVã§ã¯ãªãPRODã¢ãŒããæ¬çªç°å¢ã«åºè·ããããšãæšå¥šããŸãã ç§ã¯ããããæ¹åããããšãããã©ã€ãã©ãªå±€ã§æäŸãããïŒãŸãã¯ãWebpackã«ãããã«ã/ãã³ãã«æã«äœããã®åœ¢ã§åãçµãïŒãœãªã¥ãŒã·ã§ã³ãåãå ¥ããŸãã
ãã®ã¹ã¬ããã«ã¯ãããŒã«ã«ãã¹ãã®æ€åºãããã¢ã©ãŒããæ¬çªç°å¢ã§äœ¿çšããå Žåã®DOMãžã®ãéçºã¢ãŒããã¡ãã»ãŒãžã®æ¿å ¥ãŸã§ãããŸããŸãªææ¡ããããŸããã ãã®ãããªãã®ïŒ
ãããã¯ã @ thelarkinnã¯ããã®ãããªã¡ãã»ãŒãžã³ã°ã®æ€åºããã容æã«ããããã«å¿ èŠãªENVæ§æãæšæºåããããšææ¡ããŠããŸããã ãããã®ã©ããæãçŸå®çã§ãããã¯äžæã§ãã Reactã³ã¢ãåé¡ã«åãçµãæ¹æ³ã«ã€ããŠæã£ãŠãããããããªãä»ã®ã¢ã€ãã¢ãããå¯èœæ§ããããŸãã
Reactã®ã©ã®ããŒãžã§ã³ãããã³ã©ã®ãã©ãŠã¶/ OSããã®åé¡ã®åœ±é¿ãåããŸããïŒ
æè¿ã®ãã¹ãŠã®ããŒãžã§ã³ã
@jordwalkeããã®ãã®ã¹ã¬ããã¯ããã®åé¡ãåŒãèµ·ãããŸããã 圌ã¯ãã³ãããŒã¯ã«é¢ããŠãå ¬å¹³ãªæèŠãè¿°ã¹ãŠãããšæããŸãããç§ã¯äººã ã補åäœéšãåºè·ããã®ãã©ã®ããã«æ¯æŽã§ããããæ°ã«ãããŠããŸãã
åèïŒ https ïŒ//github.com/facebook/react/pull/8782
ã³ã³ããã¹ããšããŠãReactã®DEVããŒãžã§ã³ãçž®å°ããããšãæ€åºãããå Žåã¯ãã§ã«èŠåããŠããŸãïŒ https ïŒ//github.com/facebook/react/blob/8791325db03725ef4801fc58b35a3bb4486a8904/src/renderers/dom/ReactDOM.js#L91 -L98
ãŠãŒã¶ãŒã«éç¥ããããã®åæ§ã®ãã¥ãŒãªã¹ãã£ãã¯ãèŠã€ããããšãã§ãããããããã£ãšç©æ¥µçã«DOMãã€ã¢ãã°ããããã¢ããã§ããéãããããã¹ãã§ãã
ãŸããç§ãã¡ãæäŸããèŠåã¯ã人ã ãããã«æ³šæãæããšããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããããšãæ確ã«ããããšæããŸãã ãã®ã¹ã¬ããã¯ãããã©ã«ãã§ãªãå Žåã«äºåŸã«ããããããã€ããããšãé£ããçç±ã®ããã€ãã®çè«çæ ¹æ ã説æããŠããŸãã
ãŸããåäžã®ã³ã³ãœãŒã«ã®ææ¡ã§ãã£ã€ã ã鳎ãããããšæããŸããéçºã¢ãŒãã§renderToString
ãåŒã³åºãããå Žåã¯èŠåããŸãã æããã«ãã»ãšãã©ã®å Žåã renderToString
ã¯ããŒãã§åŒã³åºãããDOMãã€ã¢ãã°ãèŠåããããããã¢ãããããããããšã¯ã§ããŸããã
æ®å¿µãªããã NODE_ENV
ãproduction
ã«èšå®ãããŠãããã©ããã ãã§ãªãã process.env.NODE_ENV
ãã³ã³ãã€ã«ãããŠãããã©ãããæ€åºã§ããããã«ããããšæã£ãŠããŸãã 誰ãããããè¡ãæ¹æ³ãç¥ã£ãŠããŸããïŒ
ã¹ã¬ãã@sebmarkbageã«æè¬ããäºåŸã«å±éããããšã®é£ãããèªããŸãã ãŸããçŸåšã®èŠåã«ãæè¬ããŠããŸãã äžéšã®éçºè ã¯ããããã€ããããµã€ãã®ã³ã³ãœãŒã«åºåãã§ããã ãé »ç¹ã«ãã§ãã¯ããªãå¯èœæ§ãããããã§ãã ããããããã¯è¯ã第äžæ©ã§ãã
ãŠãŒã¶ãŒã«éç¥ããããã®åæ§ã®ãã¥ãŒãªã¹ãã£ãã¯ãèŠã€ããããšãã§ãããããããã£ãšç©æ¥µçã«DOMãã€ã¢ãã°ããããã¢ããã§ããéãããããã¹ãã§ãã
ãŠãŒã¶ãŒãžã®éç¥ã«äœ¿çšããããã¥ãŒãªã¹ãã£ãã¯ã®æ¹åã«æè¬ããŸãã ããç©æ¥µçãªDOMãã€ã¢ãã°ã¯ã圹ã«ç«ã¡ãŸãã ããã¯ãµã€ãããšã³ããŠãŒã¶ãŒã®ããã«åãç¶ããããšã確å®ã«ããã§ãããããéçºè ãéžã¶ããšãã§ããã¶ãäžãã£ãŠããããã©ãŒãã³ã¹ãã«ãŒãããããšããã¢ã¯ãã£ããªãã³ããæäŸããŸãã
å¥ã®æ¹æ³ã¯ãå ã®æçš¿ã§è¿°ã¹ãããã«ããã«ãããŒã«/ ENVã¬ãã«ã§ãããä¿®æ£ããæ¹æ³ãèŠã€ããããšã§ãã ããã«ãããDOMã€ã³ãžã§ã¯ã·ã§ã³ãäžèŠã«ãªããŸãã
DOMã«ã¡ãã»ãŒãžã³ã°ãæ¿å ¥ããããšã¯å±éºã§ãããå°ãæ³å®ããããŠããããã§ãã ããã«ããããšã³ããŠãŒã¶ãŒãäºæããªãæ··ä¹±ãæãã¢ã©ãŒããåãåãå¯èœæ§ããããŸããããã¯ãIMOã§ã¯åãå ¥ããããªãããã§ãã
@thelarkinnã¯ããã®ãããªã¡ãã»ãŒãžã³ã°ã®æ€åºããã容æã«ããããã«å¿ èŠãªENVæ§æãæšæºåããããšææ¡ããŠããŸããã
ããã¯ãããã«å¯ŸåŠããããã®çæ³çãªã¹ããŒã¹ã®ããã«æããŸãã ããã¯ãã«ãã®åé¡ã§ãããå¯èœã§ããã°ããã«ãããŒã«ã§å¯ŸåŠããå¿ èŠããããŸãã
äºäŸïŒã³ã³ãœãŒã«ã®èŠåã¯ãéå»ã«è¡šç€ºãããªããªã£ãïŒãŸãã¯ç¡èŠãããïŒããšããããŸãã ããã«ã¯æ確ãªæ°åã¯ãããŸããããã³ã³ãœãŒã«ããŒã¹ã®èŠåã§ã¯äžååã ãšæããŸãã @addyosmaniã«åæããŸããããã¯ãDOMããŒã¹ã®èŠåã倧ãã«åœ¹ç«ã€ãšããããšã§ãã
@surmaãããããèŠèªæ§ãé«ããããã«console.warn
ãŸãã¯console.error
ã䜿çšããå¿
èŠããããŸãð
ã¢ããªã±ãŒã·ã§ã³ãæ¬çªç°å¢ã§å®è¡ãããŠããå Žåã«ã®ã¿ã³ã³ãã³ããã¢ããªã±ãŒã·ã§ã³ã«æ¿å ¥ããããšããã©ã®ã·ããªãªã§ãã©ã®ããã«åãå ¥ãããããããããŸããã ããªãã¯ãã¢ããªã±ãŒã·ã§ã³ãå®éã®ãŠãŒã¶ãŒã«ããã·ã¥ãããåã«ã¡ãã»ãŒãžããã£ããããããšãã倧ããªä»®å®ãç«ãŠãŠããŸãããã®å Žåãã¡ãã»ãŒãžã¯UXã«å€§ããªææãäžããå¯èœæ§ããããŸãã
ãšããã§ãFiberã«ããã«å æ¬çãªãšã©ãŒåŠçãµããŒããè¿œå ããŠãé害ïŒã¹ããŒããããšã©ãŒïŒã®ããã³ã³ããŒãã³ããã«ã¹ã¿ã ãšã©ãŒãã¥ãŒã«çœ®ãæããããšãã§ããããã«ããŸãã ããã©ã«ãã®ã·ããªãªã§ããéåžžã«ç©æ¥µçã«ãªãå¯èœæ§ãããããšã©ãŒãçºçããå Žåã¯ãã®ã³ã³ããŒãã³ããããªãŒããåé€ããã ããªã®ã§ããšã«ãããŠãŒã¶ãŒçšã®ã«ã¹ã¿ã ãšã©ãŒUIãå¿ èŠã«ãªããŸãã
ãã®èŠåã«å¯ŸããŠããã®ãããªãšã©ãŒãããªã¬ãŒã§ããå¯èœæ§ããããŸãã
æ£çŽãªãšããã$ console.log
console.{error,warn}
ãäœããå€ãããšã¯æããŸããã ç§ãèšã£ãããã«ããã®è©±ã¯éžè©±çã§ãã
ãŸããDOMãã€ã¢ãã°ã衚瀺ããããšã解決çã§ãããšèšã£ãŠããã®ã§ã¯ãããŸããã ã§ããããã¯ç§ãå人çã«ã¯å¿«é©ã ãšæããŸãã éçºã¢ãŒãã«ãšã©ãŸãããšãæªåœ±é¿ãäžããå Žåãå°ãªããšããŠãŒã¶ãŒã¯_äœã_ãééã£ãŠããããšãç¥ã£ãŠãããããããããã«ãããã¿ã³ãªã©ãæŒãå§ããŸãã
çµè«ïŒãã¬ãŒã ã¯ãŒã¯ã¯ãããæç¹ã§éçºè ã®é¡ã«è§Šããå¿ èŠããããšæããŸãã ããã«ã€ããŠãã¬ã€ã³ã¹ããŒãã³ã°ãè¡ãããã¬ãŒã ã¯ãŒã¯ã®äœæè ãå°æ¥éçºã¢ãŒãã§ã®å±éãé²ãããã«ã©ã®ãããªæé ãå®è¡ãã劥åãããã確èªããããšæããŸãã
éçºã補åãã«é¢ä¿ãªããç°å¢ãæäŸããªãéãReactããŸã£ããæ©èœããªãå Žåã¯ã©ããªããŸããïŒ ããããã°ãã©ã¡ããã®æ¹æ³ã§æèçãªéžæãè¡ãããããšã«ãªããŸãã
DOMã«æ¿å ¥ãããã¡ãã»ãŒãžã«ã€ããŠã¯ãã°ããŒãã«ãªã©ã䜿çšããŠç¡å¹ã«ããããšãã§ããŸãã 倧ããIMOã¯ãããŸããã ç¡å¹ã«ãããšãèªåãäœãããŠããããç¥ã£ãŠããããšãèªããããšã«ãªããŸãã
ã³ã³ãœãŒã«ã¡ãã»ãŒãžã®åé¡ã¯ãå€ãã®ããšããã°ã«èšé²ããããç¡èŠããä»ã®èŠåã衚瀺ããããããããšããããã¹ã¯ããŒã«ãéããæåã®ã³ã³ãœãŒã«ã¡ãã»ãŒãžãèŠãããªãããšã§ã...
å¿ é ã®envã䜿çšãããšãå¿ ç¶çã«ãã€ã©ãŒãã¬ãŒããªã©ã§env varãèšå®ãããããã䜿çšãéå§ã§ããŸããæãå ¥ããŸããïŒ/
æ£çŽãªãšãããconsole.logäžã®consoleã{errorãwarn}ãäœããå€æŽãããšã¯æããŸããã
éçºè ãã³ã³ãœãŒã«ããã§ãã¯ããŠããªãããŸãã¯ã³ã³ãœãŒã«ãèŠåã§éè² è·ã«ãªã£ãŠãããšããåé¡ã ãšæããŸããïŒ ããã¯ãéçºè æè²ã«é¢ããããäžè¬çãªã¢ãããŒãã§ïŒéšåçã«ïŒå¯ŸåŠã§ããŸããïŒ
ãŸããDOMãã€ã¢ãã°ã衚瀺ããããšã解決çã§ãããšèšã£ãŠããã®ã§ã¯ãããŸããã ã§ããããã¯ç§ãå人çã«ã¯å¿«é©ã ãšæããŸãã éçºã¢ãŒãã«ãšã©ãŸãããšãæªåœ±é¿ãäžããå Žåãå°ãªããšããŠãŒã¶ãŒã¯äœããééã£ãŠããããšãç¥ã£ãŠãããããããããã«ãããã¿ã³ãªã©ãæŒãå§ããŸãã
ç§ã¯ãããç解ããŠããŸãããç§ã¯ããã解決çã§ãããšã¯èšããŸã§ããªãããã®è§£æ±ºçã§ã¯ãªããšèšã£ãŠããã ãã§ãã å¿«é©ã«äœ¿çšã§ããã®ã¯è¯ãããšã§ããã泚æãæ ã£ãŠãã»ãšãã©ã®äººãäºæããªããšã©ãŒããŠãŒã¶ãŒã«è¡šç€ºããããªããšæ³å®ããæ¹ããããšæããŸãã
çµè«ïŒãã¬ãŒã ã¯ãŒã¯ã¯ãããæç¹ã§éçºè ã®é¡ã«è§Šããå¿ èŠããããšæããŸãã ããã«ã€ããŠãã¬ã€ã³ã¹ããŒãã³ã°ãè¡ãããã¬ãŒã ã¯ãŒã¯ã®äœæè ãå°æ¥éçºã¢ãŒãã§ã®å±éãé²ãããã«ã©ã®ãããªæé ãå®è¡ãã劥åãããã確èªããããšæããŸãã
ç§ã¯ð¯éçºè ã®é¡ãèŠãããšãã§ããŸãããé©åãªå Žæã§ãããè¡ãããšãéèŠã§ãã ç§ã«ãšã£ãŠãããã¯æ¬çªã§ã¯ãªããã«ãã¹ãããã§ãã
DOMã«æ¿å ¥ãããã¡ãã»ãŒãžã«ã€ããŠã¯ãã°ããŒãã«ãªã©ã䜿çšããŠç¡å¹ã«ããããšãã§ããŸãã 倧ããIMOã¯ãããŸããã ç¡å¹ã«ãããšãèªåãäœãããŠããããç¥ã£ãŠããããšãèªããããšã«ãªããŸãã
ããã©ã«ãã§æå¹ã«ããããšã¯ãæ§æå¯èœã«ããªãããšãšåããããæªãããšã§ããããã©ã«ãã®åäœã¯ããšã³ããŠãŒã¶ãŒã«äºæããªãåäœãããããå¯èœæ§ããããŸãã ã©ã¡ãããšããã°ãããã©ã«ãã§ç¡å¹ã«ããå¿ èŠããããŸãããéçºè ã¯æåã®åé¡ã«æ°ä»ãããä¿®æ£ã§ãããããç®çå šäœãç¡å¹ã«ãªããŸãã
ã³ã³ãœãŒã«ã¡ãã»ãŒãžã®åé¡ã¯ãå€ãã®ããšããã°ã«èšé²ããããç¡èŠããä»ã®èŠåã衚瀺ããããããããšããããã¹ã¯ããŒã«ãéããæåã®ã³ã³ãœãŒã«ã¡ãã»ãŒãžãèŠãããªãããšã§ã...
ç§ã¯å®å šã«ãããç解ããŠããŸããã³ã³ãœãŒã«ã¯æ··éããå¯èœæ§ããããç©äºãèŠéããã¡ã§ãã ããããç§ã䞻匵ããŠããæ£ç¢ºãªçç±ã§æ··éããŠããŸããããã¯ãéçºè ã«ãã£ãŒãããã¯ããšã©ãŒãæäŸããå Žæã§ãã æ¿å ¥ãããã¡ãã»ãŒãžã¯ããã§ã¯ãªããããã¯ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®éªéã«ãªããªãã
çã«ããªã£ãŠããŸããç§ã¯ãã®çç±ãç解ããŠããŸãã
ãããããã³ã³ãœãŒã«ã®ãã©ãŒãããã䜿çšããŠç©äºãé£ã³åºãããããšã¯ãå°ãªããšãäœãã§ãããã
åé¡ã¯ãæ¬çªç°å¢ã§ã³ã³ãœãŒã«ãèŠã人ãã»ãšãã©ããªãããšã§ãã ããã§ã¯ã©ã®ãã©ã³ãã§ã䜿çšã§ãã人ã ã¯ããã«æ°ä»ããªãã§ãããã
ãã ããæ¬çªç°å¢ã§ããã©ã«ãã§ïŒ16ãŸãã¯17ã®ïŒé倧ãªå€æŽãšããŠã¡ãã»ãŒãžã衚瀺ããããã«ãããšãèŠéãããšã¯ã§ããŸããã ã€ãŸããïŒæ°ãããŠãŒã¶ãŒã®å ŽåïŒåããŠå±éããããšãããšçºçããæ¢åã®ãŠãŒã¶ãŒã¯æ°ããã¡ãžã£ãŒã«æŽæ°ãããšãã«ãªãªãŒã¹ããŒããèªãå¿ èŠããããŸãã ã§ããããç§ãã¡ãããã«ã€ããŠéåžžã«æ確ã§ãããã¡ãã»ãŒãžãèŠéãããšã¯äžå¯èœã§ããéããããã¯å®è¡å¯èœã ãšæããŸãã
åé¡ã¯ãæ¬çªç°å¢ã§ã³ã³ãœãŒã«ãèŠã人ãã»ãšãã©ããªãããšã§ãã ããã§ã¯ã©ã®ãã©ã³ãã§ã䜿çšã§ãã人ã ã¯ããã«æ°ä»ããªãã§ãããã
ChromeããŒã ã®ããã«é¢ããçµéšã«ã€ããŠã®ã¿ã³ã¡ã³ãã§ããŸãããåæããŸãã ã»ãšãã©ã®äººã¯ãå埩ã¯ãŒã¯ãããŒäžã«ã³ã³ãœãŒã«ã¡ãã»ãŒãžã«æ°ä»ãã§ãããããå®çšŒåãµã€ãã§ã®èŠåãèŠãå²åã¯ã¯ããã«å°ãªãããããã«äœçšãããã®ã¯ã»ãšãã©ãããŸããã
ãã ããæ¬çªç°å¢ã§ããã©ã«ãã§ïŒ16ãŸãã¯17ã®ïŒé倧ãªå€æŽãšããŠã¡ãã»ãŒãžã衚瀺ããããã«ãããšãèŠéãããšã¯ã§ããŸããã ã€ãŸããïŒæ°ãããŠãŒã¶ãŒã®å ŽåïŒåããŠå±éããããšãããšçºçããæ¢åã®ãŠãŒã¶ãŒã¯æ°ããã¡ãžã£ãŒã«æŽæ°ãããšãã«ãªãªãŒã¹ããŒããèªãå¿ èŠããããŸãã ã§ããããç§ãã¡ãããã«ã€ããŠéåžžã«æ確ã§ãããã¡ãã»ãŒãžãèŠéãããšã¯äžå¯èœã§ããéããããã¯å®è¡å¯èœã ãšæããŸãã
@gaearonã®ãããªå€æŽãåãå ¥ããŠãããŠããããšãã å°æ¥ã®ãªãªãŒã¹ã§ããã©ã«ãã§ã¡ãã»ãŒãžãè©Šãããšã«åæããã«ã¯äœãå¿ èŠã§ããïŒ ð
ç§ã¯ãã³ã³ãœãŒã«ã®èŠåã解決çã§ã¯ãªããããŒãžã«è¡šç€ºãããèŠåã®æ¹ãã¯ããã«åªããŠããããšã«åæããŸãã
ããŒãžã«è¡šç€ºãããèŠåã¯æ¬¡ã®ããã«ãªããŸãã
ã¡ãã»ãŒãžãç¡å¹ã«ããããšã¯éèŠã§ããã¡ãã»ãŒãžãããŒãžäžã®äœãã劚害/èŠãé ããŠããå¯èœæ§ãããããã§ãã ãã®èšå®ã¯ããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åããããããçºä¿¡å ãç°ãªããããèŠåã¯åŒãç¶ãã©ã€ããµãŒããŒã«è¡šç€ºãããŸãã
ãããå®éã®ãŠãŒã¶ãŒãã©ã€ããµã€ãã§ãã®ã¡ãã»ãŒãžãèŠãã®ã¯ããªãæãããããšã§ãããéçºè ãä¿®æ£ããããã«ä¿ããããããªåé¡ãããããã«æããŸãããéçºè ã¢ãŒãã®ããã©ãŒãã³ã¹ã®åé¡ã«æºè¶³ããŠãã人ãããŸãã
ãã®èŠåïŒDOMãžã®æ¿å ¥ïŒãåããŠèŠããšãã«æ¬çªç°å¢ã«ãã£ãå Žåãç§ã¯ããªãåæºããŸãã èŠåã¯äºåã«çºçããå¿ èŠããããŸãã
@rtorrç§ã®ææ¡ã¯ããµã€ããéçºã¢ãŒãã®ãšãã¯ãã€ã§ãçºçãããšããããšã§ããäœãã足ããªãå Žåãé€ããŠãäºåã«ç¢ºèªããå¿ èŠããããŸããïŒ
@jakearchibaldæ··ä¹±ããŠãã¿ãŸãããç§ã®è¿äºã¯ããªãã«åããããŠããŸããã§ããã 'insert into the dom'ãœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåã¯ããŠãŒã¶ãŒãäœããããã·ã¥ããåã«ãéåžžã«æ³šæããŠãŠãŒã¶ãŒã«ç¥ãããŠããå¿ èŠãããããšãã¹ã¬ããã«ææããããšæããŸãïŒã©ãããããããããã§ã¯ããããŸããïŒ ã
äžéšã®éçºè ãèšå®ãªã©ãå¿ããŠã管çããããããªã£ãŠããŸãã®ãç®ã«ããŸãã æ¬çªç°å¢ã§éçºã¢ãŒãã䜿çšããå Žåã®çµæãšããŠããã®å¯èœæ§ã¯äŸ¡å€ããããŸããïŒ
åžžã«ç¡å¹ã«ããå¿ èŠããããšããDOMããŒã¹ã®èŠåã¯åé¡ãããŸãããæ°žä¹ ã«ç¡å¹ã«ããããšãå¯èœã§ããå¿ èŠããããããŒã«ã«ãã¹ãã§ã¯ãŸã£ãã衚瀺ãããªãå¯èœæ§ããããŸãã
devtoolsãã¢ã¯ãã£ãåããããã«æå¹ã«ããå¿ èŠããããã©ãŠã¶ã«ããçš®ã®ãã©ã°ãèšå®ã§ãããšããããç§ãé©ããããã®ã§ãïŒããããããããªãã¯éçºè ã§ããïŒ[ã¯ã/ããã]ããšãã倧ããªãªãŒããŒã¬ã€ã§ãã ïŒããŒãžãæ€åºããéçºè åãã®èŠåã®ã¿ã衚瀺ã§ããããšã æ£ããè¡šçŸãããšãèªå·±XXSæ»æã«ã圹ç«ã€å¯èœæ§ããããŸãã
ç§ãåžžã«ç¡å¹ã«ããªããã°ãªããªããšããDOMããŒã¹ã®èŠåã¯å€§äžå€«ã§ã¯ãããŸãããããããæ°žä¹ ã«ç¡å¹ã«ããããšãå¯èœã§ãªããã°ãªããŸãã
dev-modeããªã³ã«ããŠèµ·åãããµã€ããåé¡ãããŸããã ãã¶ããã¡ãã»ãŒãžã¯1æ¥ã«1åã ãåŽäžããå¿ èŠããããŸããïŒ ãã ããæéãé·ãã»ã©ãã©ã€ãã§çµäºããå¯èœæ§ãé«ããªããŸãã æ°žä¹ ã«ç¡å¹ã«ã§ããå Žåã¯ãæåã®å Žæã«æ»ããŸãã
ãŸããæ¬çªç°å¢ã§æå³ããªãdomããŒãã¯åé¡ãªããšæããŸãã
ãããã«ãããç§ãã¡ã¯åžžã«ãšããžã±ãŒã¹ãæã£ãŠãããšæããŸãã ãã®åé¡ãåžžã«çºçããå Žåã¯ãéçºã¢ãŒãã®é ä¿¡ãééã£ãŠããå¯èœæ§ããããŸãã å®ç§ãªäžçã§ã¯çæ³çã§ã¯ãããŸãããã誰ãã®ã¢ããªã±ãŒã·ã§ã³ãå€æŽããããšãããšããªãã»ã©prodã¢ãŒããéèŠã§ããããšãããã£ãå Žåã¯ãããã©ã«ãã§devã¢ãŒãããªããã€ã³ããå¿ èŠããããŸãã
@rtorr
ãŸããæ¬çªç°å¢ã§æå³ããªãdomããŒãã¯åé¡ãªããšæããŸãã
ã©ãããŠïŒ ïŒç§ã¯ããªããééã£ãŠãããšèšã£ãŠããã®ã§ã¯ãªããããªãã®çç±ãèãããã ãã§ãïŒ
ãã¶ããprodãã¡ã€ã³ãå®çŸ©ããããã®èšå®ãè¿œå ããŸãã prodãã¡ã€ã³ãèšå®ãããŠããªãå Žåã¯ãåžžã«DEVã¢ãŒãã«é¢ããèŠåã衚瀺ãããŸãïŒãã¡ã€ã³URLã®èšå®èŠæ±ããããŸãïŒãèšå®ãããŠããå Žåã¯ãURLãprodãã¡ã€ã³ãšäžèŽããå Žåã«ã®ã¿èŠåã衚瀺ãããŸãã éçºè ã«éç¥ããããµãŒãã¹ããã€ã³ãããããšãã§ããŸã
ããã§å»ºèšçãªè°è«ãã§ããŠããããã§ãã ç§ãåé¡ã解決ããã®ãèŠãããšãã§ãã2ã€ã®è§£æ±ºçãããã«ãããŸãã Webpackã¯NODE_ENVã匷å¶çã«æå®ããããšãã§ããReactã¯ããã䜿çšããŠDEVãPRODã«åºè·ãã人ã ãããç°¡åã«åé¿ã§ããŸãããããã¯Webpackãžã®é倧ãªå€æŽã«ãªããŸãã ç§ã¯ä»ãSeanãšããã®ãããªãã®ãWebpack3ã§ã©ãã»ã©å®çŸå¯èœãã«ã€ããŠè©±ãåã£ãŠããŸããReact+ Webpackã¹ã¿ãã¯ã®åå¿è ãšããã©ãŒãã³ã¹ãå奜çã«ä¿ã€ããšã¯ãäž¡æ¹ã®ãã£ã³ããæ°ã«ãããŠããããšã§ãã
2çªç®ïŒDOMã€ã³ãžã§ã¯ã·ã§ã³ã®ã¢ã€ãã¢ïŒã¯Reactãå®è¡ã§ããããšã§ãããJakeãè¿°ã¹ãããã«ãã¡ãã»ãŒãžã1æ¥1å衚瀺ããããåŽäžããããšã§UXã®ãã©ã³ã¹ãåããŸãã åé¡ãä¿®æ£ããããã®1è¡ã®å€æŽã§ãããåãããã€ããå¿ èŠããããŸãã ç§ã¯çµå¶é£ãã³ã£ããããããšãæãŸãªãããšã«å®å šã«å ±æããŸãã
ããå€ãã®Reactãµã€ããåºè·ããå Žåã¯ãFBãäœããæäŸããããã«åãçµãã ã¯ããã«é«éãªãšã¯ã¹ããªãšã³ã¹ãæäŸããå¿ èŠããããŸãã 誰ããããè¯ãã¢ã€ãã¢ãæã£ãŠãããªããããããææ¡ããŠãã ããã
@jakearchibald
ã©ãããŠïŒ ïŒç§ã¯ããªããééã£ãŠãããšèšã£ãŠããã®ã§ã¯ãªããããªãã®çç±ãèãããã ãã§ãïŒ
äžèšã®ç§ã®ã³ã¡ã³ãã«æ»ããšãéçºè ã«äºåã«ç¥ãããããšãã§ããªãéãïŒããã¯è§£æ±ºãã¹ãå®éã®åé¡ã®ããã§ãïŒãéçºè ã«èŠåã衚瀺ããŠè£œåã®äŸ¡å€ãäžããã®ã¯æ¥µç«¯ãªããšã§ãã å€ãã®å Žåãããã¯éçºã¢ãŒãã®ããã©ãŒãã³ã¹ããã補åã«æªåœ±é¿ãäžããå¯èœæ§ããããŸãã
ç§ãã¡ãäœãããããšãã誰ããããã©ã«ãã®ãã®ãæ¬çªç°å¢ã«åºè·ããããšããŠããã®ã§ãããæ¬çªç°å¢ãããã©ã«ãã«ããŠã¿ãŸãããïŒ ããã»ã©å€§ããªåœ±é¿ããªããšãããŸã§éçºã¢ãŒããæ¹åããŠã¿ãŸãããïŒ
@jakearchibaldãããäž¡åŽã«åé¡ãããããã§ãã ç§ã¯ãããªããææ¡ããŠãããã®ã§ãã£ãŠãããã®ã¹ã¬ããã®äººã ãäœãè¯ããã®ãæãä»ããšä¿¡ããŠããŸãã Y'allã¯çŽ æŽãããFYIã§ãã å€å極端ãªã®ãçãã§ãã
ãŠãŒã¶ãŒãReactéçºããŒã«ãå®è¡ããŠããå Žåã«DOMããŒãã®èŠåãæ¿å ¥ããŠãéåžžã®ãŠãŒã¶ãŒããããçµéšããªãããã«ããããšã¯ã§ããŸãããïŒ
@jakearchibald
dev-modeããªã³ã«ããŠèµ·åãããµã€ããåé¡ãããŸããã ãã¶ããã¡ãã»ãŒãžã¯1æ¥ã«1åã ãåŽäžããå¿ èŠããããŸããïŒ ãã ããæéãé·ãã»ã©ãã©ã€ãã§çµäºããå¯èœæ§ãé«ããªããŸãã æ°žä¹ ã«ç¡å¹ã«ã§ããå Žåã¯ãæåã®å Žæã«æ»ããŸãã
ãµã€ããç«ã¡äžãããããšãã誰ãããæºåãã§ããŠããããšå€æããã®ã§ãããã¯æªãããšã§ããã倧æšäºã§ã¯ãããŸããã ãã ããïŒããããæ£ç¢ºãªæ°ã¯ããããŸãããïŒæ°åäžã®éçºè ããµã€ããç Žæ£ããå¿ èŠããããŸãïŒDOMèŠåã¯ããµã€ãã®ä»ã®éšåãšã©ã®ããã«çžäºäœçšãããããããªãããããã®ããã«æ±ãå¿ èŠããããŸãïŒããŸããèŠåã衚瀺ãããç¶æ ã§ãµã€ãã䜿çšã§ããå ŽåïŒ1æ¥ã«5åããŸãã¯1åã ãèŠåããããšã¯å€§æšäºã§ãã ã»ãšãã©ã®éçºè ã¯ãã«ããã§ãŒã³ïŒã«ã¹ã¿ã ãcreate-react-appãªã©ïŒãæ£ããèšå®ããŠããããã®èŠåããŸã£ãã䜿çšããªãããããããåãé€ãããšãã§ããå¿ èŠããããŸãã
@ dan-gambleãã ããReact Dev Toolsã䜿çšããŠããªãéçºè ã¯ããã®èŠåã®æãç·æ¥ã®ã¿ãŒã²ããã§ãã
@Pajnæœåšçã«ãChromeæ¡åŒµæ©èœãããŠã³ããŒããããããšãã£ãŠãèªåçã«prod / devã¹ã€ãããæèããããã«ãªããšã¯æããŸããã
@ dan-gambleãããããã¡ããéããŸãã ãããããããªãã§ã¢ããªå šäœãéçºããŠãã人ãããŸããããã¯ãéçºããŒã«ãããŸã䜿çšããŠããªããããçž®å°ãããã³ãŒãã«å¯ŸããçŸåšã®èŠåã衚瀺ãããå¯èœæ§ãäœãããšã瀺ããŠãããšæããŸãã
ç§ã¯éåžžããã€ã³ãããã§ã«ããããããŠãããšæãããšãã«ãã®ãããªé·ãè°è«ã«è¿œå ããããšã¯ãããŸããããããã«åæãããã®ãã€ã³ãã匷調ããããšæããŸãïŒDOMã«è§ŠããŠãéçºããŒãžã§ã³ã䜿çšããŠããããšãèŠåããŸã倧ããªééãã«ãªããŸãã ç§ã®ç¥ãéããä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãã®åäŸã¯ãããŸããã
ãã¹ãŠã®ãã¥ãŒããªã¢ã«ããã¹ãŠã®éã³å Žãéçºã¢ãŒãã䜿çšããŠReactãæãããã¹ãŠã®å°ããªãµã€ããããžã§ã¯ããæ³åããŠã¿ãŠãã ããã Reactã§äœã楜ããããšãæ¢æ±ãããããã¹ãã±ãŒã¹ãåé¢ãããããããã«ãç§ãäžç·ã«æããå°ããªãã¹ããµã€ãã¯ãã¹ãŠãããŸãã æåã§ç¡å¹ã«ããªããã°ãªããªãã£ããããã®ãµã€ãã®ãã¹ãŠã®èŠåã«åå¿ãããªããç§ã¯ä¿¡ããããªãã»ã©æã£ãŠããã§ãããã ããã¯å§åçãªèŠªã®ããã«æãã Reactã䜿çšããããšãç©æ¥µçã«æããšã©ãŸãããŸãããªããªããäœãæ°ããããšãããããšãããšãæéŠãå©ãããã§ãã
2æéããšã§ããã£ãŠãïŒ ããããçµæ§ã§ãã ãã®ãããªçµ¶ãéãªããã€ããããšã¯ç¢ºãã«ãŠãŒã¶ãŒãReactã§éçºããããšãæããšã©ãŸãããã§ãããããããŠç§ã¯æ£çŽã«ããã人ã ãä»ã®ãã¬ãŒã ã¯ãŒã¯ãæ¡çšããããã«é ãããã ãããšæããŸãã ãã¶ãããã¯Chromeéçºè ãæãã§ããããšã§ããïŒ
ã¯ããããã¯ã©ããããããæ¬çªç°å¢ã«ç§»è¡ãããšããäºå®ã¯èšããŸã§ããããŸãããç¹å®ã®ããŒã ã«Reactãæ¡çšãããã説åŸããã®ã¯ãã§ã«ååã«å°é£ã§ãããããã¯åœŒãã«ãšã£ãŠããã«å¯Ÿãã匟è¬ã§ãã
ç§ãReactã§æãæ°ã«å
¥ã£ãŠããã®ã¯ã ReactDOM.render(...)
ãåŒã³åºããŸã§äœãè¡ããªãããšã§ãããããããšãæ瀺ãããå Žæã«ã®ã¿ããŒã¿ãé
眮ãããŸãã ã ãããããããã¯ãšãŠãè¯ããå€ç«ãããæ©èœçãªã©ã€ãã©ãªã§ãã
人ã
ãçž®å°ãããŠããªããã³ãã«ãåºè·ããŠãããã©ãããæ€åºããå¿
èŠããããŸããïŒ å¿
èŠãªãšãã«ãã£ãã·ã¥ããŠããªãå Žåã¯ã©ãã§ããããã 圌ããnginxãæé©ã«æ§æããŠããªãå Žåã¯ã©ãã§ããïŒ ãŸãã¯ãå¿
èŠãªãšãã«shouldComponentUpdate
ã䜿çšããªãã§ãã ããã ãŸãã¯ãå¿
èŠã®ãªããšãã«ãã¹ãŠãäžå¿
èŠã«ã¬ã³ããªã³ã°ããŠããŸããïŒ
ããã©ãŒãã³ã¹ãæªãã®ã«ã¯ããã€ãã®çç±ããããReactã®éçºã¢ãŒãã ãã§ãããéé£ããã®ã¯ééã£ãŠããŸãã ãµã€ããå±éãããšãã¯ãæé©åããããµã€ããå±éããæ¹æ³ãç解ããŠããããšãå®å šã«æåŸ ãããŸãã ç§ãã¡ã«ã§ããããšããªããšããããã§ã¯ãããŸãããããã®åé¡ã®äž»ãªçç±ã¯ããã³ãããŒã¯ã®äœæè ããã¥ãŒããªãžã§ã³ã¹ãè¡ã£ãŠããªãããšã§ããããã®ããã«ãéãæãå¿ èŠã¯ãããŸããã ãããåŒã³åºãå¥ã®æ¹æ³ãèŠã€ããå¿ èŠããããŸãã
ç§ã¯ãæ£ãã解決çã§ãããšç§ãèãããã®ããã©ããŒã¢ããããã€ããã§ãããããŒã«ã«ãããã®çš®é¡ã®å¶éãå ¥ããŠãã ããã Webpackããæ¬çªçšã«ãµã€ãããã«ãããããã«äœ¿çšããããŒã«ãããããã®ãã§ãã¯ã匷å¶ããå¿ èŠãããå Žæã§ããããšã確èªããŠãã ããããã«ãããã»ã¹ã§èª²ãããããããçš®é¡ã®å¶éããããŸãã
WebpackãNODE_ENVèšå®ã匷å¶ããããšã«é¢ããŠïŒããããããªããžããªã«ãã§ã«åé¡ããããŸãïŒãenvèšå®ã«äŸåããªãã©ã€ãã©ãªã䜿çšããã®ãé£ãããªããŸãããïŒ
ãããšããNODE_ENVã®äœ¿çšãæ€åºããã³ãŒããããã䜿çšããå Žåã«ã®ã¿åŒ·å¶ãããšããèãã§ããïŒ
ã2æéãã«ãã ããã®ã¯ãããŸãããã ãããæ©èœããéããããã¯ä»»æã®æéã§ããå¯èœæ§ããããŸãã
ããã«ãããŒã«ã«ã¹ãã¬ãŒãžã€ãã³ãã¯ããªãªãžã³ããšã«1åã ãåŽäžããå¿ èŠãããããšãæå³ããŸãã 1ã€ã®ããŒãžã«è€æ°ã®ãã¢ãããå Žåã1ã€ãéãããšãä»ã®ãã¢ãéããããŸãã
èŠåãæå¹ã«ãªã£ãå Žåãããã¯è¿ éãªä¿®æ£ãä¿èšŒããã®ã«ååãªå€§ããã§ã-ãŠãŒã¶ãŒã«å©çããããããã®ã§ãã Reactãå ¬ã®å Žã§ã©ã®ããã«èŠããããå¿é ãªå Žåã¯ããã®ãããªäžå¿ èŠãªé床äœäžãé¿ããããšèããŠããŸãã
確ãã«ãããã¯äžæ£ãªãã£ãã·ã¥ããããŒãªã©ãæ€åºããŸãããããã¯ããéçºã¢ãŒããã®ã¿ãæ€åºããããšã§ãã ãŸãããæ»ããããåãã®è°è«ã¯åœ¹ã«ç«ã¡ãŸããã
éçºè ãå¥ã®ãã«ãããŒã«ã䜿çšãããããããæ¬çªã¢ãŒãã«ç§»è¡ããªãã£ããããå Žåã«ãåãåé¡ãçºçãããããåé¡ããã«ãããŒã«ã«ç§»åããããšã¯æçšã§ã¯ãªããšæããŸãã éçºã¢ãŒããã¬ãŒã ã¯ãŒã¯ã¯ãã§ã«ã³ã³ãœãŒã«èŠåãçæããŸãããããã¯æããã«æ©èœããŠããŸããã
ããã¯ãã³ãããŒã¯ã ãã§ã¯ãªããå®éã®Webãµã€ãã«é¢ãããã®ã§ãããã¹ã€ãããåãæ¿ããããªãã£ããããå®éã®ãŠãŒã¶ãŒã®å®è¡é床ã¯é ããªããŸãã
@jakearchibaldç§ã®ææ çãªãã®ãžã®åççãªåå¿ãããããšãã Reactã§ãµã€ããé ããªãçç±ã¯ããããããã®ã¯ç¢ºããªãã€ã³ãã ãšæããŸãã éçºã¢ãŒãã®å€§ãŸããªãã§ãã¯ããã©ãŠã¶å ã®èŠåãããåªããããã©ãŒãã³ã¹ã®æ¹åãææ¡ã§ããæ¹æ³ãç¥ããããšæããŸãã Reactã¢ããªãåæããéçºã¢ãŒããªã©ã®ãã¹ãŠããåã¬ã³ããªã³ã°ãå€ããããŸã§ãããã©ãŒãã³ã¹ã«é¢ããçå£ãªææ¡ãæäŸããããŒã«ãããã°ãããã¯ã¯ããã«äŸ¿å©ã§ãã ãã®ãããªäžè¬çãªããŒã«ã¯ãwebpackãbrowserifyãªã©ããããããã€ãã©ã€ã³ã«æ¥ç¶ã§ããŸãã
ãããç§ãèšãããã£ãäž»ãªããšã§ãããã€ããjsbinããã¥ãŒããªã¢ã«ãããã«ã¯å°ããªãã¹ããµã€ãããŸãšããŠfileïŒ//ãããã³ã«ã§éããªã©ã5ã10ã®ç°ãªãå Žæã§Reactdevã¢ãŒãã䜿çšããäºå®ã§ãã 匷å¶çãªãã©ãŠã¶å èŠåã¯ããã®çš®ã®æè»ãªéçºã«å¯ŸããŠæµå¯Ÿçã§ãããããã¯Webãéåžžã«åªããŠããç¹ã§ãã Webäžã®ãã¡ã€ã³éã§ReactãåŠç¿ããŠããã®ã§ããããã®èŠåã¯ã©ãã«ã§ã衚瀺ãããŸãã
èŠåãæå¹ã«ãªã£ãå Žåãããã¯è¿ éãªä¿®æ£ãä¿èšŒããã®ã«ååãªå€§ããã§ã-ãŠãŒã¶ãŒã«å©çããããããã®ã§ãã Reactãå ¬ã®å Žã§ã©ã®ããã«èŠããããå¿é ãªå Žåã¯ããã®ãããªäžå¿ èŠãªé床äœäžãé¿ããããšèããŠããŸãã
éçºè åºæã®èŠåããšã³ããŠãŒã¶ãŒã«è¡šç€ºãããå¯èœæ§ãèš±å¯ããããšã§ãããç§ã«ã¯åãå ¥ããããªãããã§ãã é ããµã€ãã1ã€ã§ããããã®ãããªã¡ãã»ãŒãžã¯ãç¹ã«ã»ãã¥ãªãã£ã«éç¹ã眮ãããµã€ãã®å ŽåããŠãŒã¶ãŒã®ä¿¡é Œãæãªãå¯èœæ§ããããŸãïŒéè¡ã®ãµã€ãã§çªç¶äžå¯è§£ãªãšã©ãŒã衚瀺ãããå Žåã¯ãåãã§ããã ããŸããïŒïŒGoogleã¯ãã¹ãŠã®ãµã€ãã§åé¡ãããŸãããã»ãã®äžç¬ã§ãããŠãŒã¶ãŒã¯çªç¶ãã®èŠåãåãåããŸããïŒ
ããã«ãããŒã«ã«ã¹ãã¬ãŒãžã€ãã³ãã¯ããªãªãžã³ããšã«1åã ãåŽäžããå¿ èŠãããããšãæå³ããŸãã 1ã€ã®ããŒãžã«è€æ°ã®ãã¢ãããå Žåã1ã€ãéãããšãä»ã®ãã¢ãéããããŸãã
ãããéè€æé€ããããã«localStorage
ã«äŸåããããšã¯ã§ããŸããã localStorage
ïŒãŸãã¯ãã®ä»ã®ããŒã«ã«æ°žç¶ããŒã¿ïŒãã©ã®ééã§ãã¯ãªã¢ãããªããšããä¿èšŒã¯ãããŸããã
ç·šéïŒãŸãã {INTERVAL}
ããšã«1åã ããšã©ãŒã衚瀺ããããšã§ã決å®è«çã«åçŸã§ããªããããåçŸãšãããã°ãã¯ããã«å°é£ã«ãªããŸããã
解決ããå¿ èŠããã2ã€ã®ã±ãŒã¹ããããŸãïŒ
DOMã«è§Šããããšã«å察ããè°è«ã¯èª¬åŸåããããŸãã
倧ãããŠæŽŸæã§æçœãªã³ã³ãœãŒã«èŠåãããå Žåãæ¬çªç°å¢ã«åºè·ããåã«ãéçºããŒãžã§ã³ã䜿çšããŠããã®æ¬åœã«æçœãªã³ã³ãœãŒã«ã¡ãã»ãŒãžã衚瀺ãããå¯èœæ§ããããŸãã ãããã¯ãããã€ãã®ã³ãŒãããã§ã«æ¬çªç°å¢ã«åºè·ãããŠãããããããŸããããå¥ã®ãããžã§ã¯ãã§ã¯ãã³ã³ãœãŒã«ã¡ãã»ãŒãžãèŠéãããšã¯äžå¯èœãªæ¬¡ã®åå¿ããŒãžã§ã³ã䜿çšããŸãã å€å圌ãã¯åœŒããæ¬çªç°å¢ã«åºè·ãããã®ãµã€ããèŠããŠããŠãããã§DEVãæå¹ã«ãªã£ãŠãããã©ããããã§ãã¯ããã§ãããã
ã³ã³ãœãŒã«ã¡ãã»ãŒãžã¯æè²çãªãã®ã«ãªããŸããããšãã°ãReactéçºãè¡ã人ãªã誰ã§ããDEVã«ã¯æ¬åœã«éèŠãªããšãããããšãç¥ã£ãŠãããéçºã«Reactã䜿çšãããã³ã«ãããç®ã«ããŸãã
ç§ã¯https://github.com/facebook/react/pull/8782ã«ã€ããŠèºèºããŠããŸããããªããªãã人ã ã¯äžè¬ã«ãåãé€ãããšãã§ããªãèŠåã奜ãŸãªãããã§ãïŒhttps://github.com/facebook/react/issues/ãåç §ïŒã 3877ïŒããããã代æ¿æ¡ãèæ ®ãããšãããã¯èš±å®¹ã§ãã解決çãããããŸããã
å¥åŠã localStorageã䜿çšãããšãä»ã®æ¹æ³ã§ã¯ã«ããŒãããŠããªããµã€ãã§EUã®Cookieæ³ãé©çšãããŸããïŒ
éçºäžã®æçãªèŠåãè¯ãèãã§ãããªãããªãä»ã®ã©ã€ãã©ãªããããè¡ããªãã®ã§ããïŒ ããŠã1ã€ã®çç±ã¯ãã®ãããªåé¡ã®ããã§ãã ä»ã®äººãããããããå Žåã圌ããåæ§ã®UIããããã¢ããããå¿ èŠããããŸããïŒ ãããããã¹ãŠéããå¿ èŠããããŸããïŒ
ãããåŠçããããã«ãããäžå¿çãªãã®ãããã°çæ³çã ãšç§ã«ã¯æããŸãã
ããããChromeã«ã¯éçºã¢ãŒããããã®ã§ããããïŒ ã©ã€ãã©ãªã¯ãã¹ãã«éçºã¢ãŒãã§ããããšãéç¥ããChromeã¯ãããžãè¿œå ããããããã¢ããããŠãã®ããšã瀺ãããšãã§ããŸãã
ãããããreact devtoolsæ¡åŒµæ©èœãå©çšããŠãdevã¢ãŒãã§reactã䜿çšããŠããŒãžãéããšãã«ãéç¥ãæãããªäœãã衚瀺ã§ãããšæããŸããïŒ
@sebmarkbage
éçºäžã®æçãªèŠåãè¯ãèãã§ãããªãããªãä»ã®ã©ã€ãã©ãªããããè¡ããªãã®ã§ããïŒ
ç§ã¯èª°ããæåã§ããå¿ èŠããããšæããŸãã Angularã«ãåæ§ã®åé¡ãããã httpïŒ//code.govã®ãããªãã®ãéçºã¢ãŒãã§èµ·åããŸãã Reactãä»ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯æãŸããããªããããªãã®ãæããå§ããããç§ã¯ãããã«åæ§ã®å€æŽãå ããããã«ä¿ããŸãã
ç§ã¯åœŒãã«åæ§ã®å€æŽãå ããããã«ä¿ããŸãã
@jakearchibaldã¯ãåãã¬ãŒã ã¯ãŒã¯ãç¬èªã®èŠåãæäŸããå¿ èŠãããããšã瀺åããŠããŸããïŒ æ¬çªç°å¢ã§ç¬èªã®éçºèŠåãæäŸãããã¬ãŒã ã¯ãŒã¯/ã©ã€ãã©ãªã®æšæºãèšå®ããããšã¯çŽ æŽãããã¢ã€ãã¢ã§ã¯ãªããšæããŸãã ãã©ãããã©ãŒã ã§æšæºåããããšãã¹ãã§ã¯ãããŸãããïŒ @sebmarkbageãè¿°ã¹ãããã«
ããããChromeã«ã¯éçºã¢ãŒããããã®ã§ããããïŒ ã©ã€ãã©ãªã¯ãã¹ãã«éçºã¢ãŒãã§ããããšãéç¥ããChromeã¯ãããžãè¿œå ããããããã¢ããããŠãã®ããšã瀺ãããšãã§ããŸãã
ããã¯çŽ æŽãããã¢ã€ãã¢ã ãšæããŸãã åäŸïŒSafariã«ã¯ãDevToolsã«ã¢ã¯ã»ã¹ããããã«æå¹ã«ããå¿ èŠãããå¥ã®ã¢ãŒãããããŸãã Chromeãåãããšãããå ŽåãDEVã¢ãŒãã®ã€ã³ãžã±ãŒã¿ãŒãšãããããªã¬ãŒããAPIãå®å šã«è¿œå ããããšãã§ããŸãã ãã®ã€ã³ãžã±ãŒã¿ãŒã¯éçºè ã«ã®ã¿è¡šç€ºãããããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæãªãããšã¯ãããŸããã
ãã©ãŠã¶ãã³ããŒããã®ãããªããšãå®è£ ããã®ãåŸ ã£ãŠããŸãããïŒ
@jideã¯ãããã ãããã®åé¡ã«è¿ éã«å¯ŸåŠãããããæ£ãã察åŠããããšãéèŠã§ãã ãŸããæšæºåã®åãçµã¿ãæ€èšããåã«ãåäžã®ãã©ãŠã¶ãŒã§å®è£ ããããšãã§ããŸãïŒå¿ èŠãªå ŽåïŒã
@aweary
åãã¬ãŒã ã¯ãŒã¯ãç¬èªã®èŠåãæäŸããå¿ èŠãããããšã瀺åããŠããŸããïŒ
åãã¬ãŒã ã¯ãŒã¯ãç¬èªã®éçºã¢ãŒããæäŸããŠããããšãèãããšïŒãããŠãã®ã¢ãŒãã¯ãã¬ãŒã ã¯ãŒã¯éã§å€§ããç°ãªãå¯èœæ§ããããŸãïŒããã¬ãŒã ã¯ãŒã¯ãåæ§ã«ç¬èªã®æ¹æ³ã§èŠåãå®è£ ããå¿ èŠãããããšã¯å®å šã«å ¬æ£ãªããã§ãã
ãã©ãŠã¶ã¯ãdevtoolsãããŒãžã«å ¬éãããªãããã«ããããã«ããçšåºŠã®é·ãã«ãªã£ãŠããŸãã devtoolsããããžã®åå ¥éå£ã«ããŠããå ŽåãDOMèŠåãèŠéãããšã®ãªãå€ãã®ãŠãŒã¶ãŒãèŠéãããšã«ãªããŸãã DOMèŠåã¯åçŽã§ããã ãã§ãªãããã©ãããã©ãŒã ã®äŸåé¢ä¿ãå°ãªããããå€ãã®éçºè ã«å±ããŸãã ããã·ã³ãã«ã§å¹æçãªãµãŠã³ãã¯åå©ã®ããã§ãã
@gaearon Chrome DevToolsåŽã§ã¯ããŠã§ããã©ãããã©ãŒã ãšãã¬ãŒã ã¯ãŒã¯ã®äœæè ãéèŠãªèŠåãéç¥ããããã«äœ¿çšã§ããã©ã€ãã®ãéåAPIãã«ã€ããŠãã¬ã€ã³ã¹ããŒãã³ã°ãè¡ã£ãŠããŸããã ãããã¯ãä»åŸã®ç£æ»ããã«ã®æŽæ°ã®ããã«ã©ããã«è¡šç€ºãããŸãã ããã¯ããªãã®è³ªåã«äŒŒãŠããããã«èãããDEVã¢ãŒãã®æ€åºã§èŠåãããªã¬ãŒããããã«äœ¿çšã§ããŸãã
ãã®ç¹å®ã®åé¡ã«ã€ããŠã¯ãåœåã®èšç»ãããå°ã倧ããªé³ãèãããå¯èœæ§ããããŸãã ã³ã³ãœãŒã«ãã°ã¡ãã»ãŒãžãšåæ§ã®éåããã«ã§ã¯ãããã«ãæŽå¯ãæäŸããããšãç¥ã£ãŠããå¿ èŠããããŸãã ããããããã¬ãŒã ã¯ãŒã¯ãã¡ãã»ãŒãžã³ã°ã§æšæºåã§ããããŒãžã®äžéšã«éåžžã«ç®ã«èŠããããŒãžãªãŒããŒã¬ã€ã衚瀺ããããã®è¿œå ã®UXã«ãŒã ããããŸãã äŒæ¥ã®é±æ«ã®åŸã@ paulirishãš@ s3ththompsonã®èããã«ãŒãããŸãã
Fwiwãç§ã®æšæž¬ã§ã¯ããã®APIã¯ããšæ°ãæã¯æºåãã§ããŠããŸããã ãã®å Žåãæåã¯ã«ããªã¢ã§ã®ã¿å©çšå¯èœã«ãªãã6ã7é±éåŸã«ã¯å®å®ããå¯èœæ§ããããŸãã
DOMèŠåã¯ãããåçŽã§ããã ãã§ãªããããå¹æçã§ããããã«æãããŸãã
ç§ã¯ããã«ã€ããŠãžã§ã€ã¯ã«åæããŸãã DevToolsãœãªã¥ãŒã·ã§ã³ã«ã€ããŠãããã¹ããç¶ããŸãããããã ããAPIãããŒãºã«åããªãå Žåããã¿ã€ã ã©ã€ã³ãããã«é²ãã§ããªãå Žåã«åããŠãReactããã©ãŒã«ããã¯ãšããŠäœãå®è¡ã§ãããã«ã€ããŠãç解ããããšæããŸãã
åãã¬ãŒã ã¯ãŒã¯ãç¬èªã®éçºã¢ãŒããæäŸããŠããããšãèãããšïŒãããŠãã®ã¢ãŒãã¯ãã¬ãŒã ã¯ãŒã¯éã§å€§ããç°ãªãå¯èœæ§ããããŸãïŒããã¬ãŒã ã¯ãŒã¯ãåæ§ã«ç¬èªã®æ¹æ³ã§èŠåãå®è£ ããå¿ èŠãããããšã¯å®å šã«å ¬æ£ãªããã§ãã
@jakearchibaldæšæºãšã¯ãè€æ°ã®ãã¬ãŒã ã¯ãŒã¯ïŒãŸãã¯ã¹ã€ãŒãã§ç¶ãã©ã€ãã©ãªïŒãå©çšããããŒãžãèšå®ãããšããšã³ããŠãŒã¶ãŒã«ä»»æã®éã®é決å®è«çã«ã¬ã³ããªã³ã°ãããäžå¯è§£ãªèŠåã衚瀺ãããå¯èœæ§ãããããšãç解ããŠããŸããïŒ
ãã©ãŠã¶ã¯ãdevtoolsãããŒãžã«å ¬éãããªãããã«ããããã«ããçšåºŠã®é·ãã«ãªã£ãŠããŸãã
ãããŠããã®çç±ã¯å°ãªããšãéšåçã«ã¯ãéçºè åºæã®ã¡ãã»ãŒãžã³ã°ããšã³ããŠãŒã¶ãŒã«å ¬éããŠã¯ãªããªãããã ãšç¢ºä¿¡ããŠããŸãã
DOMèŠåã¯ãããåçŽã§ããã ãã§ãªããããå¹æçã§ããããã«æãããŸãã
ãœãªã¥ãŒã·ã§ã³ã®åçŽããæå¹æ§ã«ç°è°ãå±ãã人ã¯èª°ãããŸããã ããã¯æ©èœããŸããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæãªãããšãç ç²ã«ããŠã ãŠãŒã¶ãŒã«æªåœ±é¿ãäžããå¯èœæ§ãããã®ã¯é床ã ãã§ã¯ãããŸããã
Fwiwãç§ã®æšæž¬ã§ã¯ããã®APIã¯ããšæ°ãæã¯æºåãã§ããŠããŸããã ãã®å Žåãæåã¯ã«ããªã¢ã§ã®ã¿å©çšå¯èœã«ãªãã6ã7é±éåŸã«ã¯å®å®ããå¯èœæ§ããããŸãã
@addyosmaniãããè¯ã解決çã§ãããªãããããã©ã®ããã«åé¡ã«ãªããã¯ããããŸããã Reactãžã®å€æŽã¯ã¡ãžã£ãŒãªãªãŒã¹ã«å«ãŸããŸããããªãªãŒã¹ã®ã¿ã€ãã³ã°ã«é¢ããŠã¯æªå®ã ãšæããŸãã
決å®ããããœãªã¥ãŒã·ã§ã³ã¯ãå°æ¥ã®ãã¹ãŠã®éçºã«åœ±é¿ãäžããå¯èœæ§ããããŸãã ãã®æèã§ã®æ°é±é察æ°ã¶æã®åé¡ã¯ã蚱容å¯èœãªIMOã§ãã
ãã¬ãŒã ã¯ãŒã¯ãèªåãã¡ã§é 眮ããªãã£ããã®ãDOMã«æ¿å ¥ãããšãäžéšã®éçºè ãäŸµå ¥ãããšæããããšãç解ããŠããŸãã ããããããŒãžã®äžéšã«ããããã®ãµã€ãã¯DevModeã«ãããŸãããšãããããŒã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããªããããã«å¯Ÿããåªãããœãªã¥ãŒã·ã§ã³ã«ãªããšæããŸãã å€ãã®äººããªãå察ãèããã®ããç解ããããšæããŸãã
@aweary ïŒãã»ãã¥ãªãã£ã«éç¹ã眮ããããµã€ããDevModeã§èµ·åããå Žåãåé¡ãä¿®æ£ããããŸã§ä¿¡é Œãããã¹ãã§ã¯ãããŸããã ãdevModeãã«ã¯ãç¡å¹åãããCORSãã§ãã¯ãå ¬éããããã³ãã¬ãŒããœãŒã¹ã³ãŒããªã©ãããããçš®é¡ã®ã»ãã¥ãªãã£é¢é£ã®ã·ã§ãŒãã«ãããå«ããããšãã§ããŸãããµã€ããã»ãã¥ãªãã£ã«éç¹ã眮ããŠããå Žåãããã¯çºçããŠã¯ãªããŸããã
ïŒãDevModeãã¯Reactã§éåžžã«ç¹æ®ãªæå³ãæã£ãŠããããšãèªèããŠããŸãããããã§ã¯éçºè 以å€ã®èŠç¹ãæ³å®ããããšããŠããŸãïŒ
@aweary
æšæºãèšå®ãããšãè€æ°ã®ãã¬ãŒã ã¯ãŒã¯ãå©çšããããŒãžãããšã³ããŠãŒã¶ãŒã«è¡šç€ºãããé決å®è«çã«ã¬ã³ããªã³ã°ãããäžå¯è§£ãªèŠåã®ä»»æã®éãããããå¯èœæ§ãããããšã«æ°ã¥ããŸãããïŒ
ç§ã¯çµ¶å¯Ÿã«ãããç解ããŠããŸãã éçºã¢ãŒãã®è€æ°ã®ãã¬ãŒã ã¯ãŒã¯ãå«ãããŒãžã¯ãæ£åœãªçç±ããªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«æ·±å»ãªãã¡ãŒãžãäžããŸãã ããªãã¯ããããããèŠéããããåºå®ãããŠããªãããšãæãã§ããããã§ãã ããããéçºè 以å€ã®äººïŒéçºè ã察象ãšããç®ã«èŠããã¡ãã»ãŒãžïŒã«ãšã£ãŠã¯éåžžã«æªãã®ã§ãéçºè ã¯ãããããã«ä¿®æ£ããŠãã¯ããã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæããããšæããŸãã
ãŠãŒã¶ãŒã«æªåœ±é¿ãäžããå¯èœæ§ãããã®ã¯é床ã ãã§ã¯ãããŸããã
誰ããä»ã®ããšã䞻匵ããŠããã®ãèŠãŸãããïŒ ç§ã¯ãã®çš®ã®åå¿ã«ã€ããŠããªãæ²ããã§ãð
ããªãã¯ããããããèŠéããããŠåºå®ãããŠããªãããšãæãã§ããããã§ã
@jakearchibaldããã¯å¥åŠãªçµè«ã®ãããªãã®ã§ããç§ããããä¿®æ£ããããªãã®ã§ããã°ãç§ã¯ããã§ããªããšè©±ãããããã«ç§ã®èªç±ãªæéãè²»ããããšã¯ãªããšæããŸããïŒ ç§ãããªãã®è§£æ±ºçã«åæããªããããšãã£ãŠãç§ããããæªè§£æ±ºã®ãŸãŸã«ããããšãèŸä»»ãããšããæå³ã§ã¯ãããŸããã ããã¯æ¬åœã«äžå ¬å¹³ã§ãã
ããããéçºè 以å€ã®äººïŒéçºè ã察象ãšããç®ã«èŠããã¡ãã»ãŒãžïŒã«ãšã£ãŠã¯éåžžã«æªãã®ã§ãéçºè ã¯ãããããã«ä¿®æ£ããŠãã¯ããã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæããããšæããŸãã
ããã¯ç§ãåºæ¬çã«åãå ¥ããããªããšæãããšã§ãïŒããªãã¯æåã«ãŠãŒã¶ãŒãæ瀺çã«çœ°ããŠããã®ã§ãã
ãã»ãã¥ãªãã£ã«éç¹ã眮ããããµã€ããDevModeã§èµ·åããå Žåãåé¡ãä¿®æ£ããããŸã§ä¿¡é Œãããã¹ãã§ã¯ãããŸããã
@surma devã¢ãŒãã¯æ¬è³ªçã«å®å šã§ã¯ãããŸãããããŠãŒã¶ãŒã«ãããäŒããŠãåé¡ãªããšæ³å®ããããã«åç·ãèžã¿è¶ããŠããã«ããããããã§ãã
éçºããŒã«ãéãããæå¹ã«ãããããå¿ èŠããããœãªã¥ãŒã·ã§ã³ã§ã¯ååã§ã¯ãªããšæããŸãã ããã«æ°ä»ãã«ã¯ãQAã管çè ãå Žåã«ãã£ãŠã¯ãšã³ããŠãŒã¶ãŒã«è¡šç€ºãããå¿ èŠããããŸãã éçºè ã¯ãããèŠãã®ã«ããŸãã«ãæ £ããŠããã§ãããã åé¡ã®ããsslæ§æã匷調衚瀺ãããæ¹æ³ãšåæ§ã§ãã ããã»ã©å€ãããå¿ èŠã¯ãããŸãããã誰ããããã«ã€ããŠè³ªåãããããä¿®æ£ããããšã«æ°ä»ãã®ã«ååã§ãã
DOMãžã®æ³šå ¥ã«ã¯ãå€ãã®çç±ã§åé¡ããããŸãã ç§ãã¡ã¯DOMã©ã€ãã©ãªã§ãããDOMãšã³ããªãã€ã³ããæã£ãŠããã®ã§ãReactã®æ¹ãå°ãå®çŸå¯èœã§ãã DOMåºæã§ã¯ãªããã¯ãŒã«ãŒã§å®è¡ãããå¯èœæ§ã®ããã©ã€ãã©ãªã®å Žåã¯å°é£ã§ãã
ãã¡ãã³ã³ãæ瀺çã«ãªãŒããŒã©ã€ãããæ¹æ³ãæäŸããŠããéãããã¡ãã³ã³ãå€æŽã§ããå¯èœæ§ããããŸãã å€ãã®ãµã€ãã«ã¯ãéçºã¢ãŒãçšã«åå¥ã®ãã¡ãã³ã³ããã§ã«ãããŸãã
DOMãé©åã«ç¶æã§ããªãå¯èœæ§ã®ããReactã®ãšã©ãŒãåŠçããããã®ããã©ã«ãã®ãšã¯ã¹ããªãšã³ã¹ãç解ããå¿ èŠããããŸãã ãã¹ã¿ãŒã®çŸåšã®ããã©ã«ãã®å®è£ ã¯ããšã©ãŒãã¹ããŒãããå ŽåãããªãŒããReactã³ã³ãã³ããåé€ããŸãã ããã䟵襲çã§ãã
éçºã¢ãŒãã«ãªã£ãŠããªãããšãæ€åºããæ¹æ³ãããã°ããã®ãšã©ãŒã¢ãŒããããªã¬ãŒã§ããŸãã ãã®å Žåãéçºã¢ãŒãã«æ°žç¶çã«ãªããã€ã³ããããã®ç¢ºå®ãªæ¹æ³ãæ¬åœã«å¿ èŠã§ãã
åé¡ã®ããsslæ§æã匷調衚瀺ãããæ¹æ³ãšåæ§ã§ãã
ããã¯ãŸãã«ç§ãå®ç§ã ãšæããããªãã®ã§ãã ãŠãŒã¶ãŒã¯ãã¢ã¯ã»ã¹ãããµã€ãã«é¢ããã»ãã¥ãªãã£æ å ±ãæäŸãããã©ãŠã¶ã«ãã§ã«æ £ããŠããŸããããã©ãŒãã³ã¹æ å ±ã¯ããããã倧ããé£èºãããã®ã§ã¯ãããŸããã ããã«ãæœåšçãªããã©ãŒãã³ã¹ã®åé¡ãå ±åãããã¹ãŠã®ãã¬ãŒã ã¯ãŒã¯/ã©ã€ãã©ãªã§äžè²«æ§ãããããŠãŒã¶ãŒã®ã¯ãŒã¯ãããŒã«çŽæ¥å¹²æžããããšã¯ãããŸããã ð
ç§ã¯ãã¡ãã³ã³ã®ã¢ã€ãã¢ã奜ãã§ãïŒç®ç«ã€ãdevtoolsãæ¡åŒµæ©èœãªãã§åäœãã誰ããç®ç«ã€ããŠãŒã¶ãŒã«å®³ãåãŒããªãã泚ç®ãéããããã«ã¢ãã¡ãŒã·ã§ã³åã§ãããéçºè ãæ¶ããããªãã»ã©è¿·æã
DEVã¢ãŒãããªããã€ã³ã«ããã®ã¯ã©ãã§ããïŒ
æªãDXã¯æ°ã¥ããããã®ã§ããè¯ãUXãåŽã§èª€ããç¯ããŸãïŒãããŠããã®ãŠãŒã¶ãŒã®ãããªåé¡ã®IMHOã¯ãéçºè
ãéžæã§ããã®ã«å¯Ÿããéžæã§ããªããããåã€ãå¿
èŠããããŸãïŒã
ããã€ãã®ãã¬ãŒã ã¯ãŒã¯ã¯ãã§ã«ãããè¡ã£ãŠãããšç¢ºä¿¡ããŠããŸãïŒæ£ããæãåºãã°Relayã®ããã«ïŒã
ãããå®è£ ããæ¹æ³ã«é¢ããææ¡ïŒ
NODE_ENV
ãæ瀺çã«development
ã«èšå®ãããŠããå Žåã«ã®ã¿ãéçºã¢ãŒããæå¹ã«ããŸã__DEV__
ã=== true
ã®å Žåãéçºã¢ãŒããæå¹ã«ããŸãä»ã®2ã€ã¯ã¬ãŒããªãã§ããŒãã³ãŒãã£ã³ã°ããïŒ if(NODE_ENV === 'development')
ã¹ããŒãã¡ã³ããªã©ïŒããšã«ããæ¬çªç°å¢ã«åºè·ãããå¯èœæ§ããããããæåã®æ¹æ³ãæé©ãšæãããŸãã
@mattecapuã«é¢ããç§ã®2çªç®ã®ã³ã¡ã³ããåç §ããŠãã ããã https://twitter.com/sebmarkbage/status/820047144677584896
éçºè ãDEVã¢ãŒãã§å®è¡ããããšããå§ããããšã匷å¶ããåæ§ã®æ¹æ³ãããå Žåãããã©ã«ããäœã§ãããã¯åé¡ã§ã¯ãããŸããã ããããé ãããšæ¬åœã«æªãã§ãã
ããã§ã³ã¡ã³ãããããšã¯ãããããããç§ã¯èããŠããŸãããéçºè ã®èŠåãç¡å¹ã«ããæ¹æ³ã®åé¡ã ããå ·äœçã«æ€èšããããšæããŸãã
ç§ã¯ãç¹å®ã®1ã€ã®ãã©ãŠã¶ã§äžå®æéDOMèŠåãç¡å¹ã«ãããã¿ã³ã®å€§ãã¡ã³ã§ã¯ãããŸããã @jlongââsterãææããŠããããã«ããããé »ç¹ã«çºçããå Žåãéçºè ã«ãšã£ãŠã¯èŠçã§ãã ããããç§ã«ãšã£ãŠãã£ãšéèŠãªããšã¯ããã©ãŠã¶åºæã®åäœã®å€åæ§ãå°å ¥ããããšã§ããããã¯ããã°ã®åçŸæ§ããç§ã®ãã·ã³ã§ã¯æ£åžžã«æ©èœãããããšã«ç°¡åã«ã€ãªããå¯èœæ§ããããŸãã
ããã©ã«ãå€ã["localhost", "127.0.0.1"]
ã§ãéçºããã¯ã¹ãšèŠãªããããã¡ã€ã³ãäžèŠ§è¡šç€ºããã¬ã³ããªã³ã°ã«éä¿¡ããããã©ã¡ãŒã¿ãŒããå§ãããŸãã 次ã®ããã«ãªããŸãã
React.render(<App/>,
myDiv,
() => { console.log('finished render!'),
{ devDomains: ["localhost", "devbox.mycorp.com"] }
);
çŸåšã®ãã¡ã€ã³ããªã¹ãã«ããå Žåãéçºè ã®èŠåã¯è¡šç€ºãããŸããã ããã§ãªããã°ãããããŸãã ãã®äœå¶ã®äžã§ïŒ
localhost
ãŸãã¯127.0.0.1
ã䜿çšããŠããŒã«ã«ãã·ã³ã§éçºãã«ãã䜿çšããïŒéçºè
ãžã®èŠåã¯ãªããéçºè
ã®ã¢ã¯ã·ã§ã³ãå¿
èŠãããŸãããrender
ã«æž¡ããããªã¹ãã«ãã¡ã€ã³åãè¿œå ãããŸã§ãDOMèŠåã衚瀺ãããŸãã ãã®åŸãDOMèŠåã衚瀺ãããããšã¯ãããŸããããã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠç§ãå¿é ããŠããããšã®1ã€ã¯ãéçºè ãã³ãŒãå ã®ãã¹ãŠã®éçºãµãŒããŒãã¡ã€ã³ã®ãªã¹ããæ®ãå¯èœæ§ãããããã®ã³ãŒããæ¬çªç°å¢ã«ç§»è¡ããå¯èœæ§ãããããšã§ãã éçºãµãŒããŒãã¡ã€ã³ãç§å¯ã ãšèããŠããäŒæ¥ã«ãšã£ãŠãããã¯åé¡ã«ãªãã§ãããã èãïŒ
@aickinãã®ã¢ãããŒãã®åé¡ã¯ããŠãŒã¶ãŒãæ§æãèªèããŠããå¿ èŠãããã次ã«ãããã解決ããŠããåé¡ãèªèããŠããå¿ èŠãããããšã§ãã åé¡ã¯ã人ã ãããããdev / prodã®éãã«æ°ä»ããŠããªããšããããšã§ãã
ç·šéïŒæ°ã«ããªãã§ãã ããããªãã»ã©ãéçºäžã®DOMèŠåã¯ãŸã ãããŸãã
ãµãŒããŒåŽã®ç°å¢ã§ã¯ããããã°ã®è©³çŽ°ãå«ããç¹å¥ãªããšã©ãŒããŒãžã衚瀺ããæ¬çªç°å¢ã§ã¯æäŸããªãããã«æ瀺ããããšã§ããããä¿®æ£ããŠããŸãã
ã«ã¹ã¿ã ãšã©ãŒå¢çãæå®ããªãéããReactãããã§ã€ã«ãã¡ã¹ããã«ããŠãã¥ãŒãã¢ã³ããŠã³ãããäºå®ãªã®ã§ãæè²ããŒãžãšããŠæ©èœããããã©ã«ãã®ãã¬ããããã¯ã¹ããšã©ãŒå¢çãéçºã«è¿œå ããããšãã§ããŸãã
ãã®åŸããŠãŒã¶ãŒãæ¬çªç°å¢ã§åããŠãã°ãæ±ãããšãã«ãç¹å¥ãªè©³çŽ°ãªãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã ããã¯ãDEVãã«ãã«ã€ããŠæè²ããæ©äŒã«ãªãå¯èœæ§ããããŸãã
ããããããŒãžã®äžéšã«ããããã®ãµã€ãã¯DevModeã«ãããŸãããšãããããŒã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«å€§ããªåœ±é¿ãäžããªããããã«å¯Ÿããåªãããœãªã¥ãŒã·ã§ã³ã«ãªããšæããŸãã å€ãã®äººããªãå察ãèããã®ããç解ããããšæããŸãã
ã»ãšãã©ã®ãŠãŒã¶ãŒã¯ãWebã¢ããªã§ããããšãããã£ãŠããå ŽåãWebã¢ããªãå«ããŸãããªãã§ããã 以åã®Webã®äžè¬çãªèãæ¹ã¯ãWebãç»é¢ã«è¡šç€ºããããšãã«å®è¡ããããšãããã®ã ã£ããããWebã®åäœãã©ãã»ã©æªããŠãããŠãŒã¶ãŒã¯Webãæªãããšãç¥ã£ãŠããŸããã ãã ããWebäžã§åªããUXãäœæããããšã¯å®å šã«å¯èœã§ããããã®ããã«ã¯DOMãææããŠããå¿ èŠããããŸãã 誰ããã©ã³ãã ãªãããŒãä»»æã®å Žæã«æ¿å ¥ãããšãééã£ãèŠçŽ ãã¹ã¯ããŒã«ãå§ããããç»é¢å šäœãã¹ã¯ããŒã«æã«åæç»ããããããã©ãã°ãžã§ã¹ãã£ãªã©ã«å¹²æžãããããå¯èœæ§ããããŸãã éèŠãªã®ã¯ããã®ãããŒãäžãã£ãŠããéãããã®ãããŒããªããªã£ããšãã®çµéšãåãã§ããããšãããããªããããéçºã§ããªããšããããšã§ãã
ãã¬ãŒã ã¯ãŒã¯ãœãªã¥ãŒã·ã§ã³ãšããŠãç§ã¯ãã¡ãã³ã³ã®ã¢ã€ãã¢ãæ¬åœã«å¥œãã§ããããã¯éçºã劚ããããŠãŒã¶ãŒã«ãšã£ãŠå¥åŠã«èŠãããUXãç Žå£ããå¯èœæ§ã¯ãããŸãããã泚ç®ãããã§ãããã ãã ããå®éã«ã¯ããã®æç¹ã§åäžã®ã©ã€ãã©ãªãŸãã¯ãã¬ãŒã ã¯ãŒã¯ã«å¯ŸããŠã®ã¿æ©èœããã¯ãŒã«ãŒã§å®è¡ãããã©ã€ãã©ãªã«å¯ŸããŠã¯ãŸã£ããæ©èœããŸããã å®éã®è§£æ±ºçã¯ãè€æ°ã®ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªããµããŒãã§ãããã¹ãŠã®ã³ã³ããã¹ãããã¢ã¯ã»ã¹ã§ãããã©ãŠã¶ãä»ããŠãããè¡ãããã®åªããæ¹æ³ã§ãã
è€æ°ã®ãã¬ãŒã ã¯ãŒã¯ãšã©ã€ãã©ãªããµããŒãããããæ確ã§ãããèš±å¯èŠæ±ãå¿ èŠãšããå¥ã®è§£æ±ºçã¯ããã©ãŠã¶ãŒéç¥ã衚瀺ããããšã§ãã
ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ããreactã®ããŒã ããŒãžã«ããå ¥éããã¥ã¡ã³ããæŽæ°ããŠãreactã¢ããªã®äœæããã匷åã«ããã·ã¥ããŸãã ãããŠããããã®ããã¥ã¡ã³ãã§npmãã«ãã®éèŠæ§ã匷調ããŸãã DOMèŠåã¯å¿ èŠãããŸãããæèãå¿ èŠã§ãã
@ropilzã¯ãã¹ã¬ããã®ååã§ãéçºè ã«éç¥ããããµãŒãã¹ããã€ã³ãããããšãã§ããŸãã
ç§ãç解ããŠããããã«ãããã§è§£æ±ºãããæ ¹æ¬çãªåé¡ã¯
console.log
ã¡ãã»ãŒãžïŒãŸãã¯ãã®ããšã«ã€ããŠã¯DOMèŠåïŒãèŠãããšã«é Œãããšã¯ã§ããŸããããã ãããããã®éçºè
ãæ¬çªãµã€ãèªäœãç©æ¥µçã«äœ¿çšããŠããå Žåãé€ããŸãïŒãŸãã¯ãšã³ããŠãŒã¶ãŒã«äŸåããŠããå ŽåãQA /ãããã®èŠåãéçºè
ã«å ±åããããã®ãµããŒãããŒã ãªã©ïŒãã¬ãŒã ã¯ãŒã¯ããšã³ããŠãŒã¶ãŒã«è¡šç€ºããããµã€ãã«ãã®å Žã§èŠåã衚瀺ããã®ã§ã¯ãªããéçºã¢ãŒãã®èŠåãéä¿¡ããCSPã®report-uri
ã«é¡äŒŒãããã®ãããå Žåã¯ã©ããªããŸããïŒ
æããã«ã次ã®ãããªèæ ®ãã¹ãããšãããã€ããããŸãã
report-uri
ã¯ã©ããªããŸããïŒ ïŒ https://report-uri.ioã®ããã«ãåãã¬ãŒã ã¯ãŒã¯ãç¬èªã®ç¡æãµãŒãã¹ããã¹ãããããšãæåŸ
ããŸããïŒ ïŒããã¯ãReactïŒAngularã®ãããªå€§èŠæš¡ãªäŒæ¥äž»å¬ã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯å¯èœã§ãããå°èŠæš¡ãªãªãŒãã³ãœãŒã¹ãã¬ãŒã ã¯ãŒã¯ã§ã¯ç¢ºãã«å®çšçã§ã¯ãããŸããïŒã PreactãVueãªã©ïŒç§ã¯ãã®ææ¡ãåãªãæèããã«ã§ããããšãå®å šã«èªããŠããããããã©ãã»ã©å®çšçã§ãããããŸãã¯å®éã«ã©ã®ããã«æ©èœãããã«ã€ããŠã¯èæ ®ããŠããŸããã ããããCSP / HPKPã¬ããŒãã§ã¯ããæ¬çªç°å¢ã®åé¡ã«é¢ããã¬ããŒããã®èª²é¡ã¯ãã§ã«éšåçã«è§£æ±ºãããŠããããã«æãããã®ã§ããããæèµ·ããããšæããŸããã
äžæ©äžãã£ãŠãReactããã¬ãŒã ã¯ãŒã¯ã§ããããšãç解ããããšãéèŠã§ãã ããŠã¯ãããŸããïŒ
éçºè ãžã®ãªãã€ã³ããŒãšããŠèŠèŠçã«äœããæ瀺ããããã«DOMãå€æŽããŸãã éçºè ã®éªéããããæ¬çªç°å¢ã§ãããã¢ãããçºçããå Žåã«ãŠãŒã¶ãŒã®ä¿¡é Œã倱ãããšãªãããã¹ãŠã®ç°å¢ã§æ©èœãããã®ãç解ããŠéçºããªãéãããããç®±ããåºããŠããŸãæ©èœããæ¹æ³ã¯ãããŸããïŒç§ã®çµéšãäœããã®å åã§ããå Žåãããã¯èµ·ãããŸãéåžžã«é »ç¹ã«ãå€ãã®äººãããããªãã«ããããã®ã¯ã€ãã¯ãã£ãã¯ã¹ãå±éããããšãã§ããŸããïŒã
ãã¡ãã³ã³ãå€æŽããŸãã ãã¡ãã³ã³ã¯ç ©ããããã£ãã·ã¥ãããããã¯ããŒã¯ã«äœ¿çšãããä»ã®ã¢ã€ã³ã³ãæå®ãããŠããªãå Žåã¯ã¢ãã€ã«ããã€ã¹ã«ä¿åãããWebã¢ããªã¢ã€ã³ã³ãªã©ã«äœ¿çšãããŸããããã«ããã誀ã£ãŠïŒãŸãã¯æå³çã«ïŒéçºã¢ãŒãã«æ¬çªç°å¢ã§å±éããŠãã©ã³ãã®ããŽãæ¶å»ãããªã¹ã¯ããããŸãã
ãã©ãŠã¶ã®éç¥ã ããªããèŠãããŠãããšããããªãã¯ãããããŠãŒã¶ãŒã«ãã£ãŠèŠãããŠããã§ãããã éç¥ããããã¢ãããããšããã©ãŠã¶ã®ã¢ã¯ã»ã¹èš±å¯ãèŠæ±ããããŠãŒã¶ãŒãç解ã§ããªãå¥åŠãªããšããããã¢ãã衚瀺ãããŸãã ç§ã®çµéšã§ã¯ãããããéçºè ã«ã»ãšãã©èŠããããšããä»®å®ã¯ããŸã£ããéã§ããããŠãŒã¶ãŒã®ç Žæ» ãä¿¡é Œããå¯èœæ§ããããŸãã
ãããŒã·ãã¿ãŒã®éçºè ã«ãšã£ãŠã¯ãReactã®ä»äºã§ã¯ãããŸããã ç§ã¯æ¬¡ã®ãããããææ¡ããŸãïŒ
éçºã¢ãŒãããªããã€ã³ããŸããéçºè ãäœãããããã°ã§ããªãããšã«æ°ä»ããããããããªã³ã«ããæ¹æ³ã調ã¹ãŸãïŒããã¯ã©ãã§ãææžåããå¿ èŠããããŸãïŒã ããããããããªãã«æ»ãããã«æ瀺ããã®ã¯Reactã®ä»äºã§ã¯ãããŸããã 圌ãã®åé¡ã
åçŽãªconsole.logã¡ãã»ãŒãžã®ãŸãŸã«ããŠãããŸãïŒããã¯ç¡å¹ã«ã§ããå¿ èŠããããŸãïŒã éçºè ã«ãããèŠã€ããŠåŠçãããŸãã ããã§ãªããã°ããŸãã ãã¹ãŠã®çµç¹ã«é£çµ¡ãåããçµç¹ã«æ£ããè¡åãããããšã¯ã§ããŸããã ã¹ã±ãŒã©ãã«ã§ã¯ãããŸããã
èŠåã衚瀺ããããã«DOMã«è§Šããããšã«åæããªãå¿ èŠããããŸãã Reactã¯DOMã©ã€ãã©ãªã§ãããããç°¡åã§ã·ã³ãã«ã«èŠããŸããããã¹ãŠã®ã©ã€ãã©ãªãDOMã«ç¬èªã®èŠåã衚瀺ããå¿ èŠããããã©ãããæ³åããŠã¿ãŠãã ããã ããã¯å®å šãªæ··ä¹±ã«ãªããŸãã
éçºè
ã䜿çšããã©ã€ãã©ãªã¯éåžžã«å€ããããããç¬èªã®éçºã¢ãŒãããããŸãã process.env.NODE_ENV
ãproduction
ã«èšå®ããããšã¯ããã©ãŠã¶ã®ã¢ãžã¥ãŒã«ããã³ãã«ããéã®äžè¬çãªæšæºã«ãªã£ãŠãããšæããŸãã ããã¯ç§ãã¡ãæèãåäžãããããã«å¿
èŠãªãã®ã§ãã
ç§ã¯ãReactã®ããã¥ã¡ã³ããéçºãã«ããšæ¬çªãã«ãã®éã«éããããããšãç®ç«ã€ããã«ç€ºããŠããªãããšã«åæããŸãã ããã¥ã¡ã³ããéããšãã¯ãé«åºŠãªã¬ã€ããèªãã§ãéçºãã«ããšæ¬çªãã«ãã®éããèªãå¿ èŠããããŸãã ã¿ã€ãã«ã¯OptimizingPerformanceã§ããããã¯ãReactã䜿çšããŠãããããåå¿è ã¯é«éã ãšèããŠããã®ã§ã絶察ã«èŠãŠã¯ãããŸããã ã¯ã€ãã¯ã¹ã¿ãŒãã»ã¯ã·ã§ã³ã«ãæ¬çªç°å¢ã§ã®Reactã®äœ¿çšããªã©ã®ã¿ã€ãã«ã®å¥ã®ããã¥ã¡ã³ããå«ããããã«ããã¥ã¡ã³ããæ¹åã§ãããšæããŸãã
åå¿è ã¯éåžžãäžçŽã¬ã€ããèªã¿ãŸããããã¿ã€ãã«ãååã«æ確ã§éèŠã«èŠããå Žåã¯ãã¯ã€ãã¯ã¹ã¿ãŒãã§ããã€ãã®ãªã³ã¯ãéããŸãã ReactãåŠã³å§ãããšãããããç§ããã£ãŠããããšã ããã§ãã ã¹ã¿ãŒãã¬ã€ãã¯èªã¿ãŸããã§ããããã¯ã€ãã¯ã¹ã¿ãŒãã»ã¯ã·ã§ã³ã®ããã€ãã®ããŒãžãèªã¿ãŸããã
ç§ãã¡ãåãããšãã§ããå¥ã®ã¢ãããŒãã¯ãReactãéçºã¢ãŒãã§äœ¿çšãããŠãããšãã«ã³ã³ãœãŒã«ã«èŠåã衚瀺ãããã®ãã€ã³ããããã¥ã¡ã³ãã«ä¿®æ£ããããã®ãªã³ã¯ã衚瀺ããããšã§ãã éçºè åãã«æ¬çªç°å¢ã§ã³ã³ãœãŒã«ãéãããšã¯çããããšã§ãããããŒã«ã«ç°å¢ã§ã¯éçºæã«ç¢ºå®ã«ã³ã³ãœãŒã«ãéããŸãã ãã®ããã«ããŒã«ã«ã§éçºããå Žåãæ¬çªç°å¢ã«å ¬éããåã«äœããè¡ãå¿ èŠãããããšã«æ°ä»ãã§ãããã
ã³ã³ãœãŒã«ã®èŠåã«ããããããã httpïŒ//code.govãèµ·åããŸããã ããã¯ãŸãã«ç§ãã¡ãé²ãããšãç®æãã¹ãçš®é¡ã®ããšã§ãã ïŒãã®ãµã€ãã¯Angularã§ãããåãããšãReactã«ãåœãŠã¯ãŸããŸãïŒ
誰ãã圌ãã«é£çµ¡ãããïŒãŸãã¯PRãéä¿¡ãããïŒå Žåã®code.govã®åé¡ã¯æ¬¡ã®ãšããã§ãïŒ https ïŒ//github.com/presidential-innovation-fellows/code-gov-web/issues/221
Angular 2 is running in the development mode. Call enableProdMode() to enable the production mode.
ç§ã¯ãããŸã§Angular2ã䜿çšããããšããããŸããïŒãã®å Žåã¯åå¿è
ã«ãªããŸãïŒã èŠåã衚瀺ãããåŸã®æåã®åå¿ã¯ã enableProdMode()
ãåŒã³åºããŠã¿ãããšã§ãã åäœããŸããã Angularã®å Žåã®ã³ã³ãœãŒã«ã¡ãã»ãŒãžã¯æ¹åã§ãããšæããŸãã éæ³ã«é Œãã®ã§ã¯ãªããããã¥ã¡ã³ããæãå¿
èŠããããŸãã
Angularããã¥ã¡ã³ããéããŠããæ¬çªãã«ãã«ã€ããŠã¯äœã衚瀺ãããŸããã ããã¯AngularãšReactã®äž¡æ¹ã«ãšã£ãŠåé¡ã ãšæããŸãã ã©ã¡ããéçºã¢ãŒãã䜿çšããŸããããããç¡å¹ã«ããæ¹æ³ã«ã€ããŠã¯ãããã¥ã¡ã³ãã§äºåã«èª¬æããŠããŸããã ãã®ãããããã¥ã¡ã³ãã®æ¹åã¯éçºè ã®æè²ã«å€§ãã«åœ¹ç«ã€å¯èœæ§ããããŸã
éçºè ããééãããç¯ãããšãã«ãŠãŒã¶ãŒã«èŠåã衚瀺ããããšã«å察ããŠããããã§ã¯ãããŸããããã©ã³ãã ãªDOMèŠçŽ ãæ¿å ¥ããã®ã¯ç ©ãããã ãã§ãã ãã©ãŠã¶ãŒãHTTPSã®åé¡ãåŠçããæ¹æ³ãæ°ã«å ¥ã£ãŠããŸãããã©ãŠã¶ãŒã«ã¯ããµã€ããå®å šã§ãªãããšã瀺ãå°çšã®UIããããŸãã ããã©ãŒãã³ã¹é¢é£ã®ã¹ããŒã¿ã¹çšã®ãã®ã¯ãããŸããã äžè¬çãªWebããã©ãŒãã³ã¹ã«é¢ããæžå¿µãé«ãŸã£ãŠããããšãèãããšããã©ãŠã¶ãã³ããŒããã¢ã¯ã»ã¹ããŠãããµã€ãããã¡ã ãšãŠãŒã¶ãŒã«äŒããæ¹æ³ãèãåºããªãçç±ãããããŸããã
ããã¯ããŒã«ã¬ãã«ã§å¯ŸåŠããå¿ èŠããããããwebpackãšBabelãéçºè ã«NODE_ENVãèšå®ããå©ç¹ãéç¥ã§ããå¯èœæ§ããããŸãã
@pveyesåæããŸãããç§ã¯AngularããŒã ã«åãããšãèšããŸããã
@matthewpãã®https://github.com/presidential-innovation-fellows/code-gov-web/issues/129ã«ã€ããŠã¯ã¯ããã«å€ãåé¡ããããAngularããŒã ã¯çŽæ¥é£çµ¡ãåããä¿®æ£ãæäŸããŸãã-ããããã§ããããé©çšããããšãã欲æ±ã¯ã»ãšãã©ãããŸããã 質åã¯ãDOMèŠåããã®ä¿®æ£ãããç·æ¥ã«ããã®ã§ããããããããšãæåããéçºã¢ãŒãã§ã®èµ·åã劚ããã®ã§ããããïŒ
質åã¯ãDOMèŠåããã®ä¿®æ£ãããç·æ¥ã«ããã®ã§ããããããããšãæåããéçºã¢ãŒãã§ã®èµ·åã劚ããã®ã§ããããïŒ
ãããã圌ãã¯éçºäžã®èŠåãã°ãŒã°ã«ããããç¡å¹ã«ããæ¹æ³ããããŠãããç¡å¹ã«ããæ¹æ³ãèŠãã§ãããã ãã®åŸã圌ããå¿ããŠããã®ã§ãå°æ¥ãããå®çŸããããšãªããéçºã¢ãŒãã§ãããå±éããŸããã éçºäžã¯ãDOMã®ã©ã³ãã ãªãã£ã³ã¯ãæ¿å ¥ã§ããªãããã«ãæ¬çªç°å¢ã®ããã«èŠããããšèããŠããŸãã QAãŸãã¯ã¹ããŒãžã³ã°ã·ã¹ãã ã§ããã確èªããããšã¯ã§ããŸãããããã¯ãæ¬çªç°å¢ã瀺ããã®ã§ã¯ãªãããã§ãã
ãã®ããããµã€ãã®UXãå°ç¡ãã«ãããã®ããšãç¡å¹ã«ãã倧éã®ãžã£ã³ã¯ã³ãŒãã«ãªã£ãŠããŸããŸãã éçºäžã«ãããç¡å¹ã«ããå ã®ãšã³ãžãã¢ãå¿ ãããèŠããŠãããšã¯éããŸããã 圌ãã¯ãããçç£ã«å ¥ãåã«é²ãã ãããããŸããã
code.govã§ã®å±éããã»ã¹ãã©ã®ããã«æ©èœãããã¯ããããŸããããæ¿åºã®è«è² æ¥è ãšããŠçµéšãããããªãã®ã§ããå Žåãæ¬çªç°å¢ãžã®å¶çºçãªéçºã¢ãŒãã®å±éã¯æ¬¡ã®ããããã«ãªããŸãã
å±éå šäœã®å®å šãªããŒã«ããã¯ã匷å¶ãïŒãã®ãã¡ã®ããã€ãã¯ãUIã®å€æŽãããµãŒããŒãœãããŠã§ã¢ã®æŽæ°ãŸã§ãã¹ãŠã®æ¿èªãååŸããŠãã³ãã«ããã®ã«6ãæããããŸãïŒãããããç¿æ¥ãäœãèµ·ãã£ãã®ãã«é¢ããäŒè°ãšãã©ããŒã¢ããã®æžé¡ãåãåããŸããæ°ããå±éãŠã£ã³ããŠãã¹ã±ãžã¥ãŒã«ããŸãïŒUIã«èŠåã1ã€ããããã«ãDBã¹ã¯ãªããããµãŒãã¹ãªã©ããã¹ãŠéçºã¢ãŒãã§ãã£ããã©ãããäœåºŠãå°ããããŸãïŒã ç§ã¯ãããéåžžã«å°ããªããšã§èµ·ããã®ãèŠãŠããŸããã YMMV以å€ã®äŸå€ãçºçããå ŽåããããŸãã
ãŠãŒã¶ãŒã«æ°ã¥ãããä¿®æ£ãããŸãããæ©èœã«åœ±é¿ãäžããªãå¯èœæ§ãé«ãããã次ã®å±éãŠã£ã³ããŠãŸã§æŽæ°ãããŸããã ãããã£ãŠããã¹ãŠã®ãŠãŒã¶ãŒãæ°é±éãŸãã¯æ°ãæéãããèŠãããšãã§ããŸãã
å°ãªããšãããã¯ç§ã®çµéšã§ããã éèŠãªã®ã¯ãå±éçŽåŸã«DOMã®äŸµå ¥ã«æ°ä»ãããšããŠããã€ã³ãã©ã¹ãã©ã¯ãã£/ããã»ã¹ãã©ã®ãããªãã®ãããããªããããããã«ä¿®æ£ã§ãããã®ã§ã¯ãªãå¯èœæ§ããããšããããšã§ãïŒä¿®æ£ã§ããã¯ãã§ããïŒã
ïŒ7360ïŒé»è²ã®ããã¯ã¹ïŒãããŒãžããããšãèŠåã¡ãã»ãŒãžãããç®ç«ã¡ãŸãã é»è²ã®ããã¯ã¹ã«ã¡ãã»ãŒãžãè¿œå ããããšãã§ããŸãïŒãReactéçºã¢ãŒãã®èŠåããšåŒã³ãŸããïŒïŒã
Angularããã¥ã¡ã³ããéããŠããæ¬çªãã«ãã«ã€ããŠã¯äœã衚瀺ãããŸããã ããã¯AngularãšReactã®äž¡æ¹ã«ãšã£ãŠåé¡ã ãšæããŸãã ã©ã¡ããéçºã¢ãŒãã䜿çšããŸããããããç¡å¹ã«ããæ¹æ³ã«ã€ããŠã¯ãããã¥ã¡ã³ãã§äºåã«èª¬æããŠããŸããã ãã®ãããããã¥ã¡ã³ãã®æ¹åã¯éçºè ã®æè²ã«å€§ãã«åœ¹ç«ã€å¯èœæ§ããããŸã
ã€ã³ã¹ããŒã«ããŒãžã«ãããŸãã
https://facebook.github.io/react/docs/installation.html#development -and-production-versions
ããã©ãŒãã³ã¹ã®æé©åã«ã€ããŠïŒ
https://facebook.github.io/react/docs/optimizing-performance.html#use -the-production-build
ããã¥ã¡ã³ããããã«ã€ããŠååãã§ã¯ãªããšèšãã®ã¯å ¬å¹³ã§ã¯ãªããšæããŸãã
ããã¥ã¡ã³ããéããšãã¯ãé«åºŠãªã¬ã€ããèªãã§ãéçºãã«ããšæ¬çªãã«ãã®éããèªãå¿ èŠããããŸãã ã¿ã€ãã«ã¯OptimizingPerformanceã§ããããã¯ãReactã䜿çšããŠãããããåå¿è ã¯é«éã ãšèããŠããã®ã§ã絶察ã«èŠãŠã¯ãããŸããã ã¯ã€ãã¯ã¹ã¿ãŒãã»ã¯ã·ã§ã³ã«ãæ¬çªç°å¢ã§ã®Reactã®äœ¿çšããªã©ã®ã¿ã€ãã«ã®å¥ã®ããã¥ã¡ã³ããå«ããããã«ããã¥ã¡ã³ããæ¹åã§ãããšæããŸãã
æåã®ããŒãžïŒã€ã³ã¹ããŒã«ïŒã«ãããŸãã
https://facebook.github.io/react/docs/installation.html#development -and-production-versions
ããªããæ£ããã ãã¿ãŸãããæªãã§ãã ãããã¯ã·ã§ã³ãã«ãã¯å¥ã®ã»ã¯ã·ã§ã³ã«ãããšæ³å®ããã®ã§ãããã§ã¯æ¢ããã代ããã«ãµã€ãããŒã§é¢é£ããã¿ã€ãã«ãæ€çŽ¢ããŸããïŒãããŠã[ããã©ãŒãã³ã¹ã®æé©å]ããŒãžãèŠã€ããŸããïŒã ç§ã¯ãã£ââãšããç¥ã£ãŠããã¹ãã ã£ãã
ç§ã¯å®éã«ã¯Reactã®åå¿è ã§ã¯ãªãã®ã§ãããã¥ã¡ã³ããéããŠèªåã®ä»®å®ã確èªãããšãã«ãReactããã¥ã¡ã³ãã¯prodãšdevã«ã€ããŠååãã§ã¯ãªããšããçç±ã§ãã€ã³ã¹ããŒã«ããã¥ã¡ã³ããéããªãã£ãð
å¿é
ãªãã ãããååã«èŠããªãå Žåãç§ã¯ããè¯ãé
眮ã®ããã®ææ¡ãåãå
¥ããŸãã ããšãã°ãå°çšã®ããŒãžïŒ Deploying to Production
ïŒãäœæã§ããŸãã
ãã®åé¡ã¯è§£æ±ºãã¹ãéèŠãªåé¡ã§ããã匷調ãã¹ãæãéèŠãªåé¡ã§ã¯ãªãããšãå¿ããªãã§ãã ããã ãŸããäžçªäžã®ããŒãžã§ãã€ã©ã€ã衚瀺ããŠãã人ã ããããèŠãŠé²èŠ§ããå¿ããŠããèªåãäœãããŠããã®ãç¥ã£ãŠããããšæãã®ã§ãããã§ååã ãšã¯æããŸããã ã ããç§ã¯ããã¥ã¡ã³ãã®ããšãé床ã«ããããããããšã¯ããŸããã
ããã«å¯ŸåŠããå¯äžã®å®éã®æ¹æ³ã¯ãæ€åºããŠéç¥ããããšã§ãã
@KrisSiegelãã¡ãã³ã³ããã£ãã·ã¥ãããã®ã¯è¯ãç¹ã§ãã 1ã2ç§åŸã«åãæ¿ããŠãããæ°ç§ããšã«å°ãã®éå ã«æ»ãå¿ èŠãããã®ã§ã¯ãªãããšæããŸãã ããããã°ããã£ãã·ã¥ãšããã¯ããŒã¯ã®åé¡ãããªãŒããŒã©ã€ããããã¢ã€ã³ã³ã®ãšãã«ã¿ã€ãã³ã°ãåãããå¯èœæ§ã¯ã»ãšãã©ãããŸããã
ãã¡ãã³ã³ãžã®JSæäœã¯ãã£ãã·ã¥ãããªããšæããŸããããããããç§ã¯ééã£ãŠããŸãã
ãã®ããã®ããã¯ãé 眮ããã®ã«é©åãªå Žæã¯ãChromeãFirefoxã§ã¯ãªããwebpackãBrowserifyããŸãã¯Rollupã§ãããšç§ã¯äž»åŒµããŸãã
Reactã®æ¬çªãã³ãã«ãšããŠæå³ãããŠãããã®ããã«ãããŸãããæ¬çªã¢ãŒããæå¹ã«ããªããšããã«ããšã©ãŒã«ãªããŸãã å®è¡æã«ãããã©ã®ããã«æ瀺ãããã«ã€ããŠåæããªãçç±ã¯ããããå®è¡æã«åŠçãããã¹ãåé¡ã§ã¯ãªãããšãåæ ããŠãããšæããŸãã
@taionåæããŸãã ããã¯ééããªããDOMã§ã¯ãªããã«ãããŒã«ã«å±ããŠãããšæããŸãã
ããŒãenvãæ¬çªã³ãŒãçšã«æ¬çªç°å¢ã«èšå®ããå¿ èŠããããšæ³å®ããããã®ãã«ãããŒã«ã®å Žæã§ããå¿ èŠããããšæããŸãã ãã¹ãŠã®ãããžã§ã¯ãã§å¿ é ãšããããã§ã¯ãããŸããããããã¯è¯ãä»®å®ã ãšæããŸãã
npm run build
ãã¿ãŒããã«ã§å®è¡ãããenvãæ¬çªç°å¢ã«èšå®ãããŠããªãå Žåãããã©ã«ãã®åºåãšãšãã«ã¿ãŒããã«ã§èµ€ãèŠåã衚瀺ãããŸãïŒ env is not set to production, some scripts may be in development mode
çŸåšãwebpackãããã®ãããªèŠåã¯è¡šç€ºãããŸããã
ç·šéïŒèª¬æãè¿œå
ãŸãã¯ãå®éã«ã¯NODE_ENVãèšå®ããã ãã§ãã
ã³ã³ãœãŒã«ã®èŠåãæ©èœããªãå Žåããã«ãã®èŠåãæ©èœãããã©ããã¯ããããŸããã
ãã«ãã¯ããªãã®ããã«ç©äºãæ§æããããæ¬çªçšã«èª€ã£ãŠæ§æãããå Žåã¯å€±æããã¯ãã§ãã å°ãªããšãReactã®å Žåãããã¯ãã«ãæéãã©ã°ã§ãã
@jakearchibaldãŸã ç¡èŠããã人ããããšæããŸãããå°ãªããšããèŠåã¯ãã©ãŠã¶ã³ã³ãœãŒã«ã«é ãããŠãããããæ¬çªç°å¢ã§ã¯éããªãå¯èœæ§ãããããã衚瀺ãããªãã®ã§ã¯ãªãããã«ãæã«è¡šç€ºãããŸãã ã æãéèŠãªããšã¯ãçµéšã®å°ãªã人ã«ãã³ãŒãã®äœæãæºåããããã«äœããã¹ããã«ã€ããŠã®æããããäžããããšã§ãã
å€ãã®éçºè ã¯ã©ã€ãã©ãªãæŽæ°ããŸãããå€ãã®äººããããæ£ããæ©èœãããšæ³å®ããŠãããããwebpackãããäžè¬çã«ã¯ããŒã«ãæŽæ°ããªãã®ãäžè¬çã§ãããwebpackãªã©ãæŽæ°ããã®ã¯é¢åãããããŸããã
Reactã®æ¬çªãã³ãã«ãšããŠæå³ãããŠãããã®ããã«ãããŸãããæ¬çªã¢ãŒããæå¹ã«ããªããšããã«ããšã©ãŒã«ãªããŸãã
CDNããäºåã«ããã±ãŒãžåãããããŒãžã§ã³ã®Reactã䜿çšããããšããµããŒããããŠããæ§æã§ããããã®ã¯ãŒã¯ãããŒã«ã¯ãã«ãã¹ãããã¯ãŸã£ãããããŸããã ãããã£ãŠããã«ãã®ã¿ã«çŠç¹ãåœãŠããã®åé¡ã®è§£æ±ºçã¯ãCDNã®ãŠãŒã¹ã±ãŒã¹ãç¡èŠããŸãã
æ£çŽãªãšãããããã«ã€ããŠã©ãæããããããŸããã ReactCDNã®äœ¿çšã«é¢ããéçºèŠåã®è³æãšå察ã®äž¡æ¹ã®è°è«ãèŠãããšãã§ããŸãã
@taionãã«ãã®ã¿ã®ãœãªã¥ãŒã·ã§ã³ããµããŒããã人ãšããŠãããã¯ã«ããŒããéèŠãªãŠãŒã¹ã±ãŒã¹ã ãšæããŸããïŒ
ä»ã®äººã¯ã©ãæããŸããïŒ
ããã«ããããã¥ã¡ã³ãã¯ãæ¬çªç°å¢ã§.min.js
ãã³ãã«ã䜿çšããå¿
èŠãããããšãããªãæ確ã«ç€ºããŠãããšæããŸãã å€åããã¯å€ªåã®ããã倧ããªãã©ã³ããµã€ãºããã®ãããªãã®ã䜿ãããšãã§ããŸãã ãããã誰ããèªåã®Webãµã€ãã®æ¬çªç°å¢ã§çž®å°ãããŠããªãReactãã³ãã«ã䜿çšããŠããå Žåããšã«ããä»ã®åé¡ãçºçããŸãã
ããã«ããããã¥ã¡ã³ãã¯ãæ¬çªç°å¢ã§.min.jsãã³ãã«ã䜿çšããå¿ èŠãããããšãããªãæ確ã«ç€ºããŠãããšæããŸãã
åæããŸããããReactãnpmããã±ãŒãžãšããŠå«ããå Žåãæ¬çªçšã«ãã«ãããŒã«ãæ§æããæ¹æ³ã«ã€ããŠãããªãæ確ã«ãªã£ãŠããŸãã ãã®åé¡ã®èŠç¹ã¯ãããã¥ã¡ã³ãã®ãã®ããŒãžã泚ææ·±ãèªãã§ããªã人ã ã®ããã«æåã®èœãšãç©Žãäœãããšããããšã ã£ããšæããŸãã
ãã ããåæã§ããªãããã§ããCDNããã®éçºãã«ãã䜿çšããããšã¯ãããç©æ¥µçãªéçºèŠåã§é²ãããã®éèŠãªã±ãŒã¹ã§ã¯ãªããšèããŠããŸãã ããã¯ããªãã®ç«å Žã®å ¬æ£ãªèŠçŽã§ããããããšãç§ã¯ããã€ãã®ãã¥ã¢ã³ã¹ãéããŠããŸããïŒ
CDN + devã®æ§æã¯ããŠãŒã¶ãŒãReactã®çž®å°ãããŠããªããã«ãã䜿çšããå¿ èŠããããšããç¹ã§ãæããã«ééã£ãŠãããšæããŸãã _çž®å°ããããã«ãã䜿çšããã ã_ã«å¿ èŠãªç¥èã®è² æ ãå°ãªãããããã®æ¹æ³ã§å€±æããããšã¯ããå°é£ã§ãã
webpackãŸãã¯Browserifyã§ãããã¡ã€ãå®è¡ããããã«æ¬çªç°å¢ã«å¯Ÿå¿ããŠãããš_èãã_æ§æã§ãããå®éã«ã¯NODE_ENV
ãèšå®ããªãã£ãããã§ã¯ãããŸãããCDNãã³ãã«ãä»ããŠãããååŸããããšã¯ã§ããŸããã
Chrome Developer Tools
ã®React
ã¿ãã¯ã DEV Mode
ã«ãããã©ãããå€æããã®ã«ååã ãšæããŸãã
DOMèŠçŽ ãéçºã¢ãŒãã§ããŒãžã«æ¿å ¥ãããã¬ãŒã ã¯ãŒã¯ã«ã¯ããã€ãã®åäŸãããããšã«æ³šæãã䟡å€ããããšæããŸãã
http://symfony.com/blog/new-in-symfony-2-8-redesigned-web-debug-toolbar
ç§ãç¥ãéããããã¯ããã©ã«ãã§ãªã³ã«ãªã£ãŠãããšã¯æããŸãããã
äžèšã®èª¬æã«ç¶ããŠããã¹ãŠã®å¶çŽãæºãããªãããããã¹ãã§ã¯ãªããšãã«ãã¹ãŠã®äººãéçºã¢ãŒãã§å®è¡ãããã®ã確å®ã«é»æ¢ããå®ç§ãªãœãªã¥ãŒã·ã§ã³ãå®çŸãããšããäžè¬çãªç®çãããããã§ãã OPã¯ãéçºè ãšãŠãŒã¶ãŒã®æœåšçãªãšã¯ã¹ããªãšã³ã¹ã®éã«ã¯ãã¬ãŒããªããå¿ èŠã§ãããšè¿°ã¹ãŠãããããã¯éåžžã«åœãŠã¯ãŸããšæããŸãã
åé¡ãå°ãèšãæããããšãããšã次ã®ããã«ãªããŸãã
ããããèãããšãé©åãªæåã®ã¹ãããã¯ãéçºã¢ãŒãã§Reactããæ¬çªç°å¢ã§ç¡å¹ã«ãªã£ãŠããããšã確èªããããã®æ瀺ãšãšãã«ã console.warn
ãŸãã¯console.info
ãä»ããŠéçºã¢ãŒãã§ããããšãçºè¡šããããšã ãšæããŸããå±éã
確ãã«ãããã¯ãã¹ãŠã®äººãæãããããã§ã¯ãããŸãããã_ããã¯ãŸãšããªã¹ã¿ãŒãã§ã_ãããã¯ãäžæ³šæã§æ¬çªç°å¢ã«åºè·ãã人ã®æ°ãæžãããå°æ¥ã®æ¹åã®ããã«ãã¢ãéããããšã¯ãããŸããã
ããããèãããšãé©åãªæåã®ã¹ãããã¯ãéçºã¢ãŒãã®Reactããæ¬çªãããã€ã¡ã³ãã§ãããç¡å¹ã«ãªã£ãŠããããšã確èªããæé ãšãšãã«ãconsole.warnãŸãã¯console.infoãä»ããŠéçºã¢ãŒãã§ããããšãã¢ããŠã³ã¹ããããšã ãšæããŸãã
ããªãã...éçºããŠãããšãã§ãããããéçºã¢ãŒãã«ããããšã¯ééãã§ã¯ãããŸããã ä»ã«ã©ã®ãããªãã¥ãŒãªã¹ãã£ãã¯ã䜿çšã§ããŸããïŒ
ãŸããæ¬çªç°å¢ã§ã³ã³ãœãŒã«ãèªã¿åã人ãããªãããšãèãããšãã¯ã©ãã·ã¥ã¬ããŒããœãªã¥ãŒã·ã§ã³ã䜿çšããå Žåã«ãã°ã«èšé²ãããããã«ãã¿ã€ã ã¢ãŠãå ã«ã¹ããŒã§ãããã©ããçåã«æããŸãã
ããªãã...éçºããŠãããšãã§ãããããéçºã¢ãŒãã«ããããšã¯ééãã§ã¯ãããŸããã ä»ã«ã©ã®ãããªãã¥ãŒãªã¹ãã£ãã¯ã䜿çšã§ããŸããïŒ
çŸåšã®ReactDevToolsã®éç¥ã«äŒŒãŠããã¯ãã ãšæããŸã
éçºã¢ãŒãã«ãªã£ãŠããããšãããã³æ¬çªãµã€ãã§ã¯éçºã¢ãŒããç¡å¹ã«ããå¿ èŠãããããšãéç¥ããã¡ãã»ãŒãžã ããã¯ïŒçè«çã«ã¯ïŒããå€ãã®éçºè ã«åºå¥ããããæ¬çªç°å¢ã§ã®äœ¿çšã«åããããã«äœããã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠãããããšãèªèãããã¯ãã§ãã
ããªããèšãããã«ãå®éã®çç£ã§ã¯ã»ãšãã©èª°ãã³ã³ãœãŒã«ã®èŠåãèŠãããšã¯ãããŸãã-ãããŠãã®æç¹ã§ããã¯å°ãé ããŠããŸãã
ã¬ã³ãŒããã¹ã¿ãã¯ããŠããããã«èãããŠç³ãèš³ãããŸããããã³ã³ãœãŒã«ã®èŠåã¯æ©èœããŠããªãããã§ãã äŸïŒ httpsïŒ//code.govã
ã¬ã³ãŒããã¹ã¿ãã¯ããŠããããã«èãããŠç³ãèš³ãããŸããããã³ã³ãœãŒã«ã®èŠåã¯æ©èœããŠããªãããã§ãã äŸïŒ httpsïŒ//code.govã
åäžã®ã«ãŠã³ã¿ãŒã€ã³ã¹ã¿ã³ã¹ã¯ããããééãã®ãªããã®ã§ã¯ãªãããšã瀺ããŠããŸãããã©ã®ãããªã¢ãããŒãããããªããšã¯æããŸããã
ã³ã³ãœãŒã«ã®èŠåã«ãã£ãŠãèªèãé«ãã誀ã£ãŠéçºã¢ãŒããå®è¡ãã¹ãã§ãªã人ã®æ°ãæžããããšãã§ããã°ãããã¯æ£ããæ¹åãžã®äžæ©ã®ããã«æãããŸãã å®ç§ã¯åã®æµã§ãã
@jakearchibald
ã¯ãããã ããcode.govã®ãã«ãããŒã«ãããã§ããã¯ã䜿çšããŠã»ããã¢ãããããŠããå Žåãå°ãªããšããã«ãæããã¯ã䜿çšããReactã®ã³ã³ããã¹ãã§ã¯ãããã«ããã芳å¯ããŠããåé¡ãé²ãããšãã§ããŸãã çµå±ã圌ãã¯webpackã䜿çšããŠããŸãã
webpackããã«ãèŠåãçºããã¹ãã ãšèšã£ãŠããã®ã§ã¯ãããŸããã æ£ããä¿®æ£ã¯ãwebpackãprocess.NODE_ENV
ãèšå®ããããé©åãªæ¬çªæ§æãªãã§æ¬çªãã«ããäœæããããšãããšãããã©ã«ãã§Webpackããã«ãã«å€±æããããšã§ãã
DevToolsã®ãéåãã«é¢ãã@addyosmaniããã®ä»¥åã®ãã€ã³ãã«è¿
éã«å¯Ÿå¿ãããã£ãã Chrome DevToolsã®ç¹å®ã®ãšã©ãŒã®ãã匷åãªå
åã瀺ããããã¿ã€ããäœæããŠããŸããããã®äœæ¥ã¯ãŸã ããªãæ©ã段éã§ãããèŠåã衚瀺ããããšã¯ïŒ console.warn
ãããæãå Žåã§ãïŒ @jakearchibaldã«åæããåŸåããããŸãååãªè§£æ±ºçã
NODE_ENV == 'development'
ãŸãã¯ãã¹ãåãlocalhost
/ 127.0.0.1
ã®å Žåã«ã®ã¿ãããã©ã«ãã§Reactãæ¬çªã¢ãŒãã«ããéçºã¢ãŒãããªã³ã«ããã®ã¯ã©ãã§ããïŒ ã»ãšãã©ã®éçºè
ã¯ãããã«äœ¿çšã§ããæ£ããåäœãååŸããæ¬åœã«å¿
èŠãªå Žåã¯ãéçºã¢ãŒããæåã§åŒ·å¶ããæ¹æ³ãåžžã«ãããŸãã
åžžã«ããªãè€éãªæ¡ä»¶ä»ãïŒããŒãã§å€±æããå¿ èŠããªãããïŒã§ãã®ãã©ã³ãããããããã®ã¯çæ³çãšã¯èšããªãããã§ãã
ãšããã§ãwebpack2ã®-p
ïŒãæ¬çªãã¢ãŒããããã©ã«ãèšå®ã§çž®å°ãå¯èœïŒã¯ããŠãŒã¶ãŒã«NODE_ENV
ãèšå®ããŸãïŒ https ïŒ//webpack.js.org/guides/production-build
ããã¯ç§ã«ã¯éåžžã«è³¢æãªããã§ãããwebpackã䜿çšããŠããã»ãšãã©ãã¹ãŠã®äººã«ãšã£ãŠãã®åé¡ãé²ãããšãã§ããŸãã ãªãå®è¡æã«ãããåŠçããããšã«åºå·ããã®ã§ããïŒ
ãšããã§ãwebpack 2ã®-pïŒããããã¯ã·ã§ã³ãã¢ãŒããããã©ã«ãèšå®ã§ãããã¡ã€ãæå¹ã«ãªããŸãïŒã¯ããŠãŒã¶ãŒã«NODE_ENVãèšå®ããŸãïŒ https ïŒ//webpack.js.org/guides/production-build/#node-environment-variableã
ããã ç§ãã¡ã¯ãããèªèããŠããŸãã Webpackã³ã¢ã®@TheLarkInnã¯ç¢ºãã«ç¢ºèªã§ããŸãããç§ã®ç解ã§ã¯ã -p
ã¯Webpackã³ãã¥ããã£ã®ATMã§ã¯åºã䜿çšãããŠããŸããã ããã§ã®æ ¹æ¬çãªåé¡ã¯ãconsole.logèŠåã®ããçŸç¶ãšåæ§ã«ãããããã®ãœãªã¥ãŒã·ã§ã³ããªããã€ã³ã§ããå ŽåãReactãŠãŒã¶ãŒã«å®éã®å€æŽãèŠãããªãå¯èœæ§ãããããšã§ãã ç§ãã¡ã¯äººã
ã«ãéãããã®ãåºè·ããéã«ããè¯ãå€åãäžããããšæã£ãŠããŸãã
ã¡ãªã¿ã«ãWebpackã§DEVããã³PRODç°å¢ãç°¡åã«æ€åºã§ããªãããšïŒ-pãäžååïŒãã httpsïŒ//github.com/webpack/webpack/issues/3216ã§åé¡ãåŒãèµ·ãããŸããã
æ£ããä¿®æ£ã¯ãwebpackãprocess.NODE_ENVãèšå®ããããé©åãªæ¬çªæ§æãªãã§æ¬çªãã«ããäœæããããšãããšãããã©ã«ãã§webpackããã«ãã«å€±æããããšã§ãã
ç§ã¯ãããè¿œæ±ããã€ããã§ãããããã¯ç§ãèšããããšããWebpackã«ãšã£ãŠå€§ããªå€åã«ãªãã§ãããã ç§ã¯å人çã«ãããã€ãã®ã€ã³ããªãžã§ã³ããªãã¥ãŒãªã¹ãã£ãã¯ïŒlocalhostãDevTools openãªã©ïŒã䜿çšããŠè¡šç€ºãããæ確ãªãªãŒããŒã¬ã€ã¡ãã»ãŒãžãå«ãã©ã³ã¿ã€ã ãœãªã¥ãŒã·ã§ã³ã§ååã«ã«ããŒã§ãããšæããŠããŸãã
ããã¯èšã£ãŠããWebpack process.NODE_ENVã¢ã€ãã ã«æ»ãç¶ãããšã @ sokraãŸãã¯@TheLarkInnãããã«ã€ããŠæèŠãæã£ãŠãããã©ããç¥ããããšæããŸãã
ç§ã®ç解ã¯ããã§ã®ããªãã®ç解ãšã¯ç°ãªããŸãâ -p
ã¯ãwebpackã®ã»ãšãã©ã®éå°é家ãŠãŒã¶ãŒãæ¬çªãã«ããã»ããã¢ããããäºå®äžã®æ¹æ³ã§ãããšä¿¡ããŠããŸãã
èåãªããã±ãŒãžã§ããã -p
ã䜿çšããŠæ¬çªãã«ããçæããŸãã
https://github.com/ReactTraining/react-router/blob/5e69b23a369b7dbcb9afc6cdca9bf2dcf07ad432/package.json#L23
https://github.com/react-bootstrap/react-bootstrap/blob/61be58cfdda5e428d8fb11d55bf743661bb3f0b1/tools/dist/build.js#L10
Webpackã§Uglifyãã©ã°ã€ã³ãçŽæ¥æ§æããããšã¯éåžžã«ãŸãã§ããããã -p
ããªããšãçž®å°ãããŠããªããã«ãã䜿çšããããšã«ãªãããã®å Žåããã倧ããªåé¡ãçºçããŸãã
å人çã«ã¯ãããã€ãã®ã€ã³ããªãžã§ã³ããªãã¥ãŒãªã¹ãã£ãã¯ïŒlocalhostãDevTools openãªã©ïŒã䜿çšããŠã®ã¿è¡šç€ºãããæ確ãªãªãŒããŒã¬ã€ã¡ãã»ãŒãžãå«ãã©ã³ã¿ã€ã ãœãªã¥ãŒã·ã§ã³ã§ååã«ã«ããŒã§ãããšæããŸãã
ãããçºçãã_only_ã·ããªãªãå®éã«ç解ããããšãªãããããäœåºŠãæå¢ãããããã«æããŸãïŒããã¬ãŒã ã¯ãŒã¯ãDOMã«ç©äºãæ³šå ¥ããããšã¯åãå ¥ããããŸãããïŒã
éçºäžã«çµ¶ããDOMå ã®æ°žç¶çãªã¡ãã»ãŒãžãäºæããªãããšã«å¯ŸåŠããªããã°ãªããªãããšã¯ããŸã£ããåãå ¥ããããŸããã ãã ããããã§ææ¡ããŠããã®ã¯ãDevModeãæ¬çªç°å¢ã«ãããã€ãããå Žåã«ã®ã¿è¡šç€ºãããã¡ãã»ãŒãžã§ãïŒãã¥ãŒãªã¹ãã£ãã¯ãå ¥åããŠãã ããïŒã ä»»æã®æ°ã®ãã§ãã¯ãšã³ã³ãœãŒã«ã¡ãã»ãŒãžãããŒã«ãCIãããã³ãã©ãŠã¶ãŒæ¡åŒµæ©èœã«çµã¿èŸŒãã§ããããçºçããªãããã«ããããšãã§ããŸãã
ããããå¿ æ»ã®æåŸã®æ段ãšããŠãç»é¢ã«è¡šç€ºããããããŒã¯é©åã§é©åãªè§£æ±ºçã ãšæããŸãã
DevModeãæ¬çªç°å¢ã«ãããã€ãããå Žåã«ã®ã¿è¡šç€ºãããŸãïŒãã¥ãŒãªã¹ãã£ãã¯ãå ¥åããŠãã ããïŒïŒ
ãããã£ãŠãéçºè ã¯ãã®ã¡ãã»ãŒãžãç®ã«ããããšã¯ãªããïŒããããå¶ç¶ã«ïŒéçºã¢ãŒããæ¬çªç°å¢ã«ãããã€ãããšãçªç¶ããã¹ãŠã®ãŠãŒã¶ãŒãèŠãããšãã§ããããã«ããã®æ°ããHTMLãã¢ããªã±ãŒã·ã§ã³ã«è¡šç€ºãããŸãã
ããã¯ç§ã«ãšã£ãŠã¯çœ°ã®ããã«èãããŸãã ãŸã éçºã¢ãŒããç解ããŠãããããã®çè«äžã®æ°ããããŒãžã§ã³ã®Reactãšã¡ãã»ãŒãžã䜿çšããŠãããã€ããå Žåã¯ãé©ããããããã®æç¹ã®Webã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒããããèŠãããšãã§ããŸãã ãããéçºè ãäŒç€Ÿãå°æãããã®ã«åœ¹ç«ã€ä»¥å€ã«ããããã©ã®ããã«åœ¹ç«ã€ã®ãããããŸããã 確ãã«ãããã¯åœŒãã«ãããä¿®æ£ããããããããŸãããããã®ã³ã¹ãã¯ç§ã®æèŠã§ã¯é«ãããŠãå°ãã®å ±æãæ¬ ããŠããŸãã
ããããå¿ æ»ã®æåŸã®æ段ãšããŠãç»é¢ã«è¡šç€ºããããããŒã¯é©åã§é©åãªè§£æ±ºçã ãšæããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã®åé¡ã¯ããããããŸãã«ãçæ³çã§ããããã¬ãŒã ã¯ãŒã¯ãéçºãããšãã¯ãä»ã®äŒæ¥ãæé«ã®å±éããªã·ãŒãæé«ã®QAïŒååšããå ŽåïŒãããæã£ãŠããªãå¯èœæ§ããããšããçŸå®ã«çŠç¹ãåœãŠãå¿ èŠãããããšã§ãã
ã¯ãã誰ããæ¬çªç°å¢ã§éçºã¢ãŒãã«ãããã€ããå Žåãããã確èªããŠãã°ããå€æŽã§ããã¯ãã§ãã æ®å¿µãªãããç¹ã«ãã¯ãããžãŒæ¥ç以å€ã§ã¯ãããã¯åçŽã«äžå¯èœã§ããããç°¡åã§ã¯ãããŸããã ããã§ã³ã¡ã³ãããŠãã人ã®å€§å€æ°ã¯ïŒ ããããã圌ãã®äŒç€Ÿã«ã¯ããã®ã·ããªãªã«ããŸã察åŠã§ããå±éããã»ã¹ããããŸãã GoogleãFacebookãPlayStationãªã©ã ãããã®ãã¯ãããžãŒäŒæ¥ã¯ãã¹ãŠãããããŸãåŠçã§ããŸãããããã¯Reactã䜿çšãããŠãŒã¶ãŒã®å€§å€æ°ã代衚ãããã®ã§ã¯ãããŸããããïŒ ïŒå®éãReactã®äœ¿çšã«é¢ããçµ±èšã¯ãããŸããïŒäŸ¿å©ã§ãïŒïŒ
ã¯ããã¯ãããããã®äŒæ¥ãšæ¿åºã¯ãå±éããã»ã¹ãããªã·ãŒãªã©ãå€æŽããå¿ èŠããããŸããããããçŸå®ã¯ããã§ããã»ãšãã©ã®äŒæ¥ã¯ãå±éããã»ã¹ãäžååã§ãQAãååšããŸããã
ç§ãå人çã«çµéšãã2ã€ã®ã·ããªãªãèããŠã¿ãŸãããã
ãŸããæ¿åºã§åããŠããéãæ¯éšãéšéã«ãã£ãŠã¯ã3ã6ãæããšã«1åã®å±éãè¡ãããå¯èœæ§ããããŸãã ãããã®ãããã€ã¡ã³ãã¯å¯èœãªéãå€ãã®ãã®ãããŒã«ã¢ãããããããã€ã¡ã³ãå šäœã®ããããã®éšåã倱æããå Žåããã¹ãŠãããŒã«ããã¯ãããå¯èœæ§ããããŸãã ãã®ãããOWFãšåŒã°ãããã®ãœãããŠã§ã¢ã䜿çšããŠããŸãããããã¯ãæ £ããŠããªãå Žåã¯ãiframeã䜿çšããŠåäžã®Webã¢ããªã±ãŒã·ã§ã³ã«è€æ°ã®Webã¢ããªã±ãŒã·ã§ã³ã衚瀺ãããšããç¹ã§iSocialã«äŒŒãŠããŸãïŒã°ãã¹ãç§ã¯ç¥ã£ãŠããŸãããããã«ããŠãã ããïŒã ããã€ãã®ã¢ããªã±ãŒã·ã§ã³ã®å±éã«æåã®æ§ææé ãããã倱æãããããæå³ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãªããäžéšã®iframeã«404ãšã©ãŒãš500ãšã©ãŒã衚瀺ãããŸããã
éçºè ã¯éåžžãå±éãããŠããã·ã¹ãã ã«ã¢ã¯ã»ã¹ã§ããªããããåé¡ãèŠã€ãããŸã§ã«äœæéãããããŸããã ãã®æç¹ã§ãäžåžã«ä»ã®äººã®äžåžã«é»è©±ããããŠããããä»ã®äººã«åœ±é¿ããªãããšãäŒããŠãå±éå šäœãããŒã«ããã¯ããªãããã«ããå¿ èŠããããŸããã ãã®åŸãæ°æ¥åŸã«èª°ãã«æ§æã®äžéšãããçŽããŠãããåã«ã倧éã®æžé¡ãšããã¥ã¡ã³ããèšå ¥ããå¿ èŠããããŸããã ãã®éãã¢ããªã±ãŒã·ã§ã³ã¯ãã®å šæéäžãæ©èœã§ããã«åº§ã£ãŠããŸããã
第äºã«ãç§ã財åã§åããŠãããšãããŠã§ããµã€ãäžã®å®éã®ã¢ã€ãã ã®ã¬ã€ã¢ãŠãã®ä»£ããã«éçºè ã®ååã誀ã£ãŠå«ãŸããŠããå±éããããŸããïŒåœŒã¯äœãããã¹ãããŠãããšæããŸããïŒïŒã ãšã«ãããããã¯ããã«æ°ã¥ãããŸãããããããããä¿®æ£ããããã«ãæã ã¯ãã®æ¥ãã£ãšé ããŸã§ããã£ãç·æ¥ã®å€æŽç®¡çãååŸããªããã°ãªããŸããã§ããã ãã®ããã顧客ã¯ãã®ã°ããããããŒãä¿®æ£ããåã«ã»ãŒ8æéèŠãªããã°ãªããŸããã§ããã
ç§ã®ãã€ã³ãã¯ãéçºè ãDOMã«é 眮ããªãã£ãä»»æã®èŠçŽ ãDOMã«æ¿å ¥ããå Žåã¯ã现å¿ã®æ³šæãæãå¿ èŠããããšããããšã§ãã ç¹ã«ãäžéšã®ã·ããªãªã§ã®ã¿è¡šç€ºããããšã«ã€ããŠè©±ããŠããå Žåã誰ããåããŠãããèŠããšãããã«ç¡å¹ã«ããæ¹æ³ãç解ããã®ã§ãå床æ°ã«ããå¿ èŠã¯ãããŸããã
@KrisSiegel
ãŸã éçºã¢ãŒããç解ããŠãããããã®çè«äžã®æ°ããããŒãžã§ã³ã®Reactãšã¡ãã»ãŒãžã䜿çšããŠãããã€ããå Žåã¯ãé©ããããããã®æç¹ã®Webã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒããããèŠãããšãã§ããŸãã
DevToolsãéããŠãããšãã«ã®ã¿ã¡ãã»ãŒãžã衚瀺ãããå ŽåïŒã€ãŸããéçºè ã§ã¯ãªãæ¬çªãŠãŒã¶ãŒã«è¡šç€ºãããå¯èœæ§ãäœããã®ïŒã«ãã¢ãããŒãã«ã€ããŠã®ããªãã®èããç°ãªããã©ããèå³ããããŸããã äºå®äžãçŸåšã®console.logæŠç¥ã®æ¡åŒµã§ããReactã¯ä»æ¥ãã§ã«æ¡çšããŠããŸãã
DevToolsãéããŠãããšãã«ã®ã¿ã¡ãã»ãŒãžã衚瀺ãããå ŽåïŒã€ãŸããéçºè ã§ã¯ãªãæ¬çªãŠãŒã¶ãŒã«è¡šç€ºãããå¯èœæ§ãäœããã®ïŒã«ãã¢ãããŒãã«ã€ããŠã®ããªãã®èããç°ãªããã©ããèå³ããããŸããã äºå®äžãçŸåšã®console.logæŠç¥ã®æ¡åŒµã§ããReactã¯ä»æ¥ãã§ã«æ¡çšããŠããŸãã
éçºããŒã«ãéããŠããå Žåã¯ãããããconsole.logã¡ãã»ãŒãžã衚瀺ããããããDOMã®å€æŽã¯ç®¡çãäžå¿ èŠã«è€éã§ããããã«èŠããããã«åé·ã§ãã ããªãã¯ãã€ã§ãReactã³ã³ãœãŒã«ã¡ãã»ãŒãžããã倧ãã/ããé åçã«ããããšãã§ããŸãã ãã¶ãASCIIReactã®ããŽã 圌ããããã«ããŸããŸå ¥ã£ãå Žåã«èª°ãã®æ³šæãåŒãããã®äœãã
æçµçã«èª°ããããã«ééãããšæããŸãããStackoverflowã§èŠåãç¡å¹ã«ããæ¹æ³ãå°ãããšã誰ããèŠåãç¡å¹ã«ããæ¹æ³ã瀺ãã³ãŒããæçš¿ããééããå Žåã¯åã«ç¡å¹ã«ããŸãã ãã«ãããŒã«ã¯ãããããããç§ãéå»ã«è©±ãããå€ãã®äººã ã¯ãããããæ··ä¹±ãããé£ãããšæããŸããïŒBabel 6ã®ãªãªãŒã¹ã¯ã楜ãããæéã§ããïŒã ããªãã¯åã«ããããæ£ãã䜿çšããªãå€ãã®äººã ã«åºãããã§ãããã
å°ãªããšãããã¯ç§ã®çµéšã§ã¯\ _ïŒãïŒ_ /¯
ãµã ãã€ãã«ç³žã®åºã«è¿œãã€ããã ããã£ãã ç§ã¯ãããå°ããã¬ã€ã³ã¹ããŒãã³ã°ããŠããŸããã
Webpackã¯NODE_ENVã匷å¶çã«æå®ããããšãã§ããReactã¯ããã䜿çšããŠDEVãPRODã«åºè·ãã人ã ãããç°¡åã«åé¿ã§ããŸãããããã¯Webpackãžã®é倧ãªå€æŽã«ãªããŸãã ç§ã¯ä»ãSeanãšããã®ãããªãã®ãWebpack3ã§ã©ãã»ã©å®çŸå¯èœãã«ã€ããŠè©±ãåã£ãŠããŸããReact+ Webpackã¹ã¿ãã¯ã®åå¿è ãšããã©ãŒãã³ã¹ãå奜çã«ä¿ã€ããšã¯ãäž¡æ¹ã®ãã£ã³ããæ°ã«ãããŠããããšã§ãã
ããã¯ä»ã®ãšããç§ã®ãæ°ã«å ¥ãã®ããã«æããŠããŸããããŸã 100ïŒ å£²ããŠããããã§ã¯ãããŸããã
ãã ããããã¯ãŠãŒã¶ãŒã«éèŠãªããŠã³ã¹ãã€ã³ããæäŸããŸãã 誰ããprodãŸãã¯devenvã®ããã«æžããŠããããã§ã¯ãªããenvãäœã§ãããããç¥ã£ãŠããããã§ã¯ãããŸããã ããã«ã€ããŠã®ãã£ãŒãããã¯ãåŸãããã«ãwebpack / webpackã§åé¡ãæèµ·ããŸããç§ã®çŽæã§ã¯ã誰ãããããæãã§ããããã§ã¯ãªããåæãããã©ããã«ããããããããã·ã¥ããã¯ãèæ ®ããå¿ èŠããããŸãã
<something in-between 1 and 3 I haven't figured out yet>
webpacky
ã®è§£æ±ºçã¯ãã³ã³ãã€ã©ã®ã©ã€ããµã€ã¯ã«ã«ããã¯ã§ããã¹ã¿ã³ãã¢ãã³ãââã©ã°ã€ã³ãäœæããã³ãŒããåé€ãããŠãããã©ããããŸãã¯ENVãæäŸãããŠããªããã©ããã確èªããéžæãããã¬ã³ããªãŒãªèŠåãŸãã¯ãšã©ãŒãçºè¡ããããšã§ãã
ããããããããããŠãŒã¶ãŒã¯ãããè¡ãæ¹æ³ãªã©ãç¥ãããšã¯æ±ºããŠãªãã ããããšããåå¿ãæ³åããããšãã§ããŸãã ãããã£ãŠãCRAããããã£ãŠãã®åé¡ã¯ä»ã®ãšããã§ãã
ReactïŒãŸãã¯ãããå¿ èŠãšããä»»æã®fwïŒã®package.jsonã§æ¬¡ã®ãããªãã®ããã§ãã¯ããæ°ãããªãŸã«ããŒãã¿ãŒã³ãäœæã§ããŸãã
"webpack": {
"plugin": "ReactEnviornmentPlugin"
}
ããã¯ããŠãŒã¶ãŒãç¥ãå¿ èŠãæ°ã«ããå¿ èŠããªãããŠãŒã¶ãŒã®ã³ã³ãã€ã©æ§æã«èªåçã«é©çšãããŸãã
ç¹°ãè¿ãã«ãªããŸãããæ¬åœã«ãã¬ã€ã³ã¹ããŒãã³ã°ãè¡ããŸãã
@TheLarkInn webpack 2ã®-p
ã®çŸåšã®åäœã§ååã ãšæããŸãããïŒ å¯äžã®å€±æã®ã±ãŒã¹ã¯ã誰ããèªåã§UglifyJsPlugin
ãèšå®ãã DefinePlugin
ãå®è¡ããã®ãå¿ããå Žåã§ãããããã¯ã¯ããã«å°ãªãã±ãŒã¹ã®ããã§ãã
@taionã¯ã/ããã
-p
ã¯ãã³ãŒãã«æ¬çªç°å¢ã®ãåŠçããé©çšããã ãã§ããã NODE_ENV
ãäœã«èšå®ãããŠãããã«ã€ããŠã¯ãäœãæ³å®ããŠããããç¥èããããŸããã ããã¯ã人ã
ãDefinePlugin()
ã䜿çšããå¿
èŠæ§ããããããã®ã§ãã
ãããããŠãŒã¶ãŒãæ¬çªç°å¢ã§ã³ãŒããå®è¡ããŠããã®ã¯ã_guess_ãŸãã¯_imply_ã«æãè¿ãã_reasonable_ãé åã ãšæããŸãã ããã¯ãã³ãã¥ããã£ãšããŒã ãåé¡ãªãããšã確èªããã1ã€ã®é åã§ãã
@TheLarkInnããã¯v2ã§å€æŽããããšæããŸãïŒ https ïŒ//webpack.js.org/guides/production-build/#node -environment-variable
ãããã¿ãŸãããããã§ããç§ã¯ééã£ãŠããŸãã ãã ããæé©åãã察象ããããã现ããå¶åŸ¡ããããããé »ç¹ã«ã¯äœ¿çšãããŸããã ïŒèšåããã@addyosmaniã®ããã«ïŒ
ããã¯æ¬åœã«äžè¬çã§ããïŒ ç§ãwebpackã䜿ãå§ãããšãã -p
æããã«éã®ãã®ããã§ããã äžã§åç
§ããããã«ãããã«åŸ®èª¿æŽãé©çšããçç±ãããããããã©ã€ãã©ãªã§ãã -p
ã䜿çšããŸãã
ReactïŒãŸãã¯ãããå¿ èŠãšããä»»æã®fwïŒã®package.jsonã§æ¬¡ã®ãããªãã®ããã§ãã¯ããæ°ãããªãŸã«ããŒãã¿ãŒã³ãäœæã§ããŸãã
"webpack"ïŒ{
ããã©ã°ã€ã³ãïŒãReactEnviornmentPluginã
}
ããã¯ããŠãŒã¶ãŒãç¥ãå¿ èŠãæ°ã«ããå¿ èŠããªãããŠãŒã¶ãŒã®ã³ã³ãã€ã©æ§æã«èªåçã«é©çšãããŸãã
@TheLarkInnãããæ£ããèªãã§ããå ŽåããªãŸã«ããŒãã¿ãŒã³ãããªã¬ãŒããã«ã¯ãã¢ããªã®package.jsonã§ReactEnvironmentPlugin
ãæåã§æå®ããå¿
èŠããããŸãã ãããšãç§ã¯ãã®ææ¡ã誀解ããŠããŸããïŒ :)
ãããžã§ã¯ããReactã䜿çšããŠããããšãæ€åºãããããã«å¯ŸããŠé©åãªç°å¢åãæ¿ããè¡ãWebpackã®è§£æ±ºã®éæ³ãæ³åã§ããŸãããããã¯ãã¬ãŒã ã¯ãŒã¯åºæã®æé©åãšãã³ãã©ãŒã®ç·å¯ãªçµåã®ããã«èãããããã»ã©æãŸãããªãå ŽåããããŸãã
åå¿ãæ€åºãããããå°ãªããjsã¢ãžã¥ãŒã«ã®èª¬æãã£ãŒã«ããæ€åºãããããå€ãããã©ã°ã€ã³ãå«ãwebpackãã£ãŒã«ããå«ãŸããŸãã ããããããªãã¯æ£ããã§ããããã¯éåžžã«ç·å¯ã«çµåãããŠãããç§ã®ãæ°ã«å ¥ãã®ã¢ã€ãã¢ã§ããããŸããã
Webpackã«Reactã®æ§ææ¹æ³ãç解ããããã®ãæ¬çªãã¢ãŒãã®æŠå¿µããªãéãããããå®éã«ä¿èšŒããããšã¯æããŸãããåè¿°ã®ããã«ã -p
ããã§ã«é©åã«æ©èœããŠããããšãèãããšãããã¯åé·ã«æããŸãããšã«ãããwebpackã䜿çšããŠçž®å°åãããæ¬çªãã«ããäœæãããšãã«ããŠãŒã¶ãŒãäžè¬çã«å°éãããã®ã§ãã
ããã«ã€ããŠã¯ããå°ã話ããŸããããåççãªè§£æ±ºçããããšæããŸãã
ç§ãã¡ã¯é·ãéãéçºäžã®ReactèŠåã®ãèŠåããã¯ã¹ããæå¹ã«ããããšãæ€èšããŠããŸããã ããã§ãã¢ãèŠãããšãã§ããŸãïŒPRïŒhttpsïŒ//github.com/facebook/react/pull/7360ïŒã èŠåãããå Žåã«ã®ã¿è¡šç€ºãããŸãããéçºäžã«éåžžã«äžè¬çã§ããããïŒåžžã«ä¿®æ£ããå¿ èŠããããŸãïŒãã¢ããªã®éçºã«5å以äžè²»ããã人ã¯ããã€ã¢ãã°ã衚瀺ããããã€ã¢ãã°ãååšããããšã«æ°ä»ãã§ãããã
ãã®å€æŽåŸã¯ãéçºã¢ãŒãã«æ°ä»ãããšãé£ãããªããŸãã ãèŠåãã€ã¢ãã°ãåé€ããæ¹æ³ããæ€çŽ¢ããŠãæ¬çªçšã®ãã«ãã«ã€ããŠåŠç¿ããå¯èœæ§ããããŸãã ããããªããšãããæç¹ã§èŠåãå±éãããå¯èœæ§ãé«ãããŠãŒã¶ãŒã«èŠåã衚瀺ãããŸãã ãã®å Žåãç§ãã¡ã¯åã«ããã¯ã¹ãäžå¿«ã«èŠããã®ã§ã¯ãªããéçºã¢ãŒããæ³å®ãããŠããããšãå®è¡ããã ããªã®ã§ãReactèªäœãéé£ããããšã¯ãªããšæããŸãã
ïŒã¡ãªã¿ã«ãFacebookã§éçºäžã®åæ§ã®èŠåããã¯ã¹ãé·ãé䜿çšããŠããã®ã§ãReactã®äœ¿çšç®çã«å¯Ÿå¿ããŠããŸããïŒ
@gaearonããã®ææ¡ãèŠãŠæ¬åœã«ããããã§ãïŒ ããã¯ç§ã倢èŠãŠãããã¹ãŠã§ã;ïŒ
ãµã€ããšããŠïŒéçºè ããããåãé€ãæ¹æ³ãã°ãŒã°ã«ã§æ€çŽ¢ããå¿ èŠããªãããã«ãããã¯ã¹ã«çŽæ¥ãªã³ã¯ãå«ããããšãæ€èšãã䟡å€ããããããããŸããã
ãããè¯ãç¹ã§ãã äœãè¿œå ããŸãã
@gaearonç§ã¯ãã®è§£æ±ºçãéåžžã«äžå¿«ã ãšæããŸãã éçºäžã§ãã£ãŠããèŠåãDOMã«äŸµå ¥ããããšã¯æ±ºããŠãããŸããã ããã¯ãäžè¬çãªéçºè ã«ãšã£ãŠã¯ç®çããªããã»ãšãã©ã®å Žåãå®å šã«ç¡å¹ã«ãªã£ãŠããå¯èœæ§ããããŸãã éçºè ããŒã«ã¯çç±ã®ããã«èŠåã衚瀺ããŸãããããã¯çºæãããå¿ èŠã¯ãããŸããã
ãŸããDOMãœãªã¥ãŒã·ã§ã³ããããã«å¯Ÿããç§ã®ä»¥åã®è°è«ã®ãããã«å¯ŸããŠãåè«ããŒãã«ãªãç¶ããã®ã¯åä»ã ãšæããŸãã ç§ã®ãã€ã³ããç¡èŠããŠåé¡ãªãå Žåãããã¯ç§ã®ãªããžããªã§ã¯ãªãã®ã§ååã«å ¬å¹³ã§ãããåãè°è«ãåºãŠããã®ãèŠãã®ã¯ãã£ããããŸãã人ã ã¯ããã«å察ããŸãã人ã ã¯åœŒãã«å察ããè°è«ã決ããŠãªãã®ã§ãã€ã³ããæ±ããŠããããã§ãããããã圌ãã¯ããã«æ»ã£ãŠããŸãã ããããç¹°ãè¿ããŸãã
ãããã»ãšãã©ã®èŠåã«åœãŠã¯ãŸãããšã«åæããŸãããReactã®èŠåã¯ã³ãŒãã®ãã°ãå ·äœçã«ææããŠããŸãã ãããã¯åãªãææ¡ã§ã¯ãããŸããã
ãã€ã¢ãã°ã¯ç°¡åã«éããããšãã§ããåã ã®èŠåã¯ç°¡åã«ã¹ããŒãºã§ããŸãïŒãã°ããæ°ã«ããªãå ŽåïŒããä¿®æ£ããå¿ èŠããããŸãã
æ¯èŒã®ããã«ãFacebookã³ãŒãããŒã¹ã§ã®ãã€ã¢ãã°ã®å€èŠ³ã¯æ¬¡ã®ãšããã§ãã
äœå人ãã®ãšã³ãžãã¢ãåé¡ãæ±ããŠãããããã®ãããã§çç£æ§ãåäžããŠãããããããã¯åŠ¥åœãªããã©ã«ãã§ãããšèããŠããŸãã æ確ã«ããããã«ããªãŒãã³ãœãŒã¹ããŒãžã§ã³ã¯ããŸãå«ã³ãŸããïŒ
ã¹ã¿ã€ã«ã®åŸ®èª¿æŽã«ã€ããŠææ¡ãããå Žåã¯ã httpsïŒ//github.com/facebook/react/pull/7360ã«ã³ã¡ã³ãããŠãã ããã
ãã³ãèšã£ãããšã«å ããŠãç§ã¯æè¿è¿œå ããããšã©ãŒãã¬ãŒãããŒã«ããã¯ããããã«ïŒ7360ã®äžã«æ§ç¯ããŠããŸãã ç§ã¯çŸåšãå°ãéªéã«ãªããªãããŒã¹ãéç¥ã®ããã€ãã®ã¹ã¿ã€ã«ãè©ŠããŠããŸãã ãã£ãŒãããã¯ã®ããã«ãã¹ã¯ãªãŒã³ã·ã§ãããPlnkrãããã«æçš¿ããŸãã
ãããã®èŠåã«ã¯ããçž®å°ãããéçºã³ãŒããã®èŠåãå«ãŸããŸããïŒ ãããããªããããã¯å€ãã®ããšãããªããã¡ããšè§£æ±ºããã§ãããã
ãªããã®ç®çã«ã䜿ããªãã£ãã®ãããããŸããã
@gaearon
ãããã»ãšãã©ã®èŠåã«åœãŠã¯ãŸãããšã«åæããŸãããReactã®èŠåã¯ã³ãŒãã®ãã°ãå ·äœçã«ææããŠããŸãã ãããã¯åãªãææ¡ã§ã¯ãããŸããã
ãããã¯ãšã©ãŒãŸãã¯äŸå€IMOã§ããå¿ èŠããããŸãã ãªãããã§ã¯ãªãã®ã§ããïŒ äŸå€ã¯ä¿®æ£ã匷å¶ããŸãããåŽäžå¯èœãªèŠåã¯ä¿®æ£ããŸããã
äœå人ãã®ãšã³ãžãã¢ãåé¡ãæ±ããŠãããããã®ãããã§çç£æ§ãåäžããŠãããããããã¯åŠ¥åœãªããã©ã«ãã§ãããšèããŠããŸãã
ããã«ã€ããŠã¯åã®ãã€ã³ãã§è¿°ã¹ãŸãããããªãŒãã³ãœãŒã¹ããŒãžã§ã³ã䜿çšãã人ã®90ïŒ ãããããããã®ãšã³ãžãã¢ã®æ¹ãåªããŠãããšæããŸãã ç§ã¯ãããåççãªããã©ã«ãã®å察ã ãšæããŸãã éçºããŒã«ã«èŠåãããã®ã«ã¯çç±ããããŸãã ããããåçºæããããšã¯ç§ã«ã¯æå³ããããŸããã ç¡å¹ã«ãªããäºåºŠãšè¡šç€ºãããªããªããŸãã
ããã¯ãReactãIMOããããããŠããããã«èŠããŸãã
ç§ãæ¿åºãšå¥çŽãããšãããã¹ãŠã®ããã³ããšã³ãã䜿çšããªããã°ãªããªãã£ãå ±éã®ã©ã€ãã©ãªããããŸããã ã³ã³ãœãŒã«ã§ãšã©ãŒãçºçããããŒã¹ããããã¢ãããšããŠè¡šç€ºãããŸãã è€æ°ã®ããŒã ã«ãã£ãŠè€æ°åæ¬çªç°å¢ã«ãããã€ãããã ãã§ãªããå€ãã®éçºè ãäžåºŠãããèŠãŠããããæ°žç¶çã«ç¡å¹ã«ããæ¹æ³ãå°ããŸããã ç§ã¯ããããã£ãšåãããã«èŠãŠããŸãã
ç§ãã¡ã¯é·ãéãéçºäžã®ReactèŠåã®ãèŠåããã¯ã¹ããæå¹ã«ããããšãæ€èšããŠããŸããã ããã§ãã¢ãèŠãããšãã§ããŸãïŒPRïŒïŒ7360ïŒã èŠåãããå Žåã«ã®ã¿è¡šç€ºãããŸãããéçºäžã«éåžžã«äžè¬çã§ããããïŒåžžã«ä¿®æ£ããå¿ èŠããããŸãïŒãã¢ããªã®éçºã«5å以äžè²»ããã人ã¯ããã€ã¢ãã°ã衚瀺ããããã€ã¢ãã°ãååšããããšã«æ°ä»ãã§ãããã
ç§ã¯ïŒ7360ã@ gaearonãæ¬åœã«å¥œãã§ãã æ°ããèŠåããã¯ã¹ã§ã®å±éã®ããã«PRODã«åãæ¿ããå¿ èŠæ§ã匷調ããããã®ãµããŒããèãã®ã¯å¿åŒ·ãã§ãã ããã¯çŽ æŽããããŠèŠèŠçã§ãã
ãã³ãèšã£ãããšã«å ããŠãç§ã¯æè¿è¿œå ããããšã©ãŒãã¬ãŒãããŒã«ããã¯ããããã«ïŒ7360ã®äžã«æ§ç¯ããŠããŸãã ç§ã¯çŸåšãå°ãéªéã«ãªããªãããŒã¹ãéç¥ã®ããã€ãã®ã¹ã¿ã€ã«ãè©ŠããŠããŸãã ãã£ãŒãããã¯ã®ããã«ãã¹ã¯ãªãŒã³ã·ã§ãããPlnkrãããã«æçš¿ããŸãã
@bvaughnããªãã®ã€ãã¬ãŒã·ã§ã³ããã£ãšèŠãã®ã楜ãã¿ã«ããŠããŸã:)
èŠåããã¯ã¹ã®ã¢ãããŒããç ©ããããšæãã人ã®ããã«ãä»ã®ã©ã€ãã©ãªïŒVueJSãªã©ïŒã¯ããã°ä¿®æ£ãã¹ããŒãã¹ãä¿é²ããããã«ãéçº/å埩ã¯ãŒã¯ãããŒäžã«ãã§ã«DOMãªãŒããŒã¬ã€ã衚瀺ããŠããŸãã
ç§èªèº«ã®çµéšã§ã¯ãããã¯å°ããªäžäŸ¿ã§ããããããã®ã¡ãã»ãŒãžã¯ãã³ã³ãœãŒã«ã«è¡šç€ºãããã¡ãã»ãŒãžãããæçœã§ãã å°ãªããšãéçºã¢ãŒããprodã«ãããã€ããå¿ èŠã®ãªããã®ã«éç¹ã眮ãããšã³ããŠãŒã¶ãŒã«ãããé«éãªã¢ãŒãããæäŸãããµã€ããå¢ããããšãæåŸ ããŠããã®ã¯Danã®æš©å©ã ãšæããŸãã
ãã®å€æŽåŸã¯ãéçºã¢ãŒãã«æ°ä»ãããšãé£ãããªããŸãã ãèŠåãã€ã¢ãã°ãåé€ããæ¹æ³ããæ€çŽ¢ããŠãæ¬çªçšã®ãã«ãã«ã€ããŠåŠç¿ããå¯èœæ§ããããŸãã ããããªããšãããæç¹ã§èŠåãå±éãããå¯èœæ§ãé«ãããŠãŒã¶ãŒã«èŠåã衚瀺ãããŸãã ãã®å Žåãç§ãã¡ã¯åã«ããã¯ã¹ãäžå¿«ã«èŠããã®ã§ã¯ãªããéçºã¢ãŒããæ³å®ãããŠããããšãå®è¡ããã ããªã®ã§ãReactèªäœãéé£ããããšã¯ãªããšæããŸãã
ãããã¯ãšã©ãŒãŸãã¯äŸå€IMOã§ããå¿ èŠããããŸãã ãªãããã§ã¯ãªãã®ã§ããïŒ äŸå€ã¯ä¿®æ£ã匷å¶ããŸãããåŽäžå¯èœãªèŠåã¯ä¿®æ£ããŸããã
ãããã¯ä¿®æ£ãããã¹ãã§ãããç§ã¯ãã£ãšç·æ¥ã®åé¡ãæ±ããŠãããããããŸããã ããšãã°ãç§ã¯UIã®ãããã¿ã€ããäœæ/ã¢ãã¯ã¢ããããããšããããããŸããããã®éãReactãèŠåã§ããè¿ éã§éåžžã¯æšæºä»¥äžã®ã³ãŒããèšè¿°ããŸãã ãããã®èŠåãä¿®æ£ãããã®ã§ãããå°ãªããšã次ã®1æéã§ãã¹ãŠã®ã³ãŒããç Žæ£ããªãããšãããããŸã§ãç§ã¯æ¬åœã«æ°ã«ããŸããã 人ã ã«ããããå³åº§ã«ä¿®æ£ããããšã匷å¶ããããšã¯ãå®éšéçºãåçã«é ãããŸãã
èŠåããã¯ã¹ã®ã¢ãããŒããç ©ããããšæãã人ã®ããã«ãä»ã®ã©ã€ãã©ãªïŒVueJSãªã©ïŒã¯ããã°ä¿®æ£ãã¹ããŒãã¹ãä¿é²ããããã«ãéçº/å埩ã¯ãŒã¯ãããŒäžã«ãã§ã«DOMãªãŒããŒã¬ã€ã衚瀺ããŠããŸãã
ã¹ã¯ãªãŒã³ã·ã§ãã2017-01-24at 10 57 11 am
ããã¯Vueèªäœããã®ãã®ã§ããïŒ ããã¯ã webpack-hot-middlewareã®ãšã©ãŒãªãŒããŒã¬ã€ã§è¡šç€ºãããwebpackãã«ããšã©ãŒã«ãã䌌ãŠããŸãã ãã®å Žåãæ±çšã®ããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ã§ã¯ãªãããªãŒããŒã¬ã€ãè¿œå ããéçºæãã«ãããŒã«ã§ããããã埮åŠã«ç°ãªããŸãã
äžè¬çã«ç§ã¯èŠåãªãŒããŒã¬ã€ã«è³æã§ããããããäœã§ãããããªãããã«ããã®ãããããŠéçºã¢ãŒãããªãã«ããäžç°ãšããŠç¡å¹ã«ããããšãã§ããç¡å¹ã«ããå¿ èŠãããããšã説æããããã¹ããå«ããå¿ èŠããããšæããŸãã ãããå°ãé·ãå Žåã¯expandoã®åŸãã«ãããŸãããã¡ãã»ãŒãžãäŒããã®ã«æé©ãªå Žæã®ããã§ãã
ãªãŒããŒã¬ã€ä»ãã®15.2.0ã®ãããªã¢ããããŒããæãã§ãã å°ããªãã³ãã§ãçªç¶ãå°éå ·ãDOMããŒãã«æž¡ãããããšã«ã€ããŠæåéãäœçŸãã®èŠåã衚瀺ãããŸãã ãšã©ãŒãããããŸããããæžäŸ¡ååŽã®èŠåã¯ãã®ãããªéªéãªã¹ããŒã¹ã«å±ããŠãããšã¯æããŸãã
ãšã©ãŒãããããŸããããæžäŸ¡ååŽã®èŠåã¯ãã®ãããªéªéãªã¹ããŒã¹ã«å±ããŠãããšã¯æããŸãã
ããã以åã«éåžžã«æ確ã«äŒããããŠãããã©ããã¯ããããŸããããã€ãšããŒããã¯ã¹èŠåïŒïŒ7360ïŒã«é¢ããèãæ¹ã¯ããã¹ãŠã®èŠåïŒéæšå¥šãŸãã¯ãã®ä»ïŒã衚瀺ããããšã§ã¯ãããŸããã§ããã ããããããŒã ã_ç¹ã«éèŠ_ã§ãããšèŠãªããç¹å®ã®èŠåã¯ããã®æ¹æ³ã§åŒ·èª¿è¡šç€ºãããŸãã æ®ãã¯ããããã³ã³ãœãŒã«ã«æ®ããŸãã
å°ãªããšããããã¯ãã ãšç§ã1ã2é±éåã«ãã®æ©èœã«ã€ããŠæã£ãŠããäŒè©±ããã®ç§ã®æã¡åž°ãã§ãã
15.2ã®å°éå ·ã®èŠåãã誀ã£ãIMOã§ãããéåžžã®MOã瀺ããã®ã§ã¯ãããŸããããããåé¿ããããã«ããã€ããŒããŒãžã§ã³ã§èŠåã¬ãã«ãå¶åŸ¡ããæ¹æ³ãå¿ èŠã§ãã
ç§ãã¡ã®ããŒã ãæ¬çªãã«ãã䜿çšããªãäž»ãªçç±ã¯ããã¹ãutilsãå«ãŸããŠããªããããJSãŠããããã¹ããå®è¡ã§ããªãããã§ãã
ãŸããReactããŒã ïŒ @ sebmarkbage ã @ gaearon ã @ tomocchinoãªã©ïŒã«ãã®åé¡ã«ã€ããŠè©±ãåããä»ååæã®BlinkOnããã®ä»ã®åæã§ã®ããã©ãŒãã³ã¹ãšã¢ãã€ã«ã«ã€ããŠéåžžã«ãªãŒãã³ã«è©±ããŠãããããšã«æè¬ããŸãã
ã¹ããŒã¿ã¹ãã§ãã¯
https://github.com/facebook/react/pull/7360ã®@awearyã«ãããšããã®ç¹å®ã®åé¡ã«å¯Ÿããã€ãšããŒããã¯ã¹ã®ãœãªã¥ãŒã·ã§ã³ã¯ãReactã®åªå 床ã®é«ãV16äœæ¥ãå®äºãããŸã§ä¿çãããŠããŸããããŸã çºçããŠããã¯ãã§ãã https://github.com/facebook/fbjs/pull/165ãçéžãããFiberã«å®è£ ããå¿ èŠããããŸãã ããã¯ãå ¬éããããã®åªãããããªãã¯APIãäœæããå¿ èŠããããŸãã ç§ã®æãä¿ã¡ãŸãð€
ãã®åé¡ã¯ãŸã è延ããŠããããã§ã
ç§ã®æºã«åºããããæ¬çªã¢ããªã®ããªãã®æ°ãããŸã DEVã¢ãŒããæ¬çªã«åºè·ããŠããŸãã When deploying React apps to production
ãããã°æååã¯ã次ã®ãã«ãã§ç¢ºèªã§ããŸãã
https://cdnjs.cloudflare.com/ajax/libs/react/15.3.1/react.jsïŒtombraider.com ïŒ
https://shared.reliclink.com/dlls/vendor-f3e016f6037eb107ffc0.live-shared.min.jsïŒdawnofwar.com ïŒ
https://d1xx3pvec9nqb7.cloudfront.net/media/js/thread.af65c1a02d15.jsïŒthread.com ïŒ
http://www.sothebys.com/etc/designs/redesigns/sothebys/redesignlibs.min.jsïŒsothebys.com ïŒ
ã€ãšããŒããã¯ã¹ããåã®ããã¯ã¹ããäžèšã®ã³ã³ãœãŒã«ãžã®DEVã¢ãŒãèŠåã®ãã°èšé²ã«ç§»è¡ãããšãäœããã®åœ±é¿ãããå¯èœæ§ããããšç§ã¯ãŸã èããŠããŸãã ã¯ã©ãã·ã¥ã¬ããŒããããããæ€åºããå¯èœæ§ãããããã«ã³ã³ãœãŒã«ãšã©ãŒãã¹ããŒãããšããSebastianã®ææ¡ããæ€èšãã䟡å€ããããšæããŸããã
ããã§éãåããããã«ä»ã«äœãã§ããã§ããããïŒ
ããè¯ãã¢ããã«ã·ãŒïŒ DEVã¢ãŒããæ¬çªç°å¢ã«åºè·ããªã人ã ãåŒãç¶ãæ¯æããããšãçŽæã§ããŠããããã§ãããV16以éã®å ¬åŒãœãªã¥ãŒã·ã§ã³ãäžéžãããããšãã§ãããã©ããã確èªããããšæããŸã:)
çæçã«ã¯ã create-react-app
ã¯ãæ°ãããããžã§ã¯ãããã®åé¡ãåé¿ããã®ã«åœ¹ç«ã€è¯ãå Žæã«ããããã«èŠããŸãã
ã€ã³ã¹ããŒã«ããã¥ã¡ã³ãã®æ¹å
ä»ã®ãã¹ãŠã®äººã®ããã«ã httpsïŒ//facebook.github.io/react/docs/installation.htmlã®ãµããŒãããããŸããïŒ Installing React
ã®èŠåºãã®äžã«æ確ã§ç®ã«èŠããåŒã³åºããå«ãŸãã人ã
ã«DEVã¢ãŒãã«æ³šæããããã«æ³šæãä¿ããŸã補é ïŒ
ãŠãŒã¶ãŒãšããŠã httpsïŒ //facebook.github.io/react/docs/installation.html#development-and-production-versionsãäžç®èŠãã ãã§èªã倧ããªã€ã³ã»ã³ãã£ãã¯ãªããšæããŸãã
èãïŒ
ç§ãã¡ã®ããŒã ãæ¬çªãã«ãã䜿çšããªãäž»ãªçç±ã¯ããã¹ãutilsãå«ãŸããŠããªããããJSãŠããããã¹ããå®è¡ã§ããªãããã§ãã
ç§ã¯ããã«ã€ããŠæ··ä¹±ããŠããŸãã æ¬çªWebãµã€ãã§ãã¹ããå®è¡ããŠããŸããïŒ ããã§ãªãå Žåãæ¬çªWebãµã€ãã§æ¬çªãã«ãã䜿çšã§ãããéçºãã«ããéçºã§äœ¿çšã§ããªãçç±ã¯äœã§ããïŒ
ä»ã®ãã¹ãŠã®äººã«ãšã£ãŠã httpsïŒ//facebook.github.io/react/docs/installation.htmlã®ãµããŒãã¯ãããŸããïŒããã«ã¯ãInstalling Reactã®èŠåºãã®äžã«æ確ã§ç®ã«èŠããåŒã³åºããå«ãŸããæ¬çªç°å¢ã§ã®DEVã¢ãŒãã«æ³šæããããã«äººã ã«æãåºãããŸããïŒ
ãã¡ããã PRãéãããã§ããïŒ
ãã¡ããã PRãéãããã§ããïŒ
幞ã以äžã«ã
ããããããã³ãããŒã¯ã«ã€ããŠã®èšèã¯ãããã©ãŒãã³ã¹ãéçºã¢ãŒãã§åå¿ãããã®ãšæ¯èŒãã人ã ãæè²ããã®ã«åœ¹ç«ã€ã§ãããïŒ
ãããããreact devtoolsæ¡åŒµæ©èœãå©çšããŠãdevã¢ãŒãã§reactã䜿çšããŠããŒãžãéããšãã«ãéç¥ãæãããªäœãã衚瀺ã§ãããšæããŸããïŒ
ç§ã¯ãã®ã¢ã€ãã¢ã奜ãã§ãïŒ devtoolsçšã«ææ¡ãããã¢ã€ã³ã³ã®ã»ããããŸãšããŸããïŒfacebook / react-devtools / pull / 652ãåç §ïŒã
devãšprodã®Reactãéæ¹åã«ããããŠå°æ¥çã«å®å šãªæ¹æ³ã§æ€åºããæ¹æ³ã決å®ããå¿ èŠããããŸãããæææ¥ã®äŒè°ã®è°é¡ã«è¿œå ããŸããã
ãã®åé¡ã«å¯ŸåŠããããã«ãããã€ãã®åççãªæé ãå®è¡ããŸããã
React DevToolsïŒã700KãŠãŒã¶ãŒïŒã¯ãéçºãã«ãçšã®ç¹åŸŽçãªèµ€ãã¢ã€ã³ã³ã衚瀺ããããã«ãªããŸããã ããã¯ã人ã ãããŒãžã§ã³éã®éããæ©æã«ç¥ãã®ã«åœ¹ç«ã¡ãŸãã ãŸããéçºè ã蚪åãããµã€ãã§ããã«æ°ã¥ããäœæ¥ããŠãã人ã ã«å ±åããããã仲éããã®ãã¬ãã·ã£ãŒãçããŸãã ããã€ãã®äž»èŠãªãµã€ããããããå±éããŠããæ°æ¥ä»¥å ã«åé¡ãä¿®æ£ããã®ãèŠãŠããŸããã
React DevToolsã®éç¥ã¯ããã¹ãŠã®äž»èŠãªãã³ãã©ãŒã®æ¬çªãã«ããäœæããããã®æé ãå ¬éããWebãµã€ãã«ãªã³ã¯ããŠããŸãã ãŸããã€ã³ã¹ããŒã«ããŒãžã§ãç®ç«ã€ããã«ããŸããã
Create React Appã¯ãåŒãç¶ã人æ°ãåããŠããŸãã ããã¯å¥ã ã®ã³ãã³ãã§ãã®åºå¥ãæ©ã段éã§æããŸãã ãŸããã¿ãŒããã«ã®éçºã¢ãŒãã«é¢ããæ°žç¶çãªéç¥ã衚瀺ãããŸãã
React 16 Beta 1 ïŒããã³ãã以éã®ãªãªãŒã¹ïŒã«ã¯ããã¡ã€ã«åãšããŠreact.development.js
ããã³react.production.min.js
ãä»å±ããŠãããçž®å°ãããŠããªããã«ããæ¬çªç°å¢ã§äœ¿çšããŠã¯ãªããªãããšãæ確ã«ããŠããŸãã
å°æ¥çã«ã¯ãã®åé¡ã解決ããæ¹æ³ããã£ãšæš¡çŽ¢ãããããããªããšæããŸãããä»ã®ãšããããã£ãšææ¬çãªå¯Ÿçãè¬ããããšãªãåé²ã§ããããã圹ç«ã€ãã©ããã確ãããããšãã§ãããšæããŸãã è°è«ããŠãããã¿ããªã«æè¬ããŸãã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯éåžžããã€ã³ãããã§ã«ããããããŠãããšæãããšãã«ãã®ãããªé·ãè°è«ã«è¿œå ããããšã¯ãããŸããããããã«åæãããã®ãã€ã³ãã匷調ããããšæããŸãïŒDOMã«è§ŠããŠãéçºããŒãžã§ã³ã䜿çšããŠããããšãèŠåããŸã倧ããªééãã«ãªããŸãã ç§ã®ç¥ãéããä»ã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ãã®åäŸã¯ãããŸããã
ãã¹ãŠã®ãã¥ãŒããªã¢ã«ããã¹ãŠã®éã³å Žãéçºã¢ãŒãã䜿çšããŠReactãæãããã¹ãŠã®å°ããªãµã€ããããžã§ã¯ããæ³åããŠã¿ãŠãã ããã Reactã§äœã楜ããããšãæ¢æ±ãããããã¹ãã±ãŒã¹ãåé¢ãããããããã«ãç§ãäžç·ã«æããå°ããªãã¹ããµã€ãã¯ãã¹ãŠãããŸãã æåã§ç¡å¹ã«ããªããã°ãªããªãã£ããããã®ãµã€ãã®ãã¹ãŠã®èŠåã«åå¿ãããªããç§ã¯ä¿¡ããããªãã»ã©æã£ãŠããã§ãããã ããã¯å§åçãªèŠªã®ããã«æãã Reactã䜿çšããããšãç©æ¥µçã«æããšã©ãŸãããŸãããªããªããäœãæ°ããããšãããããšãããšãæéŠãå©ãããã§ãã
2æéããšã§ããã£ãŠãïŒ ããããçµæ§ã§ãã ãã®ãããªçµ¶ãéãªããã€ããããšã¯ç¢ºãã«ãŠãŒã¶ãŒãReactã§éçºããããšãæããšã©ãŸãããã§ãããããããŠç§ã¯æ£çŽã«ããã人ã ãä»ã®ãã¬ãŒã ã¯ãŒã¯ãæ¡çšããããã«é ãããã ãããšæããŸãã ãã¶ãããã¯Chromeéçºè ãæãã§ããããšã§ããïŒ
ã¯ããããã¯ã©ããããããæ¬çªç°å¢ã«ç§»è¡ãããšããäºå®ã¯èšããŸã§ããããŸãããç¹å®ã®ããŒã ã«Reactãæ¡çšãããã説åŸããã®ã¯ãã§ã«ååã«å°é£ã§ãããããã¯åœŒãã«ãšã£ãŠããã«å¯Ÿãã匟è¬ã§ãã
ç§ãReactã§æãæ°ã«å ¥ã£ãŠããã®ã¯ã
ReactDOM.render(...)
ãåŒã³åºããŸã§äœãè¡ããªãããšã§ãããããããšãæ瀺ãããå Žæã«ã®ã¿ããŒã¿ãé 眮ãããŸãã ã ãããããããã¯ãšãŠãè¯ããå€ç«ãããæ©èœçãªã©ã€ãã©ãªã§ãã人ã ãçž®å°ãããŠããªããã³ãã«ãåºè·ããŠãããã©ãããæ€åºããå¿ èŠããããŸããïŒ å¿ èŠãªãšãã«ãã£ãã·ã¥ããŠããªãå Žåã¯ã©ãã§ããããã 圌ããnginxãæé©ã«æ§æããŠããªãå Žåã¯ã©ãã§ããïŒ ãŸãã¯ãå¿ èŠãªãšãã«
shouldComponentUpdate
ã䜿çšããªãã§ãã ããã ãŸãã¯ãå¿ èŠã®ãªããšãã«ãã¹ãŠãäžå¿ èŠã«ã¬ã³ããªã³ã°ããŠããŸããïŒããã©ãŒãã³ã¹ãæªãã®ã«ã¯ããã€ãã®çç±ããããReactã®éçºã¢ãŒãã ãã§ãããéé£ããã®ã¯ééã£ãŠããŸãã ãµã€ããå±éãããšãã¯ãæé©åããããµã€ããå±éããæ¹æ³ãç解ããŠããããšãå®å šã«æåŸ ãããŸãã ç§ãã¡ã«ã§ããããšããªããšããããã§ã¯ãããŸãããããã®åé¡ã®äž»ãªçç±ã¯ããã³ãããŒã¯ã®äœæè ããã¥ãŒããªãžã§ã³ã¹ãè¡ã£ãŠããªãããšã§ããããã®ããã«ãéãæãå¿ èŠã¯ãããŸããã ãããåŒã³åºãå¥ã®æ¹æ³ãèŠã€ããå¿ èŠããããŸãã