æé«ã®ãŠã§ãããã©ãŒãã³ã¹ãå®çŸã匷åãªããŒã«ã䜿ããJavaScriptã®ãã³ãã«ãµã€ãºåæãäŸåé¢ä¿ã°ã©ãã®å¯èŠåããããŠæé©åã®æ©äŒãèŠã€ããæ¹æ³ãåŠã³ãŸãããã
JavaScriptãã³ãã«åæïŒäŸåé¢ä¿ã°ã©ãå¯èŠåããŒã«ã®åŸ¹åºè§£èª¬
çŸä»£ã®ãŠã§ãéçºã®äžçã«ãããŠãJavaScriptã¯åçã§ã€ã³ã¿ã©ã¯ãã£ããªãŠãŒã¶ãŒäœéšãæ¯ãããšã³ãžã³ã§ããããããã¢ããªã±ãŒã·ã§ã³ãè€éã«ãªãã«ã€ããŠããã®JavaScriptã®ãããããªã³ããå¢å€§ããŸããå·šå€§ã§æé©åãããŠããªãJavaScriptãã³ãã«ã¯ããŠã§ãããã©ãŒãã³ã¹ã«ãããæå€§ã®ããã«ããã¯ãšãªããèªã¿èŸŒã¿æéã®é å»¶ããŠãŒã¶ãŒã®äžæºããããŠæ©äŒæå€±ã«ã€ãªããå¯èœæ§ããããŸããããã¯ããœãŠã«ã®é«éå ãã¡ã€ããŒæ¥ç¶ããã€ã³ãã®å°æ¹ã®æç¶çãªã¢ãã€ã«ãããã¯ãŒã¯ã«è³ããŸã§ããããããŠãŒã¶ãŒã«åœ±é¿ãäžããæ®éçãªåé¡ã§ãã
ãã®ããžã¿ã«ãªè¥å€§åã«ã©ãç«ã¡åããã¹ãã§ããããïŒæåã®ã¹ãããã¯æšæž¬ã§ã¯ãªããèšæž¬ããããšã§ããããã§JavaScriptãã³ãã«åæãšäŸåé¢ä¿ã°ã©ãå¯èŠåããŒã«ã圹ç«ã¡ãŸãããããã®åŒ·åãªãŠãŒãã£ãªãã£ã¯ãã¢ããªã±ãŒã·ã§ã³ã®DNAã®èŠèŠçãªããããæäŸãããã³ãã«ã«äœãå«ãŸããŠããããã©ã®äŸåé¢ä¿ãæã倧ãããããããŠã©ãã«æé©åã®å¯èœæ§ãããããæ£ç¢ºã«ç€ºããŠãããŸãããã®ã¬ã€ãã§ã¯ããããã®ããŒã«ãå æ¬çã«ç޹ä»ããããã©ãŒãã³ã¹åé¡ã蚺æããäžçäžã®ãªãŒãã£ãšã³ã¹ã®ããã«ãããã¹ãªã ã§é«éãªãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããåãäžããŸãã
ãªããã³ãã«åæã¯ãŠã§ãããã©ãŒãã³ã¹ã«ãšã£ãŠæ¥µããŠéèŠãªã®ãïŒ
ããŒã«ã«é£ã³èŸŒãåã«ããã®ããã»ã¹ããªãããã»ã©éèŠãªã®ããçè§£ããããšãäžå¯æ¬ ã§ããJavaScriptãã³ãã«ã®ãµã€ãºã¯ããŠãŒã¶ãŒäœéšãå®çŸ©ããäž»èŠãªããã©ãŒãã³ã¹ææšã«çŽæ¥åœ±é¿ããŸãïŒ
- First Contentful Paint (FCP): 倧ããªãã³ãã«ã¯ã¡ã€ã³ã¹ã¬ããããããã¯ãããã©ãŠã¶ãæåã®ã³ã³ãã³ããã¬ã³ããªã³ã°ããã®ãé ãããå¯èœæ§ããããŸãã
- Time to Interactive (TTI): ããŒãžãå®å šã«ã€ã³ã¿ã©ã¯ãã£ãã«ãªããŸã§ã«ãããæéãæž¬å®ããŸãããŠãŒã¶ãŒããã¿ã³ãã¯ãªãã¯ããããã©ãŒã ãæäœãããããåã«ãJavaScriptãããŠã³ããŒããããŒã¹ãã³ã³ãã€ã«ãå®è¡ããå¿ èŠããããŸãããã³ãã«ã倧ããã»ã©ããã®ããã»ã¹ã«æéãããããŸãã
- ããŒã¿ã³ã¹ããšã¢ã¯ã»ã·ããªãã£: ããŒã¿éä¿¡éã«å¶éããã£ããåŸé課éå¶ã®ã¢ãã€ã«ãã©ã³ãå©çšããŠãããŠãŒã¶ãŒã«ãšã£ãŠãæ°ã¡ã¬ãã€ãã®JavaScriptããŠã³ããŒãã¯åãªãäžäŸ¿ãã§ã¯ãªããå®è³ªçãªééçã³ã¹ããšãªããŸãããã³ãã«ãæé©åããããšã¯ãå Žæãåããããã¹ãŠã®äººã«ãšã£ãŠå æ¬çã§ã¢ã¯ã»ã¹ãããããŠã§ããæ§ç¯ããããã®éèŠãªã¹ãããã§ãã
èŠããã«ããã³ãã«åæã¯ãJavaScriptã®ã³ã¹ããã管çããã®ã«åœ¹ç«ã¡ãŸããããã¯ãç§ã®ãµã€ãã¯é ãããšããæœè±¡çãªåé¡ããå ·äœçã§å®è¡å¯èœãªæ¹åèšç»ãžãšå€æããŸãã
äŸåé¢ä¿ã°ã©ããçè§£ãã
ãã¹ãŠã®çŸä»£çãªJavaScriptã¢ããªã±ãŒã·ã§ã³ã®äžå¿ã«ã¯ãäŸåé¢ä¿ã°ã©ãããããŸãããããã³ãŒãã®å®¶ç³»å³ã®ããã«èããŠãã ããããšã³ããªãŒãã€ã³ãïŒäŸïŒ`main.js`ïŒãããããããä»ã®ã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸãããããŠããããã®ã¢ãžã¥ãŒã«ãããã«ç¬èªã®äŸåé¢ä¿ãã€ã³ããŒãããçžäºã«æ¥ç¶ããããã¡ã€ã«ã®åºå€§ãªãããã¯ãŒã¯ã圢æãããŸãã
WebpackãRollupããŸãã¯Viteã®ãããªã¢ãžã¥ãŒã«ãã³ãã©ã䜿çšãããšããã®äž»ãªä»äºã¯ãšã³ããªãŒãã€ã³ãããå§ããŠãã®ã°ã©ãå šäœããã©ããå¿ èŠãªãã¹ãŠã®ã³ãŒãã1ã€ä»¥äžã®åºåãã¡ã€ã«ãã€ãŸãããã³ãã«ãã«ãŸãšããããšã§ãã
äŸåé¢ä¿ã°ã©ãå¯èŠåããŒã«ã¯ããã®ããã»ã¹ãå©çšããŸãããããã¯æçµçãªãã³ãã«ãŸãã¯ãã³ãã©ã®ã¡ã¿ããŒã¿ãåæããŠããã®ã°ã©ãã®èŠèŠç衚çŸãäœæããéåžžã¯åã¢ãžã¥ãŒã«ã®ãµã€ãºã瀺ããŸããããã«ãããã³ãŒãã®å®¶ç³»å³ã®ã©ã®ãã©ã³ããæçµçãªéã¿ã«æãè²¢ç®ããŠããããäžç®ã§ç¢ºèªã§ããŸãã
ãã³ãã«æé©åã®äž»èŠãªæŠå¿µ
åæããŒã«ããåŸãããæŽå¯ã¯ãããããå®è£ ãå©ããæé©åæè¡ãçè§£ããŠãããšãã«æã广çã§ãã以äžããã®äžå¿çãªæŠå¿µã§ãïŒ
- ããªãŒã·ã§ã€ãã³ã° (Tree Shaking): æçµçãªãã³ãã«ããæªäœ¿çšã®ã³ãŒãïŒããããã³ãŒããïŒãèªåçã«åé€ããããã»ã¹ã§ããäŸãã°ãLodashã®ãããªãŠãŒãã£ãªãã£ã©ã€ãã©ãªãã€ã³ããŒãããŠã1ã€ã®é¢æ°ãã䜿çšããªãå ŽåãããªãŒã·ã§ã€ãã³ã°ã¯ãã®ç¹å®ã®é¢æ°ã®ã¿ãå«ãŸããã©ã€ãã©ãªå šäœã¯å«ãŸããªãããã«ããŸãã
- ã³ãŒãåå² (Code Splitting): 1ã€ã®å·šå€§ãªãã³ãã«ãäœæãã代ããã«ãã³ãŒããããå°ããè«ççãªãã£ã³ã¯ã«åå²ããŸããããŒãžãã«ãŒãããšïŒäŸïŒ`home.js`ã`profile.js`ïŒããŸãã¯æ©èœããšïŒäŸïŒ`vendors.js`ïŒã«åå²ã§ããŸãããããã®ãã£ã³ã¯ã¯ãªã³ããã³ãã§èªã¿èŸŒãããšãã§ãããããåæããŒãžã®èªã¿èŸŒã¿æéãåçã«æ¹åãããŸãã
- éè€ããäŸåé¢ä¿ã®ç¹å®: é©ãã»ã©äžè¬çã«ãåãããã±ãŒãžããã³ãã«å ã«è€æ°åå«ãŸããããšããããŸããããã¯å€ãã®å Žåãç°ãªããµãäŸåé¢ä¿ãç°ãªãããŒãžã§ã³ãèŠæ±ããããã«çºçããŸããå¯èŠåããŒã«ã¯ãããã®éè€ãæçœã«ç€ºããŸãã
- 巚倧ãªäŸåé¢ä¿ã®åæ: äžéšã®ã©ã€ãã©ãªã¯éåžžã«å€§ããããšã§ç¥ãããŠããŸããåæããŒã«ã¯ãäžèŠç¡å®³ãªæ¥ä»ãã©ãŒãããã©ã€ãã©ãªããäžèŠãªã®ã¬ãã€ãåäœã®ãã±ãŒã«ããŒã¿ãå«ãã§ããããšããã°ã©ãäœæã©ã€ãã©ãªãã¢ããªã±ãŒã·ã§ã³ãã¬ãŒã ã¯ãŒã¯å šäœãããéãããšãæããã«ãããããããŸããã
人æ°ã®äŸåé¢ä¿ã°ã©ãå¯èŠåããŒã«ã®ç޹ä»
ããã§ã¯ããããã®æŠå¿µãå ·çŸåããããŒã«ãèŠãŠãããŸããããå€ãã®ããŒã«ãååšããŸãããããã§ã¯ããŸããŸãªããŒãºããšã³ã·ã¹ãã ã«å¯Ÿå¿ãããæã人æ°ã§åŒ·åãªãªãã·ã§ã³ã«çŠç¹ãåœãŠãŸãã
1. webpack-bundle-analyzer
æŠèŠ: Webpackã䜿çšããŠãã人ã«ãšã£ãŠã¯ãããã¡ã¯ãã¹ã¿ã³ããŒãã§ãããã®ãã©ã°ã€ã³ã¯ããã³ãã«å 容ã®ã€ã³ã¿ã©ã¯ãã£ããªããªãŒãããå¯èŠåããã©ãŠã¶ã§çæããŸãã
äž»ãªç¹åŸŽ:
- ã€ã³ã¿ã©ã¯ãã£ããªããªãŒããã: ãã³ãã«ã®ããŸããŸãªéšåãã¯ãªãã¯ããŠãºãŒã ã€ã³ããã©ã®ã¢ãžã¥ãŒã«ã倧ããªãã£ã³ã¯ãæ§æããŠãããã確èªã§ããŸãã
- è€æ°ã®ãµã€ãºææš: `stat`ãµã€ãºïŒåŠçåã®ãã¡ã€ã«ã®çã®ãµã€ãºïŒã`parsed`ãµã€ãºïŒããŒã¹åŸã®JavaScriptã³ãŒãã®ãµã€ãºïŒããããŠ`gzipped`ãµã€ãºïŒå§çž®åŸã®ãµã€ãºã§ããŠãŒã¶ãŒãããŠã³ããŒããããµã€ãºã«æãè¿ãïŒã衚瀺ã§ããŸãã
- ç°¡åãªçµ±å: Webpackãã©ã°ã€ã³ãªã®ã§ãæ¢åã®`webpack.config.js`ãã¡ã€ã«ã«éåžžã«ç°¡åã«è¿œå ã§ããŸãã
äœ¿çšæ¹æ³:
ãŸããéçºäŸåé¢ä¿ãšããŠã€ã³ã¹ããŒã«ããŸãïŒ
npm install --save-dev webpack-bundle-analyzer
次ã«ãWebpackã®èšå®ã«è¿œå ããŸãïŒ
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
module.exports = {
// ... other webpack config
plugins: [
new BundleAnalyzerPlugin()
]
};
Webpackãã«ããå®è¡ãããšãèªåçã«ãã©ãŠã¶ãŠã£ã³ããŠãéããã€ã³ã¿ã©ã¯ãã£ããªã¬ããŒãã衚瀺ãããŸãã
䜿çšããå Žé¢: Webpackã䜿çšããŠãããããžã§ã¯ãã«ãšã£ãŠãå®ç§ãªåºçºç¹ã§ãããã®ã·ã³ãã«ããšåŒ·åãªå¯èŠåæ©èœã«ãããéçºäžã®è¿ éãªèšºæã宿çãªãã§ãã¯ã«æé©ã§ãã
2. source-map-explorer
æŠèŠ: JavaScriptã®ãœãŒã¹ãããã䜿çšããŠæ¬çªãã³ãã«ãåæããããã¬ãŒã ã¯ãŒã¯ã«äŸåããªãããŒã«ã§ãããœãŒã¹ããããçæããéããã©ã®ãã³ãã©ïŒWebpack, Rollup, Vite, ParcelïŒã§ãåäœããŸãã
äž»ãªç¹åŸŽ:
- ãã³ãã©éäŸå: ãããæå€§ã®åŒ·ã¿ã§ãããã«ãããŒã«ã«é¢ä¿ãªãã©ã®ãããžã§ã¯ãã§ã䜿çšã§ãããããéåžžã«æ±çšæ§ããããŸãã
- å ã®ãœãŒã¹ã³ãŒãã«çŠç¹ãåœãŠã: ãœãŒã¹ãããã䜿çšããããããã³ãã«ãããã³ãŒããå ã®ãœãŒã¹ãã¡ã€ã«ã«ãããã³ã°ããŸããããã«ããã`node_modules`å ã ãã§ãªããèªèº«ã®ã³ãŒãããŒã¹ã®ã©ãããè¥å€§åãæ¥ãŠããã®ããçè§£ãããããªããŸãã
- ã·ã³ãã«ãªCLIã€ã³ã¿ãŒãã§ãŒã¹: ã³ãã³ãã©ã€ã³ããŒã«ãªã®ã§ããªã³ããã³ãã§ã®å®è¡ãã¹ã¯ãªãããžã®çµ±åã容æã§ãã
äœ¿çšæ¹æ³:
ãŸãããã«ãããã»ã¹ã§ãœãŒã¹ããããçæãããããã«ããŸããæ¬¡ã«ãããŒã«ãã°ããŒãã«ãŸãã¯ããŒã«ã«ã«ã€ã³ã¹ããŒã«ããŸãïŒ
npm install --save-dev source-map-explorer
ãã³ãã«ãã¡ã€ã«ãšãœãŒã¹ããããã¡ã€ã«ã«å¯ŸããŠå®è¡ããŸãïŒ
npx source-map-explorer /path/to/your/bundle.js
ããã«ããã`webpack-bundle-analyzer`ãšåæ§ã®HTMLããªãŒãããå¯èŠåãçæãããéãããŸãã
䜿çšããå Žé¢: Webpackã䜿çšããŠããªããããžã§ã¯ãïŒäŸïŒVite, Rollup, ãŸãã¯Webpackãæœè±¡åããŠããCreate React Appã§ãã«ãããããã®ïŒã«æé©ã§ãããŸãããµãŒãããŒãã£ã©ã€ãã©ãªã ãã§ãªããèªèº«ã®ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã®è²¢ç®åºŠãåæãããå Žåã«ãåªããŠããŸãã
3. Statoscope
æŠèŠ: ãã³ãã«åæã®ããã®å æ¬çã§éåžžã«é«åºŠãªããŒã«ãããã§ããStatoscopeã¯åçŽãªããªãŒããããã¯ããã«è¶ ãã詳现ãªã¬ããŒãããã«ãéã®æ¯èŒãã«ã¹ã¿ã ã«ãŒã«ã®æ€èšŒãæäŸããŸãã
äž»ãªç¹åŸŽ:
- 詳现ãªã¬ããŒã: ã¢ãžã¥ãŒã«ãããã±ãŒãžããšã³ããªãŒãã€ã³ããããã³éè€ã¢ãžã¥ãŒã«ãªã©ã®æœåšçãªåé¡ã«é¢ããè©³çŽ°ãªæ å ±ãæäŸããŸãã
- ãã«ãæ¯èŒ: ããããã©ãŒæ©èœã§ãã2ã€ã®ç°ãªããã«ãïŒäŸïŒäŸåé¢ä¿ã®ã¢ããã°ã¬ãŒãååŸïŒãæ¯èŒããŠãäœã倿Žãããããããã³ãã«ãµã€ãºã«ã©ã®ããã«åœ±é¿ããããæ£ç¢ºã«ç¢ºèªã§ããŸãã
- ã«ã¹ã¿ã ã«ãŒã«ãšã¢ãµãŒã·ã§ã³: ããã©ãŒãã³ã¹ããžã§ãããã«ãŒã«ïŒäŸïŒããã³ãã«ãµã€ãºã500KBãè¶ ããããã«ãã倱æããããããæ°ãã倧ããªäŸåé¢ä¿ã远å ããããèŠåãããïŒãå®çŸ©ã§ããŸãã
- ãšã³ã·ã¹ãã ãµããŒã: Webpackå°çšã®ãã©ã°ã€ã³ããããRollupãä»ã®ãã³ãã©ããã®çµ±èšæ å ±ãå©çšã§ããŸãã
äœ¿çšæ¹æ³:
Webpackã®å Žåããã©ã°ã€ã³ã远å ããŸãïŒ
npm install --save-dev @statoscope/webpack-plugin
次ã«ã`webpack.config.js`ã«ïŒ
const StatoscopeWebpackPlugin = require('@statoscope/webpack-plugin').default;
module.exports = {
// ... other webpack config
plugins: [
new StatoscopeWebpackPlugin()
]
};
ãã«ãåŸãåºåãã£ã¬ã¯ããªã«è©³çްãªHTMLã¬ããŒããçæãããŸãã
䜿çšããå Žé¢: Statoscopeã¯ãšã³ã¿ãŒãã©ã€ãºçŽã®ããŒã«ã§ããããã©ãŒãã³ã¹ããžã§ããã匷å¶ããããCI/CDç°å¢ã§ãã³ãã«ãµã€ãºãé·æçã«è¿œè·¡ãããããã«ãéã§è©³çŽ°ãªæ¯èŒåæãè¡ãå¿ èŠãããå Žåã«äœ¿çšããŸããããã©ãŒãã³ã¹ãæåªå ãããå€§èŠæš¡ããŒã ãããã·ã§ã³ã¯ãªãã£ã«ã«ãªã¢ããªã±ãŒã·ã§ã³ã«æé©ã§ãã
4. ãã®ä»ã®æ³šç®ãã¹ãããŒã«
- rollup-plugin-visualizer (for Vite/Rollup): Rollupãšã³ã·ã¹ãã ïŒViteãå éšã§äœ¿çšïŒåãã®çŽ æŽãããã·ã³ãã«ãªãã©ã°ã€ã³ã§ããã€ã³ã¿ã©ã¯ãã£ããªãµã³ããŒã¹ããŸãã¯ããªãŒããããã£ãŒããæäŸããViteããã³RollupãŠãŒã¶ãŒã«ãšã£ãŠã®`webpack-bundle-analyzer`ã«çžåœããŸãã
- Bundle-buddy: å€ãã§ããä»ã§ã圹ç«ã€ããŒã«ã§ãã³ãŒãåå²ã®èšå®ã§ããããåé¡ã§ãããç°ãªããã³ãã«ãã£ã³ã¯éã§ã®éè€ããäŸåé¢ä¿ãèŠã€ããã®ã«åœ¹ç«ã¡ãŸãã
å®è·µçãªãŠã©ãŒã¯ã¹ã«ãŒïŒåæããå®è¡ãŸã§
ããã·ããªãªãæ³åããŠã¿ãŸãããããããžã§ã¯ãã§`webpack-bundle-analyzer`ãå®è¡ãããšã`moment.js`ãš`lodash`ãšãã2ã€ã®ã©ã€ãã©ãªããã³ãã«ã®å€§éšåãå ããŠããå¯èŠåã衚瀺ãããŸãã
ã¹ããã1ïŒå¯èŠåãåæãã
- 倧ããª`moment.js`ãããã¯ã«ã«ãŒãœã«ãåããããšããã®äžã«å·šå€§ãª`locales`ãã£ã¬ã¯ããªãããããšã«æ°ã¥ããŸããããªãã®ã¢ããªã±ãŒã·ã§ã³ã¯è±èªã®ã¿ããµããŒãããŠããã«ãããããããæ°åã«åœèªã®èšèªãµããŒããé ä¿¡ããŠããŸã£ãŠããŸãã
- `lodash`ã«ã¯2ã€ã®ç°ãªããããã¯ãèŠããŸãã詳ãã調ã¹ãŠã¿ããšãã¢ããªã®äžéšã`lodash@4.17.15`ã䜿çšããã€ã³ã¹ããŒã«ããäŸåé¢ä¿ã`lodash-es@4.17.10`ã䜿çšããŠããããšãããããŸããéè€ããäŸåé¢ä¿ãååšããŠããŸãã
ã¹ããã2ïŒä»®èª¬ãç«ãŠãä¿®æ£ãå®è£ ãã
仮説1ïŒ æªäœ¿çšã®ãã±ãŒã«ãåé€ããããšã§ã`moment.js`ã®ãµã€ãºãå€§å¹ ã«åæžã§ããã
解決çïŒ `moment-locales-webpack-plugin`ã®ãããªå°çšã®Webpackãã©ã°ã€ã³ã䜿çšããŠããããåé€ããŸãããããã¯ãã¢ãžã¥ãŒã«åŒã§ããªãŒã·ã§ã€ãã³ã°å¯èœãªããã«èšèšããããã¯ããã«è»œéã§ã¢ãã³ãªä»£æ¿åã§ããDay.jsãdate-fnsãžã®ç§»è¡ãæ€èšããŸãã
仮説2ïŒ åäžã®ããŒãžã§ã³ã匷å¶ããããšã§ãéè€ãã`lodash`ãæé€ã§ããã
解決çïŒ ããã±ãŒãžãããŒãžã£ã®æ©èœã䜿çšããŠç«¶åã解決ããŸããnpmã§ã¯ã`package.json`ã®`overrides`ãã£ãŒã«ãã䜿çšããŠããããžã§ã¯ãå šäœã§åäžã®`lodash`ããŒãžã§ã³ãæå®ã§ããŸããYarnã§ã¯ã`resolutions`ãã£ãŒã«ãã䜿çšã§ããŸããæŽæ°åŸã`npm install`ãŸãã¯`yarn install`ãå床å®è¡ããŸãã
ã¹ããã3ïŒæ¹åãæ€èšŒãã
ãããã®å€æŽãå®è£ ããåŸãå床ãã³ãã«ã¢ãã©ã€ã¶ãå®è¡ããŸãã`moment.js`ãããã¯ãåçã«å°ãããªã£ãŠããïŒãŸãã¯ãã¯ããã«å°ãã`date-fns`ã«çœ®ãæãã£ãŠããïŒããšããããŠåäžã«çµ±åããã`lodash`ãããã¯ã®ã¿ã衚瀺ãããã¯ãã§ããããªãã¯å¯èŠåããŒã«ã䜿ããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ã«å ·äœçãªæ¹åãããããããšã«æåããã®ã§ãã
ãã³ãã«åæãã¯ãŒã¯ãããŒã«çµ±åãã
ãã³ãã«åæã¯äžåºŠããã®ç·æ¥æªçœ®ã§ãã£ãŠã¯ãªããŸããã髿§èœãªã¢ããªã±ãŒã·ã§ã³ãç¶æããããã«ã¯ããããéåžžã®éçºããã»ã¹ã«çµ±åããŠãã ããã
- ããŒã«ã«éçºïŒ ç¹å®ã®ã³ãã³ãïŒäŸïŒ`npm run analyze`ïŒã§ãªã³ããã³ãã«ã¢ãã©ã€ã¶ãå®è¡ããããã«ãã«ãããŒã«ãèšå®ããŸããæ°ããäž»èŠãªäŸåé¢ä¿ã远å ãããã³ã«äœ¿çšããŸãã
- ãã«ãªã¯ãšã¹ãã®ãã§ãã¯ïŒ ãã¹ãŠã®ãã«ãªã¯ãšã¹ãã«ãã³ãã«åæã¬ããŒããžã®ãªã³ã¯ïŒãŸãã¯ãµã€ãºã®å€æŽæŠèŠïŒãå«ãã³ã¡ã³ããæçš¿ããGitHub Actionãä»ã®CIã¿ã¹ã¯ãèšå®ããŸããããã«ãããããã©ãŒãã³ã¹ãã³ãŒãã¬ãã¥ãŒããã»ã¹ã®æç¢ºãªäžéšãšãªããŸãã
- CI/CDãã€ãã©ã€ã³ïŒ Statoscopeãã«ã¹ã¿ã ã¹ã¯ãªããã䜿çšããŠããã©ãŒãã³ã¹ããžã§ãããèšå®ããŸãããã«ãã«ãã£ãŠãã³ãã«ãç¹å®ã®ãµã€ãºãããå€ãè¶ ããå ŽåãCIãã€ãã©ã€ã³ã倱æãããããšãã§ããããã©ãŒãã³ã¹ã®äœäžãæ¬çªç°å¢ã«å°éããã®ãé²ããŸãã
çµè«ïŒãªãŒã³ãªJavaScriptã®æè¡
ã°ããŒãã«åãããããžã¿ã«ã®äžçã§ã¯ãããã©ãŒãã³ã¹ã¯æ©èœã§ããã¹ãªã ã§æé©åãããJavaScriptãã³ãã«ã¯ããŠãŒã¶ãŒã®ããã€ã¹ããããã¯ãŒã¯é床ãå Žæã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³ãé«éã§ã¢ã¯ã»ã¹ãããããæ¥œãããã®ã§ããããšãä¿èšŒããŸããäŸåé¢ä¿ã°ã©ãå¯èŠåããŒã«ã¯ããã®æ ã«ãããããªãã®äžå¯æ¬ ãªçžæ£ã§ãããããã¯æšæž¬ãããŒã¿ã«çœ®ãæããã¢ããªã±ãŒã·ã§ã³ã®æ§æã«é¢ããæç¢ºã§å®è¡å¯èœãªæŽå¯ãæäŸããŸãã
宿çã«ãã³ãã«ãåæããäŸåé¢ä¿ã®åœ±é¿ãçè§£ãããããã®å®è·µãããŒã ã®ã¯ãŒã¯ãããŒã«çµ±åããããšã§ããªãŒã³ãªJavaScriptã®æè¡ãç¿åŸã§ããŸãã仿¥ãããã³ãã«ã®åæãå§ããŸããããäžçäžã®ãŠãŒã¶ãŒãããªãã«æè¬ããã§ãããã