ASP.NET Core Blazor WebAssembly で PWA プロジェクトを作成しよう

ASP.NET Core Blazor (以下 Blazor) の WebAssembly には PWA 対応のオプションがあるためすぐに最低限の PWA 開発の環境を用意することが出来ます。

本記事では、まず基本の PWA プロジェクトの作成方法を紹介し、次に Android のエミュレーターを通して作成した PWA を確認する方法について解説していきます。

(※本記事では Microsoft Visual Studio 2019 を使用します。また、確認用のブラウザとして Google Chrome を使用しています。)

## PWA とは

Progressive Web Applications (PWA) はネイティブアプリのような操作感、機能を提供するウェブアプリケーションです。PWA を提供している有名なウェブサービスとしては <a href="https://twitter.com/" target="_blank">twitter</a> があります。twitter のウェブサイトにスマートフォンの <a href="https://caniuse.com/?search=PWA" target="_blank">WPA 対応のブラウザ</a>からアクセスすると、以下のように、画面下部に「ホーム画面にTwitterを追加」というメッセージが表示されます。

<a href="https://gyazo.com/110e8b7eee18a884d4253c224017427c"><img src="https://i.gyazo.com/110e8b7eee18a884d4253c224017427c.png" alt="Image from Gyazo" width="300px"></a>

そのメッセージをクリックすると、ネイティブアプリのようにスマートフォンのホーム画面にアプリアイコンが追加されます。このアイコンをタップした際に表示される画面の実態はウェブサイトなのですが、ネイティブアプリの twitter アプリと比べて見ても遜色のない操作性であることが分かるかと思います。

<a href="https://gyazo.com/1cbce39497d326c0d9833e50ef64e173"><img src="https://i.gyazo.com/1cbce39497d326c0d9833e50ef64e173.jpg" alt="Image from Gyazo" width="400px"></a>

また、プッシュ通知のようなネイティブアプリのような機能の実装も可能になったり、コンテンツをキャッシュすることで、表示速度の高速化やオフラインでの動作も可能です。ネイティブアプリのようにアプリストアを通さずに公開できる点もメリットですし、ウェブサイトとモバイルアプリの開発をワンソースで行うことが出来るのでコスト削減も期待できます。
ですので、twitter のように実装要件があえば PWA の提供は今後より検討すべきものになりうるかと思います。

PWA について、概要を理解したところで、早速 Blazor WebAssembly で PWA を作成していきましょう。

## 新規プロジェクトの作成

※本記事では Visual Studio のプロジェクト作成ウィザードを利用して新規 PWA プロジェクトを作成する方法をご紹介しますが、Visual Studio Code でコマンドシェルを利用して同様に PWA プロジェクトを作成することも可能です。<a href="https://docs.microsoft.com/ja-jp/aspnet/core/blazor/progressive-web-app?view=aspnetcore-5.0&tabs=visual-studio-code" target="_blank">公式ドキュメント</a> をご参照ください。

[![Image from Gyazo](https://i.gyazo.com/83e0760e80a69c4776dda5d8e911581f.png)](https://gyazo.com/83e0760e80a69c4776dda5d8e911581f)

PWA プロジェクトの作成に必要なのは、上記のように新規 WebAssembly プロジェクトで「Progressive Web Application」と「HTTPS 用の構成」にチェックを入れるのみです。
この状態でプロジェクトを作成すると以下のように各種ファイルが作成されます。

[![Image from Gyazo](https://i.gyazo.com/558539cabb550ef9591070c969489232.png)](https://gyazo.com/558539cabb550ef9591070c969489232)

PWA において、重要な役割を担うファイルは `manifest.json` と `service-worker.js` です。 `manifest.json` は PWA アプリの各種属性（ホーム画面に表示する際のアイコン画像の指定など）についての構成ファイルになります。 `service-worker.js` はウェブアプリケーションとネットワークの間で働く特殊な JavaScript ファイルで、ネットワーク状況によってキャッシュを利用し、高速表示やオフラインでの動作など PWA の特徴的な機能を司ります。

それではさっそく実行して PWA の動作を確かめてみましょう。

## PWA を実行する

[![Image from Gyazo](https://i.gyazo.com/a51e3271df7d903bd5d9ee65a61beec2.png)](https://gyazo.com/a51e3271df7d903bd5d9ee65a61beec2)

こちらが実行後の画面です。PC で確認すると特に変化はないように見えますが、ブラウザのアドレスバーに PWA インストール用のボタンが表示されていることが分かります。

### Android エミュレーターで確認する

先ほど PWA が動作すること自体は確認できましたが、PWA を構築する場合の想定ユーザーはモバイルになると思います。ですので Android エミュレーターを使用して先ほどの PWA を実行し、モバイルでの動作確認を行っていきます。

#### Visual Studio の環境構築

Android エミュレーターの起動に関して、お使いの開発環境などで設定内容が異なりますので詳細な説明は省略し、Visual Studio から Android エミュレーター を起動可能な状態である前提で進めます。環境構築に関して、<a href="https://docs.microsoft.com/ja-jp/xamarin/android/get-started/installation/android-emulator/hardware-acceleration?tabs=vswin&pivots=windows#accelerating-with-hyper-v" target="_blank">こちらの記事</a> など参考になるかと思いますのでご参照ください。

#### Android エミュレーターの起動

Visual Studio のメニューからツール > Android > Android デバイス マネージャーを選択します。

[![Image from Gyazo](https://i.gyazo.com/8f043822cc33e0dd3d47ab0146259adc.png)](https://gyazo.com/8f043822cc33e0dd3d47ab0146259adc)

起動したいエミュレーターを選択して「開始」ボタンをクリックします。エミュレーターが一覧に表示されていない場合は、「＋新規」メニューより追加してください。

[![Image from Gyazo](https://i.gyazo.com/9a0e0fe3b648ad8a9262dc6a775d82e2.png)](https://gyazo.com/9a0e0fe3b648ad8a9262dc6a775d82e2)

以下のようにエミュレーターが起動します。

[![Image from Gyazo](https://i.gyazo.com/78e10a7e7ab85c1d37d22c3728d9eefb.png)](https://gyazo.com/78e10a7e7ab85c1d37d22c3728d9eefb)

#### ngrok を使って、エミュレーターから PWA にアクセスする。

今回は <a href="https://ngrok.com/" target="_blank">ngrok</a> というサービスを利用します。（有料プランと無料プランがありますが、無料プランで動作確認可能です。）ngrok を使うと、ローカルホストの Web サーバーにパブリックな URL でアクセスすることが出来るようになります。以下の手順で進めていきます。

1. まずは利用するために、<a href="https://ngrok.com/" target="_blank">ngrok</a> のウェブサイトにてユーザー登録を行います。

2. ユーザー登録完了後にログインしたページから実行ファイルをダウンロードし、実行します。
 [![Image from Gyazo](https://i.gyazo.com/b91f4d7d0d694ea1fddbb28a942c05d4.png)](https://gyazo.com/b91f4d7d0d694ea1fddbb28a942c05d4)

3. まずはトークン認証を行います。ログインページから authtoken をコピーして以下のような形で実行します。
[![Image from Gyazo](https://i.gyazo.com/8d4c0339707a05846629c348fe1076f3.png)](https://gyazo.com/8d4c0339707a05846629c348fe1076f3)

4. 認証が正常に完了したら、ローカルホストの拡張を実行します。例えばアプリケーションが https://localhost:44369/ にて動作している場合、以下のようにします。
[![Image from Gyazo](https://i.gyazo.com/fab0605fe20f23cffde729bd4f5d8092.png)](https://gyazo.com/fab0605fe20f23cffde729bd4f5d8092)

5. 実行すると以下のような画面が表示されます。https://xxxxxx.ngrok.io にアクセスすることでローカルホストで動作しているアプリケーションの確認ができます。
[![Image from Gyazo](https://i.gyazo.com/157788b30756f420b227b9a7d3dc8a92.png)](https://gyazo.com/157788b30756f420b227b9a7d3dc8a92)

#### Android エミュレーターで確認

それでは先ほどの URL にエミュレーターの Chrome ブラウザからアクセスしてみましょう。

<a href="https://gyazo.com/4b4365fbdc4e197f32d2edec0739b1c9"><img src="https://i.gyazo.com/4b4365fbdc4e197f32d2edec0739b1c9.png" alt="Image from Gyazo" width="300px"></a>

ホーム画面インストール用のメッセージが表示されました。

[![Image from Gyazo](https://i.gyazo.com/55111c9ba439bdc570c55bc15c349bcf.jpg)](https://gyazo.com/55111c9ba439bdc570c55bc15c349bcf)

上記のような手順でホーム画面へのインストールを確認できました。

[![Image from Gyazo](https://i.gyazo.com/a2ec9d726f8a091aa280e4359344a11f.jpg)](https://gyazo.com/a2ec9d726f8a091aa280e4359344a11f)

こちらは ngrok の実行を終了した後に各ページを表示した場合の結果です。PWA のオフライン実行が働いてトップページやカウンターページは問題なく動作します。1番右の `fetchdata` ページでは、ネットワークがオフラインのためデータの取得が正常に出来ていないことが分かります。

## まとめ

本記事では最小限の PWA プロジェクトを Blazor WebAssembly で実装する流れと、Android エミュレーターを使って確認を行う方法についてご紹介しました。Blazor WebAssembly を利用した PWA 開発に興味のある方にとって、本記事がご参考になれば幸いです。

#### Ignite UI for Blazor トライアル版を利用するには

インフラジスティックスでは充実した UI コンポーネントライブラリーを収録し、データリッチでレスポンシブなWebアプリケーションをより迅速に構築することを可能にする <a href="https://jp.infragistics.com/products/ignite-ui" target="_blank">Ignite UI</a> を開発しており、Blazor 対応の <a href="https://jp.infragistics.com/products/ignite-ui-blazor" target="_blank">Ignite UI for Blazor</a> もリリースしています。<br>
Ignite UI for Blazor はトライアル版での試用が可能です。<br>
トライアル版を利用するためには <a href="https://iam.infragistics.com/Account/Register" target="_blank">こちらのページ</a> よりアカウントの作成を行ってください。登録より30日間、弊社のテクニカルサポートをご利用いただくことが出来ますのでお気軽にお問い合わせください。<br>

また、製品をご購入をご検討のお客様は <a href="https://iam.infragistics.com/Account/Register" target="_blank">こちらのページ</a> よりお気軽にお問い合わせください。