JavaScriptãœãŒã¹ãããã®åãæŽ»çšãããããã°ãå¹çåããã®å æ¬çãªã¬ã€ãã¯ããœãŒã¹ãããã®çæãè§£éãé«åºŠãªãã¯ããã¯ããããŠéçºè åãã®ãã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
ãã©ãŠã¶ãããã°äžçŽç·šïŒå¹ççãªéçºã®ããã®JavaScriptãœãŒã¹ããããã¹ã¿ãŒè¡
çŸä»£ã®Webéçºã§ã¯ãJavaScriptã³ãŒãã¯æ¬çªç°å¢ã«ãããã€ãããåã«å€æãããããšããããããŸãããã®å€æã«ã¯éåžžããããã¡ã€ïŒå§çž®ïŒããã³ãã«ãæã«ã¯ãã©ã³ã¹ãã€ã«ïŒäŸïŒBabelã䜿çšããŠESNextã³ãŒããES5ã«å€æïŒãå«ãŸããŸãããããã®æé©åã¯ããã©ãŒãã³ã¹ãšäºææ§ãåäžãããŸããããããã°ãæªå€¢ã«å€ããå¯èœæ§ããããŸãããããã¡ã€ãããã倿ããããããã³ãŒãã®ãšã©ãŒãçè§£ããããšããã®ã¯ãããŒãžãæ¬ ããŠæç« ããã¡ãæ··ãã«ãªã£ãæ¬ãèªãããšãããããªãã®ã§ããããã§JavaScriptãœãŒã¹ããããæãã®æãå·®ã䌞ã¹ãŠãããŸãã
JavaScriptãœãŒã¹ããããšã¯äœãïŒ
JavaScriptãœãŒã¹ããããšã¯ã倿åŸã®ã³ãŒããå ã®ãœãŒã¹ã³ãŒãã«å¯Ÿå¿ä»ãããã¡ã€ã«ã§ããããã¯ããã©ãŠã¶ã§å®è¡ãããŠããã³ãŒãã倿åŸã®ããŒãžã§ã³ã§ãã£ãŠãããã©ãŠã¶ã®éçºè ããŒã«ãå ã®äººéãèªããã³ãŒãã衚瀺ã§ããããã«ããããã®ãããã°æ©æž¡ã圹ã§ãããããã¡ã€ãããã³ãŒãã®æå·ã®ãããªåºåããå ã®ãœãŒã¹ã³ãŒãã®å¹³æãªèšèã«ç¿»èš³ããè§£èªãªã³ã°ã®ãããªãã®ã ãšèããŠãã ããã
å ·äœçã«ã¯ããœãŒã¹ãããã¯ä»¥äžã®æ å ±ãæäŸããŸãïŒ
- å ã®ãã¡ã€ã«åãšè¡çªå·ã
- 倿åŸã®ã³ãŒãå ã®äœçœ®ãšå ã®ã³ãŒãå ã®äœçœ®ãšã®å¯Ÿå¿ä»ãã
- å ã®ãœãŒã¹ã³ãŒãèªäœïŒãªãã·ã§ã³ïŒã
ãªããœãŒã¹ãããã¯éèŠãªã®ãïŒ
ãœãŒã¹ãããã¯ããã€ãã®çç±ã§éåžžã«éèŠã§ãïŒ
- å¹ççãªãããã°ïŒã³ãŒãã倿ãããŠããªããã®ããã«ãããã°ããããšãã§ããŸãããããã¡ã€ãããããã³ãã«ããããããããŒãžã§ã³ãå®è¡ããŠããå Žåã§ããå ã®ãœãŒã¹ãã¡ã€ã«ã§ãã¬ãŒã¯ãã€ã³ããèšå®ããã³ãŒããã¹ãããå®è¡ãã倿°ãæ€æ»ããããšãã§ããŸãã
- ãšã©ãŒè¿œè·¡ã®æ¹åïŒãšã©ãŒå ±åããŒã«ïŒSentryãBugsnagãRollbarãªã©ïŒã¯ãœãŒã¹ãããã䜿çšããŠãå ã®ãœãŒã¹ã³ãŒããæã瀺ãã¹ã¿ãã¯ãã¬ãŒã¹ãæäŸã§ããŸããããã«ããããšã©ãŒã®æ ¹æ¬åå ãç¹å®ããã®ãã¯ããã«ç°¡åã«ãªããŸãã巚倧ã§ãããã¡ã€ãããJavaScriptãã¡ã€ã«ã®è¬ãããè¡ã§ã¯ãªããæŽç¶ãšããTypeScriptã³ãŒãã®åé¡ã®ããè¡ãçŽæ¥æã瀺ããšã©ãŒã¬ããŒããåãåãããšãæ³åããŠã¿ãŠãã ããã
- ã³ãŒãçè§£ã®åäžïŒæç€ºçãªãããã°ãè¡ããªããŠãããœãŒã¹ãããã¯å€æåŸã®ã³ãŒããå ã®ã³ãŒããšã©ã®ããã«é¢é£ããŠããããçè§£ããããããŸããããã¯ãå€§èŠæš¡ãŸãã¯è€éãªã³ãŒãããŒã¹ã§äœæ¥ããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
- ããã©ãŒãã³ã¹åæïŒãœãŒã¹ãããã¯ããã©ãŒãã³ã¹åæããŒã«ã§ã䜿çšã§ããããã©ãŒãã³ã¹ã¡ããªã¯ã¹ãå ã®ãœãŒã¹ã³ãŒãã«åž°å±ãããããšã§ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã«ããã¯ãç¹å®ããã®ã«åœ¹ç«ã¡ãŸãã
ãœãŒã¹ãããã®ä»çµã¿ïŒæè¡æŠèŠ
ãœãŒã¹ãããã¯ããã®æ žãšãªãéšåã§ã¯ãç¹å®ã®ãã©ãŒãããã«åŸã£ãJSONãã¡ã€ã«ã§ãããœãŒã¹ãããã®äž»èŠãªã³ã³ããŒãã³ãã¯mappingsãã£ãŒã«ãã§ãããã«ã¯å€æåŸã®ã³ãŒããšå
ã®ã³ãŒããšã®éã®ãããã³ã°ã衚ãbase64 VLQïŒVariable Length QuantityïŒã§ãšã³ã³ãŒããããæååãå«ãŸããŠããŸããVLQãšã³ã³ãŒãã£ã³ã°ã®è€éããçè§£ããããšã¯ãéåžžããœãŒã¹ãããã广çã«äœ¿çšããããã«å¿
èŠã§ã¯ãããŸããããé«ã¬ãã«ã®çè§£ã¯åœ¹ç«ã¡ãŸãã
ãããã³ã°ãã©ã®ããã«æ©èœãããã®ç°¡åãªèª¬æã¯æ¬¡ã®ãšããã§ãïŒ
- webpackãParcelãRollupã®ãããªããŒã«ãã³ãŒãã倿ãããšã倿ãããJavaScriptãã¡ã€ã«ãšäžŠè¡ããŠãœãŒã¹ããããçæãããŸãã
- ãœãŒã¹ãããã«ã¯ãå ã®ãã¡ã€ã«ããã®å 容ïŒãªãã·ã§ã³ïŒãããã³å ãšå€æåŸã®ã³ãŒãéã®ãããã³ã°ã«é¢ããæ å ±ãå«ãŸããŠããŸãã
- 倿ãããJavaScriptãã¡ã€ã«ã«ã¯ããã©ãŠã¶ã«ãœãŒã¹ãããã®å ŽæãäŒããç¹å¥ãªã³ã¡ã³ãïŒäŸïŒ
//# sourceMappingURL=main.js.mapïŒãå«ãŸããŠããŸãã - ãã©ãŠã¶ã倿ãããJavaScriptãã¡ã€ã«ãããŒããããšã
sourceMappingURLã³ã¡ã³ããèŠãŠãœãŒã¹ããããã¡ã€ã«ããªã¯ãšã¹ãããŸãã - ãã®åŸããã©ãŠã¶ã®éçºè ããŒã«ã¯ãœãŒã¹ãããã䜿çšããŠå ã®ãœãŒã¹ã³ãŒãã衚瀺ãããããã°ãå¯èœã«ããŸãã
ãœãŒã¹ãããã®çæ
ã»ãšãã©ã®ææ°ã®JavaScriptãã«ãããŒã«ã¯ããœãŒã¹ããããçæããããã®çµã¿èŸŒã¿ãµããŒããæäŸããŠããŸããããã€ãã®äººæ°ã®ããããŒã«ã§ãœãŒã¹ããããæå¹ã«ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãïŒ
Webpack
webpack.config.jsãã¡ã€ã«ã§ãdevtoolãªãã·ã§ã³ãèšå®ããŸãïŒ
module.exports = {
// ...
devtool: 'source-map', // ãŸã㯠'eval-source-map', 'cheap-module-source-map' ã®ãããªä»ã®ãªãã·ã§ã³
// ...
};
devtoolãªãã·ã§ã³ã¯ããœãŒã¹ããããã©ã®ããã«çæããããããŸãå
ã®ãœãŒã¹ã³ãŒããå«ããã©ãããå¶åŸ¡ããŸããç°ãªãdevtoolãªãã·ã§ã³ã¯ããã«ãé床ããããã°äœéšããœãŒã¹ãããã®ãµã€ãºã®éã®ç°ãªããã¬ãŒããªããæäŸããŸããæ¬çªç°å¢ã§ã¯ãå¥ã®.mapãã¡ã€ã«ãçæãã'source-map'ã®äœ¿çšãæ€èšããŠãã ããã
Parcel
Parcelã¯ãéçºã¢ãŒãã§ã¯ããã©ã«ãã§ãœãŒã¹ããããèªåçã«çæããŸããæ¬çªãã«ãã§ã¯ã--source-mapsãã©ã°ã䜿çšããŠãœãŒã¹ããããæå¹ã«ã§ããŸãïŒ
parcel build index.js --dist-dir dist --no-content-hash --source-maps
Rollup
rollup.config.jsãã¡ã€ã«ã§ããœãŒã¹ããããçæããããã«åºåãªãã·ã§ã³ãèšå®ããŸãïŒ
import terser from '@rollup/plugin-terser';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'iife',
sourcemap: true, // ãœãŒã¹ãããçæãæå¹å
plugins: [
terser(), // åºåããããã¡ã€ããïŒãªãã·ã§ã³ïŒ
],
},
};
TypeScript Compiler (tsc)
TypeScriptã³ã³ãã€ã©ïŒtscïŒã䜿çšããå Žåãtsconfig.jsonãã¡ã€ã«ã§ãœãŒã¹ãããçæãæå¹ã«ããŸãïŒ
{
"compilerOptions": {
// ...
"sourceMap": true, // ãœãŒã¹ãããçæãæå¹å
// ...
}
}
ãã©ãŠã¶ã§ã®ãœãŒã¹ãããã®èšå®
ã»ãšãã©ã®ææ°ã®ãã©ãŠã¶ã¯ãœãŒã¹ããããèªåçã«ãµããŒãããŠããŸãããã ãããã©ãŠã¶ã®éçºè ããŒã«ã®èšå®ã§ãœãŒã¹ãããã®ãµããŒããæå¹ã«ããå¿ èŠãããå ŽåããããŸãã
Chrome
- Chrome DevToolsãéããŸãïŒå³ã¯ãªã㯠-> [æ€èšŒ]ïŒã
- æ¯è»ã¢ã€ã³ã³ïŒèšå®ïŒãã¯ãªãã¯ããŸãã
- [Preferences] ããã«ã§ããEnable JavaScript source mapsãããã§ãã¯ãããŠããããšã確èªããŸãã
Firefox
- Firefox éçºããŒã«ãéããŸãïŒå³ã¯ãªã㯠-> [調æ»]ïŒã
- æ¯è»ã¢ã€ã³ã³ïŒèšå®ïŒãã¯ãªãã¯ããŸãã
- [Sources] ããã«ã§ããShow original sourcesãããã§ãã¯ãããŠããããšã確èªããŸãã
Safari
- SafariãéããŸãã
- [Safari] -> [ç°å¢èšå®] -> [詳现] ã«ç§»åããŸãã
- ãã¡ãã¥ãŒããŒã« "éçº" ã¡ãã¥ãŒã衚瀺ãããã§ãã¯ããŸãã
- [éçº] ã¡ãã¥ãŒ -> [Webã€ã³ã¹ãã¯ã¿ã衚瀺] ãéããŸãã
- Webã€ã³ã¹ãã¯ã¿ã§ãæ¯è»ã¢ã€ã³ã³ïŒèšå®ïŒãã¯ãªãã¯ããŸãã
- [äžè¬] ããã«ã§ããShow Source Map Resourcesãããã§ãã¯ãããŠããããšã確èªããŸãã
ãœãŒã¹ãããã®é«åºŠãªãã¯ããã¯
åºæ¬çãªãœãŒã¹ãããã®çæãšèšå®ãè¶ ããŠããœãŒã¹ããããæå€§éã«æŽ»çšããããã®ããã€ãã®é«åºŠãªãã¯ããã¯ããããŸãã
é©åãªdevtoolãªãã·ã§ã³ã®éžæïŒWebpackïŒ
Webpackã®devtoolãªãã·ã§ã³ã¯ãå¹
åºãèšå®ãæäŸããŸããæãäžè¬çã«äœ¿çšããããªãã·ã§ã³ãšãã®ãã¬ãŒããªãã®å
èš³ã¯æ¬¡ã®ãšããã§ãïŒ
'source-map': å¥ã®.mapãã¡ã€ã«ãçæããŸããéçºäžã®ãã«ãé床ã«åœ±é¿ãäžããã«é«å質ãªãœãŒã¹ããããæäŸãããããæ¬çªç°å¢ã«æé©ã§ãã'inline-source-map': ãœãŒã¹ããããããŒã¿URLãšããŠJavaScriptãã¡ã€ã«ã«çŽæ¥åã蟌ã¿ãŸããéçºã«ã¯äŸ¿å©ã§ãããJavaScriptãã¡ã€ã«ã®ãµã€ãºã倧ãããªããŸãã'eval':eval()ã䜿çšããŠã³ãŒããå®è¡ããŸãããã«ãæéã¯éãã§ããããããã°æ©èœã¯éå®çã§ããæ¬çªç°å¢ã§ã¯æšå¥šãããŸããã'cheap-module-source-map':'source-map'ã«äŒŒãŠããŸãããåãããã³ã°ãçç¥ããããããã«ãæéã¯éããªããŸããããããã°ã®ç²ŸåºŠã¯äœããªããŸãã'eval-source-map':'eval'ãš'source-map'ãçµã¿åããããã®ã§ããéçºäžã®ãã«ãé床ãšãããã°äœéšã®ãã©ã³ã¹ãè¯ãã§ãã
é©åãªdevtoolãªãã·ã§ã³ã®éžæã¯ãç¹å®ã®ããŒãºãšåªå
é äœã«ãã£ãŠç°ãªããŸããéçºçšã«ã¯'eval-source-map'ãŸãã¯'cheap-module-source-map'ãè¯ãéžæè¢ãšãªãããšãå€ãã§ããæ¬çªçšã«ã¯ãäžè¬çã«'source-map'ãæšå¥šãããŸãã
ãµãŒãããŒãã£ã©ã€ãã©ãªãšãœãŒã¹ãããã®æäœ
å€ãã®ãµãŒãããŒãã£ã©ã€ãã©ãªã¯ç¬èªã®ãœãŒã¹ããããæäŸããŠããŸãããããã®ã©ã€ãã©ãªã䜿çšããå Žåããã®ãœãŒã¹ãããããã«ãããã»ã¹ã§é©åã«èšå®ãããŠããããšã確èªããŠãã ãããããã«ãããã©ã€ãã©ãªã®ã³ãŒããèªåã®ã³ãŒãã§ãããã®ããã«ãããã°ã§ããŸãã
ããšãã°ãnpmãããœãŒã¹ããããæäŸããã©ã€ãã©ãªã䜿çšããŠããå Žåããã«ãããŒã«ã¯ãããèªåçã«æ€åºããçæããããœãŒã¹ãããã«å«ããã¯ãã§ãããã ãããµãŒãããŒãã£ã©ã€ãã©ãªããã®ãœãŒã¹ããããé©åã«åŠçããããã«ãã«ãããŒã«ãèšå®ããå¿ èŠãããå ŽåããããŸãã
ã€ã³ã©ã€ã³åããããœãŒã¹ãããã®åãæ±ã
åè¿°ã®ããã«ããœãŒã¹ãããã¯'inline-source-map'ãªãã·ã§ã³ã䜿çšããŠJavaScriptãã¡ã€ã«ã«çŽæ¥ã€ã³ã©ã€ã³åã§ããŸããããã¯éçºã«ã¯äŸ¿å©ã§ããããã¡ã€ã«ãµã€ãºãå¢å ãããããæ¬çªç°å¢ã§ã¯äžè¬çã«æšå¥šãããŸããã
æ¬çªç°å¢ã§ã€ã³ã©ã€ã³åããããœãŒã¹ãããã«ééããå Žåãsource-map-explorerã®ãããªããŒã«ã䜿çšããŠãã€ã³ã©ã€ã³åããããœãŒã¹ãããããã¡ã€ã«ãµã€ãºã«äžãã圱é¿ãåæã§ããŸãããŸããããŒã«ã䜿çšããŠJavaScriptãã¡ã€ã«ãããœãŒã¹ããããæœåºããå¥éæäŸããããšãã§ããŸãã
ãšã©ãŒç£èŠããŒã«ã§ã®ãœãŒã¹ãããã®äœ¿çš
SentryãBugsnagãRollbarãªã©ã®ãšã©ãŒç£èŠããŒã«ã¯ããœãŒã¹ãããã䜿çšããŠãå ã®ãœãŒã¹ã³ãŒããæã瀺ã詳现ãªãšã©ãŒã¬ããŒããæäŸã§ããŸããããã¯ãæ¬çªç°å¢ã§ã®ãšã©ãŒãç¹å®ãä¿®æ£ããããã«éåžžã«äŸ¡å€ããããŸãã
ãããã®ããŒã«ã§ãœãŒã¹ãããã䜿çšããã«ã¯ãéåžžããœãŒã¹ãããããšã©ãŒç£èŠãµãŒãã¹ã«ã¢ããããŒãããå¿ èŠããããŸãããœãŒã¹ããããã¢ããããŒãããå ·äœçãªæé ã¯ã䜿çšããŠããããŒã«ã«ãã£ãŠç°ãªããŸãã詳现ã«ã€ããŠã¯ããšã©ãŒç£èŠããŒã«ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
ããšãã°ãSentryã§ã¯ãsentry-cliããŒã«ã䜿çšããŠãœãŒã¹ããããã¢ããããŒãã§ããŸãïŒ
sentry-cli releases files upload-sourcemaps --dist dist --url-prefix '~/' ./dist
ãœãŒã¹ãããã䜿çšããæ¬çªã³ãŒãã®ãããã°
ãœãŒã¹ãããã¯äž»ã«éçºçšã«äœ¿çšãããŸãããæ¬çªã³ãŒãã®ãããã°ã«ãéåžžã«åœ¹ç«ã¡ãŸããæ¬çªç°å¢ã§ãœãŒã¹ãããã䜿çšããããšã§ã詳现ãªãšã©ãŒã¬ããŒããååŸããéçºç°å¢ã«ãããã®ããã«ã³ãŒãããããã°ã§ããŸãã
ãã ããæ¬çªç°å¢ã§ãœãŒã¹ããããæäŸãããšããœãŒã¹ã³ãŒããäžè¬ã«å ¬éãããå¯èœæ§ããããŸãããããã£ãŠãæ¬çªç°å¢ã§ãœãŒã¹ããããæäŸããåã«ãã»ãã¥ãªãã£äžã®åœ±é¿ãæ éã«æ€èšããããšãéèŠã§ãã
äžã€ã®ã¢ãããŒãã¯ãæ¿èªããããŠãŒã¶ãŒã«ã®ã¿ãœãŒã¹ããããæäŸããããšã§ããWebãµãŒããŒãèšå®ããŠããœãŒã¹ããããæäŸããåã«èªèšŒãèŠæ±ããããšãã§ããŸãããããã¯ãSentryã®ãããªãµãŒãã¹ã䜿çšããŠããœãŒã¹ãããã®ä¿åãšã¢ã¯ã»ã¹å¶åŸ¡ãä»»ããããšãã§ããŸãã
ãœãŒã¹ãããã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
ãœãŒã¹ãããã广çã«äœ¿çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- ãã¹ãŠã®ç°å¢ã§ãœãŒã¹ããããçæããïŒéçºç°å¢ãšæ¬çªç°å¢ã®äž¡æ¹ã§ãœãŒã¹ããããçæããŸããããã«ãããç°å¢ã«é¢ä¿ãªããã³ãŒãã®ãããã°ãšãšã©ãŒã®è¿œè·¡ã广çã«è¡ããŸãã
- é©åãª
devtoolãªãã·ã§ã³ã䜿çšããïŒããŒãºãšåªå é äœã«æãé©ããdevtoolãªãã·ã§ã³ãéžæããŸããéçºçšã«ã¯'eval-source-map'ãŸãã¯'cheap-module-source-map'ãè¯ãéžæè¢ãšãªãããšãå€ãã§ããæ¬çªçšã«ã¯ãäžè¬çã«'source-map'ãæšå¥šãããŸãã - ãšã©ãŒç£èŠããŒã«ã«ãœãŒã¹ããããã¢ããããŒãããïŒå ã®ãœãŒã¹ã³ãŒããæã瀺ã詳现ãªãšã©ãŒã¬ããŒããååŸããããã«ããœãŒã¹ãããããšã©ãŒç£èŠããŒã«ã«ã¢ããããŒãããŸãã
- æ¬çªç°å¢ã§ãœãŒã¹ããããå®å šã«æäŸããïŒæ¬çªç°å¢ã§ãœãŒã¹ããããæäŸããããšãéžæããå Žåã¯ãã»ãã¥ãªãã£ãžã®åœ±é¿ãæ éã«æ€èšãããœãŒã¹ã³ãŒããä¿è·ããããã®é©åãªæªçœ®ãè¬ããŸãã
- ãœãŒã¹ãããã宿çã«ãã¹ãããïŒãœãŒã¹ããããæ£ããæ©èœããŠããããšã確èªããããã«ã宿çã«ãã¹ãããŸããããã«ãããåé¡ãæ©æã«çºèŠããåŸã®ãããã°ã®æéãé²ãããšãã§ããŸãã
- ãã«ãããŒã«ãææ°ã®ç¶æ ã«ä¿ã€ïŒææ°ã®ãœãŒã¹ãããæ©èœãšãã°ä¿®æ£ã掻çšããããã«ããã«ãããŒã«ãææ°ã®ç¶æ ã«ä¿ã¡ãŸãã
äžè¬çãªãœãŒã¹ãããã®åé¡ãšãã©ãã«ã·ã¥ãŒãã£ã³ã°
ãœãŒã¹ãããã¯äžè¬çã«ä¿¡é Œã§ããŸãããæã åé¡ãçºçããããšããããŸãã以äžã¯ãäžè¬çãªãœãŒã¹ãããã®åé¡ãšãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°æ¹æ³ã§ãïŒ
- ãœãŒã¹ããããèªã¿èŸŒãŸããªãïŒãœãŒã¹ããããèªã¿èŸŒãŸããªãå Žåã¯ãJavaScriptãã¡ã€ã«ã®
sourceMappingURLã³ã¡ã³ãããœãŒã¹ããããã¡ã€ã«ã®æ£ããå ŽæãæããŠããããšã確èªããŠãã ããããŸãããã©ãŠã¶ã®éçºè ããŒã«ã®èšå®ã§ãœãŒã¹ãããã®ãµããŒããæå¹ã«ãªã£ãŠããããšã確èªããŠãã ããã - äžæ£ãªè¡çªå·ïŒãœãŒã¹ããããäžæ£ãªè¡çªå·ã衚瀺ããŠããå Žåã¯ããã«ãããŒã«ããœãŒã¹ããããæ£ããçæããŠããããšã確èªããŠãã ããããŸããWebpackã§æ£ãã
devtoolãªãã·ã§ã³ã䜿çšããŠããããšã確èªããŠãã ããã - ãœãŒã¹ã³ãŒããèŠã€ãããªãïŒãœãŒã¹ãããã«å
ã®ãœãŒã¹ã³ãŒããå«ãŸããŠããªãå Žåã¯ããã«ãããŒã«ããœãŒã¹ãããã«ãœãŒã¹ã³ãŒããå«ããããã«èšå®ãããŠããããšã確èªããŠãã ãããWebpackã®äžéšã®
devtoolãªãã·ã§ã³ã¯ãããã©ãŒãã³ã¹äžã®çç±ãããœãŒã¹ã³ãŒããçç¥ããŸãã - CORSã®åé¡ïŒç°ãªããã¡ã€ã³ãããœãŒã¹ããããèªã¿èŸŒãã§ããå ŽåãCORSïŒCross-Origin Resource SharingïŒã®åé¡ãçºçããå¯èœæ§ããããŸãããµãŒããŒããœãŒã¹ãããã®ã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ããèš±å¯ããããã«èšå®ãããŠããããšã確èªããŠãã ããã
- ãã£ãã·ã¥ã®åé¡ïŒãã©ãŠã¶ã®ãã£ãã·ã¥ããœãŒã¹ãããã®èªã¿èŸŒã¿ã劚ããããšããããŸãããã©ãŠã¶ã®ãã£ãã·ã¥ãã¯ãªã¢ãããããã£ãã·ã¥ãã¹ãã£ã³ã°æè¡ã䜿çšããŠãææ°ããŒãžã§ã³ã®ãœãŒã¹ããããèªã¿èŸŒãŸããããã«ããŠãã ããã
ãœãŒã¹ãããã®æªæ¥
ãœãŒã¹ãããã¯é²åãç¶ããæè¡ã§ããWebéçºãé²åãç¶ããã«ã€ããŠããœãŒã¹ãããã¯ããã«æŽç·Žããã匷åã«ãªãå¯èœæ§ããããŸãã
å°æ¥ã®éçºã®å¯èœæ§ã®ããåéã®äžã€ã¯ãã³ã³ãã€ã©ããã©ã³ã¹ãã€ã©ã«ãã£ãŠå®è¡ããããããªè€éãªã³ãŒã倿ã®ãããã°ãµããŒãã®åäžã§ããã³ãŒãããŒã¹ããŸããŸãè€éã«ãªãã«ã€ããŠã倿ãããã³ãŒããå ã®ãœãŒã¹ã³ãŒãã«æ£ç¢ºã«ãããã³ã°ããèœåã¯ããã«éèŠã«ãªããŸãã
ããäžã€ã®éçºã®å¯èœæ§ã®ããåéã¯ããããã°ããŒã«ããšã©ãŒç£èŠãµãŒãã¹ãšã®çµ±åã®åäžã§ãããããã®ããŒã«ãããæŽç·Žãããã«ã€ããŠããœãŒã¹ããããæŽ»çšããŠãã³ãŒãã®æ¯ãèãã«é¢ããããã«è©³çްã§å®çšçãªæŽå¯ãæäŸã§ããããã«ãªãã§ãããã
çµè«
JavaScriptãœãŒã¹ãããã¯ãçŸä»£ã®Webéçºã«äžå¯æ¬ ãªããŒã«ã§ãããããã«ãããã³ãŒããå¹ççã«ãããã°ãããšã©ãŒã广çã«è¿œè·¡ãã倿ãããã³ãŒããå ã®ãœãŒã¹ã³ãŒããšã©ã®ããã«é¢é£ããŠããããçè§£ããããšãã§ããŸãã
ãœãŒã¹ããããã©ã®ããã«æ©èœããããçè§£ãããã®ã¬ã€ãã§æŠèª¬ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ããœãŒã¹ãããã®åãè§£ãæŸã¡ãéçºã¯ãŒã¯ãããŒãå¹çåããããšãã§ããŸãããœãŒã¹ããããåãå ¥ããããšã¯åãªãè¯ãç¿æ £ã§ã¯ãªãã仿¥ã®è€éãªéçºç°å¢ã«ãããŠãå ç¢ã§ä¿å®å¯èœã§ãããã°å¯èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®å¿ éåã§ãããããé£ã³èŸŒãã§ãå®éšãããœãŒã¹ãããæŽ»çšã®æè¡ããã¹ã¿ãŒããŠãã ãã â å°æ¥ã®ãããã°ã»ãã·ã§ã³ãããªãã«æè¬ããã§ãããïŒ