JavaScriptã«ãããéåæãªãœãŒã¹èªã¿èŸŒã¿ã®ããã®äžŠåã€ã³ããŒããæ·±ãæãäžãããã¹ããã©ã¯ãã£ã¹ãæé©åæè¡ãWebã¢ããªã®ããã©ãŒãã³ã¹ãé«éåããããã®å®äŸã解説ããŸãã
JavaScriptã®éåæãªãœãŒã¹èªã¿èŸŒã¿ïŒããã©ãŒãã³ã¹ãæé©åãã䞊åã€ã³ããŒãã®ç¿åŸ
仿¥ã®ããŒã¹ã®éããŠã§ãç°å¢ã«ãããŠãã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã¯æãéèŠã§ãããããéæããããã®éèŠãªåŽé¢ã®äžã€ããJavaScriptã³ãŒãã®èªã¿èŸŒã¿æ¹æ³ãæé©åããããšã§ããéåæãªãœãŒã¹èªã¿èŸŒã¿ãç¹ã«äžŠåã€ã³ããŒãã¯ããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãå€§å¹ ã«åäžããã匷åãªãã¯ããã¯ã§ãããã®ã¬ã€ãã§ã¯ã䞊åã€ã³ããŒãã®æŠå¿µãæ¢ãããã®ä»çµã¿ãå®èšŒããå®è£ ã®ããã®å®è·µçãªæŠç¥ãæäŸããŸãã
éåæãªãœãŒã¹èªã¿èŸŒã¿ã®çè§£
åŸæ¥ã®åæèªã¿èŸŒã¿ã§ã¯ãã¹ã¯ãªãããå®å šã«ããŠã³ããŒãããå®è¡ããããŸã§ããã©ãŠã¶ã¯è§£æãšã¬ã³ããªã³ã°ã忢ããããåŸãŸãããããã¯ãç¹ã«å€§ããªJavaScriptãã¡ã€ã«ã®å Žåãå€§å¹ ãªé å»¶ã«ã€ãªããå¯èœæ§ããããŸããäžæ¹ãéåæèªã¿èŸŒã¿ã§ã¯ãã¹ã¯ãªãããããã¯ã°ã©ãŠã³ãã§ååŸãããŠããéãããã©ãŠã¶ã¯ããŒãžã®ä»ã®éšåã®åŠçãç¶ããããšãã§ããŸããããã«ãããäœæããã©ãŒãã³ã¹ãåçã«åäžããåæèªã¿èŸŒã¿æéãççž®ãããŸãã
éåæèªã¿èŸŒã¿ã®ã¡ãªããïŒ
- äœæããã©ãŒãã³ã¹ã®åäžïŒ ãã©ãŠã¶ãã¹ã¯ãªããã®ããŠã³ããŒãã«ãã£ãŠãããã¯ãããªãããããŠãŒã¶ãŒã¯ããéãåæèªã¿èŸŒã¿ãäœéšããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ èªã¿èŸŒã¿æéã®ççž®ã¯ãããã¹ã ãŒãºã§å¿çæ§ã®é«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«ã€ãªãããŸãã
- SEOã®æ¹åïŒ æ€çŽ¢ãšã³ãžã³ã¯èªã¿èŸŒã¿é床ã®éããŠã§ããµã€ãã奜ããããæ€çŽ¢é äœãåäžããå¯èœæ§ããããŸãã
- ãªãœãŒã¹æ¶è²»ã®åæžïŒ å¿ èŠãªãšãã«å¿ èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšã§ãäžèŠãªãªãŒããŒããããæå°éã«æããŸãã
䞊åã€ã³ããŒãã®ç޹ä»
䞊åã€ã³ããŒãã¯ãéåæèªã¿èŸŒã¿ãããã«äžæ©é²ããè€æ°ã®ã¹ã¯ãªãããåæã«ååŸã§ããããã«ããŸãã1ã€ã®ã¹ã¯ãªãããããŠã³ããŒãã»å®è¡ãããã®ãåŸ ã£ãŠããæ¬¡ãéå§ããã®ã§ã¯ãªãããã©ãŠã¶ã¯è€æ°ã®ãªãœãŒã¹ãåæã«ãªã¯ãšã¹ãã§ããŸãããã®äžŠååã«ãããå¿ èŠãªãã¹ãŠã®JavaScriptã³ãŒããèªã¿èŸŒãã®ã«ãããå šäœçãªæéãå€§å¹ ã«ççž®ãããŸãã
äž»èŠãªæŠå¿µïŒ
- åçã€ã³ããŒãïŒ ES2020ã§å°å
¥ãããåçã€ã³ããŒãã¯ã
import()æ§æã䜿çšããŠã¢ãžã¥ãŒã«ãéåæã«èªã¿èŸŒãããšãå¯èœã«ããŸããããã¯äžŠåèªã¿èŸŒã¿ã®éèŠãªå®çŸèŠçŽ ã§ãã - PromiseïŒ åçã€ã³ããŒãã¯Promiseãè¿ããããèªã¿èŸŒã¿ããã»ã¹ã®éåæãªæ§è³ªãç°¡åã«æ±ãããšãã§ããŸãã
async/awaitã.then()/.catch()ã䜿çšããŠçµæã管çã§ããŸãã - ã³ãŒãåå²ïŒ 䞊åã€ã³ããŒãã¯ãã³ãŒãåå²ãšçµã¿åãããããšã§æã广çã«ãªããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ãããå°ããç¬ç«ããã¢ãžã¥ãŒã«ã«åå²ãããªã³ããã³ãã§èªã¿èŸŒããããã«ããããšã§ãã
䞊åã€ã³ããŒãã®å®è£
以äžã«ãJavaScriptã³ãŒãã§äžŠåã€ã³ããŒããå®è£ ããæ¹æ³ã瀺ããŸãïŒ
äŸ1ïŒåºæ¬çãªäžŠåã€ã³ããŒã
async function loadModules() {
try {
const [moduleA, moduleB, moduleC] = await Promise.all([
import('./moduleA.js'),
import('./moduleB.js'),
import('./moduleC.js')
]);
// Use the imported modules
moduleA.init();
moduleB.render();
moduleC.calculate();
} catch (error) {
console.error('Error loading modules:', error);
}
}
loadModules();
説æïŒ
loadModules颿°ã¯asyncãšããŠå®£èšãããŠãããawaitã䜿çšã§ããŸããPromise.all()ã¯ã(import()åŒã³åºãã«ãã£ãŠè¿ããã) Promiseã®é åãåãåããããããã¹ãŠã解決ãããã®ãåŸ ã¡ãŸãã- çµæã¯ã€ã³ããŒããããã¢ãžã¥ãŒã«ãå«ãé
åã§ããããããåå²ä»£å
¥ããŠ
moduleAãmoduleBãmoduleCã«æ ŒçŽããŸãã - ãã®åŸãå¿ èŠã«å¿ããŠã€ã³ããŒããããã¢ãžã¥ãŒã«ã䜿çšããŸãã
try...catchãããã¯ã䜿çšããŠãèªã¿èŸŒã¿ããã»ã¹äžã«çºçããå¯èœæ§ã®ãããšã©ãŒãåŠçããŸãã
äŸ2ïŒãšã©ãŒãã³ããªã³ã°ãå«ã䞊åã€ã³ããŒã
async function loadModules() {
const modulePromises = [
import('./moduleX.js').catch(error => {
console.error('Failed to load moduleX:', error);
return null; // Or a default module, or throw an error
}),
import('./moduleY.js').catch(error => {
console.error('Failed to load moduleY:', error);
return null;
}),
import('./moduleZ.js').catch(error => {
console.error('Failed to load moduleZ:', error);
return null;
})
];
try {
const [moduleX, moduleY, moduleZ] = await Promise.all(modulePromises);
if (moduleX) { moduleX.run(); }
if (moduleY) { moduleY.display(); }
if (moduleZ) { moduleZ.process(); }
} catch (error) {
console.error('Error loading modules:', error);
}
}
loadModules();
説æïŒ
- ãã®äŸã§ã¯ã䞊åèªã¿èŸŒã¿äžã«åã ã®ã¢ãžã¥ãŒã«ã®ãšã©ãŒãåŠçããæ¹æ³ã瀺ããŸãã
- å
import()åŒã³åºãã¯ãæœåšçãªãšã©ãŒãåŠçããããã«.catch()ãããã¯ã§ã©ãããããŠããŸãã - ã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ã«å€±æããå Žåã
.catch()ãããã¯ã¯ãšã©ãŒããã°ã«èšé²ããnullãè¿ããŸãïŒãŸãã¯ãé©åãªå Žåã¯ããã©ã«ãã¢ãžã¥ãŒã«ïŒãããã«ãããPromise.all()ãæåŠãããã®ãé²ããä»ã®ã¢ãžã¥ãŒã«ãæ£åžžã«èªã¿èŸŒãŸããããã«ãªããŸãã Promise.all()ã解決ãããåŸãåã¢ãžã¥ãŒã«ã䜿çšããåã«ããããå®çŸ©ãããŠããïŒnullã§ã¯ãªãïŒããšã確èªããŸãã
äŸ3ïŒæ¡ä»¶ä»ã䞊åã€ã³ããŒã
async function loadFeature(featureName) {
let modulePromise;
switch (featureName) {
case 'analytics':
modulePromise = import('./analytics.js');
break;
case 'chat':
modulePromise = import('./chat.js');
break;
case 'recommendations':
modulePromise = import('./recommendations.js');
break;
default:
console.warn('Unknown feature:', featureName);
return;
}
try {
const module = await modulePromise;
module.initialize();
} catch (error) {
console.error(`Failed to load feature ${featureName}:`, error);
}
}
// Load analytics and recommendations in parallel
Promise.all([
loadFeature('analytics'),
loadFeature('recommendations')
]);
説æïŒ
- ãã®äŸã§ã¯ãæ©èœåã«åºã¥ããŠã¢ãžã¥ãŒã«ãæ¡ä»¶ä»ãã§èªã¿èŸŒãæ¹æ³ã瀺ããŸãã
loadFeature颿°ã¯featureNameãå ¥åãšããŠåãåãã察å¿ããã¢ãžã¥ãŒã«ãåçã«ã€ã³ããŒãããŸããswitchæã䜿çšããŠãã©ã®ã¢ãžã¥ãŒã«ãèªã¿èŸŒãããæ±ºå®ããŸããPromise.all颿°ã¯ 'analytics' ãš 'recommendations' ã®ããã« `loadFeature` ãåŒã³åºãããããã广çã«äžŠåã§èªã¿èŸŒã¿ãŸãã
䞊åã€ã³ããŒãã®ãã¹ããã©ã¯ãã£ã¹
䞊åã€ã³ããŒãã®å©ç¹ãæå€§éã«æŽ»çšããããã«ã以äžã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããïŒ
- ã³ãŒãåå²ïŒ ã¢ããªã±ãŒã·ã§ã³ãæ©èœãã«ãŒãã«åºã¥ããŠãããå°ããç¬ç«ããã¢ãžã¥ãŒã«ã«åå²ããŸããããã«ãããç¹å®ã®ã¿ã¹ã¯ãããŒãžã«å¿ èŠãªã³ãŒãã®ã¿ãèªã¿èŸŒãããšãã§ããŸããWebpackãParcelãRollupãªã©ã®ããŒã«ã¯ãã³ãŒãåå²ãèªååã§ããŸãã
- éèŠãªãªãœãŒã¹ã®åªå é äœä»ãïŒ éèŠã§ãªããªãœãŒã¹ãããå ã«ãå¿ é ãªãœãŒã¹ïŒäŸïŒã³ã¢ã³ã³ããŒãã³ããåæã¬ã³ããªã³ã°ããžãã¯ïŒãèªã¿èŸŒã¿ãŸããããªããŒããããªãã§ãããªã©ã®æè¡ã䜿çšããŠããªãœãŒã¹ã®èªã¿èŸŒã¿ãæé©åã§ããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒ 1ã€ã®ã¢ãžã¥ãŒã«ã®é害ãã¢ããªã±ãŒã·ã§ã³å
šäœãäžæãããªãããã«ãå
ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£
ããŸãã
try...catchãããã¯ã䜿çšãããã©ãŒã«ããã¯ã¡ã«ããºã ãæäŸããŸãã - ã¢ãžã¥ãŒã«ãµã€ãºã®æé©åïŒ æªäœ¿çšã®ã³ãŒããåé€ããã¢ã»ãããå§çž®ããå¹ççãªã¢ã«ãŽãªãºã ã䜿çšããããšã§ãã¢ãžã¥ãŒã«ã®ãµã€ãºãæå°éã«æããŸããTerserãBabelãªã©ã®ããŒã«ãã³ãŒãã®æé©åã«åœ¹ç«ã¡ãŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒ ãã©ãŠã¶ã®éçºè ããŒã«ãããã©ãŒãã³ã¹ç£èŠãµãŒãã¹ã䜿çšããŠã䞊åã€ã³ããŒãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ã«äžãã圱é¿ã远跡ããŸããTime to Interactive (TTI) ã First Contentful Paint (FCP) ãªã©ã®ã¡ããªã¯ã¹ã«æ³šæãæããŸãã
- äŸåé¢ä¿ã°ã©ããèæ ®ããïŒ ã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ã«æ³šæããŠãã ãããäºãã«äŸåããã¢ãžã¥ãŒã«ã䞊åã§èªã¿èŸŒããšãé å»¶ãçºçããå¯èœæ§ããããŸããäŸåé¢ä¿ãæ£ãã解決ãããå¿ èŠã«å¿ããŠã¢ãžã¥ãŒã«ãé©åãªé åºã§èªã¿èŸŒãŸããããã«ããŸãã
å®äžçã§ã®äŸ
䞊åã€ã³ããŒããããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããããšãã§ãããããã€ãã®å®äžçã®ã·ããªãªãèŠãŠã¿ãŸãããïŒ
- Eã³ããŒã¹ãµã€ãïŒ ãŠãŒã¶ãŒãååããŒãžã«ç§»åãããšãã«ãååã®è©³çްãã¬ãã¥ãŒãé¢é£ååã䞊åã§èªã¿èŸŒã¿ãŸããããã«ãããå®å šãªååæ å ±ã衚瀺ããã®ã«ãããæéãå€§å¹ ã«ççž®ã§ããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ïŒ ãŠãŒã¶ãŒã®ãããã£ãŒã«ã®ããŸããŸãªã»ã¯ã·ã§ã³ïŒäŸïŒæçš¿ãåéãåçïŒã䞊åã§èªã¿èŸŒã¿ãŸããããã«ããããŠãŒã¶ãŒã¯ãããã£ãŒã«å šäœãèªã¿èŸŒãŸããã®ãåŸ ã€ããšãªããèå³ã®ããã³ã³ãã³ãã«ãã°ããã¢ã¯ã»ã¹ã§ããŸãã
- ãã¥ãŒã¹ãµã€ãïŒ èšäºãã³ã¡ã³ããé¢é£èšäºã䞊åã§èªã¿èŸŒã¿ãŸããããã«ããããã©ãŠãžã³ã°äœéšãåäžãããŠãŒã¶ãŒã®ãšã³ã²ãŒãžã¡ã³ããç¶æãããŸãã
- ããã·ã¥ããŒãã¢ããªã±ãŒã·ã§ã³ïŒ ããã·ã¥ããŒãäžã®ããŸããŸãªãŠã£ãžã§ããããã£ãŒãã䞊åã§èªã¿èŸŒã¿ãŸããããã«ããããŠãŒã¶ãŒã¯ããŒã¿ã®æŠèŠããã°ãã確èªã§ããŸããäŸãã°ãéèããã·ã¥ããŒãã§ã¯ãæ ªäŸ¡ãããŒããã©ãªãªã®æŠèŠããã¥ãŒã¹ãã£ãŒããåæã«èªã¿èŸŒãããšãã§ããŸãã
ããŒã«ãšã©ã€ãã©ãª
ããã€ãã®ããŒã«ãã©ã€ãã©ãªãã䞊åã€ã³ããŒããå®è£ ããJavaScriptã³ãŒããæé©åããã®ã«åœ¹ç«ã¡ãŸãïŒ
- WebpackïŒ ã³ãŒãåå²ãšåçã€ã³ããŒããçµã¿èŸŒã¿ã§ãµããŒããã匷åãªã¢ãžã¥ãŒã«ãã³ãã©ã
- ParcelïŒ ã³ãŒãåå²ãšäžŠåèªã¿èŸŒã¿ãèªåçã«åŠçãããŒãèšå®ã®ãã³ãã©ã
- RollupïŒ ããå°ãããããå¹ççãªãã³ãã«ãäœæããããšã«çŠç¹ãåœãŠãã¢ãžã¥ãŒã«ãã³ãã©ã
- BabelïŒ å€ããã©ãŠã¶ã§åçã€ã³ããŒããå«ãææ°ã®JavaScriptæ©èœã䜿çšã§ããããã«ããJavaScriptã³ã³ãã€ã©ã
- TerserïŒ JavaScriptã®ããŒãµãŒããã³ã°ã©ãŒãããã³å§çž®ããŒã«ãããã
æœåšçãªèª²é¡ãžã®å¯ŸåŠ
䞊åã€ã³ããŒãã¯å€§ããªå©ç¹ãæäŸããŸãããæœåšçãªèª²é¡ã«æ³šæããããšãäžå¯æ¬ ã§ãïŒ
- ãã©ãŠã¶ã®äºææ§ïŒ ã¿ãŒã²ãããšãããã©ãŠã¶ãåçã€ã³ããŒãããµããŒãããŠããããšã確èªããŸããå€ããã©ãŠã¶åãã«ã³ãŒãããã©ã³ã¹ãã€ã«ããããã«ãBabelãåæ§ã®ããŒã«ã䜿çšããŸãã
- ãããã¯ãŒã¯ã®æ··éïŒ ããŸãã«ãå€ãã®ãªãœãŒã¹ã䞊åã§èªã¿èŸŒããšããããã¯ãŒã¯ã®æ··éãåŒãèµ·ãããå šäœã®ããã©ãŒãã³ã¹ãäœäžãããå¯èœæ§ããããŸãããã®åé¡ã軜æžããããã«ããªã¯ãšã¹ããã¹ããããªã³ã°ããããéèŠãªãªãœãŒã¹ãåªå ããŸããã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãã°ããŒãã«ãªãªãœãŒã¹é ä¿¡é床ãåäžãããããšãæ€èšããŠãã ãããCDNã¯ããŠã§ããµã€ãã®ã¢ã»ããã®ã³ããŒãäžçäžã®ãµãŒããŒã«ä¿åããããããŠãŒã¶ãŒã¯å°ççã«è¿ããµãŒããŒããããŠã³ããŒãã§ããŸãã
- äŸåé¢ä¿ã®ç®¡çïŒ åŸªç°äŸåãé¿ããã¢ãžã¥ãŒã«ãæ£ããé åºã§èªã¿èŸŒãŸããããã«ãã¢ãžã¥ãŒã«éã®äŸåé¢ä¿ãæ éã«ç®¡çããŸãã
- ãã¹ããšãããã°ïŒ 䞊åã€ã³ããŒããæ£ããæ©èœãããšã©ãŒãé©åã«åŠçãããŠããããšã確èªããããã«ãã³ãŒãã培åºçã«ãã¹ãããŸãããã©ãŠã¶ã®éçºè ããŒã«ããããã°ããŒã«ã䜿çšããŠãåé¡ãç¹å®ã解決ããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«äžŠåã€ã³ããŒããå®è£ ããå Žåã以äžã®èŠå ãèæ ®ããŠãã ããïŒ
- ããŸããŸãªãããã¯ãŒã¯éåºŠïŒ äžçã®ããŸããŸãªå°åã®ãŠãŒã¶ãŒã¯ããããã¯ãŒã¯é床ãç°ãªãå ŽåããããŸããé ãæ¥ç¶ã§ããŠã§ããµã€ããè¯å¥œã«åäœããããã«ãã³ãŒããšãªãœãŒã¹ãæé©åããŸãããããã¯ãŒã¯ç¶æ³ã«åºã¥ããŠäžŠåãªã¯ãšã¹ãã®æ°ã調æŽããé©å¿åèªã¿èŸŒã¿æè¡ã®å®è£ ãæ€èšããŠãã ããã
- å°ççãªå ŽæïŒ ã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠããŠãŒã¶ãŒã«å°ççã«è¿ããµãŒããŒãããªãœãŒã¹ãæäŸããŸãã
- èšèªãšããŒã«ãªãŒãŒã·ã§ã³ïŒ èšèªåºæã®ãªãœãŒã¹ã䞊åã§èªã¿èŸŒã¿ãç°ãªãå°åã®ãŠãŒã¶ãŒã®èªã¿èŸŒã¿æéãæ¹åããŸãã
- é貚ãšå°åèšå®ïŒ é貚æç®ãæ¥ä»åœ¢åŒããã®ä»ã®å°åèšå®ãåŠçããå°ååºæã®ã¢ãžã¥ãŒã«ãèªã¿èŸŒãããšãæ€èšããŸãããããã®ã¢ãžã¥ãŒã«ã¯ãä»ã®ãªãœãŒã¹ãšäžŠè¡ããŠèªã¿èŸŒãããšãã§ããŸãã
çµè«
䞊åã€ã³ããŒãã¯ãJavaScriptã®ãªãœãŒã¹èªã¿èŸŒã¿ãæé©åãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžãããããã®åŒ·åãªãã¯ããã¯ã§ããè€æ°ã®ã¢ãžã¥ãŒã«ãåæã«èªã¿èŸŒãããšã§ãèªã¿èŸŒã¿æéãå€§å¹ ã«ççž®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã䞊åã€ã³ããŒããã³ãŒãåå²ããšã©ãŒãã³ããªã³ã°ãããã©ãŒãã³ã¹ç£èŠãšçµã¿åãããããšã§ãäžçäžã®ãŠãŒã¶ãŒã«ã·ãŒã ã¬ã¹ã§å¿çæ§ã®é«ããŠã§ãã¢ããªã±ãŒã·ã§ã³ãæäŸã§ããŸãããã®ãã¯ããã¯ã掻çšããŠããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®æœåšèœåãæå€§éã«åŒãåºããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŠãã ããã
ãã®ã¬ã€ãã§ã¯ãJavaScriptã«ããã䞊åã€ã³ããŒãã®å æ¬çãªæŠèŠãæäŸããŸããããã¹ããã©ã¯ãã£ã¹ã«åŸããæœåšçãªèª²é¡ã«å¯ŸåŠããããšã§ããã®ãã¯ããã¯ã广çã«æŽ»çšããŠãŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãåäžãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«ããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãã§ããŸãã