Web Locks APIã®å æ¬çãªã¬ã€ããWebã¢ããªã±ãŒã·ã§ã³ã«ããããªãœãŒã¹åæãšåæã¢ã¯ã»ã¹ç®¡çã®ããã®äœ¿çšæ³ãå©ç¹ãå¶éãå®çšäŸã解説ããŸãã
Web Locks API: ãªãœãŒã¹åæãšåæã¢ã¯ã»ã¹å¶åŸ¡
çŸä»£ã®Webéçºã®äžçã§ã¯ãå ç¢ã§å¿çæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«ãå ±æãªãœãŒã¹ã®ç®¡çãšåæã¢ã¯ã»ã¹ã®åŠçãé »ç¹ã«å¿ èŠãšãªããŸããã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®éšåããè€æ°ã®ãã©ãŠã¶ã¿ãããŠã£ã³ããŠãåæã«åãããŒã¿ã«ã¢ã¯ã»ã¹ããŠå€æŽããããšãããšãç«¶åç¶æ ãããŒã¿ã®ç Žæãçºçããå¯èœæ§ããããŸããWeb Locks APIã¯ããããã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãåæããããã®ã¡ã«ããºã ãæäŸããããŒã¿ã®æŽåæ§ãä¿èšŒããäºæããªãåäœãé²ããŸãã
ãªãœãŒã¹åæã®å¿ èŠæ§ãçè§£ãã
ãŠãŒã¶ãŒãWebã¢ããªã±ãŒã·ã§ã³ã§ããã¥ã¡ã³ããç·šéããŠããã·ããªãªãèããŠã¿ãŸããããåãããã¥ã¡ã³ããè€æ°ã®ãã©ãŠã¶ã¿ãã§éãããŠãããããããŸããããã¢ããªã±ãŒã·ã§ã³ãããã¯ã°ã©ãŠã³ãã§å®æçã«ããã¥ã¡ã³ããä¿åããããã»ã¹ãæã£ãŠãããããããŸãããé©åãªåæããªããã°ãããã¿ãã§è¡ããã倿Žãå¥ã®ã¿ãã§è¡ããã倿Žã«ãã£ãŠäžæžããããããŒã¿ã®æå€±ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªããå¯èœæ§ããããŸããåæ§ã«ãeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãè€æ°ã®ãŠãŒã¶ãŒãåšåº«æåŸã®ã¢ã€ãã ãåæã«è³Œå ¥ããããšããããšããããŸããéå°è²©å£²ãé²ãã¡ã«ããºã ããªããã°ã fulfillment ã§ããªã泚æãè¡ããã顧客ã®äžæºã«ã€ãªããå¯èœæ§ããããŸãã
ãµãŒããŒãµã€ãã®ããã¯ã¡ã«ããºã ã®ã¿ã«é Œããªã©ãåæå®è¡æ§ã管çããããã®åŸæ¥ã®ã¢ãããŒãã¯ãããªãã®ã¬ã€ãã³ã·ãšè€éããåŒãèµ·ããå¯èœæ§ããããŸããWeb Locks APIã¯ãéçºè ããã©ãŠã¶å ã§çŽæ¥ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã調æŽã§ããã¯ã©ã€ã¢ã³ããµã€ãã®ãœãªã¥ãŒã·ã§ã³ãæäŸããããã©ãŒãã³ã¹ãåäžããããµãŒããŒãžã®è² è·ã軜æžããŸãã
Web Locks APIã®ç޹ä»
Web Locks APIã¯ãWebã¢ããªã±ãŒã·ã§ã³å ã®ååä»ããªãœãŒã¹ã«å¯ŸããŠããã¯ãååŸããã³è§£æŸã§ããJavaScript APIã§ãããããã®ããã¯ã¯æä»çã§ãããã€ãŸããç¹å®ã®æéã«ç¹å®ã®ãªãœãŒã¹ã«å¯Ÿããããã¯ãä¿æã§ããã³ãŒãã¯1ã€ã ãã§ãããã®æä»æ§ã«ãããå ±æããŒã¿ã«ã¢ã¯ã»ã¹ããŠå€æŽããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®ã³ãŒãããå¶åŸ¡ãããäºæž¬å¯èœãªæ¹æ³ã§å®è¡ãããããšãä¿èšŒãããŸãã
ãã®APIã¯éåæã«èšèšãããŠãããPromiseã䜿çšããŠããã¯ãååŸãŸãã¯è§£æŸããããšãã«éç¥ããŸãããã®ãã³ããããã³ã°ãªæ§è³ªã«ãããããã¯ãåŸ ã£ãŠããéã«UIãããªãŒãºããã®ãé²ããå¿çæ§ã®é«ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãä¿èšŒããŸãã
äž»èŠãªæŠå¿µãšçšèª
- ããã¯å: ããã¯ã«ãã£ãŠä¿è·ãããŠãããªãœãŒã¹ãèå¥ããæååããã®ååã¯ãåããªãœãŒã¹äžã®ããã¯ãååŸããã³è§£æŸããããã«äœ¿çšãããŸããããã¯åã¯å€§æåãšå°æåãåºå¥ããŸãã
- ããã¯ã¢ãŒã: èŠæ±ãããããã¯ã®çš®é¡ãæå®ããŸããAPIã¯2ã€ã®ã¢ãŒãããµããŒãããŠããŸã:
- `exclusive` (ããã©ã«ã): äžåºŠã«èš±å¯ãããããã¯ã®ä¿æè ã¯1人ã®ã¿ã§ãã
- `shared`: åããªãœãŒã¹ã«å¯ŸããŠæä»ããã¯ãæã€ä»ã®ä¿æè ãããªãéããè€æ°ã®ä¿æè ãåæã«ããã¯ãæã€ããšãèš±å¯ããŸãã
- ããã¯èŠæ±: ããã¯ã®ååŸã詊ã¿ãéåææäœãããã¯ãæ£åžžã«ååŸããããšãã«è§£æ±ºïŒresolveïŒãããããããã¯ãååŸã§ããªãå ŽåïŒäŸ: å¥ã®ã³ãŒããæ¢ã«æä»ããã¯ãä¿æããŠããããïŒã«æåŠïŒrejectïŒãããŸãã
- ããã¯è§£æŸ: ããã¯ãè§£æŸããä»ã®ã³ãŒããååŸã§ããããã«ããæäœã
Web Locks APIã®äœ¿çš: å®çšçãªäŸ
Webã¢ããªã±ãŒã·ã§ã³ã§ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãåæããããã«Web Locks APIã䜿çšããæ¹æ³ã«ã€ããŠãããã€ãã®å®çšçãªäŸãèŠãŠãããŸãããã
äŸ1: ããã¥ã¡ã³ãã®åæç·šéãé²ã
è€æ°ã®ãŠãŒã¶ãŒãåæã«åãããã¥ã¡ã³ããç·šéã§ããå ±åããã¥ã¡ã³ãç·šéã¢ããªã±ãŒã·ã§ã³ãæ³åããŠã¿ãŠãã ãããç«¶åãé²ãããã«ãWeb Locks APIã䜿çšããŠãäžåºŠã«1人ã®ãŠãŒã¶ãŒã ããããã¥ã¡ã³ãã倿Žã§ããããã«ããããšãã§ããŸãã
async function saveDocument(documentId, content) {
try {
await navigator.locks.request(documentId, async () => {
// ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³: ããã¥ã¡ã³ãã®å
容ããµãŒããŒã«ä¿å
console.log(`ããã¥ã¡ã³ã ${documentId} ã®ããã¯ãååŸããŸãããä¿åäž...`);
await saveToServer(documentId, content);
console.log(`ããã¥ã¡ã³ã ${documentId} ãæ£åžžã«ä¿åãããŸããã`);
});
} catch (error) {
console.error(`ããã¥ã¡ã³ã ${documentId} ã®ä¿åã«å€±æããŸãã:`, error);
}
}
async function saveToServer(documentId, content) {
// ãµãŒããŒãžã®ä¿åãã·ãã¥ã¬ãŒãïŒå®éã®APIåŒã³åºãã«çœ®ãæããŠãã ããïŒ
return new Promise(resolve => setTimeout(resolve, 1000));
}
ãã®äŸã§ã¯ã`saveDocument`颿°ã¯ããã¥ã¡ã³ãã®IDãããã¯åãšããŠäœ¿çšããŠãããã¥ã¡ã³ãã®ããã¯ãååŸããããšããŸãã`navigator.locks.request`ã¡ãœããã¯ãããã¯åãšã³ãŒã«ããã¯é¢æ°ã®2ã€ã®åŒæ°ãåããŸããã³ãŒã«ããã¯é¢æ°ã¯ãããã¯ãæ£åžžã«ååŸãããåŸã«ã®ã¿å®è¡ãããŸããã³ãŒã«ããã¯å ã§ã¯ãããã¥ã¡ã³ãã®å 容ããµãŒããŒã«ä¿åãããŸããã³ãŒã«ããã¯é¢æ°ãå®äºãããšãããã¯ã¯èªåçã«è§£æŸãããŸãããã®é¢æ°ã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ãåã`documentId`ã§å®è¡ããããšãããšãããã¯ãè§£æŸããããŸã§åŸ æ©ããŸãããšã©ãŒãçºçããå Žåã¯ããã£ãããããŠãã°ã«èšé²ãããŸãã
äŸ2: Local Storageãžã®ã¢ã¯ã»ã¹å¶åŸ¡
Local Storageã¯ããã©ãŠã¶ã«ããŒã¿ãä¿åããããã®äžè¬çãªã¡ã«ããºã ã§ãããã ããã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®éšåãåæã«Local Storageã«ã¢ã¯ã»ã¹ããŠå€æŽããããšãããšãããŒã¿ã®ç Žæãçºçããå¯èœæ§ããããŸããWeb Locks APIã䜿çšããŠãLocal Storageãžã®ã¢ã¯ã»ã¹ãåæããããŒã¿ã®æŽåæ§ãä¿èšŒããããšãã§ããŸãã
async function updateLocalStorage(key, value) {
try {
await navigator.locks.request('localStorage', async () => {
// ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³: Local StorageãæŽæ°
console.log(`localStorageã®ããã¯ãååŸããŸãããã㌠${key} ãæŽæ°äž...`);
localStorage.setItem(key, value);
console.log(`ã㌠${key} ãlocalStorageã§æŽæ°ãããŸããã`);
});
} catch (error) {
console.error(`localStorageã®æŽæ°ã«å€±æããŸãã:`, error);
}
}
ãã®äŸã§ã¯ã`updateLocalStorage`颿°ã¯ 'localStorage' ãªãœãŒã¹ã®ããã¯ãååŸããããšããŸããã³ãŒã«ããã¯é¢æ°ã¯ãLocal Storageå ã®æå®ãããããŒãæŽæ°ããŸãããã®ããã¯ã«ãããäžåºŠã«1ã€ã®ã³ãŒãã®ã¿ãLocal Storageã«ã¢ã¯ã»ã¹ã§ããããã«ãªããç«¶åç¶æ ãé²ããŸãã
äŸ3: Web Workerã§ã®å ±æãªãœãŒã¹ã®ç®¡ç
Web Workerã䜿çšãããšãã¡ã€ã³ã¹ã¬ããããããã¯ããããšãªããããã¯ã°ã©ãŠã³ãã§JavaScriptã³ãŒããå®è¡ã§ããŸãããã ããWeb Workerãã¡ã€ã³ã¹ã¬ãããä»ã®Web Workerãšå ±æãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåã¯ãåæãäžå¯æ¬ ã§ããWeb Locks APIã䜿çšããŠããããã®ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã調æŽã§ããŸãã
ãŸããã¡ã€ã³ã¹ã¬ããã§:
async function mainThreadFunction() {
try {
await navigator.locks.request('sharedResource', async () => {
console.log('ã¡ã€ã³ã¹ã¬ãããsharedResourceã®ããã¯ãååŸããŸãã');
// å
±æãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããŠå€æŽ
await new Promise(resolve => setTimeout(resolve, 2000)); // åŠçãã·ãã¥ã¬ãŒã
console.log('ã¡ã€ã³ã¹ã¬ãããsharedResourceã®ããã¯ãè§£æŸããŸã');
});
} catch (error) {
console.error('ã¡ã€ã³ã¹ã¬ãããããã¯ã®ååŸã«å€±æããŸãã:', error);
}
}
mainThreadFunction();
次ã«ãWeb Workerã§:
self.addEventListener('message', async (event) => {
if (event.data.type === 'accessSharedResource') {
try {
await navigator.locks.request('sharedResource', async () => {
console.log('Web WorkerãsharedResourceã®ããã¯ãååŸããŸãã');
// å
±æãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããŠå€æŽ
await new Promise(resolve => setTimeout(resolve, 3000)); // åŠçãã·ãã¥ã¬ãŒã
console.log('Web WorkerãsharedResourceã®ããã¯ãè§£æŸããŸã');
self.postMessage({ type: 'sharedResourceAccessed', success: true });
});
} catch (error) {
console.error('Web Workerãããã¯ã®ååŸã«å€±æããŸãã:', error);
self.postMessage({ type: 'sharedResourceAccessed', success: false, error: error.message });
}
}
});
ãã®äŸã§ã¯ãã¡ã€ã³ã¹ã¬ãããšWeb Workerã®äž¡æ¹ã`sharedResource`ã®ããã¯ãååŸããããšããŸãã`navigator.locks`ãªããžã§ã¯ãã¯Web Workerã§ãå©çšå¯èœã§ãããã¡ã€ã³ã¹ã¬ãããšåãããã¯ã¡ã«ããºã ã«åå ã§ããŸããã¡ã€ã³ã¹ã¬ãããšã¯ãŒã«ãŒéã®éä¿¡ã«ã¯ã¡ãã»ãŒãžã䜿çšãããããã¯ååŸã®è©Šè¡ãããªã¬ãŒããŸãã
ããã¯ã¢ãŒã: æä» vs å ±æ
Web Locks APIã¯`exclusive`ïŒæä»ïŒãš`shared`ïŒå ±æïŒã®2ã€ã®ããã¯ã¢ãŒãããµããŒãããŠããŸããããã¯ã¢ãŒãã®éžæã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«äŸåããŸãã
æä»ããã¯
æä»ããã¯ã¯ããªãœãŒã¹ãžã®æä»çãªã¢ã¯ã»ã¹ãèš±å¯ããŸããç¹å®ã®æéã«ç¹å®ã®ãªãœãŒã¹ã«å¯ŸããŠæä»ããã¯ãä¿æã§ããã³ãŒãã¯1ã€ã ãã§ãããã®ã¢ãŒãã¯ãäžåºŠã«1ã€ã®ããã»ã¹ã®ã¿ããªãœãŒã¹ã倿Žã§ããã¹ãã·ããªãªã«é©ããŠããŸããäŸãã°ããã¡ã€ã«ãžã®ããŒã¿æžã蟌ã¿ãããŒã¿ããŒã¹ã¬ã³ãŒãã®æŽæ°ãUIã³ã³ããŒãã³ãã®ç¶æ 倿Žãªã©ã§ãã
äžèšã®ãã¹ãŠã®äŸã§ã¯ãããã©ã«ãã§æä»ããã¯ã䜿çšãããŠããŸããã`exclusive`ãããã©ã«ãã§ãããããã¢ãŒããæå®ããå¿ èŠã¯ãããŸããã
å ±æããã¯
å ±æããã¯ã¯ãä»ã®ã³ãŒããåããªãœãŒã¹ã«å¯ŸããŠæä»ããã¯ãä¿æããŠããªãéããè€æ°ã®ã³ãŒããåæã«ãªãœãŒã¹ã®ããã¯ãä¿æããããšãèš±å¯ããŸãããã®ã¢ãŒãã¯ãè€æ°ã®ããã»ã¹ããªãœãŒã¹ãåæã«èªã¿åãå¿ èŠãããããã©ã®ããã»ã¹ãããã倿Žããå¿ èŠããªãã·ããªãªã«é©ããŠããŸããäŸãã°ããã¡ã€ã«ããã®ããŒã¿èªã¿åããããŒã¿ããŒã¹ã®ã¯ãšãªãUIã³ã³ããŒãã³ãã®ã¬ã³ããªã³ã°ãªã©ã§ãã
`navigator.locks.request`ã¡ãœããã®`mode`ãªãã·ã§ã³ã§ãå ±æããã¯ãèŠæ±ããå¿ èŠããããŸãã
async function readData(resourceId) {
try {
await navigator.locks.request(resourceId, { mode: 'shared' }, async () => {
// ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³: ãªãœãŒã¹ããããŒã¿ãèªã¿åã
console.log(`ãªãœãŒã¹ ${resourceId} ã®å
±æããã¯ãååŸããŸãããèªã¿åãäž...`);
const data = await readFromResource(resourceId);
console.log(`ãªãœãŒã¹ ${resourceId} ããèªã¿åãããããŒã¿:`, data);
return data;
});
} catch (error) {
console.error(`ãªãœãŒã¹ ${resourceId} ããã®ããŒã¿èªã¿åãã«å€±æããŸãã:`, error);
}
}
async function readFromResource(resourceId) {
// ãªãœãŒã¹ããã®èªã¿åããã·ãã¥ã¬ãŒãïŒå®éã®APIåŒã³åºãã«çœ®ãæããŠãã ããïŒ
return new Promise(resolve => setTimeout(() => resolve({ value: 'Some data' }), 500));
}
ãã®äŸã§ã¯ã`readData`颿°ã¯æå®ããããªãœãŒã¹ã«å¯ŸããŠå ±æããã¯ãèŠæ±ããŸãããã®é¢æ°ã®è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãä»ã®ã³ãŒããåããªãœãŒã¹ã«å¯ŸããŠæä»ããã¯ãä¿æããŠããªãéããåæã«å®è¡ã§ããŸãã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«é¢ããèæ ®äºé
ã°ããŒãã«ãªèŠèŽè åãã«Webã¢ããªã±ãŒã·ã§ã³ãéçºããå Žåã倿§ãªç°å¢ã«ããããªãœãŒã¹åæãšåæã¢ã¯ã»ã¹å¶åŸ¡ã®åœ±é¿ãèæ ®ããããšãéèŠã§ãã
- ãããã¯ãŒã¯é å»¶: é«ããããã¯ãŒã¯é å»¶ã¯ãåæå®è¡æ§ã®åé¡ã®åœ±é¿ãæªåãããå¯èœæ§ããããŸãããµãŒããŒãµã€ãã®ããã¯ã¡ã«ããºã ã¯å€§å¹ ãªé å»¶ãåŒãèµ·ããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžãããå¯èœæ§ããããŸããWeb Locks APIã¯ããªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãåæããããã®ã¯ã©ã€ã¢ã³ããµã€ããœãªã¥ãŒã·ã§ã³ãæäŸããããšã§ãããã軜æžããã®ã«åœ¹ç«ã¡ãŸãã
- ã¿ã€ã ãŸãŒã³: ã€ãã³ãã®ã¹ã±ãžã¥ãŒãªã³ã°ããã©ã³ã¶ã¯ã·ã§ã³ã®åŠçãªã©ãæéã«ææãªããŒã¿ãæ±ãå Žåãç°ãªãã¿ã€ã ãŸãŒã³ãèæ ®ããããšãäžå¯æ¬ ã§ããé©åãªåæã¡ã«ããºã ã¯ãç«¶åãé²ããå°ççã«åæ£ããã·ã¹ãã éã§ããŒã¿ã®æŽåæ§ã確ä¿ããã®ã«åœ¹ç«ã¡ãŸãã
- æåçãªéã: æåã«ãã£ãŠãããŒã¿ã¢ã¯ã»ã¹ã倿Žã«é¢ããæåŸ ãç°ãªãå ŽåããããŸããäŸãã°ããªã¢ã«ã¿ã€ã ã®ã³ã©ãã¬ãŒã·ã§ã³ãåªå ããæåãããã°ãããéåæçãªã¢ãããŒãã奜ãæåããããŸãããããã®å€æ§ãªããŒãºã«å¯Ÿå¿ã§ããããã«ã¢ããªã±ãŒã·ã§ã³ãèšèšããããšãéèŠã§ãã
- èšèªãšããŒã«ãªãŒãŒã·ã§ã³: Web Locks APIèªäœã¯èšèªãããŒã«ãªãŒãŒã·ã§ã³ã«çŽæ¥é¢äžããŸãããããããåæããããªãœãŒã¹ã«ã¯ããŒã«ã©ã€ãºãããã³ã³ãã³ããå«ãŸããŠããå ŽåããããŸããåæã¡ã«ããºã ãããŒã«ãªãŒãŒã·ã§ã³æŠç¥ãšäºææ§ãããããšã確èªããŠãã ããã
Web Locks APIã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
- ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãçãä¿ã€: ããã¯ãä¿æãããæéãé·ãã»ã©ãç«¶åãé å»¶ã®å¯èœæ§ãé«ãŸããŸããå ±æããŒã¿ã«ã¢ã¯ã»ã¹ããŠå€æŽããã³ãŒãã®ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã¯ãã§ããã ãçãããŠãã ããã
- ãããããã¯ãåé¿ãã: ãããããã¯ã¯ã2ã€ä»¥äžã®ã³ãŒãããäºãã«ããã¯ãè§£æŸããã®ãç¡æéã«åŸ æ©ãããããã¯ããããšãã«çºçããŸãããããããã¯ãåé¿ããã«ã¯ãããã¯ãåžžã«äžè²«ããé åºã§ååŸããã³è§£æŸãããããã«ããŠãã ããã
- ãšã©ãŒãé©åã«åŠçãã: `navigator.locks.request`ã¡ãœããã¯ãããã¯ãååŸã§ããªãå Žåã«æåŠïŒrejectïŒãããããšããããŸãããããã®ãšã©ãŒãé©åã«åŠçãããŠãŒã¶ãŒã«æçãªãã£ãŒãããã¯ãæäŸããŠãã ããã
- æå³ã®ããããã¯åã䜿çšãã: ä¿è·ãããŠãããªãœãŒã¹ãæç¢ºã«èå¥ããããã¯åãéžæããŠãã ãããããã«ãããã³ãŒããçè§£ãããããä¿å®ãããããªããŸãã
- ããã¯ã¹ã³ãŒããèæ ®ãã: ããã¯ã®é©åãªã¹ã³ãŒããæ±ºå®ããŠãã ãããããã¯ã¯ã°ããŒãã«ïŒãã¹ãŠã®ãã©ãŠã¶ã¿ããšãŠã£ã³ããŠã«ãŸãããïŒã§ããã¹ãããç¹å®ã®ã¿ããŸãã¯ãŠã£ã³ããŠã«éå®ãããã¹ãããWeb Locks APIã§ã¯ãããã¯ã®ã¹ã³ãŒããå¶åŸ¡ã§ããŸãã
- 培åºçã«ãã¹ããã: ã³ãŒããåæå®è¡æ§ãæ£ããåŠçããç«¶åç¶æ ãé²ãããšã確èªããããã«ãã³ãŒãã培åºçã«ãã¹ãããŠãã ãããåæå®è¡æ§ãã¹ãããŒã«ã䜿çšããŠãè€æ°ã®ãŠãŒã¶ãŒãå ±æãªãœãŒã¹ã«åæã«ã¢ã¯ã»ã¹ããŠå€æŽããã·ãã¥ã¬ãŒã·ã§ã³ãè¡ããŸãã
Web Locks APIã®å¶éäºé
Web Locks APIã¯ãWebã¢ããªã±ãŒã·ã§ã³ã§ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãåæããããã®åŒ·åãªã¡ã«ããºã ãæäŸããŸããããã®å¶éãèªèããããšãéèŠã§ãã
- ãã©ãŠã¶ã®ãµããŒã: Web Locks APIã¯ãã¹ãŠã®ãã©ãŠã¶ã§ãµããŒããããŠããããã§ã¯ãããŸãããæ¬çªã³ãŒãã§APIã䜿çšããåã«ããã©ãŠã¶ã®äºææ§ã確èªããŠãã ãããå€ããã©ãŠã¶ããµããŒãããããã«ããªãã£ã«ãå©çšã§ããå ŽåããããŸãã
- æ°žç¶æ§: ããã¯ã¯ãã©ãŠã¶ã»ãã·ã§ã³ããŸããã§æ°žç¶çã§ã¯ãããŸããããã©ãŠã¶ãéããããããªãã¬ãã·ã¥ãããããããšããã¹ãŠã®ããã¯ãè§£æŸãããŸãã
- 忣ããã¯ãªã: Web Locks APIã¯ãåäžã®ãã©ãŠã¶ã€ã³ã¹ã¿ã³ã¹å ã§ã®åæã®ã¿ãæäŸããŸããè€æ°ã®ãã·ã³ããµãŒããŒéã§ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãåæããã¡ã«ããºã ã¯æäŸããŸããã忣ããã¯ã«ã¯ããµãŒããŒãµã€ãã®ããã¯ã¡ã«ããºã ã«é Œãå¿ èŠããããŸãã
- å調çãããã³ã°: Web Locks APIã¯å調çãããã³ã°ã«äŸåããŠããŸããå ±æãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããã³ãŒãããããã³ã°ãããã³ã«ãéµå®ããããšãä¿èšŒããã®ã¯éçºè 次第ã§ããAPIã¯ãã³ãŒããæåã«ããã¯ãååŸããã«ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããã®ãé²ãããšã¯ã§ããŸããã
Web Locks APIã®ä»£æ¿æ¡
Web Locks APIã¯ãªãœãŒã¹åæã®ããã®è²ŽéãªããŒã«ãæäŸããŸãããããããã«é·æãšçæãããããã€ãã®ä»£æ¿ã¢ãããŒããååšããŸãã
- ãµãŒããŒãµã€ããããã³ã°: ãµãŒããŒäžã§ãããã³ã°ã¡ã«ããºã ãå®è£ ããããšã¯ãåæå®è¡æ§ã管çããããã®åŸæ¥ã®ã¢ãããŒãã§ããããã«ã¯ãããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³ããªããã£ãã¹ãã£ãã¯ãããã³ã°ããŸãã¯ãã·ãã¹ãã£ãã¯ãããã³ã°ã䜿çšããŠå ±æãªãœãŒã¹ãä¿è·ããããšãå«ãŸããŸãããµãŒããŒãµã€ããããã³ã°ã¯ã忣ååæå®è¡æ§ã®ããã®ããå ç¢ã§ä¿¡é Œæ§ã®é«ããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããé å»¶ãåŒãèµ·ããããµãŒããŒãžã®è² è·ãå¢å€§ãããå¯èœæ§ããããŸãã
- ã¢ãããã¯æäœ: äžéšã®ããŒã¿æ§é ãAPIã¯ãäžé£ã®æäœãåäžã®äžå¯åãªåäœãšããŠå®è¡ãããããšãä¿èšŒããã¢ãããã¯æäœãæäŸããŸããããã¯ãæç€ºçãªããã¯ãå¿ èŠãšããã«åçŽãªããŒã¿æ§é ãžã®ã¢ã¯ã»ã¹ãåæããã®ã«åœ¹ç«ã¡ãŸãã
- ã¡ãã»ãŒãžããã·ã³ã°: å¯å€ç¶æ ãå ±æãã代ããã«ãã¡ãã»ãŒãžããã·ã³ã°ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãéšåéã§éä¿¡ããããšãæ€èšããŠãã ããããã®ã¢ãããŒãã¯ãå ±æããã¯ã®å¿ èŠæ§ããªããããšã§ãåæå®è¡æ§ç®¡çãç°¡çŽ åã§ããŸãã
- äžå€æ§ïŒImmutabilityïŒ: äžå€ã®ããŒã¿æ§é ã䜿çšããããšããåæå®è¡æ§ç®¡çãç°¡çŽ åã§ããŸããäžå€ããŒã¿ã¯äœæåŸã«å€æŽã§ããªããããç«¶åç¶æ ã®å¯èœæ§ãæé€ãããŸãã
çµè«
Web Locks APIã¯ãWebã¢ããªã±ãŒã·ã§ã³ã«ããããªãœãŒã¹ãžã®ã¢ã¯ã»ã¹åæãšåæã¢ã¯ã»ã¹ç®¡çã®ããã®è²ŽéãªããŒã«ã§ããã¯ã©ã€ã¢ã³ããµã€ãã®ãããã³ã°ã¡ã«ããºã ãæäŸããããšã§ãAPIã¯ããã©ãŒãã³ã¹ãåäžãããããŒã¿ã®ç Žæãé²ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸããããããAPIã®å¶éãçè§£ããé©åã«äœ¿çšããããšãéèŠã§ããWeb Locks APIãå®è£ ããåã«ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ããã©ãŠã¶ã®äºææ§ãããã³ãããããã¯ã®å¯èœæ§ãèæ ®ããŠãã ããã
ãã®ã¬ã€ãã§æŠèª¬ããããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãWeb Locks APIãæŽ»çšããŠãåæå®è¡æ§ãé©åã«åŠçãã倿§ãªã°ããŒãã«ç°å¢ã§ããŒã¿ã®æŽåæ§ã確ä¿ãããå ç¢ã§å¿çæ§ã®é«ãWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã