JavaScriptã®ã¯ãŒã«ãŒã¹ã¬ãããšã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã掻çšããWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå¿çæ§ãã¹ã±ãŒã©ããªãã£ãåäžãããæ¹æ³ããå®è·µçãªäŸãšã°ããŒãã«ãªèæ ®äºé ãšå ±ã«åŠã³ãŸãã
JavaScriptã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãïŒã¯ãŒã«ãŒã¹ã¬ããã®ã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã§Webã¢ããªã±ãŒã·ã§ã³ã匷åãã
仿¥ã®ãã€ãããã¯ãªWebç°å¢ã«ãããŠãåè¶ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã¯æãéèŠã§ãã Webã¢ããªã±ãŒã·ã§ã³ããŸããŸãè€éã«ãªãã«ã€ããŠãããã©ãŒãã³ã¹ãšå¿çæ§ã®ç®¡çã¯éèŠãªèª²é¡ãšãªããŸãã ããã«å¯ŸåŠããããã®åŒ·åãªææ³ã®1ã€ããJavaScriptã®ã¯ãŒã«ãŒã¹ã¬ãããšã¢ãžã¥ãŒã«èªã¿èŸŒã¿ãçµã¿åãããããšã§ãããã®èšäºã§ã¯ãJavaScriptã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒããçè§£ãå®è£ ããããã®å æ¬çãªã¬ã€ããæäŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ãããå¹ççã§ã¹ã±ãŒã©ãã«ããããŠãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããåãäžããŸãã
Webã¯ãŒã«ãŒã®å¿ èŠæ§ãçè§£ãã
JavaScriptã¯ããã®æ žå¿ã«ãããŠã·ã³ã°ã«ã¹ã¬ããã§ããããã¯ãããã©ã«ãã§ã¯ãWebãã©ãŠã¶å ã®ãã¹ãŠã®JavaScriptã³ãŒããã¡ã€ã³ã¹ã¬ãããšããŠç¥ãããåäžã®ã¹ã¬ããã§å®è¡ãããããšãæå³ããŸãããã®ã¢ãŒããã¯ãã£ã¯éçºãç°¡çŽ åããŸãããåæã«é倧ãªããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ããªããŸããè€éãªèšç®ãå€§èŠæš¡ãªããŒã¿åŠçããããã¯ãŒã¯ãªã¯ãšã¹ããªã©ã®æéã®ãããã¿ã¹ã¯ã¯ãã¡ã€ã³ã¹ã¬ããããããã¯ãããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ïŒUIïŒãå¿çããªããªãåå ãšãªããŸããããã«ããããã©ãŠã¶ãããªãŒãºãããé å»¶ãããããããã«èŠãããŠãŒã¶ãŒã«äžæºãªäœéšããããããŸãã
Webã¯ãŒã«ãŒã¯ãJavaScriptã³ãŒããå¥ã®ã¹ã¬ããã§å®è¡ã§ããããã«ããããšã§ããã®åé¡ã®è§£æ±ºçãæäŸããŸããèšç®éçŽçãªã¿ã¹ã¯ãã¡ã€ã³ã¹ã¬ãããããªãããŒãããããšã§ãUIã®ããªãŒãºãé²ããããã¯ã°ã©ãŠã³ãæäœãå®è¡äžãã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ã確ä¿ããŸããã¯ãŒã«ãŒã«ãã£ãŠããããããé¢å¿ã®åé¢ã¯ãã³ãŒãã®æŽçãšä¿å®æ§ãåäžãããŸããããã¯ããããã¯ãŒã¯æ¡ä»¶ãå€åããå¯èœæ§ã®ããåœéåžå ŽããµããŒãããã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠç¹ã«éèŠã§ãã
ã¯ãŒã«ãŒã¹ã¬ãããšWorker APIã®ç޹ä»
ææ°ã®Webãã©ãŠã¶ã§å©çšå¯èœãªWorker APIã¯ãã¯ãŒã«ãŒã¹ã¬ãããäœæããã³ç®¡çããããã®åºç€ã§ãã以äžã«ãã®ä»çµã¿ã®åºæ¬çãªæŠèŠã瀺ããŸãïŒ
- ã¯ãŒã«ãŒã®äœæïŒ
Workerãªããžã§ã¯ããã€ã³ã¹ã¿ã³ã¹åããåŒæ°ãšããŠJavaScriptãã¡ã€ã«ïŒã¯ãŒã«ãŒã¹ã¯ãªããïŒãžã®ãã¹ãæž¡ãããšã§ã¯ãŒã«ãŒãäœæããŸãããã®ã¯ãŒã«ãŒã¹ã¯ãªããã«ã¯ãå¥ã®ã¹ã¬ããã§å®è¡ãããã³ãŒããå«ãŸããŠããŸãã - ã¯ãŒã«ãŒãšã®éä¿¡ïŒ
postMessage()ã¡ãœããã䜿çšããŠããŒã¿ãéä¿¡ããonmessageã€ãã³ããã³ãã©ã䜿çšããŠããŒã¿ãåä¿¡ããããšã§ã¯ãŒã«ãŒãšéä¿¡ããŸããã¯ãŒã«ãŒã¯navigatorããã³locationãªããžã§ã¯ãã«ã¢ã¯ã»ã¹ã§ããŸãããDOMãžã®ã¢ã¯ã»ã¹ã¯å¶éãããŠããŸãã - ã¯ãŒã«ãŒã®çµäºïŒ ã¯ãŒã«ãŒãäžèŠã«ãªã£ãå Žåã
terminate()ã¡ãœããã䜿çšããŠãªãœãŒã¹ãè§£æŸããããšã§ã¯ãŒã«ãŒãçµäºã§ããŸãã
äŸ (ã¡ã€ã³ã¹ã¬ãã):
// main.js
const worker = new Worker('worker.js');
worker.postMessage({ task: 'calculate', data: [1, 2, 3, 4, 5] });
worker.onmessage = (event) => {
console.log('Result from worker:', event.data);
};
worker.onerror = (error) => {
console.error('Worker error:', error);
};
äŸ (ã¯ãŒã«ãŒã¹ã¬ãã - worker.js):
// worker.js
onmessage = (event) => {
const data = event.data;
if (data.task === 'calculate') {
const result = data.data.reduce((sum, num) => sum + num, 0);
postMessage(result);
}
};
ãã®ç°¡åãªäŸã§ã¯ãã¡ã€ã³ã¹ã¬ãããã¯ãŒã«ãŒã«ããŒã¿ãéä¿¡ããã¯ãŒã«ãŒãèšç®ãå®è¡ãããã®çµæãã¡ã€ã³ã¹ã¬ããã«éãè¿ããŸãããã®é¢å¿ã®åé¢ã«ãããç¹ã«å€ãã®ç°ãªããŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãæã€è€éãªã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããŠãã³ãŒãã«ã€ããŠæšè«ãããããªããŸãã
ã¯ãŒã«ãŒã«ãããã¢ãžã¥ãŒã«èªã¿èŸŒã¿ã®é²å
æŽå²çã«ãã¯ãŒã«ãŒã¹ã¯ãªããã¯ãã°ãã°ãã¬ãŒã³ãªJavaScriptãã¡ã€ã«ã§ãããéçºè ã¯ã¢ãžã¥ãŒã«ã®äŸåé¢ä¿ãåŠçããããã«ããã³ãã«ããŒã«ïŒäŸïŒWebpack, Parcel, RollupïŒã®ãããªåé¿çã«é Œããªããã°ãªããŸããã§ãããããã¯éçºã¯ãŒã¯ãããŒã«è€éããå ããŠããŸããã
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãïŒWebã¯ãŒã«ãŒã«ãããESã¢ãžã¥ãŒã«ãµããŒããšããŠãç¥ãããŠããŸãïŒã®å°å
¥ã«ããããã®ããã»ã¹ã¯å€§å¹
ã«åçåãããŸãããããã«ãããã¡ã€ã³ã®JavaScriptã³ãŒãã§è¡ãã®ãšåãããã«ãã¯ãŒã«ãŒã¹ã¯ãªããå
ã§çŽæ¥ESã¢ãžã¥ãŒã«ãã€ã³ããŒãïŒimportããã³exportæ§æã䜿çšïŒã§ããŸããããã¯ãã¯ãŒã«ãŒã®ã¹ã¬ããå
ã§ESã¢ãžã¥ãŒã«ã®ã¢ãžã¥ãŒã«æ§ãšãã®å©ç¹ïŒäŸïŒããè¯ãã³ãŒãæ§æãç°¡åãªãã¹ããå¹ççãªäŸåé¢ä¿ç®¡çïŒã掻çšã§ããããã«ãªã£ãããšãæå³ããŸãã
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒããç»æçã§ããçç±ã¯æ¬¡ã®ãšããã§ãïŒ
- ç°¡çŽ åãããäŸåé¢ä¿ç®¡çïŒ è€éãªãã³ãã«èšå®ãå¿ èŠãšããã«ãã¯ãŒã«ãŒã¹ã¯ãªããå ã§çŽæ¥ã¢ãžã¥ãŒã«ãã€ã³ããŒãããã³ãšã¯ã¹ããŒãã§ããŸãïŒãã ããæ¬çªç°å¢ã§ã¯ãã³ãã«ãäŸç¶ãšããŠæçãªå ŽåããããŸãïŒã
- æ¹åãããã³ãŒãæ§æïŒ ã¯ãŒã«ãŒã³ãŒããããå°ãã管çããããã¢ãžã¥ãŒã«ã«åå²ããçè§£ãä¿å®ããã¹ãã容æã«ããŸãã
- åäžããã³ãŒãã®åå©çšæ§ïŒ ã¡ã€ã³ã¹ã¬ãããšã¯ãŒã«ãŒã¹ã¬ããéã§ã¢ãžã¥ãŒã«ãåå©çšã§ããŸãã
- ãã€ãã£ããã©ãŠã¶ãµããŒãïŒ ã»ãšãã©ã®ææ°ãã©ãŠã¶ã¯ãããªãã£ã«ãå¿ èŠãšããã«ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒããå®å šã«ãµããŒãããŠããŸããããã«ããããšã³ããŠãŒã¶ãŒãæ¢ã«æŽæ°ããããã©ãŠã¶ãå®è¡ããŠãããããäžçäžã®ã¢ããªã±ãŒã·ã§ã³ããã©ãŒãã³ã¹ãåäžããŸãã
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã®å®è£
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã®å®è£
ã¯æ¯èŒçç°¡åã§ããéèŠãªã®ã¯ãã¯ãŒã«ãŒã¹ã¯ãªããå
ã§importã¹ããŒãã¡ã³ãã䜿çšããããšã§ãã
äŸ (ã¡ã€ã³ã¹ã¬ãã):
// main.js
const worker = new Worker('worker.js', { type: 'module' }); // Specify type: 'module'
worker.postMessage({ task: 'processData', data: [1, 2, 3, 4, 5] });
worker.onmessage = (event) => {
console.log('Processed data from worker:', event.data);
};
äŸ (ã¯ãŒã«ãŒã¹ã¬ãã - worker.js):
// worker.js
import { processArray } from './utils.js'; // Import a module
onmessage = (event) => {
const data = event.data;
if (data.task === 'processData') {
const processedData = processArray(data.data);
postMessage(processedData);
}
};
äŸ (utils.js):
// utils.js
export function processArray(arr) {
return arr.map(num => num * 2);
}
éèŠãªèæ ®äºé ïŒ
- ã¯ãŒã«ãŒäœææã«
type: 'module'ãæå®ïŒ ã¡ã€ã³ã¹ã¬ããã§Workerãªããžã§ã¯ããäœæããéã«ãã³ã³ã¹ãã©ã¯ã¿ã§type: 'module'ãªãã·ã§ã³ãæå®ããå¿ èŠããããŸããããã«ããããã©ãŠã¶ã¯ã¯ãŒã«ãŒã¹ã¯ãªãããESã¢ãžã¥ãŒã«ãšããŠèªã¿èŸŒã¿ãŸãã - ESã¢ãžã¥ãŒã«æ§æã䜿çšïŒ
importããã³exportæ§æã䜿çšããŠã¢ãžã¥ãŒã«ã管çããŸãã - çžå¯Ÿãã¹ïŒ ã¯ãŒã«ãŒã¹ã¯ãªããå
ã§ã¢ãžã¥ãŒã«ãã€ã³ããŒãããã«ã¯çžå¯Ÿãã¹ã䜿çšããŸãïŒäŸïŒ
./utils.jsïŒã - ãã©ãŠã¶äºææ§ïŒ ãµããŒã察象ã®ãã©ãŠã¶ãã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãããµããŒãããŠããããšã確èªããŠãã ããããµããŒãã¯åºç¯ã§ãããå€ããã©ãŠã¶ã«ã¯ããªãã£ã«ããã©ãŒã«ããã¯ã¡ã«ããºã ãå¿ èŠã«ãªãå ŽåããããŸãã
- ã¯ãã¹ãªãªãžã³å¶éïŒ ã¯ãŒã«ãŒã¹ã¯ãªãããšã¡ã€ã³ããŒãžãç°ãªããã¡ã€ã³ã§ãã¹ããããŠããå Žåãã¯ãŒã«ãŒã¹ã¯ãªããããã¹ãããŠãããµãŒããŒã§é©åãªCORSïŒCross-Origin Resource SharingïŒããããŒãèšå®ããå¿ èŠããããŸããããã¯ãè€æ°ã®CDNãå°ççã«åæ£ãããªãªãžã³ã«ã³ã³ãã³ããé ä¿¡ããã°ããŒãã«ãµã€ãã«é©çšãããŸãã
- ãã¡ã€ã«æ¡åŒµåïŒ å³å¯ã«ã¯å¿
é ã§ã¯ãããŸããããã¯ãŒã«ãŒã¹ã¯ãªãããšã€ã³ããŒããããã¢ãžã¥ãŒã«ã«
.jsããã¡ã€ã«æ¡åŒµåãšããŠäœ¿çšããããšã¯è¯ãç¿æ £ã§ãã
å®è·µçãªãŠãŒã¹ã±ãŒã¹ãšäŸ
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã¯ãããŸããŸãªã·ããªãªã§ç¹ã«åœ¹ç«ã¡ãŸãã以äžã«ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«é¢ããèæ ®äºé ãå«ãå®è·µçãªäŸãããã€ã瀺ããŸãïŒ
1. è€éãªèšç®
æ°åŠçãªèšç®ãããŒã¿åæãéèã¢ããªã³ã°ãªã©ã®èšç®éçŽçãªã¿ã¹ã¯ãã¯ãŒã«ãŒã¹ã¬ããã«ãªãããŒãããŸããããã«ãããã¡ã€ã³ã¹ã¬ãããããªãŒãºããã®ãé²ããå¿çæ§ãåäžãããŸããäŸãã°ãäžçäžã§äœ¿çšãããéèã¢ããªã±ãŒã·ã§ã³ãè€å©ãèšç®ããå¿ èŠããããšããŸãããŠãŒã¶ãŒãèšç®é²è¡äžã«ã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ã§ããããã«ãèšç®ãã¯ãŒã«ãŒã«å§ä»»ã§ããŸããããã¯ãäœã¹ããã¯ã®ããã€ã¹ãéãããã€ã³ã¿ãŒãããæ¥ç¶ãæã€å°åã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯ããã«éèŠã§ãã
// main.js
const worker = new Worker('calculator.js', { type: 'module' });
function calculateCompoundInterest(principal, rate, years, periods) {
worker.postMessage({ task: 'compoundInterest', principal, rate, years, periods });
worker.onmessage = (event) => {
const result = event.data;
console.log('Compound Interest:', result);
};
}
// calculator.js
export function calculateCompoundInterest(principal, rate, years, periods) {
const amount = principal * Math.pow(1 + (rate / periods), periods * years);
return amount;
}
onmessage = (event) => {
const { principal, rate, years, periods } = event.data;
const result = calculateCompoundInterest(principal, rate, years, periods);
postMessage(result);
}
2. ããŒã¿åŠçãšå€æ
ã¯ãŒã«ãŒã¹ã¬ããã§å€§èŠæš¡ãªããŒã¿ã»ãããåŠçããããããŒã¿å€æãå®è¡ããããããŒã¿ããã£ã«ã¿ãªã³ã°ããã³ãœãŒããããããŸããããã¯ãç§åŠç ç©¶ãeã³ããŒã¹ïŒäŸïŒååã«ã¿ãã°ã®ãã£ã«ã¿ãªã³ã°ïŒããŸãã¯å°ç空éã¢ããªã±ãŒã·ã§ã³ãªã©ã®åéã§äžè¬çãªå€§èŠæš¡ããŒã¿ã»ãããæ±ãå Žåã«éåžžã«æçã§ããã°ããŒãã«ãªeã³ããŒã¹ãµã€ãã§ã¯ãã«ã¿ãã°ã«äœçŸäžãã®ååãå«ãŸããŠããŠããããã䜿çšããŠååã®çµæããã£ã«ã¿ãªã³ã°ããã³ãœãŒãã§ããŸããå€èšèªå¯Ÿå¿ã®eã³ããŒã¹ãã©ãããã©ãŒã ãèããŠã¿ãŸããããããŒã¿ã®å€æã«ã¯ããŠãŒã¶ãŒã®å Žæã«å¿ããŠèšèªæ€åºãé貚æç®ãå«ãŸããå¯èœæ§ããããããå€ãã®åŠçèœåãå¿ èŠãšãªããŸãããããã¯ã¯ãŒã«ãŒã¹ã¬ããã«ä»»ããããšãã§ããŸãã
// main.js
const worker = new Worker('dataProcessor.js', { type: 'module' });
worker.postMessage({ task: 'processData', data: largeDataArray });
worker.onmessage = (event) => {
const processedData = event.data;
// Update the UI with the processed data
};
// dataProcessor.js
import { transformData } from './dataUtils.js';
onmessage = (event) => {
const { data } = event.data;
const processedData = transformData(data);
postMessage(processedData);
}
// dataUtils.js
export function transformData(data) {
// Perform data transformation operations
return data.map(item => item * 2);
}
3. ç»åããã³ãããªåŠç
ã¯ãŒã«ãŒã¹ã¬ããã§ããªãµã€ãºãã¯ãããã³ã°ããã£ã«ã¿ãŒé©çšãªã©ã®ç»åæäœã¿ã¹ã¯ãå®è¡ããŸãããšã³ã³ãŒãã£ã³ã°/ãã³ãŒãã£ã³ã°ããã¬ãŒã æœåºãªã©ã®ãããªåŠçã¿ã¹ã¯ãæ©æµãåããããšãã§ããŸããäŸãã°ãã°ããŒãã«ãªãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã¯ãã¯ãŒã«ãŒã䜿çšããŠç»åã®å§çž®ãšãªãµã€ãºãåŠçããã¢ããããŒãé床ãåäžãããäžçäžã®ãŠãŒã¶ãŒãç¹ã«ã€ã³ã¿ãŒãããæ¥ç¶ãé ãå°åã®ãŠãŒã¶ãŒã®åž¯åå¹ äœ¿çšéãæé©åã§ããŸããããã¯ãã¹ãã¬ãŒãžã³ã¹ãã®åæžããäžçäžã®ã³ã³ãã³ãé ä¿¡ã®é å»¶ãæžããã®ã«ã圹ç«ã¡ãŸãã
// main.js
const worker = new Worker('imageProcessor.js', { type: 'module' });
function processImage(imageData) {
worker.postMessage({ task: 'resizeImage', imageData, width: 500, height: 300 });
worker.onmessage = (event) => {
const resizedImage = event.data;
// Update the UI with the resized image
};
}
// imageProcessor.js
import { resizeImage } from './imageUtils.js';
onmessage = (event) => {
const { imageData, width, height } = event.data;
const resizedImage = resizeImage(imageData, width, height);
postMessage(resizedImage);
}
// imageUtils.js
export function resizeImage(imageData, width, height) {
// Image resizing logic using canvas API or other libraries
const canvas = document.createElement('canvas');
canvas.width = width;
canvas.height = height;
const ctx = canvas.getContext('2d');
const img = new Image();
img.src = imageData;
img.onload = () => {
ctx.drawImage(img, 0, 0, width, height);
};
return canvas.toDataURL('image/png');
}
4. ãããã¯ãŒã¯ãªã¯ãšã¹ããšAPIã€ã³ã¿ã©ã¯ã·ã§ã³
ã¯ãŒã«ãŒã¹ã¬ããã§éåæãããã¯ãŒã¯ãªã¯ãšã¹ãïŒäŸïŒAPIããã®ããŒã¿ååŸïŒãè¡ãããããã¯ãŒã¯æäœäžã«ã¡ã€ã³ã¹ã¬ããããããã¯ãããã®ãé²ããŸããäžçäžã®æ è¡è ã䜿çšããæ è¡äºçŽãµã€ããèããŠã¿ãŸãããããã®ãµã€ãã¯ããã©ã€ãäŸ¡æ Œãããã«ã®ç©ºå®€ç¶æ³ããã®ä»ã®ããŒã¿ãããŸããŸãªAPIããååŸããå¿ èŠããããããããå¿çæéãç°ãªããŸããã¯ãŒã«ãŒã䜿çšããããšã§ããµã€ãã¯UIãããªãŒãºãããããšãªãããŒã¿ãååŸã§ããç°ãªãã¿ã€ã ãŸãŒã³ããããã¯ãŒã¯æ¡ä»¶äžã§ã·ãŒã ã¬ã¹ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
// main.js
const worker = new Worker('apiCaller.js', { type: 'module' });
function fetchDataFromAPI(url) {
worker.postMessage({ task: 'fetchData', url });
worker.onmessage = (event) => {
const data = event.data;
// Update the UI with the fetched data
};
}
// apiCaller.js
onmessage = (event) => {
const { url } = event.data;
fetch(url)
.then(response => response.json())
.then(data => postMessage(data))
.catch(error => {
console.error('API fetch error:', error);
postMessage({ error: 'Failed to fetch data' });
});
}
5. ã²ãŒã éçº
ã²ãŒã ã®ããžãã¯ãç©çèšç®ããŸãã¯AIåŠçãã¯ãŒã«ãŒã¹ã¬ããã«ãªãããŒãããŠãã²ãŒã ã®ããã©ãŒãã³ã¹ãšå¿çæ§ãåäžãããŸããäžçäžã®äººã ã䜿çšãããã«ããã¬ã€ã€ãŒã²ãŒã ãèããŠã¿ãŸããããã¯ãŒã«ãŒã¹ã¬ããã¯ãã¡ã€ã³ã®ã¬ã³ããªã³ã°ã«ãŒããšã¯ç¬ç«ããŠãç©çã·ãã¥ã¬ãŒã·ã§ã³ãã²ãŒã ç¶æ ã®æŽæ°ããŸãã¯AIã®åäœãåŠçã§ãããã¬ã€ã€ãŒæ°ãããã€ã¹ã®ããã©ãŒãã³ã¹ã«é¢ä¿ãªãã¹ã ãŒãºãªã²ãŒã ãã¬ã€ãä¿èšŒããŸããããã¯ã倿§ãªãããã¯ãŒã¯æ¥ç¶ã«ãããŠå ¬æ£ã§é åçãªäœéšãç¶æããããã«éèŠã§ãã
// main.js
const worker = new Worker('gameLogic.js', { type: 'module' });
function startGame() {
worker.postMessage({ task: 'startGame' });
worker.onmessage = (event) => {
const gameState = event.data;
// Update the game UI based on the game state
};
}
// gameLogic.js
import { updateGame } from './gameUtils.js';
onmessage = (event) => {
const { task, data } = event.data;
if (task === 'startGame') {
const intervalId = setInterval(() => {
const gameState = updateGame(); // Game logic function
postMessage(gameState);
}, 16); // Aim for ~60 FPS
}
}
// gameUtils.js
export function updateGame() {
// Game logic to update game state
return { /* game state */ };
}
ãã¹ããã©ã¯ãã£ã¹ãšæé©åãã¯ããã¯
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã®å©ç¹ãæå€§éã«æŽ»çšããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããïŒ
- ããã«ããã¯ã®ç¹å®ïŒ ã¯ãŒã«ãŒãå®è£ ããåã«ãã¢ããªã±ãŒã·ã§ã³ããããã¡ã€ãªã³ã°ããŠãããã©ãŒãã³ã¹ãæã圱é¿ãåããé åãç¹å®ããŸãããã©ãŠã¶ã®éçºè ããŒã«ïŒäŸïŒChrome DevToolsïŒã䜿çšããŠã³ãŒããåæããæéã®ãããã¿ã¹ã¯ãç¹å®ããŸãã
- ããŒã¿è»¢éã®æå°åïŒ ã¡ã€ã³ã¹ã¬ãããšã¯ãŒã«ãŒã¹ã¬ããéã®éä¿¡ã¯ãããã©ãŒãã³ã¹ã®ããã«ããã¯ã«ãªãå¯èœæ§ããããŸããå¿
èŠãªæ
å ±ã®ã¿ã転éããããšã§ãéåä¿¡ããããŒã¿éãæå°éã«æããŸããè€éãªãªããžã§ã¯ããæž¡ãéã®ããŒã¿ã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ã®åé¡ãé¿ããããã«ã
structuredClone()ã®äœ¿çšãæ€èšããŠãã ãããããã¯ãéããããããã¯ãŒã¯åž¯åå¹ ã§åäœããå¿ èŠãããã¢ããªã±ãŒã·ã§ã³ããããŸããŸãªå°åã®ãŠãŒã¶ãŒããµããŒãããã¢ããªã±ãŒã·ã§ã³ã«ãåœãŠã¯ãŸããŸãã - WebAssembly (Wasm) ã®æ€èšïŒ èšç®éçŽçãªã¿ã¹ã¯ã«ã¯ãã¯ãŒã«ãŒãšçµã¿åãããŠWebAssembly (Wasm) ã䜿çšããããšãæ€èšããŠãã ãããWasmã¯ãã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ãæäŸããé«åºŠã«æé©åã§ããŸããããã¯ãã°ããŒãã«ãªãŠãŒã¶ãŒã®ããã«ãªã¢ã«ã¿ã€ã ã§è€éãªèšç®ãããŒã¿åŠçãåŠçããå¿ èŠãããã¢ããªã±ãŒã·ã§ã³ã«é¢é£ããŸãã
- ã¯ãŒã«ãŒã§ã®DOMæäœãé¿ããïŒ ã¯ãŒã«ãŒã¯DOMã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãããã¯ãŒã«ãŒå
ããçŽæ¥DOMãæäœããããšããªãã§ãã ããã代ããã«ã
postMessage()ã䜿çšããŠã¡ã€ã³ã¹ã¬ããã«ããŒã¿ãéãè¿ããããã§UIãæŽæ°ããŸãã - ãã³ãã«ã®äœ¿çšïŒä»»æã§ããããã°ãã°æšå¥šïŒïŒ ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã§ã¯å³å¯ã«ã¯å¿ é ã§ã¯ãããŸããããã¯ãŒã«ãŒã¹ã¯ãªããããã³ãã«ããããšïŒWebpackãParcelãRollupãªã©ã®ããŒã«ã䜿çšïŒã¯ãæ¬çªç°å¢ã§æçãªå ŽåããããŸãããã³ãã«ã¯ã³ãŒããæé©åãããã¡ã€ã«ãµã€ãºãåæžããç¹ã«ã°ããŒãã«ã«å±éãããã¢ããªã±ãŒã·ã§ã³ã®èªã¿èŸŒã¿æéãæ¹åã§ããŸããããã¯ãæ¥ç¶æ§ãä¿¡é Œã§ããªãå°åã§ã®ãããã¯ãŒã¯é å»¶ã垯åå¹ å¶éã®åœ±é¿ã軜æžããã®ã«ç¹ã«åœ¹ç«ã¡ãŸãã
- ãšã©ãŒãã³ããªã³ã°ïŒ ã¡ã€ã³ã¹ã¬ãããšã¯ãŒã«ãŒã¹ã¬ããã®äž¡æ¹ã§å
ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£
ããŸãã
onerrorãštry...catchãããã¯ã䜿çšããŠããšã©ãŒãé©åã«ãã£ããããŠåŠçããŸãããšã©ãŒããã°ã«èšé²ãããŠãŒã¶ãŒã«æçãªã¡ãã»ãŒãžãæäŸããŸããAPIåŒã³åºããããŒã¿åŠçã¿ã¹ã¯ã§ã®æœåšçãªå€±æãåŠçããäžçäžã®ãŠãŒã¶ãŒã«äžè²«ããä¿¡é Œæ§ã®é«ããšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸãã - ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒ ãã©ãŠã¶ã§Webã¯ãŒã«ãŒã®ãµããŒããå©çšã§ããªãå Žåã«ãã¢ããªã±ãŒã·ã§ã³ãé©åã«æ©èœããããã«èšèšããŸããã¯ãŒã«ãŒããµããŒããããŠããªãå Žåã¯ãã¡ã€ã³ã¹ã¬ããã§ã¿ã¹ã¯ãå®è¡ãããã©ãŒã«ããã¯ã¡ã«ããºã ãæäŸããŸãã
- 培åºçãªãã¹ãïŒ ããŸããŸãªãã©ãŠã¶ãããã€ã¹ããããã¯ãŒã¯æ¡ä»¶äžã§ã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããæé©ãªããã©ãŒãã³ã¹ãšå¿çæ§ã確ä¿ããŸãããããã¯ãŒã¯é å»¶ã®éããèæ ®ããŠãããŸããŸãªå°ççå Žæãããã¹ãããŸãã
- ããã©ãŒãã³ã¹ã®ç£èŠïŒ æ¬çªç°å¢ã§ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãç£èŠããããã©ãŒãã³ã¹ã®äœäžãç¹å®ããŸããããã©ãŒãã³ã¹ç£èŠããŒã«ã䜿çšããŠãããŒãžã®èªã¿èŸŒã¿æéãã€ã³ã¿ã©ã¯ãã£ãã«ãªããŸã§ã®æéããã¬ãŒã ã¬ãŒããªã©ã®ã¡ããªã¯ã¹ã远跡ããŸãã
ã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã«é¢ããã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã察象ãšããWebã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåãã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã®æè¡çãªåŽé¢ã«å ããŠãããã€ãã®èŠå ãèæ ®ããå¿ èŠããããŸãïŒ
- ãããã¯ãŒã¯é å»¶ãšåž¯åå¹ ïŒ ãããã¯ãŒã¯ç¶æ³ã¯å°åã«ãã£ãŠå€§ããç°ãªããŸããäœåž¯åå¹ ããã³é«é å»¶ã®æ¥ç¶çšã«ã³ãŒããæé©åããŸããã³ãŒãåå²ãé å»¶èªã¿èŸŒã¿ãªã©ã®æè¡ã䜿çšããŠãåæèªã¿èŸŒã¿æéãççž®ããŸããã³ã³ãã³ãããªããªãŒãããã¯ãŒã¯ïŒCDNïŒã䜿çšããŠãã¯ãŒã«ãŒã¹ã¯ãªãããšã¢ã»ããããŠãŒã¶ãŒã®è¿ãã«é ä¿¡ããããšãæ€èšããŠãã ããã
- ããŒã«ãªãŒãŒã·ã§ã³ãšåœéåïŒL10n/I18nïŒïŒ ã¢ããªã±ãŒã·ã§ã³ã察象ã®èšèªãšæåã«åãããŠããŒã«ã©ã€ãºãããŠããããšã確èªããŸããããã«ã¯ãããã¹ãã®ç¿»èš³ãæ¥ä»ãšæ°å€ã®ãã©ãŒããããããŸããŸãªé貚圢åŒã®åŠçãå«ãŸããŸããèšç®ãæ±ãéãã¯ãŒã«ãŒã¹ã¬ããã䜿çšããŠãæ°å€ãæ¥ä»ã®ãã©ãŒããããªã©ããã±ãŒã«ãæèããæäœãå®è¡ããäžçäžã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒã§ããŸãã
- ãŠãŒã¶ãŒããã€ã¹ã®å€æ§æ§ïŒ äžçäžã®ãŠãŒã¶ãŒã¯ããã¹ã¯ããããã©ããããããã¿ãã¬ãããæºåž¯é»è©±ãªã©ãããŸããŸãªããã€ã¹ã䜿çšããå¯èœæ§ããããŸãããã¹ãŠã®ããã€ã¹ã§å¿çæ§ãé«ãã¢ã¯ã»ã¹ããããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããŸããäºææ§ã確ä¿ããããã«ãããŸããŸãªããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒ ã¢ã¯ã»ã·ããªãã£ã¬ã€ãã©ã€ã³ïŒäŸïŒWCAGïŒã«åŸã£ãŠãé害ãæã€ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããŸããããã«ã¯ãç»åã«ä»£æ¿ããã¹ããæäŸããããšãã»ãã³ãã£ãã¯HTMLã䜿çšããããšãã¢ããªã±ãŒã·ã§ã³ãããŒããŒãã§æäœå¯èœã§ããããšãä¿èšŒããããšãå«ãŸããŸããã¢ã¯ã»ã·ããªãã£ã¯ãèœåã«é¢ä¿ãªããã¹ãŠã®ãŠãŒã¶ãŒã«åªããäœéšãæäŸããäžã§éèŠãªåŽé¢ã§ãã
- æåçãªé æ ®ïŒ æåçãªéãã«æ³šæãæããç¹å®ã®æåã§äžå¿«ãŸãã¯äžé©åãšèŠãªãããå¯èœæ§ã®ããã³ã³ãã³ãã®äœ¿çšãé¿ããŸããã¢ããªã±ãŒã·ã§ã³ã察象ãªãŒãã£ãšã³ã¹ã«ãšã£ãŠæåçã«é©åã§ããããšã確èªããŸãã
- ã»ãã¥ãªãã£ïŒ ã¢ããªã±ãŒã·ã§ã³ãã»ãã¥ãªãã£ã®è匱æ§ããä¿è·ããŸãããŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ã䜿çšããäŸåé¢ä¿ã宿çã«æŽæ°ããŸããå€éšAPIãšçµ±åããéã¯ããã®ã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ãæ éã«è©äŸ¡ããŸãã
- å°åããšã®ããã©ãŒãã³ã¹æé©åïŒ å°ååºæã®ããã©ãŒãã³ã¹æé©åãå®è£ ããŸããäŸãã°ããŠãŒã¶ãŒã«è¿ãå°ççãªCDNã«ããŒã¿ããã£ãã·ã¥ããŸããç¹å®ã®å°åã®å¹³åçãªããã€ã¹èœåã«åºã¥ããŠç»åãæé©åããŸããã¯ãŒã«ãŒã¯ããŠãŒã¶ãŒã®å°çäœçœ®æ å ±ããŒã¿ã«åºã¥ããŠæé©åã§ããŸãã
çµè«
JavaScriptã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã¯ãWebã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãå¿çæ§ãã¹ã±ãŒã©ããªãã£ãå€§å¹ ã«åäžãããããšãã§ãã匷åãªãã¯ããã¯ã§ããèšç®éçŽçãªã¿ã¹ã¯ãã¯ãŒã«ãŒã¹ã¬ããã«ãªãããŒãããããšã§ãUIã®ããªãŒãºãé²ããããã¹ã ãŒãºã§å¿«é©ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸããããã¯ãã°ããŒãã«ãªãŠãŒã¶ãŒãšãã®å€æ§ãªãããã¯ãŒã¯æ¡ä»¶ã«ãšã£ãŠç¹ã«éèŠã§ããã¯ãŒã«ãŒã«ãããESã¢ãžã¥ãŒã«ãµããŒãã®ç»å Žã«ãããã¯ãŒã«ãŒã¹ã¬ããã®å®è£ ãšç®¡çã¯ãããŸã§ä»¥äžã«ç°¡åã«ãªããŸããã
ãã®ã¬ã€ãã§èª¬æããæŠå¿µãçè§£ãããã¹ããã©ã¯ãã£ã¹ãé©çšããããšã§ãã¢ãžã¥ãŒã«ã¯ãŒã«ãŒã€ã³ããŒãã®åãæŽ»çšããŠãäžçäžã®ãŠãŒã¶ãŒãåã°ãã髿§èœãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã察象ãªãŒãã£ãšã³ã¹ã®ç¹å®ã®ããŒãºãèæ ®ããã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£ãããã©ãŒãã³ã¹ãæåçãªé æ ®ã®ããã«ã¢ããªã±ãŒã·ã§ã³ãæé©åããããšãå¿ããªãã§ãã ããã
ãã®åŒ·åãªãã¯ããã¯ãåãå ¥ããããšã§ãWebã¢ããªã±ãŒã·ã§ã³ã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåµåºãããããžã§ã¯ãã®ããã©ãŒãã³ã¹ãã°ããŒãã«ã«æ°ããªã¬ãã«ãžãšåŒãäžããããšãã§ããã§ãããã