Skip to content

Commit fef69e6

Browse files
authored
Merge pull request #1435 from future-architect/feature
update
2 parents c88d527 + 7e7e62c commit fef69e6

19 files changed

+19
-17
lines changed

source/_posts/20241129a_Vue3で作ったWebサイトを_Vite_PWA_でPWA化する方法_2024年版.md renamed to source/_posts/20241127a_Vue3で作ったWebサイトを_Vite_PWA_でPWA化する方法_2024年版.md

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ tag:
88
- Vite
99
category:
1010
- Programming
11-
thumbnail: /images/20241129a/thumbnail.png
11+
thumbnail: /images/20241127a/thumbnail.png
1212
author: 大岩潤矢
1313
lede: "Vue3で作ったWebサイトをPWA(Progressive Web Apps)化する方法を紹介します。"
1414
---
1515
## はじめに
1616

17-
<img src="/images/20241129a/ogp-2.png" alt="ogp-2.png" width="1200" height="730" loading="lazy">
17+
<img src="/images/20241127a/ogp-2.png" alt="ogp-2.png" width="1200" height="730" loading="lazy">
1818

1919
本記事は [Vue連載2024](/articles/20241125a/) 3日目の記事です。
2020

@@ -32,7 +32,7 @@ Progressive Web Apps、直訳すると「革新的なWebアプリ」です。か
3232

3333
Google Trendsによると、PWAは2017年頃から盛り上がりを見せ、2020年頃に一度ピークが落ち着いたものの、最近じわじわと話題が盛り返しているようです。2017年〜2020年頃にPWAに触れたものの、それっきり追っていないという方も多いのではないでしょうか?
3434

35-
<img src="/images/20241129a/Pasted_image_20241125132625.png" alt="Pasted_image_20241125132625.png" width="1200" height="713" loading="lazy">
35+
<img src="/images/20241127a/Pasted_image_20241125132625.png" alt="Pasted_image_20241125132625.png" width="1200" height="713" loading="lazy">
3636

3737
個人的な主観とはなりますが、一時期PWAが次世代のアプリの姿として持て囃されていたものの、日本の約半数のシェアを占めるiOSがPWAサポートに消極的であったことが採用の障壁となり話題も落ち着いたものと推測します。
3838

@@ -42,7 +42,7 @@ AndroidのGoogle ChromeにおいてPWAサポートが始まったのが2015年
4242

4343
しかし、iOSのバージョンが上がるにつれてそれらの問題も徐々に改善していきます。特に昨今一番のアップデートとして、バックグラウンドでのPush通知に対応したことが挙げられます。2023年3月27日リリースのiOS16.4から、Service WorkerでバックグラウンドのPush通知を受信する `ServiceWorkerRegistration.showNotification()` に対応しました。これにより、iOSでのPWA実現の一番の障壁だったPush通知がそれなりに動くようになり、一層PWAが完成に近づいたと言えるでしょう。
4444

45-
<img src="/images/20241129a/Pasted_image_20241125133903.png" alt="Pasted_image_20241125133903.png" width="1200" height="615" loading="lazy">
45+
<img src="/images/20241127a/Pasted_image_20241125133903.png" alt="Pasted_image_20241125133903.png" width="1200" height="615" loading="lazy">
4646

4747
https://developer.mozilla.org/ja/docs/Web/API/ServiceWorkerRegistration/showNotification
4848

@@ -54,7 +54,7 @@ https://developer.mozilla.org/ja/docs/Web/API/ServiceWorkerRegistration/showNoti
5454

5555
その前に、今回利用する Vite PWA について紹介します。
5656

57-
<img src="/images/20241129a/Pasted_image_20241125170224.png" alt="Pasted_image_20241125170224.png" width="1200" height="401" loading="lazy">
57+
<img src="/images/20241127a/Pasted_image_20241125170224.png" alt="Pasted_image_20241125170224.png" width="1200" height="401" loading="lazy">
5858

5959
https://vite-pwa-org.netlify.app/
6060

@@ -69,15 +69,15 @@ https://vite-pwa-org.netlify.app/
6969
7070
本来であれば自分で用意しないといけない複雑な設定ファイルを、Viteのコンフィグファイルにオプションを記載するだけで自動で出力してくれるというすぐれものです。
7171

72-
<img src="/images/20241129a/Pasted_image_20241125200146.png" alt="Pasted_image_20241125200146.png" width="1200" height="699" loading="lazy">
72+
<img src="/images/20241127a/Pasted_image_20241125200146.png" alt="Pasted_image_20241125200146.png" width="1200" height="699" loading="lazy">
7373

7474
PWAはウェブマニフェストファイルとServiceWorkerのファイルから成り立ちます。前者はPWAをインストールする際に使われるメタ情報的な役割で、後者はキャッシュ対応やバックグラウンド処理等のJSコードです。Vite PWAはこの2つのファイルを自動生成してくれます。
7575

7676
### アプリを準備する
7777

7878
まずはVue3で作成したアプリをPWA化してみましょう。ここでは、簡易的に天気予報APIを叩いて各地の天気予報を取得する簡単なアプリを用意しました。
7979

80-
<img src="/images/20241129a/Pasted_image_20241125170033.png" alt="Pasted_image_20241125170033.png" width="1200" height="672" loading="lazy">
80+
<img src="/images/20241127a/Pasted_image_20241125170033.png" alt="Pasted_image_20241125170033.png" width="1200" height="672" loading="lazy">
8181

8282
ソースコードとデモサイトは以下に配置しています。
8383

@@ -122,11 +122,11 @@ export default defineConfig({
122122
123123
このように `dev-sw.js` がService Workerとして読み込まれている事がわかります。
124124
125-
<img src="/images/20241129a/Pasted_image_20241125173130.png" alt="Pasted_image_20241125173130.png" width="1200" height="621" loading="lazy">
125+
<img src="/images/20241127a/Pasted_image_20241125173130.png" alt="Pasted_image_20241125173130.png" width="1200" height="621" loading="lazy">
126126
127127
ターミナルのほうを見てみると、 `sw.js``workbox-xxxxxxxx.js` が自動生成されていることがわかります。
128128
129-
<img src="/images/20241129a/Pasted_image_20241125173237.png" alt="Pasted_image_20241125173237.png" width="889" height="180" loading="lazy">
129+
<img src="/images/20241127a/Pasted_image_20241125173237.png" alt="Pasted_image_20241125173237.png" width="889" height="180" loading="lazy">
130130
131131
### PWAをインストールできるようにする(Webマニフェスト設定)
132132
@@ -152,11 +152,11 @@ export default defineConfig({
152152

153153
記載できたら、 `npx pwa-assets-generator --preset minimal-2023` で実行しましょう。
154154

155-
<img src="/images/20241129a/Pasted_image_20241125203153.png" alt="Pasted_image_20241125203153.png" width="1072" height="746" loading="lazy">
155+
<img src="/images/20241127a/Pasted_image_20241125203153.png" alt="Pasted_image_20241125203153.png" width="1072" height="746" loading="lazy">
156156

157157
正しく書き出せていそうです。
158158

159-
<img src="/images/20241129a/Pasted_image_20241125203351.png" alt="Pasted_image_20241125203351.png" width="1200" height="710" loading="lazy">
159+
<img src="/images/20241127a/Pasted_image_20241125203351.png" alt="Pasted_image_20241125203351.png" width="1200" height="710" loading="lazy">
160160

161161
後は `vite.config.ts` に設定を記載するだけです。
162162

@@ -205,15 +205,15 @@ https://developer.mozilla.org/en-US/docs/Web/Manifest
205205

206206
保存したら、再度開発サーバを立ち上げてみましょう。アドレスバー横にアイコンが表示され、クリックするとPWAのインストールダイアログが表示されます。
207207

208-
<img src="/images/20241129a/Pasted_image_20241125204440.png" alt="Pasted_image_20241125204440.png" width="544" height="242" loading="lazy">
208+
<img src="/images/20241127a/Pasted_image_20241125204440.png" alt="Pasted_image_20241125204440.png" width="544" height="242" loading="lazy">
209209

210210
iPhoneでも試してみましょう。cloudflaredを使って外からアクセスできるようにして、ページを開いて「ホーム画面に追加」をタップします。
211211

212-
<img src="/images/20241129a/スライド3.png" alt="スライド3.png" width="1200" height="675" loading="lazy">
212+
<img src="/images/20241127a/スライド3.png" alt="スライド3.png" width="1200" height="675" loading="lazy">
213213

214214
問題なく表示できていますね。
215215

216-
<img src="/images/20241129a/スライド4.png" alt="スライド4.png" width="1200" height="675" loading="lazy">
216+
<img src="/images/20241127a/スライド4.png" alt="スライド4.png" width="1200" height="675" loading="lazy">
217217

218218
### プリキャッシュを導入する
219219

@@ -279,11 +279,11 @@ files generated
279279
280280
書き出された `dist/sw.js` を見てみると、 `e.precacheAndRoute()` の引数に、書き出されたファイルが一覧されているようです。
281281
282-
<img src="/images/20241129a/Pasted_image_20241128142353.png" alt="Pasted_image_20241128142353.png" width="1200" height="1165" loading="lazy">
282+
<img src="/images/20241127a/Pasted_image_20241128142353.png" alt="Pasted_image_20241128142353.png" width="1200" height="1165" loading="lazy">
283283
284284
では実際に試してみましょう。ビルドした後、先ほどと同様 cloudflared を使ってhttps通信でスマホからアクセスし、ホーム画面に追加。PWAアプリを一度開き、その後オフライン状態にして再度開くと……
285285
286-
<img src="/images/20241129a/スライド5.png" alt="スライド5.png" width="1200" height="675" loading="lazy">
286+
<img src="/images/20241127a/スライド5.png" alt="スライド5.png" width="1200" height="675" loading="lazy">
287287
288288
オフライン状態でも表示できました!しかし、外部リソース(ここでは天気予報APIやそこから取得した画像ファイル)からの取得は失敗してしまっていますね。
289289
@@ -322,7 +322,7 @@ workbox: {
322322
323323
では実際に試してみましょう。build後、PWAをインストールし直してみます。
324324
325-
<img src="/images/20241129a/スライド6.png" alt="スライド6.png" width="1200" height="675" loading="lazy">
325+
<img src="/images/20241127a/スライド6.png" alt="スライド6.png" width="1200" height="675" loading="lazy">
326326
327327
今回はオフライン状態でもAPIリクエストをキャッシュできました!
328328

source/images/20241129a/Pasted_image_20241125132625.png renamed to source/images/20241127a/Pasted_image_20241125132625.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125133903.png renamed to source/images/20241127a/Pasted_image_20241125133903.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125170033.png renamed to source/images/20241127a/Pasted_image_20241125170033.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125170224.png renamed to source/images/20241127a/Pasted_image_20241125170224.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125173130.png renamed to source/images/20241127a/Pasted_image_20241125173130.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125173237.png renamed to source/images/20241127a/Pasted_image_20241125173237.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125200146.png renamed to source/images/20241127a/Pasted_image_20241125200146.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125203153.png renamed to source/images/20241127a/Pasted_image_20241125203153.png

File renamed without changes.

source/images/20241129a/Pasted_image_20241125203351.png renamed to source/images/20241127a/Pasted_image_20241125203351.png

File renamed without changes.

0 commit comments

Comments
 (0)