angular-pwa について
Angular プロジェクトにプログレッシブウェブアプリ機能を追加するためのガイドです。サービスワーカーのキャッシュ、オフライン処理、プッシュ通知、更新、マニフェスト設定を扱います。
主な機能
- 01ng add @angular/pwa による PWA 追加
- 02サービスワーカーのキャッシュ設定
- 03オフライン状態とプッシュ購読の処理
- 04サービスワーカーのバージョン更新確認
- 05ウェブアプリマニフェストのカスタマイズ
活用シーン
- 01Angular アプリへのオフライン対応追加
- 02API と静的ファイルのキャッシュ方針設定
- 03通知購読の案内
- 04新バージョン準備後のアプリ再読み込み
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oguzhan18/ angular-ecosystem-skills --skill angular-pwaインストール後、Claude Code で/angular-pwaを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/discussions/_INDEX.mdreferences/docs/_INDEX.mdreferences/issues/_INDEX.mdreferences/releases/_INDEX.md詳細
@angular/pwa
バージョン: Angular 21(2025) タグ: PWA、サービスワーカー、オフライン、ウェブアプリマニフェスト
参考資料: PWA ガイド • ngsw-config
API の変更点
このセクションでは、最近のバージョン固有の API の変更点について説明します。
-
新機能:Angular Service Worker v2 — キャッシュ戦略を改善
-
新機能:esbuild の PWA サポート — ビルドを高速化
-
新機能:@angular/build:application — 最新の PWA ビルド
ベストプラクティス
- プロジェクトに PWA を追加
ng add @angular/pwa
- ngsw-config.json を設定
{
"$schema": "./node_modules/@angular/service-worker/config/schema.json",
"index": "/index.html",
"assetGroups": [
{
"name": "app",
"installMode": "prefetch",
"resources": {
"files": [
"/favicon.ico",
"/index.html",
"/*.css",
"/*.js"
]
}
},
{
"name": "assets",
"installMode": "lazy",
"updateMode": "prefetch",
"resources": {
"files": [
"/assets/**",
"/*.(svg|cur|jpg|jpeg|png)"
]
}
}
],
"dataGroups": [
{
"name": "api-freshness",
"urls": ["/api/**"],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 100,
"maxAge": "1h",
"timeout": "10s"
}
}
]
}
- API 呼び出しにはネットワークファーストを使用
{
"dataGroups": [
{
"name": "api",
"urls": ["/api/**"],
"cacheConfig": {
"strategy": "freshness",
"maxSize": 50,
"maxAge": "1h"
}
}
]
}
- 静的アセットにはキャッシュファーストを使用
{
"assetGroups": [
{
"name": "static",
"installMode": "prefetch",
"updateMode": "prefetch",
"resources": {
"files": ["/*.js", "/*.css"]
}
}
]
}
- オフライン状態に対応
import { SwPush } from '@angular/service-worker';
constructor(private swPush: SwPush) {}
subscribeToNotifications() {
if (this.swPush.isEnabled) {
this.swPush.requestSubscription({
serverPublicKey: 'VAPID_PUBLIC_KEY'
});
}
}
- サービスワーカーの更新を確認
import { SwUpdate } from '@angular/service-worker';
constructor(private updates: SwUpdate) {
this.updates.versionUpdates.subscribe(event => {
if (event.type === 'VERSION_READY') {
// Reload to get new version
window.location.reload();
}
});
}
- マニフェストをカスタマイズ
{
"name": "My PWA",
"short_name": "MyPWA",
"theme_color": "#1976d2",
"background_color": "#ffffff",
"display": "standalone",
"scope": "/",
"start_url": "/",
"icons": [
{
"src": "assets/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
}
]
}
コメント
Markdown 対応