JavaScriptã§éåæã¹ããªãŒã ã®é£æºããã¹ã¿ãŒããŸããããAsync Iterator Helpersã䜿çšããŠãéåæããŒã¿ãããŒãå¹ççã«ç®¡çã倿ãåŠçããæ¹æ³ãåŠã³ãŸãã
JavaScriptéåæã€ãã¬ãŒã¿ãã«ããŒãªãŒã±ã¹ãã¬ãŒã¿ãŒïŒéåæã¹ããªãŒã ã®é£æº
éåæããã°ã©ãã³ã°ã¯ãç¹ã«I/Oæäœããããã¯ãŒã¯ãªã¯ãšã¹ãããªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ãæ±ãå Žåã«ãçŸä»£ã®JavaScriptéçºã«ãšã£ãŠäžå¯æ¬ ã§ããECMAScript 2018ã§ã®éåæã€ãã¬ãŒã¿ãšéåæãžã§ãã¬ãŒã¿ãŒã®å°å ¥ã«ãããéåæããŒã¿ã·ãŒã±ã³ã¹ãåŠçããããã®åŒ·åãªããŒã«ãæäŸãããŸããããã®åºç€ã®äžã«æ§ç¯ãããéåæã€ãã¬ãŒã¿ãã«ããŒã¯ããããã®ã¹ããªãŒã ã調æŽããã³å€æããããã®åçåãããã¢ãããŒããæäŸããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ããããã®ãã«ããŒã䜿çšããŠãè€éãªéåæããŒã¿ãããŒã广çã«ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ããæ¹æ³ã«ã€ããŠèª¬æããŸãã
éåæã€ãã¬ãŒã¿ãšéåæãžã§ãã¬ãŒã¿ãŒã®çè§£
éåæã€ãã¬ãŒã¿ãã«ããŒã«å ¥ãåã«ãåºã«ãªãæŠå¿µãçè§£ããããšãéèŠã§ãã
éåæã€ãã¬ãŒã¿
éåæã€ãã¬ãŒã¿ã¯ãã€ãã¬ãŒã¿ãããã³ã«ã«æºæ ãããªããžã§ã¯ãã§ãããnext()ã¡ãœããã¯Promiseãè¿ããŸããããã«ãããã·ãŒã±ã³ã¹ããéåæã§å€ãååŸã§ããŸããéåæã€ãã¬ãŒã¿ã䜿çšãããšãããŒã¿ããŒã¹ããããã¯ãŒã¯ã¹ããªãŒã ããã®ããŒã¿ãªã©ãéåæã§å°çããããŒã¿ãå埩åŠçã§ããŸããPromiseã®è§£æ±ºã«ãã£ãŠã·ã°ãã«ãéãããæºåãã§ãããšãã«æ¬¡ã®ã¢ã€ãã ã®ã¿ãé
ä¿¡ããã³ã³ãã€ãŒãã«ãã®ãããªãã®ãšèããŠãã ããã
äŸïŒ
ããŒãžåå²ãããAPIããããŒã¿ããã§ããããããšãæ€èšããŠãã ããã
async function* fetchPaginatedData(url) {
let nextPageUrl = url;
while (nextPageUrl) {
const response = await fetch(nextPageUrl);
const data = await response.json();
for (const item of data.items) {
yield item;
}
nextPageUrl = data.next_page_url;
}
}
// Usage
const dataStream = fetchPaginatedData('https://api.example.com/data?page=1');
for await (const item of dataStream) {
console.log(item);
}
ãã®äŸã§ã¯ãfetchPaginatedDataã¯éåæãžã§ãã¬ãŒã¿ãŒé¢æ°ã§ããããŒãžããšã«ããŒã¿ããã§ããããåã¢ã€ãã ãåå¥ã«çæããŸããfor await...ofã«ãŒãã¯éåæã€ãã¬ãŒã¿ã䜿çšããåã¢ã€ãã ãå©çšå¯èœã«ãªããšåŠçããŸãã
éåæãžã§ãã¬ãŒã¿ãŒ
éåæãžã§ãã¬ãŒã¿ãŒã¯ãasync function*æ§æã§å®£èšããã颿°ã§ããyieldããŒã¯ãŒãã䜿çšããŠãå€ã®ã·ãŒã±ã³ã¹ãéåæã§çæã§ããŸããåyieldã¹ããŒãã¡ã³ãã¯ãçæãããå€ãã€ãã¬ãŒã¿ã«ãã£ãŠæ¶è²»ããããŸã§ã颿°ã®å®è¡ãäžæåæ¢ããŸããããã¯ããããã¯ãŒã¯ãªã¯ãšã¹ããè€éãªèšç®ãªã©ãæéããããæäœãåŠçããäžã§éåžžã«éèŠã§ããéåæãžã§ãã¬ãŒã¿ãŒã¯ãéåæã€ãã¬ãŒã¿ãäœæããæãäžè¬çãªæ¹æ³ã§ãã
äŸïŒïŒäžèšããç¶ç¶ïŒ
fetchPaginatedData颿°ã¯éåæãžã§ãã¬ãŒã¿ãŒã§ããAPIããéåæã§ããŒã¿ããã§ããããåŠçããŠãåã
ã®ã¢ã€ãã ãçæããŸããawaitã䜿çšãããšãåããŒãžã®ããŒã¿ãåŠçãããåã«å®å
šã«ãã§ãããããããã«ãªããŸããéèŠãªãã€ã³ãã¯yieldããŒã¯ãŒãã§ãããããã«ãããã®é¢æ°ã¯éåæãžã§ãã¬ãŒã¿ãŒã«ãªããŸãã
éåæã€ãã¬ãŒã¿ãã«ããŒã®ç޹ä»
éåæã€ãã¬ãŒã¿ãã«ããŒã¯ãéåæã€ãã¬ãŒã¿ãæäœããããã®é¢æ°åã§å®£èšçãªæ¹æ³ãæäŸããäžé£ã®ã¡ãœããã§ããéåæããŒã¿ã¹ããªãŒã ããã£ã«ã¿ãªã³ã°ããããã³ã°ãåæžãããã³æ¶è²»ããããã®åŒ·åãªããŒã«ãæäŸããŸãããããã®ãã«ããŒã¯ãã§ãŒã³å¯èœã«ãªãããã«èšèšãããŠãããè€éãªããŒã¿ãã€ãã©ã€ã³ãç°¡åã«äœæã§ããŸãããããã¯ãmapãfilterãreduceãªã©ã®é
åã¡ãœããã«äŒŒãŠããŸãããéåæããŒã¿ã§åäœããŸãã
äž»ãªéåæã€ãã¬ãŒã¿ãã«ããŒïŒ
mapïŒã¹ããªãŒã å ã®åå€ã倿ããŸããfilterïŒç¹å®ã®æ¡ä»¶ãæºããå€ãéžæããŸããtakeïŒã¹ããªãŒã ããååŸããå€ã®æ°ãå¶éããŸããdropïŒæå®ãããæ°ã®å€ãã¹ãããããŸããtoArrayïŒãã¹ãŠã®å€ãé åã«åéããŸããforEachïŒåå€ã«å¯ŸããŠé¢æ°ãå®è¡ããŸãïŒå¯äœçšã®å ŽåïŒãreduceïŒã¹ããªãŒã ããåäžã®å€ã环ç©ããŸããsomeïŒå°ãªããšã1ã€ã®å€ãæ¡ä»¶ãæºãããŠãããã©ããã確èªããŸããeveryïŒãã¹ãŠã®å€ãæ¡ä»¶ãæºãããŠãããã©ããã確èªããŸããfindïŒæ¡ä»¶ãæºããæåã®å€ãè¿ããŸããflatMapïŒåå€ãéåæã€ãã¬ãŒã¿ã«ãããããçµæããã©ããåããŸãã
ãããã®ãã«ããŒã¯ããã¹ãŠã®JavaScriptç°å¢ã§ãã€ãã£ãã«å©çšã§ããããã§ã¯ãããŸããããã ããcore-jsã®ãããªããªãã£ã«ãŸãã¯ã©ã€ãã©ãªã䜿çšããããèªåã§å®è£
ããããšãã§ããŸãã
ãã«ããŒã䜿çšããéåæã¹ããªãŒã ã®ãªãŒã±ã¹ãã¬ãŒã·ã§ã³
éåæã€ãã¬ãŒã¿ãã«ããŒã®çã®åã¯ãè€éãªéåæããŒã¿ãããŒããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããèœåã«ãããŸãããããã®ãã«ããŒããã§ãŒã³æ¥ç¶ããããšã§ãèªã¿ãããä¿å®ããããé«åºŠãªããŒã¿åŠçãã€ãã©ã€ã³ãäœæã§ããŸãã
äŸïŒããŒã¿å€æãšãã£ã«ã¿ãªã³ã°
ããŒã¿ããŒã¹ãããŠãŒã¶ãŒããŒã¿ã®ã¹ããªãŒã ããããéã¢ã¯ãã£ããªãŠãŒã¶ãŒããã£ã«ã¿ãªã³ã°ãããã®ããŒã¿ãç°¡ç¥åããã圢åŒã«å€æãããšããŸãã
async function* fetchUsers() {
// Simulate fetching users from a database
const users = [
{ id: 1, name: 'Alice', isActive: true, country: 'USA' },
{ id: 2, name: 'Bob', isActive: false, country: 'Canada' },
{ id: 3, name: 'Charlie', isActive: true, country: 'UK' },
{ id: 4, name: 'David', isActive: true, country: 'Germany' }
];
for (const user of users) {
yield user;
}
}
async function processUsers() {
const userStream = fetchUsers();
const processedUsers = userStream
.filter(async user => user.isActive)
.map(async user => ({
id: user.id,
name: user.name,
location: user.country
}));
for await (const user of processedUsers) {
console.log(user);
}
}
processUsers();
ãã®äŸã§ã¯ãæåã«ããŒã¿ããŒã¹ãããŠãŒã¶ãŒããã§ããããŸãïŒããã§ã¯ã·ãã¥ã¬ãŒããããŠããŸãïŒã次ã«ãfilterã䜿çšããŠã¢ã¯ãã£ããªãŠãŒã¶ãŒã®ã¿ãéžæããmapã䜿çšããŠããŒã¿ãããåçŽãªåœ¢åŒã«å€æããŸããçµæã®ã¹ããªãŒã processedUsersã«ã¯ãã¢ã¯ãã£ããªãŠãŒã¶ãŒã®åŠçæžã¿ããŒã¿ã®ã¿ãå«ãŸããŸãã
äŸïŒããŒã¿ã®éèš
ãã©ã³ã¶ã¯ã·ã§ã³ããŒã¿ã®ã¹ããªãŒã ãããããã©ã³ã¶ã¯ã·ã§ã³ã®åèšéé¡ãèšç®ãããšããŸãã
async function* fetchTransactions() {
// Simulate fetching transactions
const transactions = [
{ id: 1, amount: 100, currency: 'USD' },
{ id: 2, amount: 200, currency: 'EUR' },
{ id: 3, amount: 50, currency: 'USD' },
{ id: 4, amount: 150, currency: 'GBP' }
];
for (const transaction of transactions) {
yield transaction;
}
}
async function calculateTotalAmount() {
const transactionStream = fetchTransactions();
const totalAmount = await transactionStream.reduce(async (acc, transaction) => {
// Simulate currency conversion to USD
const convertedAmount = await convertToUSD(transaction.amount, transaction.currency);
return acc + convertedAmount;
}, 0);
console.log('Total Amount (USD):', totalAmount);
}
async function convertToUSD(amount, currency) {
// Simulate currency conversion (replace with a real API call)
const exchangeRates = {
'USD': 1,
'EUR': 1.1,
'GBP': 1.3
};
return amount * exchangeRates[currency];
}
calculateTotalAmount();
ãã®äŸã§ã¯ãreduceã䜿çšããŠãã©ã³ã¶ã¯ã·ã§ã³ã®åèšéé¡ã环ç©ããŸããconvertToUSD颿°ã¯é貚æç®ãã·ãã¥ã¬ãŒãããŸãïŒéåžžãæ¬çªç°å¢ã§ã¯å®éã®é貚æç®APIã䜿çšããŸãïŒãããã¯ãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãéåæããŒã¿ã¹ããªãŒã ã§è€éãªéèšãå®è¡ããæ¹æ³ã瀺ããŠããŸãã
äŸïŒãšã©ãŒãšå詊è¡ã®åŠç
éåææäœãæ±ãå Žåããšã©ãŒãé©åã«åŠçããããšãéèŠã§ãããšã©ãŒåŠçãã¯ããã¯ãšçµã¿åãããŠéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšãããšãå ç¢ãªããŒã¿ãã€ãã©ã€ã³ãæ§ç¯ã§ããŸãã
async function* fetchDataWithRetries(url, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
yield data;
return; // Success, exit the loop
} catch (error) {
console.error(`Attempt ${attempt} failed: ${error.message}`);
if (attempt === maxRetries) {
throw error; // Re-throw the error if all retries failed
}
await new Promise(resolve => setTimeout(resolve, 1000)); // Wait before retrying
}
}
}
async function processData() {
const dataStream = fetchDataWithRetries('https://api.example.com/unreliable_data');
try {
for await (const data of dataStream) {
console.log('Data:', data);
}
} catch (error) {
console.error('Failed to fetch data after multiple retries:', error.message);
}
}
processData();
ãã®äŸã§ã¯ãfetchDataWithRetriesã¯URLããããŒã¿ããã§ããããããšãããšã©ãŒãçºçããå Žåãæå€§maxRetriesåãŸã§å詊è¡ããŸããããã¯ãéåæããŒã¿ã¹ããªãŒã ã«å埩åãçµã¿èŸŒãæ¹æ³ã瀺ããŠããŸãããã®åŸãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠããã®ããŒã¿ã¹ããªãŒã ãããã«åŠçã§ããŸãã
å®éçãªèæ ®äºé ãšãã¹ããã©ã¯ãã£ã¹
éåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããå Žåã¯ã次ã®èæ ®äºé ã«æ³šæããŠãã ããã
- ãšã©ãŒåŠçïŒã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããªãããã«ãåžžã«ãšã©ãŒãé©åã«åŠçããŠãã ããã
try...catchãããã¯ã䜿çšãããšã©ãŒåŠçã©ã€ãã©ãªãŸãã¯ããã«ãŠã§ã¢ã®äœ¿çšãæ€èšããŠãã ããã - ãªãœãŒã¹ç®¡çïŒã¡ã¢ãªãªãŒã¯ãé²ãããã«ãããŒã¿ããŒã¹ãŸãã¯ãããã¯ãŒã¯ã¹ããªãŒã ãžã®æ¥ç¶ãéãããªã©ããªãœãŒã¹ãé©åã«ç®¡çããŠããããšã確èªããŠãã ããã
- äžŠè¡æ§ïŒã³ãŒãã®äžŠè¡æ§ã®åœ±é¿ã«æ³šæããŠãã ãããã¡ã€ã³ã¹ã¬ããããããã¯ãããéåææäœã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®å¿çæ§ãç¶æããŠãã ããã
- ããã¯ãã¬ãã·ã£ãŒïŒããŒã¿ã®ãããã¥ãŒãµãŒãã³ã³ã·ã¥ãŒããŒãåŠçã§ãããããéãããŒã¿ãçæããå¯èœæ§ãããããã¯ãã¬ãã·ã£ãŒã®å¯èœæ§ãæ€èšããŠãã ããããããã¡ãªã³ã°ãã¹ããããªã³ã°ãªã©ãããã¯ãã¬ãã·ã£ãŒãåŠçããããã®æŠç¥ãå®è£ ããŸãã
- ããªãã£ã«ïŒéåæã€ãã¬ãŒã¿ãã«ããŒã¯ãŸã æ®éçã«ãµããŒããããŠããªãããã
core-jsã®ãããªããªãã£ã«ãŸãã¯ã©ã€ãã©ãªã䜿çšããŠãããŸããŸãªç°å¢ã§ã®äºææ§ã確ä¿ããŠãã ããã - ããã©ãŒãã³ã¹ïŒéåæã€ãã¬ãŒã¿ãã«ããŒã¯éåæããŒã¿ãåŠçããããã®äŸ¿å©ã§èªã¿ãããæ¹æ³ãæäŸããŸãããããã©ãŒãã³ã¹ã«æ³šæããŠãã ãããéåžžã«å€§ããªããŒã¿ã»ãããŸãã¯ããã©ãŒãã³ã¹ãéèŠãªã¢ããªã±ãŒã·ã§ã³ã®å Žåã¯ãã¹ããªãŒã ãçŽæ¥äœ¿çšãããªã©ã代æ¿ã¢ãããŒããæ€èšããŠãã ããã
- å¯èªæ§ïŒéåæã€ãã¬ãŒã¿ãã«ããŒã®è€éãªãã§ãŒã³ã¯åŒ·åã§ãããå¯èªæ§ãåªå ããŠãã ãããè€éãªæäœãããå°ãããé©åã«ååãä»ãããã颿°ã«åå²ããããã³ã¡ã³ãã䜿çšããŠåã¹ãããã®ç®çã説æããŸãã
ãŠãŒã¹ã±ãŒã¹ãšå®éã®äŸ
éåæã€ãã¬ãŒã¿ãã«ããŒã¯ãå¹ åºãã·ããªãªã«é©çšã§ããŸãã
- ãªã¢ã«ã¿ã€ã ããŒã¿åŠçïŒãœãŒã·ã£ã«ã¡ãã£ã¢ãã£ãŒããéèåžå Žãªã©ã®ãœãŒã¹ããã®ãªã¢ã«ã¿ã€ã ããŒã¿ã¹ããªãŒã ã®åŠçãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãããŒã¿ããªã¢ã«ã¿ã€ã ã§ãã£ã«ã¿ãªã³ã°ã倿ãéèšã§ããŸãã
- ããŒã¿ãã€ãã©ã€ã³ïŒETLïŒæœåºã倿ãããŒãïŒããã»ã¹çšã®ããŒã¿ãã€ãã©ã€ã³ã®æ§ç¯ãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãããŸããŸãªãœãŒã¹ããããŒã¿ãæœåºããäžè²«ãã圢åŒã«å€æããŠãããŒã¿ãŠã§ã¢ããŠã¹ã«ããŒãã§ããŸãã
- ãã€ã¯ããµãŒãã¹éä¿¡ïŒãã€ã¯ããµãŒãã¹éã®éåæéä¿¡ã®åŠçãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãã¡ãã»ãŒãžãã¥ãŒãŸãã¯ã€ãã³ãã¹ããªãŒã ããã®ã¡ãã»ãŒãžãåŠçã§ããŸãã
- IoTã¢ããªã±ãŒã·ã§ã³ïŒIoTããã€ã¹ããã®ããŒã¿ã®åŠçãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãã»ã³ãµãŒããŒã¿ããã£ã«ã¿ãªã³ã°ãéèšãåæã§ããŸãã
- ã²ãŒã éçºïŒéåæã²ãŒã ã€ãã³ããšããŒã¿æŽæ°ã®åŠçãéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãã²ãŒã ã®ç¶æ ãšãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã管çã§ããŸãã
äŸïŒæ ªäŸ¡ãã£ãã«ãŒããŒã¿ã®åŠç
éèAPIããæ ªäŸ¡ãã£ãã«ãŒããŒã¿ã®ã¹ããªãŒã ãåä¿¡ãããšããŸããéåæã€ãã¬ãŒã¿ãã«ããŒã䜿çšããŠãç¹å®ã®æ ªåŒããã£ã«ã¿ãªã³ã°ããç§»åå¹³åãèšç®ããç¹å®ã®æ¡ä»¶ã«åºã¥ããŠã¢ã©ãŒããããªã¬ãŒã§ããŸãã
async function* fetchStockTickerData() {
// Simulate fetching stock ticker data
const stockData = [
{ symbol: 'AAPL', price: 150.25 },
{ symbol: 'GOOG', price: 2700.50 },
{ symbol: 'MSFT', price: 300.75 },
{ symbol: 'AAPL', price: 150.50 },
{ symbol: 'GOOG', price: 2701.00 },
{ symbol: 'MSFT', price: 301.00 }
];
for (const data of stockData) {
yield data;
}
}
async function processStockData() {
const stockStream = fetchStockTickerData();
const appleData = stockStream
.filter(async data => data.symbol === 'AAPL')
.map(async data => ({
symbol: data.symbol,
price: data.price,
timestamp: new Date()
}));
for await (const data of appleData) {
console.log('Apple Data:', data);
}
}
processStockData();
çµè«
éåæã€ãã¬ãŒã¿ãã«ããŒã¯ãJavaScriptã§éåæããŒã¿ã¹ããªãŒã ããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããããã®åŒ·åã§ãšã¬ã¬ã³ããªæ¹æ³ãæäŸããŸãããããã®ãã«ããŒã掻çšããããšã§ãèªã¿ãããä¿å®ããããè€éãªããŒã¿åŠçãã€ãã©ã€ã³ãäœæã§ããŸããéåæããã°ã©ãã³ã°ã¯ãçŸä»£ã®JavaScriptéçºã«ãããŠãŸããŸãéèŠã«ãªã£ãŠãããéåæã€ãã¬ãŒã¿ãã«ããŒã¯ãéåæããŒã¿ãããŒã广çã«ç®¡çããããã®è²ŽéãªããŒã«ã§ããåºã«ãªãæŠå¿µãçè§£ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãéåæã€ãã¬ãŒã¿ãã«ããŒã®å¯èœæ§ãæå€§éã«åŒãåºããå ç¢ã§ã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
JavaScriptãšã³ã·ã¹ãã ãé²åããã«ã€ããŠãéåæã€ãã¬ãŒã¿ãã«ããŒã®ãããªãæ©èœåŒ·åãšå¹ åºãæ¡çšãæåŸ ããããã¹ãŠã®JavaScriptéçºè ã®ããŒã«ãããã«äžå¯æ¬ ãªéšåã«ãªããŸãããããã®ããŒã«ãšãã¯ããã¯ãæ¡çšããŠã仿¥ã®éåæäžçã§ããå¹ççã§ãå¿çæ§ãé«ããä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠãã ããã
å®çšçãªæŽå¯ïŒ
- éåæã³ãŒãã§éåæã€ãã¬ãŒã¿ãšéåæãžã§ãã¬ãŒã¿ãŒã®äœ¿çšãéå§ããŸãã
- éåæã€ãã¬ãŒã¿ãã«ããŒã詊ããŠãããŒã¿ã¹ããªãŒã ã倿ããã³åŠçããŸãã
- ããå¹
åºãäºææ§ã®ããã«ã
core-jsã®ãããªããªãã£ã«ãŸãã¯ã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã - éåææäœãæ±ãå Žåã¯ããšã©ãŒåŠçãšãªãœãŒã¹ç®¡çã«éç¹ã眮ããŠãã ããã
- è€éãªæäœãããå°ããããã管çããããã¹ãããã«åå²ããŸãã
éåæã€ãã¬ãŒã¿ãã«ããŒãç¿åŸããããšã§ãéåæããŒã¿ã¹ããªãŒã ãåŠçããããæŽç·Žãããã¹ã±ãŒã©ãã«ãªJavaScriptã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããèœåãå€§å¹ ã«åäžãããããšãã§ããŸããéåæããŒã¿ãã€ãã©ã€ã³ãèšèšããéã¯ãå¯èªæ§ãä¿å®æ§ãããã³ããã©ãŒãã³ã¹ãåªå ããããšãå¿ããªãã§ãã ããã