JavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒã®è©³çŽ°è§£èª¬ãæŽæ°èª¿æŽã·ã¹ãã ãå©ç¹ãå®è£ æŠç¥ãã·ãŒã ã¬ã¹ãªéçºã¯ãŒã¯ãããŒã®ããã®ãã¹ããã©ã¯ãã£ã¹ãæ¢ããŸãã
JavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒïŒæŽæ°èª¿æŽã·ã¹ãã ã®çè§£
å€åã®æ¿ãããŠã§ãéçºã®äžçã§ã¯ãå¹çãšã¹ããŒããæãéèŠã§ããJavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒïŒHMRïŒã¯ãéçºããã»ã¹ãå¹çåããããã®äžå¯æ¬ ãªããŒã«ãšããŠç»å ŽããŸããããã®èšäºã§ã¯ãHMRã®è€éããç¹ã«ãã®æ©èœãæ¯ããæŽæ°èª¿æŽã·ã¹ãã ã«çŠç¹ãåœãŠãŠè©³ãã解説ããŸããã³ã¢ã³ã³ã»ãããå©ç¹ãå®è£ ã®è©³çްããã¹ããã©ã¯ãã£ã¹ãæ¢ããããããã¬ãã«ã®éçºè ã«å æ¬çãªçè§£ãæäŸããŸãã
JavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒãšã¯ïŒ
ã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒã䜿çšãããšãããŒãžå šäœããªããŒãããããšãªããå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãžã¥ãŒã«ãæŽæ°ã§ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãç¶æããã³ãŒãã®å€æŽã«å¯Ÿãããã£ãŒãããã¯ãå³åº§ã«æäŸããããšã§ãéçºæéãå€§å¹ ã«ççž®ããŸããã¢ããªã±ãŒã·ã§ã³å šäœãåãã«ãããŠãªããŒããã代ããã«ã倿Žãããã¢ãžã¥ãŒã«ãšãã®äŸåé¢ä¿ã®ã¿ãæŽæ°ãããŸãã
ãã®ããã«èããŠã¿ãŠãã ãããããªãã¯å®¶ïŒã¢ããªã±ãŒã·ã§ã³ïŒã建ãŠãŠããŸããHMRããªããã°ãçªïŒã¢ãžã¥ãŒã«ïŒã倿Žãããã³ã«ãå®¶å šäœãè§£äœããŠå»ºãŠçŽããªããã°ãªããŸãããHMRãããã°ãä»ã®æ§é ãéªéããããšãªãçªã亀æã§ããŸãã
ãããã¢ããããŒããããŒãžã£ãŒã䜿çšããçç±
- éçºãµã€ã¯ã«ã®é«éåïŒãªããŒãæéãççž®ãããããšã§ããã£ãŒãããã¯ã«ãŒããéããªããéçºãããå¹ççã«ãªããŸãã
- ã¢ããªã±ãŒã·ã§ã³ç¶æ ã®ç¶æïŒæŽæ°ããŸããã§ç¶æ ãç¶æããããããéçºè ã¯è²Žéãªã³ã³ããã¹ãã倱ãããšãªãã³ãŒããå埩ã§ããŸããè€éãªãã©ãŒã ããããã°ããŠãããšæ³åããŠã¿ãŠãã ãããHMRããªããã°ãã³ãŒãã倿Žãããã³ã«ãã©ãŒã ããªã»ããããããã¹ãŠã®ããŒã¿ãåå ¥åããå¿ èŠããããŸãã
- éçºè ãšã¯ã¹ããªãšã³ã¹ã®åäžïŒHMRã¯ãããã¹ã ãŒãºã§å¿çæ§ã®é«ãéçºç°å¢ãæäŸããããšã§ãå šäœçãªéçºè ãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
- ãµãŒããŒè² è·ã®è»œæžïŒå¿ èŠãªã¢ãžã¥ãŒã«ã®ã¿ãæŽæ°ããããšã§ãHMRã¯éçºãµãŒããŒã®è² è·ãæå°éã«æããŸãã
- ãããã°ã®åŒ·åïŒHMRã¯ãç¹å®ã®ã³ãŒã倿Žã®åœ±é¿ãåé¢ããããšã§ãããçŠç¹ãçµã£ããããã°ãå¯èœã«ããŸãã
ã³ã¢ã³ã³ã»ããïŒæŽæ°èª¿æŽã·ã¹ãã
ããããHMRã·ã¹ãã ã®äžå¿ãšãªãã®ã¯ããã®æŽæ°èª¿æŽã¡ã«ããºã ã§ãããã®ã·ã¹ãã ã¯ãã¢ãžã¥ãŒã«ã®å€æŽãæ€åºããã©ã®ã¢ãžã¥ãŒã«ãæŽæ°ããå¿ èŠããããã倿ããã¢ããªã±ãŒã·ã§ã³ã®å šäœçãªç¶æ ãä¹±ãããšãªãæŽæ°ããã»ã¹ã調æŽãã責任ããããŸããããã€ãã®äž»èŠãªã³ã³ããŒãã³ããšã³ã³ã»ãããé¢äžããŠããŸãã
1. ã¢ãžã¥ãŒã«ã°ã©ã
ã¢ãžã¥ãŒã«ã°ã©ãã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ã衚ããŸããHMRããŒã«ã¯ãã®ã°ã©ããåæããŠã倿Žã®åœ±é¿ã倿ããã©ã®ã¢ãžã¥ãŒã«ãæŽæ°ããå¿ èŠãããããç¹å®ããŸããããã¢ãžã¥ãŒã«ã®å€æŽããããã«çŽæ¥çãŸãã¯éæ¥çã«äŸåããä»ã®ã¢ãžã¥ãŒã«ã®æŽæ°ãå¿ èŠãšããå ŽåããããŸãã
å®¶ç³»å³ãæ³åããŠã¿ãŠãã ããããã人ãä»äºãå€ããå ŽåïŒã¢ãžã¥ãŒã«ã®å€æŽïŒãããã¯é å¶è ãåäŸïŒäŸåã¢ãžã¥ãŒã«ïŒã«åœ±é¿ãäžããå¯èœæ§ããããŸããã¢ãžã¥ãŒã«ã°ã©ãã¯ãHMRã·ã¹ãã ããããã®é¢ä¿ãçè§£ããã®ã«åœ¹ç«ã€å®¶ç³»å³ã§ãã
2. 倿޿€åº
HMRã·ã¹ãã ã¯ãã¢ãžã¥ãŒã«ã®å€æŽãæ€åºããããã«ããŸããŸãªæè¡ãæ¡çšããŠããŸããããã«ã¯ããã¡ã€ã«ã·ã¹ãã ã®ã€ãã³ãã®ç£èŠãã¢ãžã¥ãŒã«ããã·ã¥ã®æ¯èŒããŸãã¯ãã®ä»ã®ã¡ã«ããºã ã䜿çšããŠå€æŽãç¹å®ããããšãå«ãŸããŸãã
ãã¡ã€ã«ã·ã¹ãã ã®ç£èŠã¯äžè¬çãªã¢ãããŒãã§ããHMRããŒã«ã¯ãã¡ã€ã«ã®å€æŽããªãã¹ã³ãã倿Žãæ€åºããããšæŽæ°ãããªã¬ãŒããŸãããããã¯ãã·ã¹ãã ã¯åã¢ãžã¥ãŒã«ã®ããã·ã¥ãèšç®ããããã以åã®ããã·ã¥ãšæ¯èŒããããšãã§ããŸããããã·ã¥ãç°ãªãå Žåãããã¯å€æŽã瀺ããŸãã
3. æŽæ°ã®äŒæ
倿Žãæ€åºããããšãHMRã·ã¹ãã ã¯ã¢ãžã¥ãŒã«ã°ã©ããéããŠæŽæ°ãäŒæãããŸããããã«ã¯ã倿Žãããã¢ãžã¥ãŒã«ã«çŽæ¥çãŸãã¯éæ¥çã«äŸåãããã¹ãŠã®ã¢ãžã¥ãŒã«ãç¹å®ããããããæŽæ°å¯Ÿè±¡ãšããŠããŒã¯ããããšãå«ãŸããŸãã
æŽæ°ã®äŒæããã»ã¹ã¯ãã¢ãžã¥ãŒã«ã°ã©ãã§å®çŸ©ãããäŸåé¢ä¿ã«åŸããŸããã·ã¹ãã ã¯å€æŽãããã¢ãžã¥ãŒã«ããå§ãŸããã°ã©ããååž°çã«ãã©ããéäžã§äŸåã¢ãžã¥ãŒã«ãããŒã¯ããŠãããŸãã
4. ã³ãŒã眮æ
äžå¿çãªã¿ã¹ã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã©ã³ã¿ã€ã ãæå°éã«åŠšããæ¹æ³ã§ãå€ãã¢ãžã¥ãŒã«ã³ãŒããæ°ããããŒãžã§ã³ã«çœ®ãæããããšã§ããããã«ã¯ããã°ãã°æ¬¡ã®ãããªæè¡ãé¢ãããŸãã
- ãããã¹ã¯ããã³ã°ïŒå®å šãªãªããŒããªãã§ãã¡ã¢ãªå ã§çŽæ¥ã¢ãžã¥ãŒã«ã®ã³ãŒãã眮ãæããŸããããã¯ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãç¶æããããã®çæ³çãªã·ããªãªã§ãã
- éšåçãªæŽæ°ïŒã¢ãžã¥ãŒã«å šäœã眮ãæãã代ããã«ã颿°ã倿°ãªã©ãã¢ãžã¥ãŒã«ã®ç¹å®ã®éšåã®ã¿ãæŽæ°ããŸãã
- 颿°ã€ã³ãžã§ã¯ã·ã§ã³ïŒæ¢åã®ã¢ãžã¥ãŒã«ã¹ã³ãŒãã«æ°ãããŸãã¯å€æŽããã颿°ãå°å ¥ããŸãã
5. åç/æåŠã¡ã«ããºã
ã¢ãžã¥ãŒã«ã¯ããããã¢ããããŒããæç€ºçã«ãåçããŸãã¯ãæåŠãã§ããŸããã¢ãžã¥ãŒã«ãæŽæ°ãåçããå Žåãããã¯ã¢ããªã±ãŒã·ã§ã³ãå£ãããšãªã倿ŽãåŠçã§ããããšã瀺ããŸããã¢ãžã¥ãŒã«ãæŽæ°ãæåŠããå Žåãããã¯å®å šãªãªããŒããå¿ èŠã§ããããšã瀺ããŸãã
ãã®ã¡ã«ããºã ã«ãããéçºè ã¯æŽæ°ããã»ã¹ããã现ããå¶åŸ¡ã§ããŸããããã«ãããã¢ãžã¥ãŒã«ã倿Žã«ã©ã®ããã«åå¿ããããæå®ããäºæããªãåäœãé²ãããšãã§ããŸããããšãã°ãç¹å®ã®ããŒã¿æ§é ã«äŸåããã³ã³ããŒãã³ãã¯ãããŒã¿æ§é ã倿Žãããå Žåã«æŽæ°ãæåŠããããšããããŸãã
6. ãšã©ãŒãã³ããªã³ã°
ã¹ã ãŒãºãªHMRäœéšã®ããã«ã¯ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãäžå¯æ¬ ã§ããã·ã¹ãã ã¯ãæŽæ°ããã»ã¹äžã«çºçãããšã©ãŒãé©åã«åŠçããéçºè ã«æçãªãã£ãŒãããã¯ãæäŸããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãé²ãå¿ èŠããããŸãã
ãããã¢ããããŒãäžã«ãšã©ãŒãçºçããå Žåãã·ã¹ãã ã¯ãšã©ãŒã¡ãã»ãŒãžããã°ã«èšé²ããåé¡ã®è§£æ±ºæ¹æ³ã«é¢ããã¬ã€ãã³ã¹ãæäŸããå¿ èŠããããŸãããŸããã¢ãžã¥ãŒã«ã®åã®ããŒãžã§ã³ã«æ»ãããå®å šãªãªããŒããå®è¡ãããªã©ã®ãªãã·ã§ã³ãæäŸããããšããããŸãã
人æ°ã®HMRå®è£
ããã€ãã®äººæ°ã®ããJavaScriptãã³ãã©ãŒããã«ãããŒã«ã¯ãããããç¬èªã®å®è£ ãšèšå®ãªãã·ã§ã³ãæã€ãçµã¿èŸŒã¿ã®HMRãµããŒããæäŸããŠããŸãã以äžã«ããã€ãã®èåãªäŸãæããŸãã
1. Webpack
Webpackã¯åºã䜿çšãããŠããã¢ãžã¥ãŒã«ãã³ãã©ãŒã§ãããå æ¬çãªHMRå®è£ ãæäŸããŸããæŽç·Žãããã¢ãžã¥ãŒã«ã°ã©ããå©çšããæŽæ°ããã»ã¹ãã«ã¹ã¿ãã€ãºããããã®ããŸããŸãªèšå®ãªãã·ã§ã³ãæäŸããŸãã
Webpackã®HMRå®è£
ã¯ãwebpack-dev-serverãšHotModuleReplacementPluginã«äŸåããŠããŸããdevãµãŒããŒã¯ãã©ãŠã¶ãšãã³ãã©ãŒã®éã®éä¿¡ãã£ãã«ãšããŠæ©èœãããã©ã°ã€ã³ã¯ãããã¢ãžã¥ãŒã«ãªãã¬ãŒã¹ã¡ã³ãæ©èœãæå¹ã«ããŸãã
Webpackèšå®ã®äŸïŒ
module.exports = {
// ...
devServer: {
hot: true,
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
],
};
ãã®èšå®ã§ã¯ãhot: trueãéçºãµãŒããŒã§HMRãæå¹ã«ããwebpack.HotModuleReplacementPlugin()ããã©ã°ã€ã³ãæå¹ã«ããŸãã
2. Vite
Viteã¯ããã€ãã£ãESã¢ãžã¥ãŒã«ã掻çšããŠéåžžã«é«éãªéçºãã«ããæäŸããææ°ã®ãã«ãããŒã«ã§ãããã®HMRå®è£ ã¯ãWebpackã®ãããªåŸæ¥ã®ãã³ãã©ãŒãããå€§å¹ ã«é«éã§ãã
Viteã®HMRå®è£ ã¯ãã€ãã£ãESã¢ãžã¥ãŒã«ã®äžã«æ§ç¯ãããŠãããå¹ççãªæŽæ°ã®ããã«ãã©ãŠã¶ã®ãã£ãã·ã¥ã掻çšããŸãã倿Žãããã¢ãžã¥ãŒã«ãšãã®äŸåé¢ä¿ã®ã¿ãæŽæ°ãããããã»ãŒç¬æã®ãã£ãŒãããã¯ãåŸãããŸãã
Viteã¯HMRã®ããã«æå°éã®èšå®ããå¿ èŠãšããŸãããéçºã¢ãŒãã§ã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸãã
Viteèšå®ã®äŸïŒvite.config.jsïŒïŒ
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [
react()
],
})
ãã®èšå®ã§ã¯ã@vitejs/plugin-reactãReactã³ã³ããŒãã³ãã®HMRãèªåçã«æå¹ã«ããŸãã
3. Rollup
Rollupã¯ããã©ã°ã€ã³ãéããŠHMRãµããŒããæäŸãããã1ã€ã®äººæ°ã®ããã¢ãžã¥ãŒã«ãã³ãã©ãŒã§ããæ¬çªçšã«é«åºŠã«æé©åããããã³ãã«ãçæããèœåã§ç¥ãããŠããŸãã
Rollupã®HMRå®è£
ã¯ã@rollup/plugin-hotã®ãããªãã©ã°ã€ã³ã«äŸåããŠããŸãããããã®ãã©ã°ã€ã³ã¯ã倿Žã®æ€åºãæŽæ°ã®äŒæãã¢ãžã¥ãŒã«ã³ãŒãã®çœ®æã«å¿
èŠãªæ©èœãæäŸããŸãã
Rollupèšå®ã®äŸïŒrollup.config.jsïŒïŒ
import hot from '@rollup/plugin-hot'
export default {
// ...
plugins: [
hot(),
],
};
ãã®èšå®ã§ã¯ã@rollup/plugin-hotãHMRæ©èœãæå¹ã«ããŸãã
å®è£ æŠç¥
HMRã广çã«å®è£ ããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãšéçºã¯ãŒã¯ãããŒã®ç¹å®ã®èŠä»¶ãæ éã«æ€èšããå¿ èŠããããŸãã以äžã«çæãã¹ãäž»èŠãªæŠç¥ãããã€ã瀺ããŸãã
1. ã¢ãžã¥ãŒã«ã®å¢ç
倿Žãåé¢ããæŽæ°ã®åœ±é¿ãæå°éã«æããããã«ãæç¢ºãªã¢ãžã¥ãŒã«ã®å¢çãå®çŸ©ããŸããé©åã«å®çŸ©ãããã¢ãžã¥ãŒã«ã¯ãHMRã·ã¹ãã ãäŸåé¢ä¿ã远跡ããæŽæ°ãå¹ççã«äŒæãããã®ã容æã«ããŸãã
ã³ãŒãåå²ãã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ãªã©ã®æè¡ã䜿çšããŠãã¢ãžã¥ã©ãŒãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšãæ€èšããŠãã ãããããã«ãããæŽæ°ã®ç®¡çã容æã«ãªããã³ãŒãããŒã¹å šäœã®ä¿å®æ§ãåäžããŸãã
2. ç¶æ 管ç
ãããã¢ããããŒãäžã«ç¶æ ãç¶æãããããã«ãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã广çã«ç®¡çããŸããReduxãVuexãMobXãªã©ã®ç¶æ 管çã©ã€ãã©ãªã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ãäžå 管çããŸãã
ãããã®ã©ã€ãã©ãªã¯ãæŽæ°ããŸããã§ç¶æ ãæ°žç¶åããããŒã¿æå€±ãé²ãã¡ã«ããºã ãæäŸããŸãããŸããã¿ã€ã ãã©ãã«ãããã°ã®ãããªæ©èœãæäŸããŠãããããã¯åé¡ã®ç¹å®ãšè§£æ±ºã«éåžžã«åœ¹ç«ã¡ãŸãã
3. ã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£
ã¢ãžã¥ã©ãŒãªæŽæ°ã容æã«ããããã«ãã³ã³ããŒãã³ãããŒã¹ã®ã¢ãŒããã¯ãã£ãæ¡çšããŸããã³ã³ããŒãã³ãã¯èªå·±å®çµåã®æ©èœåäœã§ãããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã«åœ±é¿ãäžããããšãªãç¬ç«ããŠæŽæ°ã§ããŸãã
ReactãAngularãVue.jsãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã¯ãã³ã³ããŒãã³ãããŒã¹ã®ã¢ãããŒãã奚å±ããŠãããHMRã广çã«å®è£ ããããããŠããŸããåäžã®ã³ã³ããŒãã³ããæŽæ°ãããšããã®ã³ã³ããŒãã³ããšãã®çŽæ¥ã®äŸåé¢ä¿ã®ã¿ã«åœ±é¿ããŸãã
4. åç/æåŠãã³ãã©
ã¢ãžã¥ãŒã«ããããã¢ããããŒãã«ã©ã®ããã«åå¿ããããå¶åŸ¡ããããã«ãåç/æåŠãã³ãã©ãå®è£ ããŸãããããã®ãã³ãã©ã䜿çšããŠãã¢ãžã¥ãŒã«ã倿Žãé©åã«åŠçããäºæããªãåäœãé²ãããã«ããŸãã
ã¢ãžã¥ãŒã«ãæŽæ°ãåçãããšããã®å éšç¶æ ãæŽæ°ããåºåãåã¬ã³ããªã³ã°ããå¿ èŠããããŸããã¢ãžã¥ãŒã«ãæŽæ°ãæåŠãããšãå®å šãªãªããŒããå¿ èŠã§ããããšã瀺ããŸãã
äŸïŒWebpackïŒïŒ
if (module.hot) {
module.hot.accept('./myModule', function() {
// ãã®é¢æ°ã¯ myModule.js ãæŽæ°ããããšãã«åŒã³åºãããŸã
console.log('myModule.js updated!');
});
}
5. ãšã©ãŒããŠã³ããª
ãããã¢ããããŒãäžã«çºçãããšã©ãŒããã£ããããã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãé²ãããã«ãšã©ãŒããŠã³ããªã䜿çšããŸãããšã©ãŒããŠã³ããªã¯ãåã³ã³ããŒãã³ãããªãŒã®ã©ãã§ã§ãJavaScriptãšã©ãŒããã£ãããããããã®ãšã©ãŒããã°ã«èšé²ããã¯ã©ãã·ã¥ããã³ã³ããŒãã³ãããªãŒã®ä»£ããã«ãã©ãŒã«ããã¯UIã衚瀺ããReactã³ã³ããŒãã³ãã§ãã
ãšã©ãŒããŠã³ããªã¯ããšã©ãŒãåé¢ããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåãžã®äŒæãé²ãã®ã«åœ¹ç«ã¡ãŸããããã¯ãé »ç¹ã«å€æŽãå ããŠãšã©ãŒã«ééããéçºäžã«ã¯ç¹ã«äŸ¿å©ã§ãã
HMRã®ãã¹ããã©ã¯ãã£ã¹
HMRã®å©ç¹ãæå€§éã«æŽ»çšããã¹ã ãŒãºãªéçºäœéšã確ä¿ããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- ã¢ãžã¥ãŒã«ãå°ãããçŠç¹ãçµã£ããã®ã«ä¿ã€ïŒå°ããã¢ãžã¥ãŒã«ã¯æŽæ°ãããããã¢ããªã±ãŒã·ã§ã³å šäœãžã®åœ±é¿ãå°ããã§ãã
- äžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã䜿çšããïŒäžè²«ããã³ãŒãã£ã³ã°ã¹ã¿ã€ã«ã¯ã倿Žã®è¿œè·¡ãæœåšçãªåé¡ã®ç¹å®ã容æã«ããŸãã
- åäœãã¹ããæžãïŒåäœãã¹ãã¯ãã³ãŒããæ£ããæ©èœããŠããããšãããã³å€æŽããªã°ã¬ãã·ã§ã³ãåŒãèµ·ãããªãããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸãã
- 培åºçã«ãã¹ãããïŒåãããã¢ããããŒãåŸã«ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ããããã¹ãŠãæåŸ ã©ããã«æ©èœããŠããããšã確èªããŸãã
- ããã©ãŒãã³ã¹ãç£èŠããïŒã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããŠãæœåšçãªããã«ããã¯ãç¹å®ããã³ãŒããæé©åããŸãã
- ãªã³ã¿ãŒã䜿çšããïŒãªã³ã¿ãŒã¯ãæœåšçãªãšã©ãŒãç¹å®ããã³ãŒãã£ã³ã°æšæºã匷å¶ããã®ã«åœ¹ç«ã¡ãŸãã
- ããŒãžã§ã³ç®¡çã·ã¹ãã ã䜿çšããïŒGitã®ãããªããŒãžã§ã³ç®¡çã·ã¹ãã ã䜿çšãããšã倿Žã远跡ããå¿ èŠã«å¿ããŠä»¥åã®ããŒãžã§ã³ã«æ»ãããšãã§ããŸãã
äžè¬çãªåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
HMRã¯å€§ããªå©ç¹ãæäŸããŸãããå®è£ ããã³äœ¿çšäžã«ããã€ãã®äžè¬çãªåé¡ã«ééããå¯èœæ§ããããŸãã以äžã«ããã€ãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãã³ãã瀺ããŸãã
- ããŒãžå šäœã®åèªã¿èŸŒã¿ïŒãããã¢ããããŒãã®ä»£ããã«é »ç¹ã«ããŒãžå šäœã®åèªã¿èŸŒã¿ãçºçããå Žåã¯ãèšå®ã確èªããHMRãæ£ããæå¹ã«ãªã£ãŠããããšã確èªããŠãã ããããŸããåç/æåŠãã³ãã©ããã§ãã¯ããŠãã¢ãžã¥ãŒã«ãæŽæ°ãæåŠããŠããªãã確èªããŠãã ããã
- ç¶æ ã®æå€±ïŒãããã¢ããããŒãäžã«ã¢ããªã±ãŒã·ã§ã³ã®ç¶æ ã倱ãããå Žåã¯ãç¶æ 管çã©ã€ãã©ãªã䜿çšããŠããããšãããã³ã³ã³ããŒãã³ããç¶æ ãé©åã«æŽæ°ããŠããããšã確èªããŠãã ããã
- ããã©ãŒãã³ã¹ã®åé¡ïŒHMRã§ããã©ãŒãã³ã¹ã®åé¡ãçºçããŠããå Žåã¯ãã¢ãžã¥ãŒã«ã®ãµã€ãºãå°ããããã³ãŒããæé©åããŠã¿ãŠãã ãããå¥ã®HMRå®è£ ããã«ãããŒã«ã䜿çšããããšãã§ããŸãã
- 埪ç°äŸåïŒåŸªç°äŸåã¯HMRã§åé¡ãåŒãèµ·ããå¯èœæ§ããããŸããã³ãŒãå ã§åŸªç°äŸåãé¿ããããã«ããŠãã ããã
- èšå®ãšã©ãŒïŒèšå®ãã¡ã€ã«ãå確èªããå¿ èŠãªãã¹ãŠã®ãªãã·ã§ã³ãæ£ããèšå®ãããŠããããšã確èªããŠãã ããã
ç°ãªããã¬ãŒã ã¯ãŒã¯ã§ã®HMRã®äŸ
HMRã®åºæ¬çãªååã¯äžè²«ããŠããŸãããå ·äœçãªå®è£ ã®è©³çްã¯äœ¿çšããŠããJavaScriptãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠç°ãªãå ŽåããããŸãã以äžã«äººæ°ã®ãããã¬ãŒã ã¯ãŒã¯ã§ã®HMRã®äœ¿çšäŸã瀺ããŸãã
React
React Fast Refreshã¯ãReactã³ã³ããŒãã³ãã«å¯ŸããŠé«éã§ä¿¡é Œæ§ã®é«ãããããªããŒãã£ã³ã°ãæäŸãã人æ°ã®ã©ã€ãã©ãªã§ããCreate React Appãä»ã®äººæ°ã®ãããã«ãããŒã«ã«çµ±åãããŠããŸãã
äŸïŒCreate React Appã§React Fast Refreshã䜿çšïŒïŒ
// App.js
import React from 'react';
function App() {
return (
Hello, React!
);
}
export default App;
React Fast Refreshãæå¹ã«ãªã£ãŠãããšãApp.jsãã¡ã€ã«ãžã®å€æŽã¯ãããŒãžå
šäœããªããŒãããããšãªããã©ãŠã¶ã«èªåçã«åæ ãããŸãã
Angular
Angularã¯ãAngular CLIãéããŠçµã¿èŸŒã¿ã®HMRãµããŒããæäŸããŸããng serveã³ãã³ãã«--hmrãã©ã°ãä»ããŠå®è¡ããããšã§HMRãæå¹ã«ã§ããŸãã
äŸïŒ
ng serve --hmr
ããã«ãããHMRãæå¹ã«ãªã£ãéçºãµãŒããŒãèµ·åããŸããAngularã³ã³ããŒãã³ãããã³ãã¬ãŒãããŸãã¯ã¹ã¿ã€ã«ãžã®å€æŽã¯ããã©ãŠã¶ã§èªåçã«æŽæ°ãããŸãã
Vue.js
Vue.jsã¯ãvue-loaderãšwebpack-dev-serverãéããŠHMRãµããŒããæäŸããŸããwebpack-dev-serverã®hotãªãã·ã§ã³ãtrueã«èšå®ããããšã§HMRãæå¹ã«ã§ããŸãã
äŸïŒVue CLIãããžã§ã¯ãïŒïŒ
// vue.config.js
module.exports = {
devServer: {
hot: true,
},
};
ãã®èšå®ã«ãããVueã³ã³ããŒãã³ãããã³ãã¬ãŒãããŸãã¯ã¹ã¿ã€ã«ãžã®å€æŽã¯ããã©ãŠã¶ã§èªåçã«æŽæ°ãããŸãã
çµè«
JavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒã¯ãçŸä»£ã®ãŠã§ãéçºã«ãšã£ãŠéåžžã«äŸ¡å€ã®ããããŒã«ã§ããåºç€ãšãªãæŽæ°èª¿æŽã·ã¹ãã ãçè§£ãããã¹ããã©ã¯ãã£ã¹ãå®è£ ããããšã§ãéçºè ã¯ã¯ãŒã¯ãããŒãå€§å¹ ã«æ¹åããéçºæéãççž®ããå šäœçãªéçºäœéšãåäžãããããšãã§ããŸããWebpackãViteãRollupããŸãã¯ä»ã®ãã«ãããŒã«ã䜿çšããŠãããã©ããã«ããããããHMRãç¿åŸããããšã¯ãå¹ççã§ä¿å®æ§ã®é«ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã
HMRã®åãæŽ»çšããJavaScriptéçºã®æ ã§æ°ããªã¬ãã«ã®çç£æ§ãè§£ãæŸã¡ãŸãããã
åèæç®
- Webpack Hot Module Replacement: https://webpack.js.org/guides/hot-module-replacement/
- Vite HMR: https://vitejs.dev/guide/features.html#hot-module-replacement
- Rollup Hot Module Replacement: https://www.npmjs.com/package/@rollup/plugin-hot
ãã®å æ¬çãªã¬ã€ãã¯ãJavaScriptã¢ãžã¥ãŒã«ãããã¢ããããŒããããŒãžã£ãŒãçè§£ããå®è£ ããããã®ç¢ºåºããåºç€ãæäŸããŸããç¹å®ã®ãããžã§ã¯ãèŠä»¶ãšéçºã¯ãŒã¯ãããŒã«åãããŠãã³ã³ã»ãããšãã¯ããã¯ãé©å¿ãããããšãå¿ããªãã§ãã ããã