メインコンテンツへスキップ
バージョン: v8

React でのプログレッシブウェブアプリ

Vite を使用して React アプリを PWA にする

PWA の 2 つの主な要件は、Service WorkerWeb Application Manifest です。これら両方をアプリに手動で追加することもできますが、代わりに Vite PWA Plugin を使用することをお勧めします。

まず、vite-plugin-pwa パッケージをインストールします

npm install -D vite-plugin-pwa

次に、vite.config.js または vite.config.ts ファイルを更新し、vite-plugin-pwa を追加します

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { VitePWA } from 'vite-plugin-pwa';

export default defineConfig({
plugins: [react(), VitePWA({ registerType: 'autoUpdate' })],
});

この最小限の構成により、アプリケーションはビルド時に Web アプリケーションマニフェストと Service Worker を生成できます。

Vite PWA プラグインの設定の詳細については、Vite PWA 「はじめに」ガイドを参照してください。

PWA のデプロイ方法については、Vite PWA 「デプロイ」ガイドを参照してください。

Create React App で React アプリを PWA にする

Ionic CLI v7 以降、Ionic React スターターアプリは Create React App の代わりに Vite とともにリリースされます。Vite の手順については、Vite を使用した React アプリの PWA 化を参照してください。

PWA の 2 つの主な要件は、Service WorkerWeb Application Manifest です。これら両方をアプリに手動で追加することもできますが、Create React App (CRA) と Ionic CLI の基本プロジェクトは、これをすでに提供しています。

アプリの index.ts には、serviceWorker.unregister() 関数への呼び出しがあります。CRA が提供するベースには、サービスワーカーがオプトイン機能としてあるため、有効にする必要があります。有効にするには、serviceWorker.register() を呼び出します。

import React from 'react';
import { createRoot } from 'react-dom/client';
import App from './App';
import * as serviceWorkerRegistration from './serviceWorkerRegistration';

const container = document.getElementById('root');
const root = createRoot(container!);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://cra.link/PWA
serviceWorkerRegistration.register();

このパッケージが追加されたら、ionic build を実行すると、build ディレクトリが PWA としてデプロイする準備が整います。

デフォルトでは、React アプリパッケージには、アプリのアイコンとして Ionic ロゴが付属しています。マニフェストを更新して正しいアプリ名を使用し、アイコンも置き換えるようにしてください。

Service Worker や多くの JavaScript API (ジオロケーションなど) のような機能では、アプリを安全なコンテキストでホストする必要があります。ホスティングサービスを通じてアプリをデプロイする場合は、サービスワーカーを最大限に活用するために HTTPS が必要になることに注意してください。

Service Worker の設定

デフォルトでは、CRA/React Scripts には、Workbox の Webpack プラグイン に基づいた事前構成済みの Service Worker 設定が付属しています。これはキャッシュファースト戦略を利用しており、ネットワークが新しいバージョンのアプリを返した場合でも、アプリがキャッシュから読み込まれることを意味します。

CRA/React Scripts の性質上、この設定は React Scripts の内部にあるため、React Scripts からイジェクトしない限りカスタマイズできません。現在、Ionic CLI はイジェクトされた React アプリをサポートしていないため、このアクションを実行する場合は、Ionic CLI の代わりに npm/yarn スクリプトを使用する必要があります。

デプロイ

Firebase

Firebase ホスティングは、CDN による高速な応答時間、デフォルトで有効になっている HTTPS、HTTP2 プッシュのサポートなど、プログレッシブウェブアプリに多くの利点を提供します。

まず、まだ利用できない場合は、Firebase で プロジェクトを作成します。

次に、ターミナルで Firebase CLI をインストールします

npm install -g firebase-tools

firebase-tools を初めて使用する場合は、firebase login コマンドで Google アカウントにログインします。

Firebase CLI をインストールしたら、Ionic プロジェクト内で firebase init を実行します。CLI がプロンプトを表示します

「このフォルダーに設定する Firebase CLI 機能は何ですか?」「Hosting: Firebase Hosting のファイルを構成し、(オプションで) GitHub アクションデプロイを設定します」を選択します。

新しい Firebase プロジェクトを作成するか、既存のプロジェクトを選択します。

「このディレクトリのデフォルトの Firebase プロジェクトを選択してください:」Firebase Web サイトで作成したプロジェクトを選択します。

「パブリックディレクトリとして使用するものは何ですか?」「build」と入力します。

次の質問に答えると、アプリでルーティング、ハードリロード、ディープリンクが機能するようになります

「シングルページアプリとして構成します (すべての URL を /index.html に書き換えます)?」「はい」と入力します。

「ファイル build/index.html はすでに存在します。上書きしますか?」「いいえ」と入力します。

Github で自動ビルドとデプロイを設定しますか?「はい」と入力します。

どの GitHub リポジトリで Github ワークフローを設定しますか?プロジェクト名を入力します。

デプロイするたびにビルドスクリプトを実行するようにワークフローを設定しますか?「はい」と入力します。

デプロイするたびに実行するスクリプトは何ですか?npm ci && npm run build と入力します。

PR がマージされたときにサイトのライブチャネルへの自動デプロイを設定しますか?「はい」と入力します。

サイトのライブチャネルに関連付けられたフックされたブランチの名前は何ですか?プロジェクトのメインブランチ名を入力します。

アプリをデプロイ用に構成する firebase.json 設定ファイルが生成されます。

最後に必要なのは、キャッシュヘッダーが正しく設定されていることを確認することです。これを行うには、headers スニペットを firebase.json ファイルに追加します。完全な firebase.json は次のようになります

{
"hosting": {
"public": "build",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{
"source": "**",
"destination": "/index.html"
}
],
"headers": [
{
"source": "/**",
"headers": [
{
"key": "Cache-Control",
"value": "public, max-age=31536000"
}
]
}
]
}
}

firebase.json プロパティの詳細については、Firebase ドキュメントを参照してください。

次に、次を実行してアプリの最適化されたバージョンをビルドします

ionic build --prod

最後に、次を実行してアプリをデプロイします

firebase deploy

これが完了すると、アプリがライブになります。