diff --git a/src/web/app/sw.js b/src/web/app/sw.js
index a7c84d022a..1b3220d23d 100644
--- a/src/web/app/sw.js
+++ b/src/web/app/sw.js
@@ -4,9 +4,39 @@
 
 import composeNotification from './common/scripts/compose-notification';
 
+// キャッシュするリソース
+const cachee = [
+	'/'
+];
+
 // インストールされたとき
-self.addEventListener('install', () => {
+self.addEventListener('install', ev => {
 	console.info('installed');
+
+	// Cache
+	ev.waitUntil(caches.open(_VERSION_).then(cache => cache.addAll(cachee)));
+});
+
+// アクティベートされたとき
+self.addEventListener('activate', ev => {
+	// Clean up old caches
+	ev.waitUntil(
+		caches.keys().then(keys => Promise.all(
+			keys
+				.filter(key => key != _VERSION_)
+				.map(key => caches.delete(key))
+		))
+	);
+});
+
+// リクエストが発生したとき
+self.addEventListener('fetch', ev => {
+	ev.respondWith(
+		// キャッシュがあるか確認してあればそれを返す
+		caches.match(ev.request).then(response =>
+			response || fetch(ev.request)
+		)
+	);
 });
 
 // プッシュ通知を受け取ったとき