mcpField
A
angular-pwa

angular-pwa

github.com/oguzhan18開発7189 回インストール31 週間前に更新
リポジトリ

angular-pwa について

Angular プロジェクトにプログレッシブウェブアプリ機能を追加するためのガイドです。サービスワーカーのキャッシュ、オフライン処理、プッシュ通知、更新、マニフェスト設定を扱います。

主な機能

  1. 01ng add @angular/pwa による PWA 追加
  2. 02サービスワーカーのキャッシュ設定
  3. 03オフライン状態とプッシュ購読の処理
  4. 04サービスワーカーのバージョン更新確認
  5. 05ウェブアプリマニフェストのカスタマイズ

活用シーン

  1. 01Angular アプリへのオフライン対応追加
  2. 02API と静的ファイルのキャッシュ方針設定
  3. 03通知購読の案内
  4. 04新バージョン準備後のアプリ再読み込み

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-pwa

インストール後、Claude Code で/angular-pwaを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/discussions/
_INDEX.md
references/docs/
_INDEX.md
references/issues/
_INDEX.md
references/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"
    }
  ]
}

コメント