質の高いメディア素材を、Stegフォトで。
Stegフォトは、SNSやWebサイト、広告、パンフレットなど、あらゆる場面で活用できる高品質な写真・映像を撮影するサブスクサービスです。 事前のヒアリングから撮影・編集までをワンストップで対応し、目的や使用シーンに最適なビジュアルをご提案。 企業やイベント、採用広報など、多彩な実績と柔軟な対応力で、伝わるクリエイティブをお届けします。
詳細はこちら
こんにちは、合同会社Steg 代表の keigo (@Kspace_trk) です。
先日、ファインディ株式会社様の会場で開催された「すごくすごい。フロントエンドミートアップ 〜複雑GUI・アーキテクチャ設計を語ろう〜」に、登壇者の一人として参加してきました。
本イベントは、AIだけでは対応が難しい "複雑なGUI実装" や "アーキテクチャ設計" にフォーカスしたフロントエンドエンジニア向けのミートアップです。TypeScriptをベースに React (Next.js) や Vue (Nuxt.js) などのモダンフレームワークを使う各社のリアルな取り組みが、ナレッジとして共有されました。
2025年8月20日(水) 18:30 より、東京・大崎の ファインディ株式会社 様のオフィスにて開催されました。フード・ドリンクは サイボウズ株式会社 様のスポンサードでした 🙏
私は @vite-pwa/nuxt を使ったPWA実装の "リアル" について、企業案件で実装したオフライン対応・Push通知の経験をベースにお話ししました。
紹介した案件は、モバイルアプリ・Push通知・オフライン対応・複数管理者向けの管理画面までを、すべて Nuxt エコシステムで構築したものでした。

PWAを成立させるためには manifest.json / sw.js / HTTPSの3点が必要ですが、Service Workerにはネットワーク戦略やバックグラウンド処理など、自前で書くと骨が折れる部分が多くあります。
この複雑さを抽象化してくれるのが Workbox で、 @vite-pwa/nuxt 経由で利用できます。プリキャッシュ設定 (workbox.globPatterns) によって、初回アクセス時にHTMLやアセット類をまとめてキャッシュすることができます。
ランタイムキャッシュでは、Cache First / Network First / Stale While Revalidate の3戦略を、URLパターンごとに使い分けることができます。
ところが Push通知の対応で壁にぶつかります。Workbox は Push通知のセットアップ用APIを持っておらず、設定は sw.js に直接書く必要があります。一方で @vite-pwa/nuxt のデフォルトは generateSW 戦略で、 sw.js はWorkboxが自動生成してしまうため、独自実装を差し込む隙間がありません。
この問題を解くために、戦略を generateSW から injectManifest に切り替えました。これにより、Service Worker を自前で実装しつつ、Workbox の機能も利用できるようになります。
nuxt.config.ts ではおおよそ次のような設定になります。

sw.ts 側では、Workbox のライブラリ (workbox-precaching / workbox-routing / workbox-strategies) でプリキャッシュとネットワーク戦略を実装し、Push通知については firebase/messaging/sw を使って Firebase Cloud Messaging を統合しました。
nuxt.config.ts の設定をそのまま反映onBackgroundMessage でハンドリングし、 self.showNotification を呼び出す セッションの結論はシンプルで、「@vite-pwa/nuxt でPWAは実装できる。オフライン対応とPush通知を両立したいなら、 generateSW ではなく injectManifest を選ぶこと」です。実プロダクトで踏んだ落とし穴と、その回避策を共有することで、同じ構成にチャレンジする方の地雷を一つでも減らせれば、というのが今回の登壇の狙いでした。
当日は、複雑GUIやアーキテクチャ設計の現場知が並ぶ、非常に濃いセッションラインアップでした。
どのセッションも、AIに丸投げできない "難しい部分" にどう向き合うか、という共通の問いを軸にしていて、フロントエンドという領域の奥行きを改めて感じる時間でした。
実装の細部にこだわる話を、同じくこだわりを持つ方々と共有できる場は本当に貴重だと感じました。今回の発表内容が、Nuxt でPWA を作ろうとしている方や、Push通知の実装で詰まっている方の手がかりになれば嬉しいです。
貴重な登壇の機会をいただいた運営の皆さま、会場をご提供いただいたファインディ株式会社様、フード・ドリンクをスポンサードいただいたサイボウズ株式会社様、当日参加してくださった皆さま、本当にありがとうございました!