æ§ã ãªããã€ã¹ããã©ãããã©ãŒã ã§ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã«ãããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒåãã®åçã§é åçãªã¢ãããã£ãã¢ã€ã³ã³ãäœæããæ¹æ³ãåŠã³ãŸãããã
ããã°ã¬ãã·ããŠã§ãã¢ããªã®ã¢ãããã£ãã¢ã€ã³ã³ïŒåçã¢ã€ã³ã³ã·ã¹ãã ã®å®è£
仿¥ã®ããžã¿ã«ç°å¢ã«ãããŠãã·ãŒã ã¬ã¹ã§é åçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã¯ããããããŠã§ãã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠæéèŠèª²é¡ã§ããããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒãå¢ããå¢ãç¶ããäžãã¢ããªã®èŠèŠç衚çŸãç¹ã«ãã®ã¢ã€ã³ã³ã¯ããŠãŒã¶ãŒãåŒãä»ããç¶æããããã«éèŠãªåœ¹å²ãæãããŸããæ§ã ãªç»é¢åœ¢ç¶ãããã€ã¹ã®å€èгã«é©åããããã«èšèšãããã¢ãããã£ãã¢ã€ã³ã³ã¯ããã®é²åã®æåç·ã«ãããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ãPWAã¢ãããã£ãã¢ã€ã³ã³ã®äžçãæ·±ãæãäžãããã®å®è£ ãå©ç¹ãæ¢ããäžçäžã®éçºè åãã«å®çšçãªäŸãæäŸããŸãã
ã¢ãããã£ãã¢ã€ã³ã³ãšã¯ïŒ
ã¢ãããã£ãã¢ã€ã³ã³ã¯ããŠãŒã¶ãŒã®ããã€ã¹ã®ç¹å®ã®ã³ã³ããã¹ãã«åãããŠã圢ç¶ããµã€ãºãå€èгãåçã«é©å¿ãããããã«èšèšããããã¢ããªã®ã¢ã€ã³ã³ã«å¯ŸããçŸä»£çãªã¢ãããŒãã§ããéçã¢ã€ã³ã³ãšã¯ç°ãªããã¢ãããã£ãã¢ã€ã³ã³ã¯ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®èŠèŠèšèªã«ã·ãŒã ã¬ã¹ã«çµ±åããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããç°ãªããã©ãããã©ãŒã éã§äžè²«ããã«ãã¯ïŒãã£ãŒã«ãæäŸããŸãããã®é©å¿æ§ã¯ãããããããã€ã¹ã§ãã€ãã£ãã¢ããªã®ãããªãšã¯ã¹ããªãšã³ã¹ãæäŸããããšãç®æãPWAã«ãšã£ãŠäžå¯æ¬ ã§ãã
ã¢ãããã£ãã¢ã€ã³ã³ã®äž»ãªå©ç¹ïŒ
- èŠèŠçé åã®åäžïŒã¢ãããã£ãã¢ã€ã³ã³ã¯ãã©ã®ããã€ã¹ã§ãæŽç·Žããããããã§ãã·ã§ãã«ãªå€èгãåããè¯ã第äžå°è±¡ã«è²¢ç®ããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®æ¹åïŒãã©ãããã©ãŒã å šäœã§äžè²«ããã¢ã€ã³ã³ã®å€èгã¯ã芪ãã¿ããããšäœ¿ãããããä¿é²ããŸãã
- ãã©ã³ãã£ã³ã°ãšèªèïŒé©åã«ãã¶ã€ã³ãããã¢ã€ã³ã³ã¯ããã©ã³ãèªèãšãŠãŒã¶ãŒã®èšæ¶ã«ãšã£ãŠäžå¯æ¬ ã§ãã
- ãã©ãããã©ãŒã äºææ§ïŒã¢ãããã£ãã¢ã€ã³ã³ã¯ãæ§ã ãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒäŸïŒAndroidãChrome OSïŒãšãã®ã¢ã€ã³ã³ã¹ã¿ã€ã«ã«ã·ãŒã ã¬ã¹ã«çµ±åãããŸãã
- åçæŽæ°ïŒã¢ãããã£ãã¢ã€ã³ã³ã¯ãæ°ããæ©èœãããã¢ãŒã·ã§ã³ããŸãã¯ã¢ããªå ã®å€æŽãåæ ããããã«åçã«æŽæ°ã§ããŸãã
ã¢ãããã£ãã¢ã€ã³ã³ã®äž»èŠã³ã³ããŒãã³ããçè§£ãã
PWAã«ã¢ãããã£ãã¢ã€ã³ã³ãå®è£ ããã«ã¯ãããã€ãã®äž»èŠãªã³ã³ããŒãã³ããçè§£ããå¿ èŠããããŸãã
- ãããã§ã¹ããã¡ã€ã« (manifest.json)ïŒãã®éèŠãªãã¡ã€ã«ã¯ãPWAã®äžå¿çãªèšå®ãšããŠæ©èœããŸããååãéå§URLã衚瀺ã¢ãŒãããããŠç¹ã«ã¢ã€ã³ã³ã®è©³çްãªã©ãã¢ããªã±ãŒã·ã§ã³ã®ã¡ã¿ããŒã¿ãèšè¿°ããŸãããããã§ã¹ããã¡ã€ã«ã¯ããã©ãŠã¶ããŠã§ãã¢ããªããã€ãã£ãã¢ããªã®ããã«æ±ãããšãå¯èœã«ãããã®ã§ãã
- ã¢ã€ã³ã³ã¢ã»ããïŒãããã¯ã¢ãããã£ãã¢ã€ã³ã³ãäœæããããã«äœ¿çšãããç»åã§ããéåžžãæ§ã ãªããã€ã¹ã§æé©ãªã¬ã³ããªã³ã°ãä¿èšŒããããã«ãè€æ°ã®ã¢ã€ã³ã³ãµã€ãºãå¿ èŠã§ããã¢ã€ã³ã³ã¢ã»ããã¯ãããã§ã¹ããã¡ã€ã«å ã§åç §ãããŸãã
- `purpose`屿§ïŒãããã§ã¹ããã¡ã€ã«ã®`icons`é åå ã§ã¯ã`purpose`屿§ãéåžžã«éèŠã§ããã¢ã€ã³ã³ãã©ã®ããã«äœ¿çšãããããæå®ããŸããæãäžè¬çãªå€ã¯æ¬¡ã®ãšããã§ãã
- `any`ïŒã¢ã€ã³ã³ã¯ããããç®çã«äœ¿çšã§ããŸããããã¯éåžžãã·ã³ãã«ã§ç¹å¥ãªãã¶ã€ã³äžã®èæ ®äºé ããªãã¢ã€ã³ã³ã«äœ¿çšãããŸãã
- `maskable`ïŒããã¯ã¢ãããã£ãã¢ã€ã³ã³ã«ãšã£ãŠæãéèŠã§ããã¢ã€ã³ã³ãåãè§äžžé·æ¹åœ¢ãªã©ãç°ãªã圢ç¶ã«ã¯ãªããã³ã°ãããããã«èšèšãããŠããããšã瀺ããŸããã¢ã€ã³ã³ã«ã¯ãã¯ãªããã³ã°ããããšãã«éããŠèŠããããã£ã³ã°ãšèæ¯ãå¿ èŠã§ãã
- `monochrome`ïŒåè²ã®ã¿ããµããŒããããŠããç¶æ³ããããŒãèšå®ã®ç®çã§äœ¿çšããããã®ã¢ãã¯ãã¢ã€ã³ã³ãæå®ããŸãã
- ã¢ã€ã³ã³ã®åœ¢ç¶ãšãã¹ãã³ã°ïŒã¢ãããã£ãã¢ã€ã³ã³ã¯ããã¹ãã³ã°ãå©çšããŠã¢ã€ã³ã³ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããµããŒãããç°ãªã圢ç¶ã«å€æããŸããããã«ãããã¢ã€ã³ã³ã¯ããã€ã¹ã®UIãã¶ã€ã³ã«é©å¿ã§ããŸãã`maskable`ã®ç®çã¯ãã¢ã€ã³ã³ãä¿®æ£ããã«åœ¢ç¶å€æŽããããšãå¯èœã«ããŸãã
ã¢ãããã£ãã¢ã€ã³ã³ã¢ã»ããã®äœæ
ã¢ã€ã³ã³ã¢ã»ããã®äœæã¯éèŠãªã¹ãããã§ããããã»ã¹ã®å èš³ã以äžã«ç€ºããŸãã
1. ãã¶ã€ã³ã®èæ ®äºé
ã¢ãããã£ãã¢ã€ã³ã³ããã¶ã€ã³ããéã¯ã以äžã®ç¹ã«çæããŠãã ããã
- èæ¯ïŒã¢ã€ã³ã³ã®èæ¯ãèæ ®ããŠãã ããããã¥ãŒãã©ã«ã§ããããç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®åœ¢ç¶ãè£å®ããããã«ãã¶ã€ã³ãããŠããå¿ èŠããããŸãã
- ããã£ã³ã°ïŒç°ãªããã¹ãã³ã°åœ¢ç¶ã«å¯Ÿå¿ã§ãããããã¢ã€ã³ã³ã®åšå²ã«ååãªããã£ã³ã°ãæ®ããŠãã ãããçµéšåãšããŠãå°ãªããšã20%ã®ããã£ã³ã°ãæ®ãã®ãè¯ãã§ãããã
- ã·ã³ãã«ãïŒå°ãããµã€ãºã§ãå€èªæ§ã確ä¿ããããã«ããã¶ã€ã³ã¯ã·ã³ãã«ã§ã¯ãªã¢ã«ä¿ã£ãŠãã ããããã¹ãã³ã°äžã«å€±ãããå¯èœæ§ã®ããè€éãªè©³çްã¯é¿ããŠãã ããã
- ãã©ã³ãã®äžè²«æ§ïŒã¢ã€ã³ã³ããã©ã³ãå šäœã®èŠèŠçã¢ã€ãã³ãã£ãã£ãšäžèŽããŠããããšã確èªããŠãã ããã
2. é©åãªããŒã«ã®éžæ
ã¢ãããã£ãã¢ã€ã³ã³ã¢ã»ããã®äœæã«åœ¹ç«ã€ããŒã«ãããã€ããããŸãã
- ãã¶ã€ã³ãœãããŠã§ã¢ïŒAdobe PhotoshopãAdobe IllustratorãSketchãFigmaã¯ãé«å質ãªã¢ã€ã³ã³ããã¶ã€ã³ããããã®äººæ°ã®é«ãéžæè¢ã§ãã
- ã¢ã€ã³ã³ãžã§ãã¬ãŒã¿ãŒïŒãªã³ã©ã€ã³ã®ã¢ã€ã³ã³ãžã§ãã¬ãŒã¿ãŒã¯ãè€æ°ã®ã¢ã€ã³ã³ãµã€ãºãšåœ¢åŒãäœæããããã»ã¹ãèªååã§ããŸãã人æ°ã®ãããªãã·ã§ã³ã«ã¯ãRealFaviconGeneratorãPWA BuilderãIcon Kitchenãªã©ããããŸãã
- ã¢ã€ã³ã³ã©ã€ãã©ãªïŒäºåã«ãã¶ã€ã³ãããã¢ã€ã³ã³ã©ã€ãã©ãªã䜿çšãããšãæéãšåŽåãç¯çŽããã¢ããªå šäœã§äžè²«æ§ã確ä¿ã§ããŸããMaterial IconsãFont Awesomeã®ãããªã©ã€ãã©ãªã¯ãå¹ åºãã¢ã€ã³ã³ãæäŸããŠããŸãã
3. ã¢ã€ã³ã³ãµã€ãºã®çæ
æ§ã ãªããã€ã¹ã®è§£å床ã«å¯Ÿå¿ããããã«ãè€æ°ã®ã¢ã€ã³ã³ãµã€ãºãäœæããå¿ èŠããããŸãã以äžã®ãµã€ãºãäžè¬çã«äœ¿çšãããŸãã
- 192x192 pxïŒã»ãšãã©ã®ããã€ã¹ã«é©ããŠããŸãã
- 512x512 pxïŒé«è§£å床ãã£ã¹ãã¬ã€ããµããŒãããŸãã
- ãã®ä»ã®ãµã€ãºïŒããå¹ åºãäºææ§ã®ããã«ã72x72ã96x96ã144x144ã152x152 pxãªã©ã®ãµã€ãºã远å ããããšãæ€èšããŠãã ããã
4. ãã¹ã¯å¯èœãªã¢ã€ã³ã³
ã¢ãããã£ãã¢ã€ã³ã³ã®å Žåãç¹ã«`maskable`ã¢ã€ã³ã³ãäœæããå¿ èŠããããŸãããã¹ã¯å¯èœãªã¢ã€ã³ã³ãäœæããéã«ã¯ãæ§ã ãªåœ¢ç¶ã«åãæããããšãã«ãã¶ã€ã³ãããŸãæ©èœããå¿ èŠããããŸãããã¶ã€ã³ãå圢ãè§äžžé·æ¹åœ¢ã§ã©ã®ããã«è¡šç€ºãããããèæ ®ããŠãã ãããã¢ã€ã³ã³ã®æ žãšãªãéšåãã»ãŒããŸãŒã³ïŒå åŽã®é åïŒå ã«çãŸããã¯ãªããã³ã°ãããªãããã«ããŠãã ããã
PWAãããã§ã¹ããã¡ã€ã«ã®èšå®
ãããã§ã¹ããã¡ã€ã«ïŒmanifest.jsonïŒã¯ãPWAã®èšå®ã®æ žãšãªãéšåã§ããã¢ãããã£ãã¢ã€ã³ã³çšã«èšå®ããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
{
"name": "My Awesome App",
"short_name": "MyApp",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/images/icon-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/images/icon-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/images/icon-monochrome.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "monochrome"
}
]
}
説æïŒ
- `name`ïŒPWAã®æ£åŒåç§°ã§ãã
- `short_name`ïŒã¹ããŒã¹ãéãããŠããå Žåã«äœ¿çšããããçãããŒãžã§ã³ã®ååã§ãã
- `start_url`ïŒPWAãéãURLã§ãã
- `display`ïŒPWAã®è¡šç€ºæ¹æ³ïŒäŸïŒ`standalone`ã`fullscreen`ã`minimal-ui`ã`browser`ïŒãæå®ããŸãã`standalone`ã¯ãã€ãã£ãã¢ããªã®ãããªäœéšãæäŸããŸãã
- `background_color`ïŒã¹ãã©ãã·ã¥ã¹ã¯ãªãŒã³ã®èæ¯è²ã§ãã
- `theme_color`ïŒããŒã«ããŒããã³ãã®ä»ã®UIèŠçŽ ã®è²ã§ãã
- `icons`ïŒã¢ã€ã³ã³ãªããžã§ã¯ãã®é åã§ããåãªããžã§ã¯ãã¯ã¢ã€ã³ã³ã¢ã»ãããèšè¿°ããŸãã
- `src`ïŒã¢ã€ã³ã³ç»åãžã®ãã¹ã§ãã
- `sizes`ïŒã¢ã€ã³ã³ç»åã®å¯žæ³ïŒäŸïŒã192x192ãïŒã§ãã
- `type`ïŒã¢ã€ã³ã³ç»åã®MIMEã¿ã€ãïŒäŸïŒãimage/pngãïŒã§ãã
- `purpose`ïŒã¢ã€ã³ã³ã®äœ¿ç𿹿³ïŒäŸïŒ`any`ã`maskable`ã`monochrome`ïŒãæå®ããŸãã
ãããã§ã¹ããã¡ã€ã«ãPWAã«çµ±åãã
ãããã§ã¹ããã¡ã€ã«ãäœæãããããããHTMLããã¥ã¡ã³ãã«ãªã³ã¯ããå¿
èŠããããŸããHTMLã®<head>ã»ã¯ã·ã§ã³å
ã«æ¬¡ã®è¡ã远å ããŠãã ããã
<link rel="manifest" href="/manifest.json">
ãããã§ã¹ããã¡ã€ã«ãžã®ãã¹ãæ£ããããšã確èªããŠãã ããã
ãã¹ããšãããã°
ãããã§ã¹ããã¡ã€ã«ãšã¢ã€ã³ã³ã¢ã»ãããå®è£ ããåŸããã¹ãŠãæåŸ ã©ããã«æ©èœããããšã確èªããããã«ãæ§ã ãªããã€ã¹ããã©ãããã©ãŒã ã§PWAããã¹ãããããšãéèŠã§ããåŸãã¹ãäž»èŠãªæé ã¯æ¬¡ã®ãšããã§ãã
- PWAãã€ã³ã¹ããŒã«ããïŒã¢ã€ã³ã³ãæ£ããã¬ã³ããªã³ã°ãããããšã確èªããããã«ãç°ãªãããã€ã¹ïŒAndroidãChrome OSãªã©ïŒã«PWAãã€ã³ã¹ããŒã«ããŸãã
- ã¢ã€ã³ã³ã®å€èгã確èªããïŒã¢ã€ã³ã³ãããŒã ç»é¢ãã¢ããªã©ã³ãã£ãŒããã®ä»ã®ã³ã³ããã¹ãã§ã©ã®ããã«è¡šç€ºããããã調ã¹ãŸãã
- éçºè ããŒã«ã䜿çšããïŒãã©ãŠã¶ã®éçºè ããŒã«ïŒäŸïŒChrome DevToolsïŒãå©çšããŠãã³ã³ãœãŒã«ã®ãšã©ãŒããã§ãã¯ãããããã§ã¹ããã¡ã€ã«ãšã¢ã€ã³ã³ã¢ã»ãããæ€æ»ããŸãããApplicationããŸãã¯ãManifestãã¿ãããã§ãã¯ããŠããããã§ã¹ããæ£ããè§£æãããŠããããšã確èªããŸãã
- ç°ãªãç»é¢ãµã€ãºãšè§£å床ã§ãã¹ãããïŒå°ããªã¹ããŒããã©ã³ãã倧ããªã¿ãã¬ãããŸã§ãæ§ã ãªããã€ã¹ã§ã¢ã€ã³ã³ãé©åã«è¡šç€ºãããããšã確èªããŸãã
- ãªã³ã©ã€ã³PWAããªããŒã¿ãŒã䜿çšããïŒPWA Builderç£æ»ããŒã«ãªã©ã®ãªã³ã©ã€ã³PWAããªããŒã¿ãŒãå©çšããŠãäžè¬çãªåé¡ããã¹ããã©ã¯ãã£ã¹ããã§ãã¯ããŸãããããã®ããŒã«ã¯ããšã©ãŒãç¹å®ããæ¹åã®ããã®æšå¥šäºé ãæäŸããã®ã«åœ¹ç«ã¡ãŸãã
- Androidåºæã®ãã¹ãïŒAndroidããã€ã¹ãã¿ãŒã²ããã«ããŠããå Žåã¯ãAndroidãšãã¥ã¬ãŒã¿ãŒãŸãã¯ç©ççãªAndroidããã€ã¹ã䜿çšããŠãPWAã培åºçã«ãã¹ãã§ããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
åºæ¬ãç¿åŸããããã¢ãããã£ãã¢ã€ã³ã³ã®å®è£ ã匷åããããã®ä»¥äžã®é«åºŠãªãã¯ããã¯ãæ€èšããŠãã ããã
åçã¢ã€ã³ã³ã®æŽæ°
PWAã®éèŠãªå©ç¹ã®1ã€ã¯ãã¢ããªã®ã¢ã€ã³ã³ãå«ãã³ã³ãã³ããåçã«æŽæ°ã§ããããšã§ããããã¯ãã¢ããªå ã®æ°ããæ©èœãããã¢ãŒã·ã§ã³ããŸãã¯ãªã¢ã«ã¿ã€ã æ å ±ãåæ ããããã«éåžžã«åœ¹ç«ã¡ãŸãã
äŸïŒ
ææ°ã®éå ±ãã¥ãŒã¹ãå€åããã¢ã€ã³ã³ã§è¡šç€ºãããã¥ãŒã¹ã¢ããªãæ³åããŠã¿ãŠãã ãããHTMLã®<head>ã»ã¯ã·ã§ã³ã«ãã<link rel="icon">ã¿ã°ã®`src`屿§ãJavaScriptçµç±ã§å€æŽããããšã§ãå®è¡æã«ã¢ã€ã³ã³ã倿Žã§ããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- ãµãŒããŒãŸãã¯ã¯ã©ã€ã¢ã³ãåŽã§æ°ããã¢ã€ã³ã³ç»åãçæããã
- `fetch` APIã䜿çšããŠæ°ããç»åããŒã¿ãããŠã³ããŒãããã
- `manifest.json`ãŸãã¯
<link rel="icon">ã¿ã°ãæ°ããç»åURLã«æŽæ°ããã - ãŸãã¯ãService Workerå ã§ã¢ã€ã³ã³ãåçã«å€æŽããŠã`manifest.json`ãHTMLã倿Žããã«ã¢ã€ã³ã³ãæŽæ°ããã
ã³ãŒãã¹ããããïŒJavaScriptã䜿çšããã¢ã€ã³ã³æŽæ°ã®äŸïŒïŒ
function updateIcon(newIconURL) {
const link = document.querySelector('link[rel="icon"]') || document.createElement('link');
link.rel = 'icon';
link.href = newIconURL;
document.head.appendChild(link);
}
// Example usage:
updateIcon('/images/new-icon.png');
manifest.jsonãã¡ã€ã«ããã£ãã·ã¥ãããŠããå Žåã¯ããããã§ã¹ããã¡ã€ã«å ã®ã¢ã€ã³ã³ãæŽæ°ããããšãå¿ããªãã§ãã ããã
ããŒãèšå®ãšè²ã«ã¹ã¿ãã€ãº
PWAå ã§ããŒãèšå®ãªãã·ã§ã³ãæäŸãããŠãŒã¶ãŒãã¢ã€ã³ã³ãå«ãã¢ããªã®å€èгãã«ã¹ã¿ãã€ãºã§ããããã«ããããšãæ€èšããŠãã ãããããã«ããããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšããŒãœãã©ã€ãŒãŒã·ã§ã³ãå€§å¹ ã«åäžãããããšãã§ããŸãã
äŸïŒ
ãŠãŒã¶ãŒãé è²ãéžæã§ããããã«ããã¢ã€ã³ã³ããã®ä»ã®UIèŠçŽ ãåçã«æŽæ°ããŸããããã©ã«ãã®ã¢ã€ã³ã³ãçšæãããŠãŒã¶ãŒã®éžæã«åºã¥ããŠã¢ã€ã³ã³ãç°ãªãè²ã®ããŒãžã§ã³ã«å€æŽãããªãã·ã§ã³ãæäŸã§ããŸããé è²ã¹ããŒã ã¯ããããã§ã¹ããã¡ã€ã«ãŸãã¯CSS倿°ã䜿çšããŠèæ¯è²ãšããŒãè²ã倿Žããããã«äœ¿çšã§ããŸãã
ããã¯ãŸããã·ã¹ãã ããŒããã«ã¹ã¿ã ããŒããèªç¶ã«é©çšãããããã«ãã¢ãã¯ãã¢ã€ã³ã³ãæäŸããããšãæå³ããŸãã
ã¢ã¯ã»ã·ããªãã£ã®èæ ®äºé
ã¢ã€ã³ã³ãé害ãæã€ãŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã·ãã«ã§ããããšã確èªããŠãã ããã
- è²ã®ã³ã³ãã©ã¹ãïŒã¢ã€ã³ã³ã®ãã¶ã€ã³ãšèæ¯ã®éã«ååãªè²ã®ã³ã³ãã©ã¹ããç¶æããŠãã ããã
- 代æ¿ããã¹ãïŒã¢ã€ã³ã³ã«ã¯çŽæ¥é©çšãããŸããããç»åã®ä»£æ¿ããã¹ãã®æäŸãã»ãã³ãã£ãã¯HTMLã®äœ¿çšãå«ããPWAå šäœã®ã¢ã¯ã»ã·ããªãã£ãèæ ®ããŠãã ããã
- æ¯æŽæè¡ã§ã®ãã¹ãïŒPWAãã¹ã¯ãªãŒã³ãªãŒããŒããã®ä»ã®æ¯æŽæè¡ã§ãã¹ãããæœåšçãªåé¡ãç¹å®ããŠãã ããã
ã¯ãã¹ãã©ãããã©ãŒã äºææ§
PWAã¯ç°ãªããã©ãããã©ãŒã éã§ã·ãŒã ã¬ã¹ã«æ©èœããå¿ èŠããããŸããæ§ã ãªããã€ã¹ãšãã©ãŠã¶ïŒChromeãFirefoxãSafariãEdgeïŒã§ã¢ãããã£ãã¢ã€ã³ã³ããã¹ãããäžè²«ããã¬ã³ããªã³ã°ã確ä¿ããŠãã ããããšãã¥ã¬ãŒã¿ãŒãšå®æ©ãã¹ãã¯ãå æ¬çãªäºææ§ã®ããã«äžå¯æ¬ ã§ãã
ããã©ãŒãã³ã¹ã®æé©å
ã¢ã€ã³ã³ã¢ã»ããã®ããã©ãŒãã³ã¹ãæé©åããŸãã
- ç»åå§çž®ïŒå質ãç ç²ã«ããããšãªããã¡ã€ã«ãµã€ãºãåæžããããã«ãã¢ã€ã³ã³ç»åãå§çž®ããŸããããã«ã¯ç»åå§çž®ããŒã«ãŸãã¯ãµãŒãã¹ã䜿çšããŸãã
- ç»åãã©ãŒãããïŒç¹æ§ãšæ©èœã«åºã¥ããŠãé©åãªç»åãã©ãŒãããïŒäŸïŒPNGãWebPïŒã䜿çšããŸããWebPã¯äžè¬çã«PNGãããåªããå§çž®çãæäŸããŸãã
- ãã£ãã·ã³ã°ïŒã¢ã€ã³ã³ããã©ãŠã¶ã«ãã£ãŠãã£ãã·ã¥ãããå¹ççã«ããŠã³ããŒããããããã«ããã£ãã·ã³ã°æŠç¥ãå®è£ ããŸããç©æ¥µçãªãã£ãã·ã³ã°æŠç¥ã«ã¯Service Workerã䜿çšããŸãã
ãªã¢ã«ã¿ã€ã ããŒã¿ã«ããåçã¢ã€ã³ã³ïŒå¿çšäŸïŒ
ãã®äŸã§ã¯ãã¢ã€ã³ã³ãã©ã€ãæ°å€ã§æŽæ°ããæ¹æ³ã瀺ããŸããããã«ãããã¢ããªå ã§å³åº§ã«ãã£ãŒãããã¯ãåŸãããšãã§ããŸãã
ã·ããªãªïŒæ ªäŸ¡PWAãã¢ã€ã³ã³ã«çŸåšã®æ ªäŸ¡ã衚瀺ããããªã¢ã«ã¿ã€ã ã§æŽæ°ãããŸãã
- ãµãŒããŒãµã€ãã³ã³ããŒãã³ãïŒãµãŒããŒãç¶ç¶çã«æ ªäŸ¡ãååŸããJSON圢åŒã§æäŸããŸãã
- ã¯ã©ã€ã¢ã³ããµã€ãïŒService WorkerãäŸ¡æ ŒãããŠã³ããŒãããŸãã
- ã¯ã©ã€ã¢ã³ããµã€ãïŒService WorkerãããŒã¿ã䜿çšããŠãæ°å€å ¥ãã®æ°ããã¢ã€ã³ã³ãæç»ããŸãã
ãã®äŸã¯æŠèŠã§ããå®çšŒåç°å¢ã«å¯Ÿå¿ãããœãªã¥ãŒã·ã§ã³ãå®è£ ããã«ã¯ãæœåšçãªãããã¯ãŒã¯åé¡ããã£ãã·ã³ã°ãç»åæé©åã«å¯ŸåŠããããã®æ éãªèšç»ãå¿ èŠã§ãã
ããããåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
å®è£ ããã»ã¹äžã«ãããã€ãã®äžè¬çãªåé¡ã«ééããå¯èœæ§ããããŸãããããã«ã©ã®ããã«å¯ŸåŠãããã以äžã«ç€ºããŸãã
- ã¢ã€ã³ã³ã衚瀺ãããªãïŒ
- ãããã§ã¹ããã¡ã€ã«ã®ãã¹ã確èªããïŒHTMLå
ã®
manifest.jsonãã¡ã€ã«ãžã®ãã¹ãæ£ããããšã確èªããŸãã - ã¢ã€ã³ã³ãã¹ã確èªããïŒãããã§ã¹ããã¡ã€ã«å ã®ã¢ã€ã³ã³ç»åãžã®ãã¹ãæ£ããããšã確èªããŸãã
- ãã©ãŠã¶ãã£ãã·ã¥ïŒãã©ãŠã¶ã®ãã£ãã·ã¥ãã¯ãªã¢ãããã匷å¶çã«åèªã¿èŸŒã¿ããŠãææ°ã®å€æŽãããŒããããŠããããšã確èªããŸãã
- éçºè ããŒã«ïŒéçºè ããŒã«ã®ãApplicationããŸãã¯ãManifestãã¿ããæ€æ»ããŠããããã§ã¹ããã¡ã€ã«ãããŒããããã¢ã€ã³ã³å®çŸ©ãå«ãŸããŠããããšã確èªããŸãã
- ãããã§ã¹ããã¡ã€ã«ã®ãã¹ã確èªããïŒHTMLå
ã®
- ã¢ã€ã³ã³ãæ£ãããã¹ã¯ãããªãïŒ
- Purpose屿§ïŒã¢ãããã£ãã¢ã€ã³ã³ã«ã¯
"maskable"ã®purposeã䜿çšããŠããããšã確èªããŸãã - ããã£ã³ã°ïŒã¢ã€ã³ã³ã®ãã¶ã€ã³ã«ãã¹ãã³ã°åœ¢ç¶ã«ååãªããã£ã³ã°ãããã確èªããŸãã
- ãã¶ã€ã³ã®äºææ§ïŒãã¹ãã³ã°ãšäºææ§ãããããšã確èªããããã«ãã¢ã€ã³ã³ã®ãã¶ã€ã³ãèŠçŽããŸããã·ã³ãã«ãªãã¶ã€ã³ãæé©ã§ãã
- è€æ°ã®ããã€ã¹ã§ã®ãã¹ãïŒæ§ã ãªããã€ã¹ã§ãã¹ãããŠãã¢ã€ã³ã³ãæåŸ ã©ããã«è¡šç€ºãããããšã確èªããŸãã
- Purpose屿§ïŒã¢ãããã£ãã¢ã€ã³ã³ã«ã¯
- ã¢ã€ã³ã³ãµã€ãºã®åé¡ïŒ
- äžæ£ãªãµã€ãºå®çŸ©ïŒãããã§ã¹ããã¡ã€ã«ã§æ£ãããµã€ãºãå®çŸ©ããŠããããšã確èªããŸãã
- è§£å床ã®äºææ§ïŒå¹ åºãç»é¢è§£å床ãšããã€ã¹ã®å¯åºŠã«å¯Ÿå¿ããããã«ãç°ãªãã¢ã€ã³ã³ãµã€ãºãäœæããŸãã
- ãããã§ã¹ãè§£æãšã©ãŒïŒ
- æ§æãšã©ãŒïŒ
manifest.jsonãã¡ã€ã«ã«æ§æãšã©ãŒïŒäŸïŒã«ã³ãã®æ¬ èœãäžæ£ç¢ºãªåŒçšç¬ŠïŒããªããæ€èšŒããŸãããªã³ã©ã€ã³ã®JSONããªããŒã¿ãŒã䜿çšããŸãã - ç¡å¹ãªããããã£ïŒãããã§ã¹ããã¡ã€ã«ã§æå¹ãªããããã£ã䜿çšããŠããããšã確èªããŸãã
- æ§æãšã©ãŒïŒ
ãã¹ããã©ã¯ãã£ã¹ãšå°æ¥ã®ãã¬ã³ã
åŸãã¹ãããã€ãã®ãã¹ããã©ã¯ãã£ã¹ãšãå°æ¥ã®å±æã以äžã«ç€ºããŸãã
- ãã¹ã¯ã掻çšããïŒã¢ãããã£ãã¢ã€ã³ã³ã®åçãªæ©èœã掻çšãããçã«ãã¹ã¯å¯èœãªã¢ã€ã³ã³ãäœæããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåªå ããïŒã·ã³ãã«ããæç¢ºãããã©ã³ãèªèã念é ã«çœ®ããŠã¢ã€ã³ã³ããã¶ã€ã³ããŸãã
- å³å¯ã«ãã¹ãããïŒç°ãªãããã€ã¹ããã©ãŠã¶ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¢ãããã£ãã¢ã€ã³ã³ããã¹ãããŸãã
- ææ°æ å ±ãåžžã«ææ¡ããïŒææ°ã®PWA仿§ãšãã¹ããã©ã¯ãã£ã¹ã«åŸããŸãã
- ããã©ãŒãã³ã¹æé©åãéµïŒã¢ã€ã³ã³ãå§çž®ããŠãã¡ã€ã«ãµã€ãºãåæžããèªã¿èŸŒã¿æéãæé©åããŸãã
å°æ¥ã®ãã¬ã³ãïŒ
- åçã¢ã€ã³ã³ã®ã«ã¹ã¿ãã€ãºïŒé«åºŠãªåçã¢ã€ã³ã³ã«ã¹ã¿ãã€ãºãªãã·ã§ã³ã®ãµããŒãã匷åãããããšãäºæ³ãããŸãã
- Service Workerã®çµ±åïŒService Workerã¯ãåçã¢ã€ã³ã³ã®ç®¡çãšæŽæ°ã«ãããŠããã倧ããªåœ¹å²ãæããã§ãããã
- ããæŽç·Žãããã¢ãã¡ãŒã·ã§ã³ïŒå°æ¥ã®ã€ãã¬ãŒã·ã§ã³ã§ã¯ãããè€éãªã¢ã€ã³ã³ã¢ãã¡ãŒã·ã§ã³ã®ãµããŒããæ€èšãããå¯èœæ§ããããŸãã
çµè«
ã¢ãããã£ãã¢ã€ã³ã³ã®å®è£ ã¯ãã¢ãã³ã§é åçããã€ã¯ãã¹ãã©ãããã©ãŒã ãªPWAãæ§ç¯ããããã«äžå¯æ¬ ã§ãããã®ã¬ã€ãã§æŠèª¬ããæŠå¿µãçè§£ãããã¹ããã©ã¯ãã£ã¹ã«åŸããããŒã«ãšãã¯ããã¯ã䜿çšããããšã§ããŠãŒã¶ãŒã®ããã€ã¹ã«ã·ãŒã ã¬ã¹ã«çµ±åããããã©ã³ãèªèãé«ããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããPWAã¢ã€ã³ã³ãäœæã§ããŸããã·ã³ãã«ãªéçã¢ã€ã³ã³ããå®å šã«åçãªãœãªã¥ãŒã·ã§ã³ãŸã§ãã¢ãããã£ãã¢ã€ã³ã³ã¯ãäžçäžã®ãŠãŒã¶ãŒã«é åçãªãŠã§ããšã¯ã¹ããªãšã³ã¹ãæäŸããããšåªããçŸä»£ã®ãŠã§ãéçºè ã«ãšã£ãŠåŒ·åãªããŒã«ã§ãã