ããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒã®å®è£ ã«é¢ããå æ¬çãªã¬ã€ããã³ã¢ã³ã³ã»ããããµãŒãã¹ã¯ãŒã«ãŒããããã§ã¹ããã¡ã€ã«ãããã·ã¥éç¥ãã°ããŒãã«ãªãŒãã£ãšã³ã¹åãã®ãã¹ããã©ã¯ãã£ã¹ãç¶²çŸ ã
ããã°ã¬ãã·ããŠã§ãã¢ããªïŒã°ããŒãã«éçºè åãå®å šå®è£ ã¬ã€ã
ããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒã¯ãåŸæ¥ã®ãŠã§ããµã€ããšãã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®å¢çç·ãææ§ã«ãããŠã§ãéçºã«ããããã©ãã€ã ã·ããã衚ããŠããŸããä¿¡é Œæ§ãã€ã³ã¹ããŒã«å¯èœæ§ããšã³ã²ãŒãžã¡ã³ãã«ãã£ãŠç¹åŸŽä»ããããã匷åããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããã€ã³ã¿ãŒãããæ¥ç¶ãšããã€ã¹ã®æ©èœãç°ãªãã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«ãªãŒãããããã®çæ³çãªãœãªã¥ãŒã·ã§ã³ãšãªã£ãŠããŸãã
ããã°ã¬ãã·ããŠã§ãã¢ããªãšã¯ïŒ
PWAã¯ãææ°ã®ãŠã§ãæšæºã掻çšããŠãã€ãã£ãã¢ããªã®ãããªãšã¯ã¹ããªãšã³ã¹ãæäŸãããŠã§ãã¢ããªã±ãŒã·ã§ã³ã§ãããããã¯æ¬¡ã®ãšããã§ãã
- ä¿¡é Œæ§ïŒãµãŒãã¹ã¯ãŒã«ãŒã䜿çšããŠãã€ã³ã¹ã¿ã³ãã«èªã¿èŸŒã¿ããªãã©ã€ã³ãŸãã¯äœå質ã®ãããã¯ãŒã¯ã§ãåäœããŸãã
- ã€ã³ã¹ããŒã«å¯èœïŒãŠãŒã¶ãŒã®ããŒã ç»é¢ã«è¿œå ã§ããããããã€ãã£ãã¢ããªã®ãããªãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- ãšã³ã²ãŒãžã¡ã³ãïŒããã·ã¥éç¥ãªã©ã®æ©èœã§ãŠãŒã¶ãŒãåãšã³ã²ãŒãžããŸãã
ãã€ãã£ãã¢ããªãšã¯ç°ãªããPWAã¯æ€çŽ¢ãšã³ãžã³ãéããŠçºèŠå¯èœã§ãURLãä»ããŠç°¡åã«å ±æã§ãããŠãŒã¶ãŒãã¢ããªã¹ãã¢ãçµç±ããå¿ èŠã¯ãããŸãããããã«ããããªãŒããæ¡å€§ããããšããŠããäŒæ¥ã«ãšã£ãŠãã¢ã¯ã»ã¹ããããè²»çšå¯Ÿå¹æã®é«ããœãªã¥ãŒã·ã§ã³ãšãªããŸãã
PWAã®èåŸã«ããã³ã¢ãã¯ãããžãŒ
PWAã¯ã3ã€ã®ã³ã¢ãã¯ãããžãŒã«åºã¥ããŠæ§ç¯ãããŠããŸãã
1. HTTPS
ã»ãã¥ãªãã£ã¯æéèŠã§ããPWAã¯ãçèŽãé²ããããŒã¿ã®æŽåæ§ã確ä¿ããããã«ãå¿ ãHTTPSçµç±ã§æäŸãããå¿ èŠããããŸããããã¯ããµãŒãã¹ã¯ãŒã«ãŒãæ©èœããããã®åºæ¬çãªèŠä»¶ã§ãã
2. ãµãŒãã¹ã¯ãŒã«ãŒ
ãµãŒãã¹ã¯ãŒã«ãŒã¯ãã¡ã€ã³ãã©ãŠã¶ãŒã¹ã¬ãããšã¯å¥ã«ãããã¯ã°ã©ãŠã³ãã§å®è¡ãããJavaScriptãã¡ã€ã«ã§ãããŠã§ãã¢ããªã±ãŒã·ã§ã³ãšãããã¯ãŒã¯éã®ãããã·ãµãŒããŒãšããŠæ©èœããæ¬¡ã®ãããªæ©èœãå¯èœã«ããŸãã
- ãã£ãã·ã³ã°ïŒãªãã©ã€ã³ã¢ã¯ã»ã¹ãšé«éãªèªã¿èŸŒã¿æéãæäŸããããã«ãã¢ã»ããïŒHTMLãCSSãJavaScriptãç»åïŒãä¿åããŸãã
- ããã¯ã°ã©ãŠã³ãåæïŒãŠãŒã¶ãŒããªãã©ã€ã³ã®å Žåã§ããã¢ã¯ã·ã§ã³ãå®è¡ã§ããããã«ããŸããããšãã°ããŠãŒã¶ãŒããªãã©ã€ã³ã§ã¡ãŒã«ãäœæãããšããµãŒãã¹ã¯ãŒã«ãŒã¯ããã€ã¹ãæ¥ç¶ãå埩ãããšãã«èªåçã«éä¿¡ããŸãã
- ããã·ã¥éç¥ïŒã¢ããªã±ãŒã·ã§ã³ãç©æ¥µçã«äœ¿çšããŠããªãå Žåã§ããã¿ã€ã ãªãŒãªæŽæ°ãšãšã³ã²ãŒãžã¡ã³ãã®é«ãã³ã³ãã³ãããŠãŒã¶ãŒã«é ä¿¡ããŸãã
ãµãŒãã¹ã¯ãŒã«ãŒã®ã©ã€ããµã€ã¯ã«ïŒãµãŒãã¹ã¯ãŒã«ãŒã®ã©ã€ããµã€ã¯ã«ïŒç»é²ãã€ã³ã¹ããŒã«ãã¢ã¯ãã£ããŒã·ã§ã³ãæŽæ°ïŒãçè§£ããããšã¯ã广çãªPWAå®è£ ã«ãšã£ãŠéèŠã§ãã誀ã£ã管çã¯ããã£ãã·ã³ã°ã®åé¡ãäºæããªãåäœã«ã€ãªããå¯èœæ§ããããŸããæŽæ°ã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
3. ãŠã§ãã¢ããªãããã§ã¹ã
ãŠã§ãã¢ããªãããã§ã¹ãã¯ãPWAã«é¢ããã¡ã¿ããŒã¿ãæäŸããJSONãã¡ã€ã«ã§ããäŸïŒ
- ååïŒããŒã ç»é¢ã«è¡šç€ºãããã¢ããªã±ãŒã·ã§ã³ã®ååã
- çãååïŒã¹ããŒã¹ãéãããŠããå Žåã«äœ¿çšããããååã®çãããŒãžã§ã³ã
- ã¢ã€ã³ã³ïŒããŸããŸãªããã€ã¹çšã®ããŸããŸãªãµã€ãºã®ã¢ã€ã³ã³ã®ã»ããã
- éå§URLïŒãŠãŒã¶ãŒãããŒã ç»é¢ããPWAãèµ·åãããšãã«èªã¿èŸŒãŸããURLã
- 衚瀺ïŒPWAã®è¡šç€ºæ¹æ³ãæå®ããŸãïŒäŸïŒã¹ã¿ã³ãã¢ãã³ããã«ã¹ã¯ãªãŒã³ãæå°UIïŒãã¹ã¿ã³ãã¢ãã³ã¢ãŒãã§ã¯ããã©ãŠã¶ã®ã¢ãã¬ã¹ããŒãšããã²ãŒã·ã§ã³ãã¿ã³ãåé€ããããããã€ãã£ãã¢ããªã®ãããªãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸãã
- ããŒãã®è²ïŒãã©ãŠã¶ã®ã¢ãã¬ã¹ããŒãšã¹ããŒã¿ã¹ããŒã®è²ãå®çŸ©ããŸãã
- èæ¯è²ïŒã¢ããªã±ãŒã·ã§ã³ã®èªã¿èŸŒã¿äžã«äœ¿çšããèæ¯è²ãæå®ããŸãã
å®è£ æé ïŒã·ã³ãã«ãªPWAã®æ§ç¯
ã·ã³ãã«ãªPWAãæ§ç¯ããæé ã説æããŸãã
æé 1ïŒHTTPSã®èšå®
ãŠã§ããµã€ããHTTPSçµç±ã§æäŸãããŠããããšã確èªããŠãã ãããLet's Encryptããç¡æã®SSLèšŒææžãååŸã§ããŸãã
æé 2ïŒãŠã§ãã¢ããªãããã§ã¹ãã®äœæïŒmanifest.jsonïŒ
`manifest.json`ãšããååã®ãã¡ã€ã«ãäœæããæ¬¡ã®ã³ãŒãã远å ããŸãã
{
"name": "My Simple PWA",
"short_name": "PWA",
"icons": [
{
"src": "icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "icon-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"start_url": "/index.html",
"display": "standalone",
"theme_color": "#ffffff",
"background_color": "#ffffff"
}
`icon-192x192.png`ãš`icon-512x512.png`ãå®éã®ã¢ã€ã³ã³ãã¡ã€ã«ã«çœ®ãæããŸãããããã®ã¢ã€ã³ã³ãããŸããŸãªãµã€ãºã§çæããå¿ èŠããããŸããReal Favicon Generatorãªã©ã®ãªã³ã©ã€ã³ããŒã«ã圹ç«ã¡ãŸãã
æé 3ïŒHTMLã§ãããã§ã¹ããã¡ã€ã«ããªã³ã¯ãã
`index.html`ãã¡ã€ã«ã®`<head>`ã»ã¯ã·ã§ã³ã«æ¬¡ã®è¡ã远å ããŸãã
<link rel="manifest" href="/manifest.json">
æé 4ïŒãµãŒãã¹ã¯ãŒã«ãŒã®äœæïŒservice-worker.jsïŒ
`service-worker.js`ãšããååã®ãã¡ã€ã«ãäœæããæ¬¡ã®ã³ãŒãã远å ããŸãã
const CACHE_NAME = 'my-pwa-cache-v1';
const urlsToCache = [
'/',
'/index.html',
'/style.css',
'/script.js',
'/icon-192x192.png',
'/icon-512x512.png'
];
self.addEventListener('install', function(event) {
// Perform install steps
event.waitUntil(
caches.open(CACHE_NAME)
.then(function(cache) {
console.log('Opened cache');
return cache.addAll(urlsToCache);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
caches.match(event.request)
.then(function(response) {
// Cache hit - return response
if (response) {
return response;
}
// IMPORTANT: If we're here, it means the request was not found in the cache.
return fetch(event.request).then(
function(response) {
// Check if we received a valid response
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// IMPORTANT: Clone the response. A response is a stream
// and because we want the browser to consume the response
// as well as the cache consuming the response, we need
// to clone it so we have two independent copies.
var responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(function(cache) {
cache.put(event.request, responseToCache);
});
return response;
}
);
})
);
});
self.addEventListener('activate', function(event) {
var cacheWhitelist = [CACHE_NAME];
event.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.map(function(cacheName) {
if (cacheWhitelist.indexOf(cacheName) === -1) {
return caches.delete(cacheName);
}
})
);
})
);
});
ãã®ãµãŒãã¹ã¯ãŒã«ãŒã¯ãã€ã³ã¹ããŒã«äžã«æå®ããããã¡ã€ã«ããã£ãã·ã¥ãããŠãŒã¶ãŒããªãã©ã€ã³ã®å ŽåãŸãã¯äœéãªãããã¯ãŒã¯ã®å Žåã«ãã£ãã·ã¥ããæäŸããŸãã
æé 5ïŒJavaScriptã§ãµãŒãã¹ã¯ãŒã«ãŒãç»é²ãã
`script.js`ãã¡ã€ã«ã«æ¬¡ã®ã³ãŒãã远å ããŸãã
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
navigator.serviceWorker.register('/service-worker.js')
.then(function(registration) {
// Registration was successful
console.log('ServiceWorker registration successful with scope: ', registration.scope);
},
function(err) {
// registration failed :(
console.log('ServiceWorker registration failed: ', err);
});
});
}
ãã®ã³ãŒãã¯ããã©ãŠã¶ããµãŒãã¹ã¯ãŒã«ãŒããµããŒãããŠãããã©ããã確èªãã`service-worker.js`ãã¡ã€ã«ãç»é²ããŸãã
æé 6ïŒPWAã®ãã¹ã
PWAããµããŒããããã©ãŠã¶ïŒäŸïŒChromeãFirefoxãSafariïŒã§ãŠã§ããµã€ããéããŸããéçºè ããŒã«ãéãããApplicationãã¿ãã§ããµãŒãã¹ã¯ãŒã«ãŒãæ£ããç»é²ããããããã§ã¹ããã¡ã€ã«ãèªã¿èŸŒãŸããŠãããã©ããã確èªããŸãã
ããã§ããã©ãŠã¶ã«ãããŒã ç»é¢ã«è¿œå ãããã³ããã衚瀺ãããŸãããã®ããã³ãããã¯ãªãã¯ãããšãPWAãããã€ã¹ã«ã€ã³ã¹ããŒã«ãããŸãã
é«åºŠãªPWAæ©èœãšèæ ®äºé
ããã·ã¥éç¥
ããã·ã¥éç¥ã¯ãPWAã§ãŠãŒã¶ãŒãåãšã³ã²ãŒãžããã匷åãªæ¹æ³ã§ããããã·ã¥éç¥ãå®è£ ããã«ã¯ã次ã®ããšãè¡ãå¿ èŠããããŸãã
- ããã·ã¥APIããŒã®ååŸïŒããã·ã¥éç¥ãåŠçããã«ã¯ãFirebase Cloud MessagingïŒFCMïŒãªã©ã®ãµãŒãã¹ã䜿çšããå¿ èŠããããŸããããã«ã¯ãã¢ã«ãŠã³ãã®äœæãšAPIããŒã®ååŸãå¿ èŠã§ãã
- ãŠãŒã¶ãŒã®ãµãã¹ã¯ã©ã€ãïŒPWAã§ãããã·ã¥éç¥ãåä¿¡ããããã®ãŠãŒã¶ãŒããã®èš±å¯ãèŠæ±ããããã·ã¥ãµãŒãã¹ã«ãµãã¹ã¯ã©ã€ããããå¿ èŠããããŸãã
- ããã·ã¥ã€ãã³ãã®åŠçïŒãµãŒãã¹ã¯ãŒã«ãŒã§ãããã·ã¥ã€ãã³ãããªãã¹ã³ãããŠãŒã¶ãŒã«éç¥ã衚瀺ããå¿ èŠããããŸãã
äŸïŒç°¡ç¥å - Firebaseã®äœ¿çšïŒïŒ
`service-worker.js`ïŒ
// Import the Firebase libraries
importScripts('https://www.gstatic.com/firebasejs/9.6.11/firebase-app-compat.js');
importScripts('https://www.gstatic.com/firebasejs/9.6.11/firebase-messaging-compat.js');
// Initialize Firebase
const firebaseConfig = {
apiKey: "YOUR_API_KEY",
authDomain: "YOUR_AUTH_DOMAIN",
projectId: "YOUR_PROJECT_ID",
storageBucket: "YOUR_STORAGE_BUCKET",
messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
appId: "YOUR_APP_ID",
measurementId: "YOUR_MEASUREMENT_ID"
};
firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();
messaging.onBackgroundMessage(function(payload) {
console.log('[firebase-messaging-sw.js] Received background message ', payload);
// Customize notification here
const notificationTitle = 'Background Message Title';
const notificationOptions = {
body: 'Background Message body.',
icon: '/icon-512x512.png'
};
self.registration.showNotification(notificationTitle, notificationOptions);
});
éèŠïŒãã¬ãŒã¹ãã«ããŒã®å€ãå®éã®Firebaseèšå®ã«çœ®ãæããŠãã ããããã®äŸã¯ãããã¯ã°ã©ãŠã³ãã¡ãã»ãŒãžã®åŠçã瀺ããŠããŸããã¡ã€ã³ã®JavaScriptã³ãŒãã§ãµãã¹ã¯ãªãã·ã§ã³ããžãã¯ãå®è£ ããå¿ èŠããããŸãã
ããã¯ã°ã©ãŠã³ãåæ
ããã¯ã°ã©ãŠã³ãåæã«ããããŠãŒã¶ãŒããªãã©ã€ã³ã®å Žåã§ããPWAãã¿ã¹ã¯ãå®è¡ã§ããŸããããã¯ã次ã®ãããªã·ããªãªã§åœ¹ç«ã¡ãŸãã
- ãã©ãŒã ã®éä¿¡ïŒãŠãŒã¶ãŒããªãã©ã€ã³ã®å Žåã§ããã©ãŒã ãéä¿¡ã§ããããã«ããŸãããµãŒãã¹ã¯ãŒã«ãŒã¯ãã©ãŒã ããŒã¿ãä¿åããããã€ã¹ãæ¥ç¶ãå埩ãããšãã«éä¿¡ããŸãã
- ããŒã¿ã®æŽæ°ïŒããã¯ã°ã©ãŠã³ãã§ãµãŒããŒãšããŒã¿ãåæããŸãã
ããã¯ã°ã©ãŠã³ãåæã䜿çšããã«ã¯ããµãŒãã¹ã¯ãŒã«ãŒã§`sync`ã€ãã³ããç»é²ããåæããžãã¯ãåŠçããå¿ èŠããããŸãã
ãªãã©ã€ã³ãµããŒãæŠç¥
PWAã§ãªãã©ã€ã³ãµããŒããæäŸããããã€ãã®æŠç¥ããããŸãã
- ãã£ãã·ã¥ãã¡ãŒã¹ãïŒæåã«ãã£ãã·ã¥ããã³ã³ãã³ããæäŸããããšããŸããã³ã³ãã³ãããã£ãã·ã¥ã«ãªãå Žåã¯ããããã¯ãŒã¯ãããã§ããããŠãå°æ¥ã®äœ¿çšã®ããã«ãã£ãã·ã¥ã«ä¿åããŸããããã¯ãäžèšã®åºæ¬çãªäŸã§äœ¿çšãããŠããæŠç¥ã§ãã
- ãããã¯ãŒã¯ãã¡ãŒã¹ãïŒæåã«ãããã¯ãŒã¯ããã³ã³ãã³ãããã§ããããããšããŸãããããã¯ãŒã¯ãå©çšã§ããªãå Žåã¯ããã£ãã·ã¥ããã³ã³ãã³ããæäŸããŸããããã¯ãé »ç¹ã«æŽæ°ãããã³ã³ãã³ãã«åœ¹ç«ã¡ãŸãã
- ãã£ãã·ã¥ã®ã¿ïŒãã£ãã·ã¥ããã®ã¿ã³ã³ãã³ããæäŸããŸããããã¯ããã£ãã«å€ãããªãéçã¢ã»ããã«åœ¹ç«ã¡ãŸãã
- ãããã¯ãŒã¯ã®ã¿ïŒãããã¯ãŒã¯ããã®ã¿ã³ã³ãã³ããæäŸããŸããããã¯ãåžžã«ææ°ã§ããå¿ èŠãããã³ã³ãã³ãã«åœ¹ç«ã¡ãŸãã
æé©ãªæŠç¥ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ç¹å®ã®èŠä»¶ã«ãã£ãŠç°ãªããŸãã
PWAã®æŽæ°
ãµãŒãã¹ã¯ãŒã«ãŒã®æŽæ°ã¯ãPWAã®ã¡ã³ããã³ã¹ã®éèŠãªéšåã§ãããã©ãŠã¶ã`service-worker.js`ãã¡ã€ã«ïŒ1ãã€ãã®å€æŽã§ãã£ãŠãïŒã®å€æŽãæ€åºãããšãæŽæ°ããã»ã¹ãããªã¬ãŒãããŸããæ°ãããµãŒãã¹ã¯ãŒã«ãŒã¯ããã¯ã°ã©ãŠã³ãã§ã€ã³ã¹ããŒã«ãããŸããããŠãŒã¶ãŒãPWAã«ã¢ã¯ã»ã¹ããããå€ããµãŒãã¹ã¯ãŒã«ãŒã«ãã£ãŠå¶åŸ¡ãããŠãããã¹ãŠã®æ¢åã®ã¿ããéãããããŸã§ã¢ã¯ãã£ãã«ãªããŸããã
æ°ãããµãŒãã¹ã¯ãŒã«ãŒã®`install`ã€ãã³ãã§`self.skipWaiting()`ãåŒã³åºãã`activate`ã€ãã³ãã§`clients.claim()`ãåŒã³åºãããšã§ãå³ææŽæ°ã匷å¶ã§ããŸãããã ããããã¯ãŠãŒã¶ãŒã®ãšã¯ã¹ããªãšã³ã¹ãäžæããå¯èœæ§ããããããæ³šæããŠäœ¿çšããŠãã ããã
PWAã®SEOã«é¢ããèæ ®äºé
PWAã¯åºæ¬çã«ãŠã§ããµã€ãã§ãããããäžè¬çã«SEOã«é©ããŠããŸãããã ããããã€ãã®ç¹ãèæ ®ããå¿ èŠããããŸãã
- PWAãæ€åºå¯èœã§ããããšã確èªããïŒãŠã§ããµã€ããæ€çŽ¢ãšã³ãžã³ã«ãã£ãŠã¯ããŒã«å¯èœã§ããããšã確èªããŠãã ããã
- ã»ãã³ãã£ãã¯HTMLã䜿çšããïŒé©åãªHTMLã¿ã°ã䜿çšããŠã³ã³ãã³ããæ§é åããŸãã
- ã¢ãã€ã«çšã«æé©åããïŒPWAãã¬ã¹ãã³ã·ãã§ãããã¢ãã€ã«ããã€ã¹ã§åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã確èªããŠãã ããã
- 説æçãªã¿ã€ãã«ãšã¡ã¿ãã£ã¹ã¯ãªãã·ã§ã³ã䜿çšããïŒæ€çŽ¢ãšã³ãžã³ãPWAã®å 容ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
- æ§é åããŒã¿ããŒã¯ã¢ãããå®è£ ããïŒã³ã³ãã³ãã«é¢ããè¿œå æ å ±ãæ€çŽ¢ãšã³ãžã³ã«æäŸããŸãã
ã¯ãã¹ãã©ãŠã¶äºææ§
PWAã¯ãŠã§ãæšæºã«åºã¥ããŠããäžæ¹ã§ããã©ãŠã¶ã®ãµããŒãã¯ç°ãªãå ŽåããããŸããPWAãããŸããŸãªãã©ãŠã¶ãšããã€ã¹ã§æ£ããåäœããããšã確èªããããã«ãã¹ãããããšãéèŠã§ããç¹å®ã®æ©èœããµããŒãããŠããªããã©ãŠã¶ã§ã¯ãæ©èœæ€åºã䜿çšããŠæ©èœãé©åã«äœäžãããŸãã
PWAã®ãããã°
ãµãŒãã¹ã¯ãŒã«ãŒã®éåæçãªæ§è³ªã«ãããPWAã®ãããã°ã¯å°é£ãªå ŽåããããŸãããã©ãŠã¶ã®éçºè ããŒã«ã䜿çšããŠããµãŒãã¹ã¯ãŒã«ãŒã®ç»é²ããã£ãã·ã¥ããããã¯ãŒã¯ãªã¯ãšã¹ããæ€æ»ããŸããã³ã³ãœãŒã«ãã°ãšãšã©ãŒã¡ãã»ãŒãžã«æ³šæããŠãã ããã
äžçäžã®PWAã®äŸ
äžçäžã®å€ãã®äŒæ¥ãPWAãå®è£ ããããšã«æåããŠããŸãã以äžã«ããã€ãã®äŸã瀺ããŸãã
- Twitter LiteïŒããŒã¿ãä¿åããäœéãªæ¥ç¶ã§é«éãªãšã¯ã¹ããªãšã³ã¹ãæäŸããPWAãç¹ã«çºå±éäžåœã®ãŠãŒã¶ãŒã«æçã§ãã
- StarbucksïŒãªãã©ã€ã³ã¡ãã¥ãŒã®é²èŠ§ãšæ³šæãšã¯ã¹ããªãšã³ã¹ãæäŸããã°ããŒãã«ãªé¡§å®¢ã®ã¢ã¯ã»ã·ããªãã£ãšå©äŸ¿æ§ãåäžãããŠããŸãã
- TinderïŒPWAã«ãããèªã¿èŸŒã¿æéãççž®ããããšã³ã²ãŒãžã¡ã³ããåäžãããããã¯ãŒã¯ã®ç¶æ ã«é¢ä¿ãªããããå¹ åºããªãŒãã£ãšã³ã¹ã«ãªãŒãã§ããŸãã
- AliExpressïŒãŠã§ãããçŽæ¥ãã€ã³ã¹ããŒã«å¯èœãªã¢ããªã®ãããªãšã¯ã¹ããªãšã³ã¹ãæäŸããããšã§ãã³ã³ããŒãžã§ã³çãšãŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããåäžããŸããã
- MakeMyTripïŒã€ã³ãïŒïŒPWAã¯ãã³ã³ããŒãžã§ã³çãå€§å¹ ã«åäžãããããŒãžã®èªã¿èŸŒã¿æéãççž®ããå°åã§äžè²«æ§ã®ãªãã€ã³ã¿ãŒãããæ¥ç¶ãšãã課é¡ã«å¯ŸåŠããŸããã
çµè«ïŒãŠã§ãã®æªæ¥ãåãå ¥ãã
ããã°ã¬ãã·ããŠã§ãã¢ããªã¯ãåŸæ¥ã®ãŠã§ããµã€ããšãã€ãã£ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«ä»£ããé åçãªéžæè¢ãæäŸããŸããåªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãããã©ãŒãã³ã¹ã®åäžããšã³ã²ãŒãžã¡ã³ãã®åäžãæäŸããã°ããŒãã«ãªãŒãã£ãšã³ã¹ã«ãªãŒãããããšããŠããäŒæ¥ã«ãšã£ãŠè²ŽéãªããŒã«ãšãªã£ãŠããŸãããã®ã¬ã€ãã§æŠèª¬ãããŠããã³ã¢ã³ã³ã»ãããçè§£ããå®è£ æé ã«åŸãããšã§ãéçºè ã¯ä¿¡é Œæ§ãé«ããã€ã³ã¹ããŒã«å¯èœã§ããšã³ã²ãŒãžã¡ã³ãã®é«ãPWAãäœæãã仿¥ã®ã¢ãã€ã«ãã¡ãŒã¹ãã®äžçã§ç«¶äºåãé«ããããšãã§ããŸãããŠã§ãã®æªæ¥ãåãå ¥ãã仿¥ããç¬èªã®ããã°ã¬ãã·ããŠã§ãã¢ããªã®æ§ç¯ãéå§ããŠãã ããïŒ