Persistent Storage APIã®å æ¬çãªã¬ã€ããã¹ãã¬ãŒãžã¯ã©ãŒã¿ç®¡çã䜿çšç¶æ³ã®è¿œè·¡ãæ°žç¶åãªã¯ãšã¹ããææ°ã®Webéçºã®ãã¹ããã©ã¯ãã£ã¹ã«çŠç¹ãåœãŠãŠããŸãã
Persistent Storage API: Webã¢ããªã±ãŒã·ã§ã³ã®ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®çè§£ãšç®¡ç
Persistent Storage APIã¯ãWebéçºè
ããŠãŒã¶ãŒã®ãã©ãŠã¶å
ã§ã¹ãã¬ãŒãžã¯ã©ãŒã¿ãèŠæ±ããã³ç®¡çããããã®æšæºåãããæ¹æ³ãæäŸããŸãããµã€ãºãå¶éãããèªåçã«åé€ãããããšãå€ãåŸæ¥ã®ã¹ãã¬ãŒãžã¡ã«ããºã ïŒCookieãlocalStorage
ãªã©ïŒãšã¯ç°ãªããPersistent Storage APIã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããå€ãã®ã¹ãã¬ãŒãžå®¹éãèŠæ±ã§ããéèŠãªããšã«ãã¹ãã¬ãŒãžãæ°žç¶åããããã«èŠæ±ã§ããŸããã€ãŸãããã©ãŠã¶ã¯ã¹ãã¬ãŒãžã«è² è·ãããã£ãŠããå Žåã§ããèªåçã«ã¹ãã¬ãŒãžãã¯ãªã¢ããŸããã
Persistent StorageãéèŠãªçç±
仿¥ã®Webã§ã¯ãããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒããŸããŸãäžè¬çã«ãªãããŠãŒã¶ãŒã¯ãªãããªãªãã©ã€ã³äœéšãæåŸ ããŠãããããä¿¡é Œæ§ã®é«ãã¹ãã¬ãŒãžãäžå¯æ¬ ã§ããæ¬¡ã®ã·ããªãªãæ€èšããŠãã ããã
- ããã¥ã¡ã³ããžã®ãªãã©ã€ã³ã¢ã¯ã»ã¹: ããã¥ã¡ã³ãç·šéã¢ããªã±ãŒã·ã§ã³ïŒGoogleããã¥ã¡ã³ããªã©ïŒã¯ãã€ã³ã¿ãŒãããã«æ¥ç¶ããŠããªããŠããŠãŒã¶ãŒãäœæ¥ãç¶è¡ã§ããããã«ãããã¥ã¡ã³ããããŒã«ã«ã«ä¿åããå¿ èŠããããŸãã
- ã¡ãã£ã¢åç: SpotifyãNetflixãªã©ã®ã¹ããªãŒãã³ã°ãµãŒãã¹ã§ã¯ããŠãŒã¶ãŒããªãã©ã€ã³åçã®ããã«ã³ã³ãã³ããããŠã³ããŒãã§ããããªãã®ã¹ãã¬ãŒãžå®¹éãå¿ èŠã§ãã
- ã²ãŒã ããŒã¿: ãªã³ã©ã€ã³ã²ãŒã ã§ã¯ããŠãŒã¶ãŒã®é²è¡ç¶æ³ãã¬ãã«ãã¢ã»ãããããŒã«ã«ã«ä¿åããŠãã¹ã ãŒãºã§å¿çæ§ã®é«ããšã¯ã¹ããªãšã³ã¹ãæäŸããããšããããããŸãã
- å€§èŠæš¡ãªããŒã¿ã»ããã®ãã£ãã·ã¥: ãããã³ã°ã¢ããªã±ãŒã·ã§ã³ïŒGoogleããããOpenStreetMapããŒã¹ã®ã¢ããªãªã©ïŒãªã©ãå€§èŠæš¡ãªããŒã¿ã»ãããæ±ãã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã¿ãããŒã«ã«ã«ãã£ãã·ã¥ããããšã§ããããã¯ãŒã¯ãªã¯ãšã¹ããæžãããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
- ããŒã«ã«ããŒã¿åŠç: 倧éã®ããŒã¿åŠçïŒç»åç·šéããããªç·šéãªã©ïŒãå®è¡ããWebã¢ããªã±ãŒã·ã§ã³ã¯ãäžéçµæãããŒã«ã«ã«ä¿åããŠãç¹°ãè¿ãã®èšç®ãåé¿ã§ããŸãã
æ°žç¶çãªã¹ãã¬ãŒãžããªãå Žåããã©ãŠã¶ã¯ããã€ã¹ã®ç©ºã容éãå°ãªããªããšããããã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããã¹ãã¬ãŒãžãèªåçã«ã¯ãªã¢ãããã©ã¹ãã¬ãŒã·ã§ã³ã®ããŸããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæœåšçãªããŒã¿æå€±ã«ã€ãªããå¯èœæ§ããããŸããPersistent Storage APIã¯ãã¢ããªã±ãŒã·ã§ã³ãæ°žç¶çãªã¹ãã¬ãŒãžãèŠæ±ããã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ã远跡ããããã®ã¡ã«ããºã ãæäŸããããšã§ããã®åé¡ã«å¯ŸåŠããŸãã
ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®çè§£
ãã¹ãŠã®ãã©ãŠã¶ã¯ãåãªãªãžã³ïŒãã¡ã€ã³ïŒã«äžå®éã®ã¹ãã¬ãŒãžã¹ããŒã¹ãå²ãåœãŠãŸãããã®ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã¯åºå®ã§ã¯ãªããããã€ã¹ã®ç·ã¹ãã¬ãŒãžå®¹éãå©çšå¯èœãªç©ºã容éããŠãŒã¶ãŒã®ãã©ãŠã¶èšå®ãªã©ã®èŠå ã«ãã£ãŠç°ãªããŸããStorage APIã¯ãå©çšå¯èœãªã¹ãã¬ãŒãžã¯ã©ãŒã¿ãšãã§ã«äœ¿çšãããŠããã¹ãã¬ãŒãžéãã¯ãšãªããæ¹æ³ãæäŸããŸãã
ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®ã¯ãšãª
navigator.storage
ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãã¹ãã¬ãŒãžé¢é£ã®æ
å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸããestimate()
ã¡ãœããã䜿çšãããšãå©çšå¯èœãªã¹ãã¬ãŒãžã¯ã©ãŒã¿ãšã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããã¹ãã¬ãŒãžéã®èŠç©ãããååŸã§ããŸããè¿ããããªããžã§ã¯ãã«ã¯ãusage
ããããã£ãšquota
ããããã£ãå«ãŸããŠãããã©ã¡ãããã€ãåäœã§æž¬å®ãããŸãã
async function getStorageEstimate() {
if (navigator.storage && navigator.storage.estimate) {
const estimate = await navigator.storage.estimate();
console.log(`Usage: ${estimate.usage}`);
console.log(`Quota: ${estimate.quota}`);
console.log(`Percentage used: ${(estimate.usage / estimate.quota * 100).toFixed(2)}%`);
} else {
console.warn("Storage estimate API not supported.");
}
}
getStorageEstimate();
äŸ: estimate.usage
ã10485760
ïŒ10MBïŒãè¿ããestimate.quota
ã1073741824
ïŒ1GBïŒãè¿ããšããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã1GBã®ã¯ã©ãŒã¿ã®ãã¡10MBã䜿çšããŠãããå©çšå¯èœãªã¹ãã¬ãŒãžã®çŽ1ïŒ
ã§ããããšã瀺ããŠããŸãã
ã¯ã©ãŒã¿å€ã®è§£é
quota
å€ã¯ãã¢ããªã±ãŒã·ã§ã³ã*䜿çšã§ãã*ã¹ãã¬ãŒãžã®æå€§éã衚ããŸãããã ãããã®ã¯ã©ãŒã¿ãä¿èšŒãããŠããããã§ã¯ãªãããšãçè§£ããããšãéèŠã§ããããã€ã¹ã®ã¹ãã¬ãŒãžå®¹éãäžè¶³ããŠããå ŽåããŸãã¯ãŠãŒã¶ãŒããã©ãŠã¶ã®ããŒã¿ãã¯ãªã¢ããå Žåããã©ãŠã¶ã¯ã¯ã©ãŒã¿ãæžããå¯èœæ§ããããŸãããããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã¯ãå©çšå¯èœãªã¹ãã¬ãŒãžãå ±åãããã¯ã©ãŒã¿ãããå°ãªãç¶æ³ã«å¯ŸåŠã§ããããã«èšèšããå¿
èŠããããŸãã
ãã¹ããã©ã¯ãã£ã¹: ã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ãç£èŠããã¢ããªã±ãŒã·ã§ã³ãã¹ãã¬ãŒãžå¶éã«è¿ã¥ããŠããå Žåã¯ããŠãŒã¶ãŒã«ç©æ¥µçã«éç¥ããã¡ã«ããºã ãå®è£ ããŸãããŠãŒã¶ãŒãäžèŠãªããŒã¿ãã¯ãªã¢ããããã¹ãã¬ãŒãžãã©ã³ãã¢ããã°ã¬ãŒããããããããã®ãªãã·ã§ã³ãæäŸããŸãïŒè©²åœããå ŽåïŒã
æ°žç¶çãªã¹ãã¬ãŒãžã®ãªã¯ãšã¹ã
ã¢ããªã±ãŒã·ã§ã³ã«ååãªã¹ãã¬ãŒãžã¯ã©ãŒã¿ãããå Žåã§ãããã©ãŠã¶ã¯ã¹ãã¬ãŒãžã«è² è·ãããã£ãŠããå Žåãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ãèªåçã«ã¯ãªã¢ããå¯èœæ§ããããŸãããããé²ãã«ã¯ãnavigator.storage.persist()
ã¡ãœããã䜿çšããŠæ°žç¶çãªã¹ãã¬ãŒãžãèŠæ±ã§ããŸãã
async function requestPersistentStorage() {
if (navigator.storage && navigator.storage.persist) {
const isPersistent = await navigator.storage.persist();
console.log(`Persistent storage granted: ${isPersistent}`);
if (isPersistent) {
console.log("Storage will not be cleared automatically.");
} else {
console.warn("Persistent storage not granted.");
// Provide guidance to the user on how to enable persistent storage in their browser.
}
} else {
console.warn("Persistent storage API not supported.");
}
}
requestPersistentStorage();
persist()
ã¡ãœããã¯ãæ°žç¶çãªã¹ãã¬ãŒãžã®èŠæ±ãèš±å¯ããããã©ããã瀺ãããŒã«å€ãè¿ããŸãããã©ãŠã¶ã¯ãæ°žç¶çãªã¹ãã¬ãŒãžãèš±å¯ããåã«ããŠãŒã¶ãŒã«èš±å¯ãæ±ããããã³ããã衚瀺ããå ŽåããããŸããæ£ç¢ºãªããã³ããã¯ããã©ãŠã¶ãšãŠãŒã¶ãŒã®èšå®ã«ãã£ãŠç°ãªããŸãã
ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ãšã¢ã¯ã»ã¹èš±å¯
æ°žç¶çãªã¹ãã¬ãŒãžãèš±å¯ãããšãããã©ãŠã¶ã®æ±ºå®ã¯ã次ã®ãããªããã€ãã®èŠå ã«äŸåããŸãã
- ãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ã: ãã©ãŠã¶ã¯ããŠãŒã¶ãŒãé »ç¹ã«äœ¿çšããã¢ããªã±ãŒã·ã§ã³ã«æ°žç¶çãªã¹ãã¬ãŒãžãèš±å¯ããå¯èœæ§ãé«ããªããŸãã
- ãŠãŒã¶ãŒèšå®: ãŠãŒã¶ãŒã¯ãæ°žç¶çãªã¹ãã¬ãŒãžèŠæ±ã®åŠçæ¹æ³ãå¶åŸ¡ããããã«ãã©ãŠã¶ã®èšå®ãæ§æã§ããŸãããã¹ãŠã®èŠæ±ãèªåçã«èš±å¯ãããããã¹ãŠã®èŠæ±ãæåŠããããåèŠæ±ã«å¯ŸããŠããã³ããã衚瀺ãããããããšãã§ããŸãã
- å©çšå¯èœãªã¹ãã¬ãŒãž: ããã€ã¹ã®ã¹ãã¬ãŒãžãéåžžã«å°ãªãå Žåããã©ãŠã¶ã¯ããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããèšå®ã«é¢ä¿ãªããæ°žç¶çãªã¹ãã¬ãŒãžã®èŠæ±ãæåŠããå ŽåããããŸãã
- ãªãªãžã³ã®ä¿¡é Œ: å®å šãªã³ã³ããã¹ãïŒHTTPSïŒã¯ãéåžžãæ°žç¶çãªã¹ãã¬ãŒãžã«å¿ èŠã§ãã
éèŠ: æ°žç¶çãªã¹ãã¬ãŒãžã®èŠæ±ãåžžã«èš±å¯ããããšã¯éããŸãããã¢ããªã±ãŒã·ã§ã³ã¯ãã¹ãã¬ãŒãžãæ°žç¶çã§ãªãç¶æ³ã«å¯Ÿå¿ã§ããå¿ èŠããããŸããããŒã¿ããµãŒããŒã«ããã¯ã¢ããããããããŒã¿æå€±ãæ£åžžã«åŠçãããããããã®æŠç¥ãå®è£ ããŸãã
æ¢åã®æ°žç¶æ§ã®ç¢ºèª
navigator.storage.persisted()
ã¡ãœããã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã«ãã§ã«æ°žç¶çãªã¹ãã¬ãŒãžãèš±å¯ãããŠãããã©ããã確èªã§ããŸãã
async function checkPersistentStorage() {
if (navigator.storage && navigator.storage.persisted) {
const isPersistent = await navigator.storage.persisted();
console.log(`Persistent storage already granted: ${isPersistent}`);
} else {
console.warn("Persistent storage API not supported.");
}
}
checkPersistentStorage();
ã¹ãã¬ãŒãžãã¯ãããžãŒãšã¯ã©ãŒã¿
Persistent Storage APIã¯ããã©ãŠã¶ã§å©çšå¯èœãªããŸããŸãªã¹ãã¬ãŒãžãã¯ãããžãŒãšé£æºããŸãããããã®ãã¯ãããžãŒãã¯ã©ãŒã¿ã«ãã£ãŠã©ã®ããã«åœ±é¿ãåããããçè§£ããããšãéèŠã§ãã- IndexedDB: æ§é åãããããŒã¿ãã¯ã©ã€ã¢ã³ãåŽã§ä¿åããããã®åŒ·åãªNoSQLããŒã¿ããŒã¹ãIndexedDBã¯ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®å¶éãåããæ°žç¶çãªã¹ãã¬ãŒãžãã倧ããªæ©æµãåããããšãã§ããŸãã
- Cache API: ãµãŒãã¹ã¯ãŒã«ãŒããããã¯ãŒã¯ãªã¯ãšã¹ãããã£ãã·ã¥ããããã«äœ¿çšããããªãã©ã€ã³ã¢ã¯ã»ã¹ãšããã©ãŒãã³ã¹ã®åäžãå¯èœã«ããŸããCache APIãä»ããŠäœæããããã£ãã·ã¥ããå šäœçãªã¹ãã¬ãŒãžã¯ã©ãŒã¿ã«è²¢ç®ããŸãã
- localStorage & sessionStorage: å°éââã®ããŒã¿çšã®åçŽãªããŒãšå€ã®ã¹ãã¢ãlocalStorageã¯ããã©ã«ãã§æ°žç¶çã§ããïŒãŠãŒã¶ãŒããã©ãŠã¶ã®ããŒã¿ãã¯ãªã¢ããªãéãïŒããµã€ãºãå¶éãããŠãããIndexedDBãCache APIã»ã©Persistent Storage APIã«ãã£ãŠæäŸãããæ°žç¶æ§ã®ä¿èšŒã®æ©æµãåããŸããããã ãããããã®äœ¿çšéã¯å šäœçãªã¯ã©ãŒã¿ã«ã«ãŠã³ããããŸãã
- Cookie: æè¡çã«ã¯ã¹ãã¬ãŒãžã¡ã«ããºã ã§ãããCookieã¯éåžžã倧éã®ããŒã¿ãä¿åããã®ã§ã¯ãªããã»ãã·ã§ã³ç®¡çãšè¿œè·¡ã«äœ¿çšãããŸããCookieã«ã¯ç¬èªã®ãµã€ãºå¶éããããStorage APIã«ãã£ãŠç®¡çãããã¹ãã¬ãŒãžã¯ã©ãŒã¿ãšã¯ç°ãªããŸãã
äŸ: PWAã¯IndexedDBã䜿çšããŠãŠãŒã¶ãŒãããã¡ã€ã«ãšãªãã©ã€ã³ããŒã¿ãä¿åããCache APIã䜿çšããŠç»åãJavaScriptãã¡ã€ã«ãªã©ã®éçã¢ã»ããããã£ãã·ã¥ããŸããæ°žç¶çãªã¹ãã¬ãŒãžãèŠæ±ãããšããã®ãã£ãã·ã¥ãããããŒã¿ãåé€ãããå¯èœæ§ãäœããªããäžè²«ãããªãã©ã€ã³ãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸãã
ã¹ãã¬ãŒãžã¯ã©ãŒã¿ç®¡çã®ãã¹ããã©ã¯ãã£ã¹
广çãªã¹ãã¬ãŒãžã¯ã©ãŒã¿ç®¡çã¯ãå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããåŸãã¹ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ã次ã«ç€ºããŸãã
1. ã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ã宿çã«ç£èŠãã
navigator.storage.estimate()
ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ã宿çã«ç£èŠããã¡ã«ããºã ãå®è£
ããŸããããã«ãããæœåšçãªã¹ãã¬ãŒãžã®åé¡ãäºåã«ç¹å®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã«åœ±é¿ãäžããåã«æ¯æ£æªçœ®ãè¬ããããšãã§ããŸãã
2. ã¹ãã¬ãŒãžç®¡çUIãå®è£ ãã
ãŠãŒã¶ãŒã«ãã¹ãã¬ãŒãžã管çããããã®æç¢ºã§çŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããŸãããã®UIã䜿çšãããšããŠãŒã¶ãŒã¯æ¬¡ã®ããšãã§ããŸãã
- çŸåšã®ã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ã衚瀺ããã
- æãã¹ãã¬ãŒãžãæ¶è²»ããŠããããŒã¿ãç¹å®ããã
- äžèŠãªããŒã¿ãåé€ããïŒãã£ãã·ã¥ããããã¡ã€ã«ãããŠã³ããŒããããã³ã³ãã³ããªã©ïŒã
äŸ: åçç·šéã¢ããªã±ãŒã·ã§ã³ã¯ãåã ã®åçãã¢ã«ãã ã§äœ¿çšãããã¹ãã¬ãŒãžã®å èš³ããŠãŒã¶ãŒã«ç€ºãUIãæäŸããäžèŠã«ãªã£ãåçãç°¡åã«åé€ã§ããããã«ããŸãã
3. ããŒã¿ã¹ãã¬ãŒãžãæé©åãã
ã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã¹ãã¬ãŒãžãæé©åããŠãã¹ãã¬ãŒãžãããããªã³ããæå°éã«æããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- ããŒã¿ãä¿åããåã«å§çž®ããã
- å¹ççãªããŒã¿åœ¢åŒïŒProtocol BuffersãMessagePackãªã©ïŒã䜿çšããã
- åé·ãªããŒã¿ã®ä¿åãé¿ããã
- å€ãããŒã¿ãŸãã¯æªäœ¿çšã®ããŒã¿ãèªåçã«åé€ããããŒã¿æå¹æéããªã·ãŒãå®è£ ããã
4. ã°ã¬ãŒã¹ãã«ãã°ã©ããŒã·ã§ã³æŠç¥ãå®è£ ãã
ã¹ãã¬ãŒãžãå¶éãããŠããå ŽåããŸãã¯æ°žç¶çãªã¹ãã¬ãŒãžãèš±å¯ãããŠããªãå Žåã«ãã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«åŠçã§ããããã«èšèšããŸããããã«ã¯ã次ã®ãããªããšãå«ãŸããå ŽåããããŸãã
- 倧éã®ã¹ãã¬ãŒãžãå¿ èŠãšããç¹å®ã®æ©èœãç¡å¹ã«ããã
- ãŠãŒã¶ãŒã«èŠåã¡ãã»ãŒãžã衚瀺ããã
- ããŒã¿ããµãŒããŒã«ããã¯ã¢ãããããªãã·ã§ã³ãæäŸããã
5. æ°žç¶çãªã¹ãã¬ãŒãžã«ã€ããŠãŠãŒã¶ãŒã«ç¥ããã
ã¢ããªã±ãŒã·ã§ã³ãæ°žç¶çãªã¹ãã¬ãŒãžã«å€§ããäŸåããŠããå Žåã¯ãæ°žç¶çãªã¹ãã¬ãŒãžã¢ã¯ã»ã¹èš±å¯ãä»äžããããšã®å©ç¹ã«ã€ããŠãŠãŒã¶ãŒã«ç¥ãããŠãã ãããæ°žç¶çãªã¹ãã¬ãŒãžãã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãã©ã®ããã«åäžãããããŒã¿ãèªåçã«ã¯ãªã¢ãããªãããã«ãããã説æããŸãã
6. ã¹ãã¬ãŒãžãšã©ãŒãé©åã«åŠçãã
ã¢ããªã±ãŒã·ã§ã³ãã¹ãã¬ãŒãžã¯ã©ãŒã¿ãè¶
ããå Žåã«çºçããå¯èœæ§ã®ããQuotaExceededError
ãªã©ã®ã¹ãã¬ãŒãžãšã©ãŒãåŠçããæºåãããŠãã ããããŠãŒã¶ãŒã«æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããå¯èœãªè§£æ±ºçïŒã¹ãã¬ãŒãžã®ã¯ãªã¢ãã¹ãã¬ãŒãžãã©ã³ã®ã¢ããã°ã¬ãŒããªã©ïŒãææ¡ããŸãã
7. ãµãŒãã¹ã¯ãŒã«ãŒã®äœ¿çšãæ€èšãã
ãµãŒãã¹ã¯ãŒã«ãŒã¯ãéçã¢ã»ãããšAPIå¿çããã£ãã·ã¥ããããšã§ãWebã¢ããªã±ãŒã·ã§ã³ã®ãªãã©ã€ã³æ©èœãå€§å¹ ã«åŒ·åã§ããŸãããµãŒãã¹ã¯ãŒã«ãŒã䜿çšããå Žåã¯ãã¹ãã¬ãŒãžã¯ã©ãŒã¿ã«æ³šæãããã£ãã·ã¥ã广çã«ç®¡çããããã®æŠç¥ãå®è£ ããŸãã
åœéåã«é¢ããèæ ®äºé
ã¢ããªã±ãŒã·ã§ã³ã®ã¹ãã¬ãŒãžç®¡çUIãèšèšããéã¯ã次ã®åœéåïŒi18nïŒã®åŽé¢ãèæ ®ããŠãã ããã
- æ°å€åœ¢åŒ: ã¹ãã¬ãŒãžã®äœ¿çšç¶æ³ã®å€ã衚瀺ãããšãã¯ãããŸããŸãªãã±ãŒã«ã«é©ããæ°å€åœ¢åŒã䜿çšããŸããããšãã°ãäžéšã®ãã±ãŒã«ã§ã¯ãã³ã³ãã10鲿°ã®åºåãæåãšããŠäœ¿çšãããä»ã®ãã±ãŒã«ã§ã¯ããªãªãã䜿çšãããŸããJavaScriptã®
toLocaleString()
ã¡ãœããã䜿çšããŠããŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠæ°å€ããã©ãŒãããããŸãã - æ¥ä»ãšæå»ã®åœ¢åŒ: ã¢ããªã±ãŒã·ã§ã³ãæ¥ä»ãšæå»ãä¿åããå Žåã¯ãã¹ãã¬ãŒãžç®¡çUIã«è¡šç€ºãããšãã«ããŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠãã©ãŒãããããŸããJavaScriptã®
toLocaleDateString()
ã¡ãœãããštoLocaleTimeString()
ã¡ãœããã䜿çšããŠããã±ãŒã«ãèªèããæ¥ä»ãšæå»ã®åœ¢åŒèšå®ãè¡ããŸãã - åäœã®ããŒã«ã©ã€ãº: ããŸããŸãªå°åã§äœ¿çšãããŠããèŠåã«åãããŠãã¹ãã¬ãŒãžãŠãããïŒKBãMBãGBãªã©ïŒãããŒã«ã©ã€ãºããããšãæ€èšããŠãã ãããæšæºãŠãããã¯åºãçè§£ãããŠããŸãããããŒã«ã©ã€ãºãããä»£æ¿ææ®µãæäŸããããšã§ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãã
- ããã¹ãã®æ¹å: ã¹ãã¬ãŒãžç®¡çUIãå·Šããå³ïŒLTRïŒãšå³ããå·ŠïŒRTLïŒã®äž¡æ¹ã®ããã¹ãæ¹åããµããŒãããŠããããšã確èªããŸããCSSããããã£ïŒ
direction
ãunicode-bidi
ãªã©ïŒã䜿çšããŠãããã¹ãã®æ¹åãæ£ããåŠçããŸãã
ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé
æ°žç¶çãªã¹ãã¬ãŒãžãæ±ãå Žåãã»ãã¥ãªãã£ãæãéèŠã§ããæ¬¡ã®ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«åŸã£ãŠãã ããã
- HTTPSã䜿çšãã: åžžã«HTTPSãä»ããŠã¢ããªã±ãŒã·ã§ã³ãæäŸãã転éäžã®ããŒã¿ãä¿è·ããäžéè æ»æãé²ããŸããHTTPSã¯ãå€ãã®ãã©ãŠã¶ã§æ°žç¶çãªã¹ãã¬ãŒãžã®èŠä»¶ã§ããããŸãã
- ãŠãŒã¶ãŒå ¥åããµãã¿ã€ãºãã: ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®è匱æ§ãé²ãããã«ããã¹ãŠã®ãŠãŒã¶ãŒå ¥åãä¿åããåã«ãµãã¿ã€ãºããŸãã
- æ©å¯ããŒã¿ãæå·åãã: æ¿èªãããŠããªãã¢ã¯ã»ã¹ããä¿è·ããããã«ãæ©å¯ããŒã¿ãããŒã«ã«ã«ä¿åããåã«æå·åããŸããæå·åã«ã¯Web Crypto APIã®äœ¿çšãæ€èšããŠãã ããã
- å®å šãªããŒã¿åŠçã®å®è·µãå®è£ ãã: ããŒã¿ãªãŒã¯ãé²ããä¿åãããããŒã¿ã®æŽåæ§ã確ä¿ããããã«ãå®å šãªã³ãŒãã£ã³ã°ã®å®è·µã«åŸã£ãŠãã ããã
- ã³ãŒãã宿çã«ç¢ºèªããã³æŽæ°ãã: ææ°ã®ã»ãã¥ãªãã£è åšãšè匱æ§ã«é¢ããææ°æ å ±ãå ¥æããã³ãŒãã宿çã«ç¢ºèªããã³æŽæ°ããŠããããã«å¯ŸåŠããŠãã ããã
ããŸããŸãªå°åã§ã®äŸ
ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®ç®¡çãããŸããŸãªå°åã§ã©ã®ããã«ç°ãªãããèããŠã¿ãŸãããã
- 垯åå¹ ãå¶éãããŠããå°å: ã€ã³ã¿ãŒããã垯åå¹ ãå¶éãããŠããããŸãã¯é«äŸ¡ãªå°åã§ã¯ããŠãŒã¶ãŒã¯ãªãã©ã€ã³ã¢ã¯ã»ã¹ãšãã£ãã·ã¥ã«äŸåããŠããå¯èœæ§ããããŸãããããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã¯å¹ççãªã¹ãã¬ãŒãžäœ¿çšãåªå ãããã£ãã·ã¥ãããããŒã¿ã®ç®¡çã«é¢ããæç¢ºãªã¬ã€ãã³ã¹ãæäŸããå¿ èŠããããŸããããšãã°ãã¢ããªã«ãæ±åã¢ãžã¢ã®äžéšã®å°åã§ã¯ãããŒã¿ã³ã¹ãã倧ããªæžå¿µäºé ã§ãã
- ããŒã¿ãã©ã€ãã·ãŒèŠå¶ãããå°å: 欧å·é£åïŒGDPRïŒãªã©ã峿 ŒãªããŒã¿ãã©ã€ãã·ãŒèŠå¶ãããå°åã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã¹ãã¬ãŒãžã®äœ¿ç𿹿³ã«ã€ããŠéææ§ãä¿ã¡ãå人ããŒã¿ãä¿åããåã«ãŠãŒã¶ãŒããæç€ºçãªåæãåŸãå¿ èŠããããŸãããŸãããŠãŒã¶ãŒã«ããŒã¿ãžã®ã¢ã¯ã»ã¹ãä¿®æ£ãåé€ã®æ©èœãæäŸããå¿ èŠããããŸãã
- å€ãããã€ã¹ãããå°å: ãŠãŒã¶ãŒãå€ãããã€ã¹ãããŸã匷åã§ãªãããã€ã¹ã䜿çšããå¯èœæ§ãé«ãå°åã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ã¹ãã¬ãŒãžã®äœ¿çšã«ç¹ã«æ³šæããããã€ã¹ã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ãæå°éã«æããããã«ããŒã¿ã¹ãã¬ãŒãžãæé©åããå¿ èŠããããŸãã
- ç¹å®ã®èšèªèŠä»¶ãããå°å: ã¹ãã¬ãŒãžç®¡çUIã¯ãæ°å€åœ¢åŒïŒ10鲿°ã®åºåãæåã«ã³ã³ããŸãã¯ããªãªãã䜿çšãããªã©ïŒãæ¥ä»/æå»åœ¢åŒãããã³é©åãªããã¹ãæ¹åãèæ ®ããŠãå®å šã«ããŒã«ã©ã€ãºããå¿ èŠããããŸãã
äŸ: ã€ã³ãã®ãŠãŒã¶ãŒã察象ãšãããã¥ãŒã¹ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãæç¶çãªã€ã³ã¿ãŒãããæ¥ç¶ã®å¯èœæ§ãèªèããŠããŠãŒã¶ãŒããªãã©ã€ã³ã§èšäºãããŠã³ããŒãã§ããããã«ããå ŽåããããŸãããŸããã¢ããªã±ãŒã·ã§ã³ã¯ãè€æ°ã®ã€ã³ãèšèªã§æç¢ºãªã¹ãã¬ãŒãžç®¡çUIãæäŸãããŠãŒã¶ãŒãããŠã³ããŒãããèšäºãç°¡åã«åé€ããŠã¹ããŒã¹ãè§£æŸã§ããããã«ããŸãã
ã¹ãã¬ãŒãžAPIã®å°æ¥
Persistent Storage APIã¯åžžã«é²åããŠãããææ°ã®Webã¢ããªã±ãŒã·ã§ã³ã®å¢å€§ããèŠæ±ã«å¯Ÿå¿ããããã«ãæ°ããæ©èœã远å ãããŠããŸããå°æ¥ã®éçºã®å¯èœæ§ã«ã¯ã次ã®ãããªãã®ããããŸãã
- ã¹ãã¬ãŒãžã¯ã©ãŒã¿ç®¡çã®æ¹å: ã¹ãã¬ãŒãžã¯ã©ãŒã¿ã«å¯Ÿãããããã现ããå¶åŸ¡ãã¢ããªã±ãŒã·ã§ã³ã¯ãããŸããŸãªçš®é¡ã®ããŒã¿ã«ç¹å®ã®éã®ã¹ãã¬ãŒãžãå²ãåœãŠãããšãã§ããŸãã
- ã¯ã©ãŠãã¹ãã¬ãŒãžãšã®çµ±å: ã¯ã©ãŠãã¹ãã¬ãŒãžãµãŒãã¹ãšã®ã·ãŒã ã¬ã¹ãªçµ±åãã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã«ã«ã¹ãã¬ãŒãžãå¶éãããŠããå Žåã«ãããŒã¿ãã¯ã©ãŠãã«ééçã«ä¿åã§ããŸãã
- é«åºŠãªããŒã¿åæ: ããæŽç·ŽãããããŒã¿åæã¡ã«ããºã ãã¢ããªã±ãŒã·ã§ã³ã¯ãããŒã«ã«ã¹ãã¬ãŒãžãšã¯ã©ãŠãéã§ããŒã¿ãå¹ççã«åæã§ããŸãã
- æšæºåãããã¹ãã¬ãŒãžæå·å: ããŒã«ã«ã¹ãã¬ãŒãžã«ä¿åãããããŒã¿ãæå·åããããã®æšæºåãããAPIãæ©å¯ããŒã¿ãä¿è·ããããã»ã¹ãç°¡çŽ åããŸãã
çµè«
Persistent Storage APIã¯ããªãããªãªãã©ã€ã³ãšã¯ã¹ããªãšã³ã¹ãæäŸã§ãããå ç¢ã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããWebéçºè ã«ãšã£ãŠåŒ·åãªããŒã«ã§ããã¹ãã¬ãŒãžã¯ã©ãŒã¿ã®ç®¡çãçè§£ããæ°žç¶çãªã¹ãã¬ãŒãžãèŠæ±ããããŒã¿ã¹ãã¬ãŒãžãšã»ãã¥ãªãã£ã«é¢ãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãä¿¡é Œæ§ãé«ããããã©ãŒãã³ã¹ãé«ãããŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãå°éããã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸããWebãé²åãç¶ããã«ã€ããŠãPersistent Storage APIã¯ã次äžä»£ã®Webã¢ããªã±ãŒã·ã§ã³ãå®çŸããäžã§ãŸããŸãéèŠãªåœ¹å²ãæããã§ãããã