JavaScriptã®ã¢ãžã¥ãŒã«ããŒããŒãšåçã€ã³ããŒãã«é¢ããå æ¬çãªã¬ã€ãããã®æŽå²ãå©ç¹ãå®è£ ããããŠçŸä»£ã®ãŠã§ãéçºã«ããããã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
JavaScriptã¢ãžã¥ãŒã«ããŒããŒïŒåçã€ã³ããŒãã·ã¹ãã ã®ç¿åŸ
çµ¶ãéãªãé²åãããŠã§ãéçºã®äžçã«ãããŠãå¹ççãªã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ã¯ãã¹ã±ãŒã©ãã«ã§ä¿å®æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããJavaScriptã®ã¢ãžã¥ãŒã«ããŒããŒã¯ãäŸåé¢ä¿ã®ç®¡çãšã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹æé©åã«ãããŠéèŠãªåœ¹å²ãæãããŸãããã®ã¬ã€ãã§ã¯ãJavaScriptã¢ãžã¥ãŒã«ããŒããŒã®äžçãæ·±ãæãäžããç¹ã«åçã€ã³ããŒãã·ã¹ãã ãšãããçŸä»£ã®ãŠã§ãéçºãã©ã¯ãã£ã¹ã«äžãã圱é¿ã«çŠç¹ãåœãŠãŸãã
JavaScriptã¢ãžã¥ãŒã«ããŒããŒãšã¯ïŒ
JavaScriptã¢ãžã¥ãŒã«ããŒããŒã¯ãJavaScriptã¢ããªã±ãŒã·ã§ã³å ã®äŸåé¢ä¿ã解決ããèªã¿èŸŒãããã®ã¡ã«ããºã ã§ããJavaScriptã«ãã€ãã£ãã®ã¢ãžã¥ãŒã«ãµããŒããç»å Žãã以åã¯ãéçºè ã¯ããŸããŸãªã¢ãžã¥ãŒã«ããŒããŒã®å®è£ ã«äŸåããŠãã³ãŒããåå©çšå¯èœãªã¢ãžã¥ãŒã«ã«æ§é åãããããã®éã®äŸåé¢ä¿ã管çããŠããŸããã
ã¢ãžã¥ãŒã«ããŒããŒã解決ããåé¡
倿°ã®ãã¡ã€ã«ãšäŸåé¢ä¿ãæã€å€§èŠæš¡ãªJavaScriptã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ãããã¢ãžã¥ãŒã«ããŒããŒããªããã°ããããã®äŸåé¢ä¿ã®ç®¡çã¯è€éã§ãšã©ãŒãçºçããããã¿ã¹ã¯ã«ãªããŸããéçºè ã¯ãã¹ã¯ãªãããèªã¿èŸŒãŸããé åºãæåã§è¿œè·¡ããå¿ èŠãªãšãã«äŸåé¢ä¿ãå©çšå¯èœã§ããããšã確èªããå¿ èŠããããŸãããã®ã¢ãããŒãã¯é¢åã§ããã ãã§ãªããæœåšçãªåœåè¡çªãã°ããŒãã«ã¹ã³ãŒãã®æ±æã«ãã€ãªãããŸãã
CommonJS
äž»ã«Node.jsç°å¢ã§äœ¿çšãããCommonJSã¯ãã¢ãžã¥ãŒã«ãå®çŸ©ããã³ã€ã³ããŒãããããã®require()
ãšmodule.exports
æ§æãå°å
¥ããŸãããããã¯åæçãªã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã¢ãããŒããæäŸãããã¡ã€ã«ã·ã¹ãã ãžã®ã¢ã¯ã»ã¹ã容æãªãµãŒããŒãµã€ãç°å¢ã«é©ããŠããŸããã
äŸïŒ
// math.js
module.exports.add = (a, b) => a + b;
// app.js
const math = require('./math');
console.log(math.add(2, 3)); // åºå: 5
éåæã¢ãžã¥ãŒã«å®çŸ© (AMD)
AMDã¯ãéåæã®ã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã¡ã«ããºã ãæäŸããããšã§ããã©ãŠã¶ç°å¢ã«ãããCommonJSã®å¶éã«å¯ŸåŠããŸãããRequireJSã¯ãAMD仿§ã®äžè¬çãªå®è£ ã§ãã
äŸïŒ
// math.js
define(function () {
return {
add: function (a, b) {
return a + b;
}
};
});
// app.js
require(['./math'], function (math) {
console.log(math.add(2, 3)); // åºå: 5
});
ãŠãããŒãµã«ã¢ãžã¥ãŒã«å®çŸ© (UMD)
UMDã¯ãCommonJSãšAMDã®äž¡æ¹ã®ç°å¢ãšäºææ§ã®ããã¢ãžã¥ãŒã«å®çŸ©ãã©ãŒããããæäŸããããšãç®çãšããŠãããã¢ãžã¥ãŒã«ã倿ŽããããšãªãããŸããŸãªã³ã³ããã¹ãã§äœ¿çšã§ããããã«ããŸããã
äŸïŒç°¡æçïŒïŒ
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['exports'], factory);
} else if (typeof module === 'object' && module.exports) {
// CommonJS
factory(exports);
} else {
// ãã©ãŠã¶ã®ã°ããŒãã«
factory(root.myModule = {});
}
}(typeof self !== 'undefined' ? self : this, function (exports) {
exports.add = function (a, b) {
return a + b;
};
}));
ESã¢ãžã¥ãŒã« (ESM) ã®å°é
ECMAScript 2015ïŒES6ïŒã§ESã¢ãžã¥ãŒã«ïŒESMïŒãæšæºåãããããšã§ãJavaScriptã¯ãã€ãã£ãã®ã¢ãžã¥ãŒã«ãµããŒããç²åŸããŸãããESMã¯ã¢ãžã¥ãŒã«ãå®çŸ©ããã³ã€ã³ããŒãããããã®import
ãšexport
ããŒã¯ãŒããå°å
¥ããã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã«å¯ŸããŠããæšæºåãããå¹ççãªã¢ãããŒããæäŸããŸããã
äŸïŒ
// math.js
export const add = (a, b) => a + b;
// app.js
import { add } from './math.js';
console.log(add(2, 3)); // åºå: 5
ESã¢ãžã¥ãŒã«ã®å©ç¹
- æšæºå: ESMã¯æšæºåãããã¢ãžã¥ãŒã«ãã©ãŒããããæäŸããã«ã¹ã¿ã ã®ã¢ãžã¥ãŒã«ããŒããŒå®è£ ã®å¿ èŠæ§ããªãããŸãã
- éçè§£æ: ESMã¯ã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ã®éçè§£æãå¯èœã«ããããªãŒã·ã§ã€ãã³ã°ããããã³ãŒãã®åé€ãªã©ã®æé©åãå¯èœã«ããŸãã
- éåæèªã¿èŸŒã¿: ESMã¯ã¢ãžã¥ãŒã«ã®éåæèªã¿èŸŒã¿ããµããŒãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããåæèªã¿èŸŒã¿æéãççž®ããŸãã
åçã€ã³ããŒã: ãªã³ããã³ãã®ã¢ãžã¥ãŒã«èªã¿èŸŒã¿
ES2020ã§å°å
¥ãããåçã€ã³ããŒãã¯ããªã³ããã³ãã§ã¢ãžã¥ãŒã«ãéåæã«èªã¿èŸŒãããã®ã¡ã«ããºã ãæäŸããŸããéçã€ã³ããŒãïŒimport ... from ...
ïŒãšã¯ç°ãªããåçã€ã³ããŒãã¯é¢æ°ãšããŠåŒã³åºãããã¢ãžã¥ãŒã«ã®ãšã¯ã¹ããŒãã§è§£æ±ºãããPromiseãè¿ããŸãã
æ§æïŒ
import('./my-module.js')
.then(module => {
// ã¢ãžã¥ãŒã«ã䜿çšãã
module.myFunction();
})
.catch(error => {
// ãšã©ãŒãåŠçãã
console.error('Failed to load module:', error);
});
åçã€ã³ããŒãã®ãŠãŒã¹ã±ãŒã¹
- ã³ãŒãåå²: åçã€ã³ããŒãã¯ã³ãŒãåå²ãå¯èœã«ããã¢ããªã±ãŒã·ã§ã³ããªã³ããã³ãã§èªã¿èŸŒãŸããå°ããªãã£ã³ã¯ã«åå²ã§ããŸããããã«ãããåæèªã¿èŸŒã¿æéãççž®ãããäœæããã©ãŒãã³ã¹ãåäžããŸãã
- æ¡ä»¶ä»ãèªã¿èŸŒã¿: ãŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãããã€ã¹ã®æ©èœãªã©ãç¹å®ã®æ¡ä»¶ã«åºã¥ããŠã¢ãžã¥ãŒã«ãèªã¿èŸŒãããã«åçã€ã³ããŒãã䜿çšã§ããŸãã
- ã«ãŒãããŒã¹ã®èªã¿èŸŒã¿: ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒã§ã¯ãåçã€ã³ããŒãã䜿çšããŠç¹å®ã®ã«ãŒãã«é¢é£ããã¢ãžã¥ãŒã«ãèªã¿èŸŒã¿ãåæèªã¿èŸŒã¿æéãšå šäœçãªããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ãã©ã°ã€ã³ã·ã¹ãã : åçã€ã³ããŒãã¯ããŠãŒã¶ãŒèšå®ãå€éšèŠå ã«åºã¥ããŠã¢ãžã¥ãŒã«ãåçã«èªã¿èŸŒãŸãããã©ã°ã€ã³ã·ã¹ãã ã®å®è£ ã«æé©ã§ãã
äŸïŒåçã€ã³ããŒãã«ããã³ãŒãåå²
ç¹å®ã®ããŒãžã§ã®ã¿äœ¿çšãããå€§èŠæš¡ãªãã£ãŒãã©ã€ãã©ãªããããšããŸããã©ã€ãã©ãªå šäœãåæãã³ãã«ã«å«ãã代ããã«ãåçã€ã³ããŒãã䜿çšããŠããŠãŒã¶ãŒããã®ããŒãžã«ç§»åãããšãã«ã®ã¿èªã¿èŸŒãããšãã§ããŸãã
// charts.js (å€§èŠæš¡ãªãã£ãŒãã©ã€ãã©ãª)
export function createChart(data) {
// ... ãã£ãŒãäœæããžã㯠...
console.log('Chart created with data:', data);
}
// app.js
const chartButton = document.getElementById('showChartButton');
chartButton.addEventListener('click', () => {
import('./charts.js')
.then(module => {
const chartData = [10, 20, 30, 40, 50];
module.createChart(chartData);
})
.catch(error => {
console.error('Failed to load chart module:', error);
});
});
ãã®äŸã§ã¯ãcharts.js
ã¢ãžã¥ãŒã«ã¯ãŠãŒã¶ãŒãããã£ãŒãã衚瀺ããã¿ã³ãã¯ãªãã¯ãããšãã«ã®ã¿èªã¿èŸŒãŸããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®åæèªã¿èŸŒã¿æéãççž®ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
äŸïŒãŠãŒã¶ãŒãã±ãŒã«ã«åºã¥ãæ¡ä»¶ä»ãèªã¿èŸŒã¿
ç°ãªããã±ãŒã«ïŒäŸïŒæ¥ä»ãé貚ã®ãã©ãŒãããïŒããšã«ç°ãªããã©ãŒããã颿°ããããšããŸãããŠãŒã¶ãŒãéžæããèšèªã«åºã¥ããŠãé©åãªãã©ãŒãããã¢ãžã¥ãŒã«ãåçã«ã€ã³ããŒãã§ããŸãã
// en-US-formatter.js
export function formatDate(date) {
return date.toLocaleDateString('en-US');
}
export function formatCurrency(amount) {
return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount);
}
// de-DE-formatter.js
export function formatDate(date) {
return date.toLocaleDateString('de-DE');
}
export function formatCurrency(amount) {
return new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(amount);
}
// app.js
const userLocale = getUserLocale(); // ãŠãŒã¶ãŒã®ãã±ãŒã«ã決å®ãã颿°
import(`./${userLocale}-formatter.js`)
.then(formatter => {
const today = new Date();
const price = 1234.56;
console.log('Formatted Date:', formatter.formatDate(today));
console.log('Formatted Currency:', formatter.formatCurrency(price));
})
.catch(error => {
console.error('Failed to load locale formatter:', error);
});
ã¢ãžã¥ãŒã«ãã³ãã©: WebpackãRollupãParcel
ã¢ãžã¥ãŒã«ãã³ãã©ã¯ãè€æ°ã®JavaScriptã¢ãžã¥ãŒã«ãšãã®äŸåé¢ä¿ãããã©ãŠã¶ã§å¹ççã«èªã¿èŸŒããåäžãŸãã¯äžé£ã®ãã¡ã€ã«ïŒãã³ãã«ïŒã«çµåããããŒã«ã§ãããããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åãããããã€ãç°¡çŽ åããäžã§éèŠãªåœ¹å²ãæãããŸãã
Webpack
Webpackã¯ãCommonJSãAMDãESã¢ãžã¥ãŒã«ãå«ãããŸããŸãªã¢ãžã¥ãŒã«åœ¢åŒããµããŒãããã匷åã§é«åºŠã«èšå®å¯èœãªã¢ãžã¥ãŒã«ãã³ãã©ã§ããã³ãŒãåå²ãããªãŒã·ã§ã€ãã³ã°ããããã¢ãžã¥ãŒã«ãªãã¬ãŒã¹ã¡ã³ãïŒHMRïŒãªã©ã®é«åºŠãªæ©èœãæäŸããŸãã
Webpackèšå®äŸïŒwebpack.config.js
ïŒïŒ
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
mode: 'development',
devtool: 'inline-source-map',
devServer: {
static: './dist',
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
};
Webpackããšã³ã¿ãŒãã©ã€ãºã¬ãã«ã®ã¢ããªã±ãŒã·ã§ã³ã«é©ããŠããäž»ãªç¹åŸŽã¯ããã®é«ãèšå®å¯èœæ§ãå€§èŠæš¡ãªã³ãã¥ããã£ãµããŒãããããŠãã©ã°ã€ã³ãšã³ã·ã¹ãã ã§ãã
Rollup
Rollupã¯ãæé©åãããJavaScriptã©ã€ãã©ãªãäœæããããã«ç¹å¥ã«èšèšãããã¢ãžã¥ãŒã«ãã³ãã©ã§ããæçµçãªãã³ãã«ããæªäœ¿çšã®ã³ãŒããåé€ããããªãŒã·ã§ã€ãã³ã°ã«åªããŠãããããå°ããå¹ççãªåºåãå®çŸããŸãã
Rollupèšå®äŸïŒrollup.config.js
ïŒïŒ
import babel from '@rollup/plugin-babel';
import { nodeResolve } from '@rollup/plugin-node-resolve';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
},
plugins: [
nodeResolve(),
babel({
babelHelpers: 'bundled',
exclude: 'node_modules/**'
})
]
};
Rollupã¯ãããªãŒã·ã§ã€ãã³ã°ãšESã¢ãžã¥ãŒã«åºåã«éç¹ã眮ããŠãããããWebpackãšæ¯èŒããŠã©ã€ãã©ãªçšã®ãã³ãã«ãå°ãããªãåŸåããããŸãã
Parcel
Parcelã¯ããã«ãããã»ã¹ãç°¡çŽ åããããšãç®çãšãããèšå®äžèŠã®ã¢ãžã¥ãŒã«ãã³ãã©ã§ãããã¹ãŠã®äŸåé¢ä¿ãèªåçã«æ€åºãããã³ãã«ããããšã§ãé«éã§å¹ççãªéçºäœéšãæäŸããŸãã
Parcelã¯æå°éã®èšå®ããå¿ èŠãšããŸããããšã³ããªãšãªãHTMLãŸãã¯JavaScriptãã¡ã€ã«ãæå®ããã ãã§ãæ®ãã®åŠçã¯ãã¹ãŠè¡ã£ãŠãããŸãïŒ
parcel index.html
Parcelã¯ããã现ããªå¶åŸ¡ãããè¿ éãªéçºãåªå ãããå°èŠæš¡ãªãããžã§ã¯ãããããã¿ã€ãã§å¥œãŸããããšãå€ãã§ãã
åçã€ã³ããŒãã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- ãšã©ãŒãã³ããªã³ã°: åçã€ã³ããŒãã䜿çšããéã¯ãã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ã«å€±æããå Žåã«é©åã«åŠçã§ãããããåžžã«ãšã©ãŒãã³ããªã³ã°ãå«ããŠãã ããã
- ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒ: ã¢ãžã¥ãŒã«ãèªã¿èŸŒãŸããŠããéããŠãŒã¶ãŒã«èŠèŠçãªãã£ãŒãããã¯ãæäŸããŠããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŸãã
- ãã£ãã·ã³ã°: ãã©ãŠã¶ã®ãã£ãã·ã¥ã¡ã«ããºã ãæŽ»çšããŠãåçã«èªã¿èŸŒãŸããã¢ãžã¥ãŒã«ããã£ãã·ã¥ãããã®åŸã®èªã¿èŸŒã¿æéãççž®ããŸãã
- ããªããŒã: ããã©ãŒãã³ã¹ãããã«æé©åããããã«ãããã«å¿
èŠã«ãªãå¯èœæ§ãé«ãã¢ãžã¥ãŒã«ãããªããŒãããããšãæ€èšããŠãã ãããHTMLã§
<link rel="preload" as="script" href="module.js">
ã¿ã°ã䜿çšã§ããŸãã - ã»ãã¥ãªãã£: ç¹ã«å€éšãœãŒã¹ããã¢ãžã¥ãŒã«ãåçã«èªã¿èŸŒãéã®ã»ãã¥ãªãã£äžã®åœ±é¿ã«æ³šæããŠãã ãããåçã«èªã¿èŸŒãŸããã¢ãžã¥ãŒã«ããåãåã£ãããŒã¿ã¯ãã¹ãŠæ€èšŒãããµãã¿ã€ãºããŠãã ããã
- é©åãªãã³ãã©ã®éžæ: ãããžã§ã¯ãã®ããŒãºãšè€éãã«åã£ãã¢ãžã¥ãŒã«ãã³ãã©ãéžæããŠãã ãããWebpackã¯åºç¯ãªèšå®ãªãã·ã§ã³ãæäŸããRollupã¯ã©ã€ãã©ãªã«æé©åãããŠãããParcelã¯èšå®äžèŠã®ã¢ãããŒããæäŸããŸãã
äŸïŒããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã®å®è£
// ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒã衚瀺ãã颿°
function showLoadingIndicator() {
const loadingElement = document.createElement('div');
loadingElement.id = 'loadingIndicator';
loadingElement.textContent = 'Loading...';
document.body.appendChild(loadingElement);
}
// ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒãé衚瀺ã«ãã颿°
function hideLoadingIndicator() {
const loadingElement = document.getElementById('loadingIndicator');
if (loadingElement) {
loadingElement.remove();
}
}
// ããŒãã£ã³ã°ã€ã³ãžã±ãŒã¿ãŒä»ãã§åçã€ã³ããŒãã䜿çš
showLoadingIndicator();
import('./my-module.js')
.then(module => {
hideLoadingIndicator();
module.myFunction();
})
.catch(error => {
hideLoadingIndicator();
console.error('Failed to load module:', error);
});
å®äžçã®äŸãšã±ãŒã¹ã¹ã¿ãã£
- Eã³ããŒã¹ãã©ãããã©ãŒã : Eã³ããŒã¹ãã©ãããã©ãŒã ã§ã¯ãåå詳现ãé¢é£ååããã®ä»ã®ã³ã³ããŒãã³ãããªã³ããã³ãã§èªã¿èŸŒãããã«åçã€ã³ããŒãããã䜿çšãããããŒãžã®èªã¿èŸŒã¿æéãšãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŠããŸãã
- ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³: ãœãŒã·ã£ã«ã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ããŠãã³ã¡ã³ãã·ã¹ãã ãã¡ãã£ã¢ãã¥ãŒã¢ããªã¢ã«ã¿ã€ã æŽæ°ãªã©ã®ã€ã³ã¿ã©ã¯ãã£ããªæ©èœãèªã¿èŸŒãããã«åçã€ã³ããŒããæŽ»çšããŠããŸãã
- ãªã³ã©ã€ã³åŠç¿ãã©ãããã©ãŒã : ãªã³ã©ã€ã³åŠç¿ãã©ãããã©ãŒã ã§ã¯ãã³ãŒã¹ã¢ãžã¥ãŒã«ãã€ã³ã¿ã©ã¯ãã£ããªæŒç¿ãè©äŸ¡ããªã³ããã³ãã§èªã¿èŸŒãããã«åçã€ã³ããŒãã䜿çšãããããŒãœãã©ã€ãºãããé åçãªåŠç¿äœéšãæäŸããŠããŸãã
- ã³ã³ãã³ã管çã·ã¹ãã (CMS): CMSãã©ãããã©ãŒã ã¯ããã©ã°ã€ã³ãããŒãããã®ä»ã®æ¡åŒµæ©èœãåçã«èªã¿èŸŒãããã«åçã€ã³ããŒããæ¡çšããŠããããŠãŒã¶ãŒãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããããšãªããŠã§ããµã€ããã«ã¹ã¿ãã€ãºã§ããããã«ããŠããŸãã
ã±ãŒã¹ã¹ã¿ãã£ïŒåçã€ã³ããŒãã«ããå€§èŠæš¡ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã®æé©å
ããå€§èŠæš¡ãªãšã³ã¿ãŒãã©ã€ãºãŠã§ãã¢ããªã±ãŒã·ã§ã³ã¯ãã¡ã€ã³ãã³ãã«ã«å€æ°ã®ã¢ãžã¥ãŒã«ãå«ãŸããŠããããã«ãåæèªã¿èŸŒã¿æéãé ããšããåé¡ãæ±ããŠããŸãããéçºããŒã ã¯ãåçã€ã³ããŒãã«ããã³ãŒãåå²ãå®è£ ããããšã§ãåæãã³ãã«ãµã€ãºã60%åæžããã¢ããªã±ãŒã·ã§ã³ã®Time to InteractiveïŒTTIïŒã40%æ¹åããããšãã§ããŸãããããã«ããããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšå šäœçãªæºè¶³åºŠãå€§å¹ ã«åäžããŸããã
ã¢ãžã¥ãŒã«ããŒããŒã®æªæ¥
ã¢ãžã¥ãŒã«ããŒããŒã®æªæ¥ã¯ããŠã§ãæšæºãšããŒã«ã®ç¶ç¶çãªé²æ©ã«ãã£ãŠåœ¢äœãããå¯èœæ§ãé«ãã§ããèãããããã¬ã³ãã«ã¯ä»¥äžã®ãããªãã®ããããŸãïŒ
- HTTP/3ãšQUIC: ãããã®æ¬¡äžä»£ãããã³ã«ã¯ãé å»¶ãåæžããæ¥ç¶ç®¡çãæ¹åããããšã§ãã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ããã©ãŒãã³ã¹ãããã«æé©åããããšãæåŸ ãããŠããŸãã
- WebAssemblyã¢ãžã¥ãŒã«: WebAssemblyïŒWasmïŒã¢ãžã¥ãŒã«ã¯ãããã©ãŒãã³ã¹ãéèŠãªã¿ã¹ã¯ã§ãŸããŸã人æ°ãé«ãŸã£ãŠããŸããã¢ãžã¥ãŒã«ããŒããŒã¯ãWasmã¢ãžã¥ãŒã«ãã·ãŒã ã¬ã¹ã«ãµããŒãããããã«é©å¿ããå¿ èŠããããŸãã
- ãµãŒããŒã¬ã¹é¢æ°: ãµãŒããŒã¬ã¹é¢æ°ã¯äžè¬çãªãããã€ãã¿ãŒã³ã«ãªãã€ã€ãããŸããã¢ãžã¥ãŒã«ããŒããŒã¯ããµãŒããŒã¬ã¹ç°å¢åãã«ã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ãæé©åããå¿ èŠããããŸãã
- ãšããžã³ã³ãã¥ãŒãã£ã³ã°: ãšããžã³ã³ãã¥ãŒãã£ã³ã°ã¯ãèšç®ããŠãŒã¶ãŒã®è¿ãã«é 眮ããåãã§ããã¢ãžã¥ãŒã«ããŒããŒã¯ã垯åå¹ ãéãããé å»¶ã倧ãããšããžç°å¢åãã«ã¢ãžã¥ãŒã«ã®èªã¿èŸŒã¿ãæé©åããå¿ èŠããããŸãã
çµè«
JavaScriptã¢ãžã¥ãŒã«ããŒããŒãšåçã€ã³ããŒãã·ã¹ãã ã¯ãçŸä»£ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äžå¯æ¬ ãªããŒã«ã§ããã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã®æŽå²ãå©ç¹ããã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ãéçºè ã¯ããå¹ççã§ãä¿å®æ§ãé«ããã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããåçã€ã³ããŒããæ¡çšããWebpackãRollupãParcelãªã©ã®ã¢ãžã¥ãŒã«ãã³ãã©ã掻çšããããšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãæé©åããéçºããã»ã¹ãç°¡çŽ åããããã®éèŠãªã¹ãããã§ãã
ãŠã§ããé²åãç¶ããäžã§ãäžçäžã®ãŠãŒã¶ãŒã®èŠæ±ã«å¿ããæå 端ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ã¯ãã¢ãžã¥ãŒã«èªã¿èŸŒã¿æè¡ã®ææ°ã®é²æ©ã«åžžã«ç²ŸéããŠããããšãäžå¯æ¬ ã§ãã