次の方法で共有


PWA の開発を開始する

プログレッシブ Web アプリ (PWA) は、HTML、CSS、JavaScript などの Web テクノロジを使用して構築するアプリであり、1 つのコードベースからさまざまなデバイス オペレーティング システムにインストールして実行することもできます。

PWA を構築する方法を学習するために作成された温度コンバーターのサンプルと共にこの記事を使用すると、次のことが可能になります。

  • サンプルのコードを軽微に変更して、温度コンバーター PWA をカスタマイズします。

  • サンプル ディレクトリ全体をコピーして貼り付け、コードを大幅に変更して、独自の PWA を作成します。

関連項目:

プログレッシブ Web アプリのアーキテクチャ

次の図は、プログレッシブ Web アプリ (PWA) のアーキテクチャの概要を示しています。

PWA のアーキテクチャ図

左側の PWA のフロントエンドを実行するデバイスには、PWA のフロントエンド コード用のファイルがあります。

右側では、Web サーバーは PWA のバックエンド コード (またはデータベース コンテンツ) を実行します。

デバイスには、HTML、CSS、JavaScript、サービス ワーカー、マニフェストなどのフロントエンド コードが含まれています。 これは、プログレッシブ Web アプリ (PWA) がブラウザーで Web アプリとして使用されているか、デバイスにインストールされているローカル アプリとして使用されているかに関係なく当てはまります。

通常の Web アプリと同様に、プログレッシブ Web アプリは Web のプログラミング言語 (HTML、CSS、JavaScript) を使用して記述され、Web サーバーを使用してユーザーに配布されます。 Web アプリがプログレッシブ Web アプリの場合、ユーザーは最初に Web ブラウザー内に Web アプリを表示し、アドレス バーにはアプリをローカルにインストールするように求める [ アプリの使用可能] ボタンもあります。

運用 Web サーバーへの PWA のデプロイ

プログレッシブ Web アプリ (PWA) をユーザーが使用できるようにするには、(ローカル開発環境とは異なり) HTTPS 経由でアクセスできる Web サーバーにプログレッシブ Web アプリ (PWA) をデプロイします。 Web サーバーはフロントエンド コードをユーザーに送信し、Web アプリのバックエンド コードを実行します。

サービス ワーカーなどのプログレッシブ Web Apps (PWA) プラットフォームの一部では、HTTPS を使用する必要があります。

プログレッシブ Web アプリ (PWA) にバックエンド コードがない場合は、プログレッシブ Web アプリ (PWA) を静的 Web サーバーから提供できます。 たとえば、https://microsoftedge.github.io/Demos/temperature-converter/Temperature コンバーターでは、GitHub の github.io 静的サーバーが使用されます。

「温度コンバーターのサンプル」の記事では、ローカル サーバーでサンプルのプログレッシブ Web アプリを実行してテストします。 独自のプログレッシブ Web アプリがテストされ、配布する準備ができたら、テストされた PWA を Web サーバー (Web ホスティング プロバイダー) 経由でユーザーに配布します。

プログレッシブ Web アプリを更新するには、新しいバージョンを Web サーバーにもう一度デプロイします。

Web サーバー ホストの例

プログレッシブ Web アプリ (PWA) が公開されたら、HTTPS URL に発行する必要があります。 多くのホストでは既定で HTTPS が使用されますが、ホストが HTTPS を提供していない場合は、 Let's Encrypt で必要な証明書を作成するための無料の代替手段が提供されます。

たとえば、Azure無料アカウントを作成できます。 Microsoft Azure App Serviceで Web サイトをホストする場合、既定では HTTPS 経由で提供されます。

また、HTTPS をサポートする GitHub Pages (pages.github.com) で Web サイトをホストすることもできます。 GitHub Pagesドキュメントを参照してください

localhost (http) と運用サーバー (https) について

localhost アドレスでローカル開発 Web サーバーを使用する場合、URL は通常、httpsではなくhttpで始まります。 サービス ワーカーなど、プログレッシブ Web Apps プラットフォームの主要な部分では、HTTP ではなく HTTPS を使用する必要があります。

開発とデバッグのために、Microsoft Edge (または PWA ローカル アプリをホストしているウィンドウ) では、 localhost アドレスで HTTPS を使用せずにプログレッシブ Web アプリ (PWA) API を実行できます。

フロントエンド コード ファイル (UI コード)

プログレッシブ Web アプリ (PWA) には、Web サーバーによってローカル デバイス上のブラウザーに送信されるフロントエンド コード ファイルがあります。

フロントエンド コードは、HTML、CSS、JavaScript コードなど、アプリをユーザーのデバイスにインストールするために必要なリソースです。

プログレッシブ Web アプリ (PWA) には、通常、次のフロントエンド コード ファイルが含まれています。

  • ユーザー インターフェイスに表示されるテキスト、画像、テキスト フィールド、ボタンなど、アプリ内のコンテンツを記述する HTML ファイル。

  • レイアウト内の HTML コンテンツを整理し、要素にスタイルを提供する CSS ファイル。

  • ユーザー インターフェイスにユーザー操作を追加するための JavaScript ファイル。

  • アプリをホスト オペレーティング システムに記述する JSON マニフェスト ファイル。

  • アプリのフロントエンド コード ファイルをキャッシュし、バックグラウンド タスクを実行するための JavaScript サービス ワーカー ファイル。

プログレッシブ Web アプリ (PWA) のフロントエンド コードは、デバイスの Web ブラウザーを使用して実行されます。 ブラウザー独自の UI は、アプリがスタンドアロン ウィンドウで実行されている場合は表示されません。これは、ブラウザー UI コントロールを最小限に抑えた合理化されたブラウザー ウィンドウです。

バックエンド コード、ファイル、エンドポイント、データ (サーバー側コード)

プログレッシブ Web アプリ (PWA) には、Web サーバー上に存在して実行されるバックエンド コードが含まれている可能性があります。

Web アプリと同様に、プログレッシブ Web アプリには、アプリがインターネットに接続するときに必要な Web サービス API エンドポイントを実装して、サーバー上のデータベースに格納される可能性のある動的コンテンツを取得する バックエンド コード (サーバー側コード) を含めることができます。

プログレッシブ Web アプリのバックエンド コードでは、次のような任意のサーバー側言語を使用できます。

  • ASP.NET
  • Java
  • Node.js
  • PHP

ビルドしているアプリによっては、サーバー側の Web サービス API エンドポイントが必要ない場合があります。

温度コンバーターのサンプル PWA にはサーバー側のコードがありません。これは、アプリがインストールされているデバイスでのみ実行され、サーバー側のデータは必要ないためです。

残りのセクションでは、PWA サンプルを構成するファイルについて説明します。

Web アプリ マニフェスト (manifest.json)

通常の Web アプリはブラウザーでのみ実行されます。 Web アプリ マニフェストを追加すると、Web アプリはプログレッシブ Web アプリ (PWA) になります。 Web アプリ マニフェストを使用すると、PWA をサポートするブラウザーは、デバイスにプログレッシブ Web アプリとして Web アプリをインストールできます。

Web アプリ マニフェストは、プログレッシブ Web アプリに関するメタデータ (名前、説明、アイコン、使用するさまざまなオペレーティング システム機能など) を含む JSON ファイルです。 JSON コードは、アプリをホスト オペレーティング システムに記述します。 マニフェスト ファイルは、デバイスのオペレーティング システムで使用するプログレッシブ Web アプリに関する基本的な情報を提供します。

manifest.jsonファイル名は、厳密な要件ではなく、一般的な規則です。

manifest.json例:

{
  "lang": "en-us",
  "name": "Temperature converter app",
  "short_name": "Temperature converter",
  "description": "A basic temperature converter application that can convert to and from Celsius, Kelvin, and Fahrenheit",
  "start_url": "./",
  "background_color": "#2f3d58",
  "theme_color": "#2f3d58",
  "orientation": "any",
  "display": "standalone",
  "icons": [
      {
          "src": "./icon512.png",
          "sizes": "512x512"
      }
  ]
}

関連項目:

アプリのファイルをローカル デバイスにキャッシュするサービス ワーカー (sw.js)

プログレッシブ Web アプリ (PWA) は、サービス ワーカー JavaScript ファイル ( sw.js など) を使用して、フロントエンドの UI ファイルをローカル デバイスにキャッシュできます。 サービス ワーカーは、アプリによって読み込まれる専用の JavaScript ファイルで定義されます (アプリ ロジックを含むメイン .js ファイルとは異なります)。

サービス ワーカーは、プログレッシブ Web アプリからのネットワーク要求を傍受できる特殊な Web ワーカーです。 サービス ワーカーは、次のようなシナリオを有効にします。

  • インターネットへの断続的な接続を含むオフライン サポート。
  • デバイスでの高度なキャッシュ。
  • PUSH メッセージの受信、アプリ アイコンへのバッジの追加、サーバーからのデータのフェッチなどのバックグラウンド タスクの実行。

サービス ワーカーは、プログレッシブ Web アプリをネットワーク条件に依存せずに高速に行うのに役立つ重要なテクノロジです。 サービス ワーカーによってアプリが作成されます。

  • 高速化。
  • より信頼性が高い。
  • ネットワークに依存しない。アプリは、インターネット接続が見つからないか断続的であっても、(何らかの方法で) 動作し続けます。

この サンプルsw.js ファイルは、Temperature コンバーター PWA の一部であるキャッシュ ファイルを管理し、ファイルをローカル ドライブにキャッシュし、インターネットに接続していないときにそれらを提供するサービス ワーカーです。

sw.js:

const CACHE_NAME = `temperature-converter-v1`;
    
// Use the install event to pre-cache all initial resources.
self.addEventListener('install', event => {
  event.waitUntil((async () => {
    const cache = await caches.open(CACHE_NAME);
    cache.addAll([
      './',
      './converter.js',
      './converter.css'
    ]);
  })());
});

self.addEventListener('fetch', event => {
  event.respondWith((async () => {
    const cache = await caches.open(CACHE_NAME);

    // Get the resource from the cache.
    const cachedResponse = await cache.match(event.request);
    if (cachedResponse) {
      return cachedResponse;
    } else {
        try {
          // If the resource was not in the cache, try the network.
          const fetchResponse = await fetch(event.request);
    
          // Save the resource in the cache and return it.
          cache.put(event.request, fetchResponse.clone());
          return fetchResponse;
        } catch (e) {
          // The network failed
        }
    }
  })());
});

このサービス ワーカーは、次の 3 つのファイルを明示的にキャッシュします。

  • ./ 手段 index.html
  • ./converter.js
  • ./converter.css

2 つの追加ファイルがブラウザーによって自動的にキャッシュされます。

  • アイコン ファイル (.png)。
  • マニフェスト ファイル (.json)。

install イベントのリッスン

サービス ワーカーは、ユーザーがアプリをインストールしたときにトリガーされる install イベントをリッスンし、それを使用して、アプリがオフラインで機能するために必要なリソースをキャッシュします。次のように、

  • 最初の HTML ページ。
  • アプリ ロジックを含むアプリのメイン JavaScript ファイル。
  • アプリの CSS ファイル。

アプリのインストールを有効にするには、JavaScript サービス ワーカー ファイルを使用して、必要なフロントエンド ファイルをローカル デバイスにキャッシュすることで、アプリをオフライン (常にインターネット接続なしで) 動作させます。

fetch イベントのリッスン

サービス ワーカーは fetch イベントをインターセプトします。これは、アプリがサーバーに要求を送信するたびに発生し、キャッシュ優先戦略を適用します。

サービス ワーカーはキャッシュされたリソースを返してアプリをオフラインで動作させることができます。失敗した場合、サービス ワーカーは代わりにサーバーからファイルのダウンロードを試みます。

サービス ワーカーは省略可能です

プログレッシブ Web アプリ (PWA) には、アプリをインストールするために Microsoft Edge のサービス ワーカーが必要ありません。 ただし、デバイスに断続的なネットワーク接続がある場合やオフラインになっている場合など、アプリの信頼性を高めるために、独自のプログレッシブ Web アプリにサービス ワーカーを含めることをお勧めします。

関連項目:

次のステップ

「温度コンバーターのサンプル」の手順を実行します。 次に、独自のプログレッシブ Web アプリ (PWA) を作成するには、 Demos\temperature-converter ディレクトリをコピー、貼り付け、変更できます。 温度コンバータのサンプルは、プログレッシブ Web Apps (PWA) が実行できる小さなサンプルのみを示しています。 このサンプルでは、インターネット接続がない場合の作業など、プログレッシブ Web アプリ (PWA) にとって重要なコードを示します。

プログレッシブ Web アプリ (PWA) をネイティブ アプリのように感じさせる PWA には 、追加のベスト プラクティスがあります。

  • ファイルを処理するなどして、アプリをオペレーティング システムに統合します。

  • 非トリガー コンピューティング タスクを実行します。

  • アプリをアプリ ストアにアップロードします。

関連項目

MDN:

ホスティング:

見本: