WebView2 アプリの開発のベスト プラクティス
運用環境の WebView2 アプリを開発するための次のベスト プラクティスをお勧めします。
エバーグリーン WebView2 ランタイムを使用する
固定バージョン ランタイムを使用するのではなく、ほとんどの WebView2 アプリにエバーグリーン WebView2 ランタイムを使用することをお勧めします。
最新の機能とセキュリティ パッチが WebView2 アプリで使用できるように、常緑ランタイムはクライアントで自動的に更新されます。 また、エバーグリーン ランタイムでは、固定バージョン ランタイムよりもディスク上のストレージ領域が少なくて済みます。 固定バージョン ランタイム配布は、互換性要件が厳しいアプリにのみ推奨されます。
エバーグリーン ランタイムの利点の詳細については、「アプリと WebView2ランタイムを配布する」の「エバーグリーン ランタイム配布モードの詳細」を参照してください。
WebView2 アプリがエバーグリーン WebView2 ランタイムと確実に連携できるように、以下のサブセクションで推奨されるプラクティスを使用します。
- WebView2 ランタイムがインストールされていることを確認します。
- WebView2 ランタイムの更新を処理します。
- Edge プレビュー チャネルを使用して前方互換性テストを行います。
- 新しい API には機能検出を使用します。
WebView2 ランタイムがインストールされていることを確認します
Evergreen WebView2 ランタイムを使用する場合、アプリで WebView2 コントロールを使用する前に、プログラムによって、Evergreen WebView2 ランタイムがクライアントにインストールされていることを確認します。
「アプリ と WebView2 ランタイムの配布」の「WebView2 ランタイムが既にインストールされているかどうかを検出 する」を参照 してください。
WebView2 ランタイムの更新を処理する
Evergreen WebView2 ランタイムを使用する場合は、エバーグリーン WebView2 ランタイムの更新を処理します。 エバーグリーン WebView2 ランタイムの更新プログラムは自動的にダウンロードされますが、実行中の WebView2 アプリでは、現在のバージョンの WebView2 ランタイムが引き続き使用され、セキュリティ更新プログラムが見つからない可能性があります。 新しいバージョンを採用するには、アプリが以前の WebView2 オブジェクトへのすべての参照を解放するか、再起動する必要があります。
NewBrowserVersionAvailable
イベント ハンドラーを実装すると、ユーザーにアプリの更新プログラムの再起動を求めることができます。シームレスな移行を終了する前にユーザーの状態を保存することをお勧めします。
アプリと WebView2 ランタイム の配布に関するページの「エバーグリーン WebView2 ランタイム更新プログラムを処理する」を参照してください。
Edge プレビュー チャネルを使用して前方互換性テストを実行する
Evergreen WebView2 ランタイムを使用する場合は、Microsoft Edge (ベータ、開発、またはカナリア) のプレビュー チャネルを使用して、前方互換性テストを実行します。
エバーグリーン ランタイムは自動的に更新されるため、互換性テストを定期的に実行して、WebView2 アプリが新しいランタイム バージョンで期待どおりに動作し続けられるようにする必要があります。 これを行うには、WebView2 コントロールの Web コンテンツを Microsoft Edge プレビュー チャネルに対してテストします。
プレビュー チャネルを使用したプレリリース テストと、プレビュー チャネルのデプロイによるセルフホストに関するページのガイダンスに従ってください。
新しい API に機能検出を使用する
Evergreen WebView2 ランタイムを使用する場合は、機能検出を使用して、インストールされたランタイムで最近追加された API がサポートされているかどうかをテストします。 特定のバージョンの Webview2 SDK で開発された WebView2 アプリを実行するには、クライアントに互換性のあるバージョンの WebView2 ランタイムがインストールされている必要があります。
Evergreen WebView2 ランタイムを使用する場合、クライアント上のランタイムが最新バージョンに自動的に更新されていないシナリオがいくつかあります。 さらに、一部のグループ ポリシーでは、ランタイムの更新が一時停止されます。 その結果、WebView2 アプリに更新プログラムをプッシュすると、クライアントのインストールされているランタイムで使用できない新しい API を呼び出そうとすると、アプリが動作しない可能性があります。 そのため、機能検出を使用して、WebView2 アプリで使用される新しい API が、クライアントにインストールされている WebView2 ランタイムでサポートされていることを確認する必要があります。
プレリリースおよびリリース SDK for WebView2 で、インストールされたランタイムが最近追加した API をサポートしているかどうかをテストするには、「機能検出」を参照してください。
固定バージョン ランタイムを使用している場合は、定期的に更新する
固定バージョンの WebView2 ランタイムを使用する場合は、セキュリティ リスクを軽減するために、アプリにパッケージ化された WebView2 ランタイムを定期的に更新してください。 固定バージョン ランタイムを更新する頻度を決定するには、アプリの脅威モデルを検討する必要があります。 たとえば、Webview2 アプリでサード パーティのコンテンツを使用する場合は、常にコンテンツが信頼されていないと考えてください。
「アプリと WebView2ランタイムを配布する」の「固定バージョン ランタイム配布モードの詳細」を参照してください。
ユーザー データ フォルダーの有効期間を管理する
WebView2 アプリは、Cookie、資格情報、アクセス許可などのデータを格納するユーザー データ フォルダーを作成します。 ユーザー データ フォルダーを作成した後、アプリはユーザー データ フォルダーの有効期間を管理する責任を負います。 たとえば、アプリがアンインストールされるときに、アプリでクリーンアップを実行する必要があります。
ユーザー データ フォルダーの管理に関する詳細なガイダンスについては、「ユーザー データ フォルダーの管理」を参照してください。
ランタイム プロセスのエラーまたは終了を処理する
WebView2 アプリは、アプリ プロセスと共に実行されるランタイム プロセスのコレクションによってサポートされます。 これらのサポートランタイム プロセスは、メモリ不足やユーザーによる終了など、さまざまな理由で失敗する可能性があります。 WebView2 アプリは、これらのプロセス関連のイベントを処理して、アプリがエラーから復旧し、スムーズに実行し続けられるようにする必要があります。
WebView2 アプリでプロセス関連イベントを処理する方法の詳細については、「WebView2 でのプロセス関連イベントの処理」を参照してください。
環境オブジェクトのイベント ハンドラー
環境オブジェクトのアプリのイベント ハンドラーのいずれかが 環境オブジェクト への参照を保持し、アプリがイベント ハンドラーを削除せずに環境とイベント ハンドラーへの参照を解放するだけで、環境オブジェクトとハンドラー オブジェクトの間に循環参照が存在し、メモリがリークする可能性があります。
このようなメモリ リークを防ぐには、
追加されたイベント ハンドラーの場合は、環境オブジェクトを解放する前にイベント ハンドラーを削除します。
イベント ハンドラーで環境オブジェクトへの参照を保持しないようにします。 代わりに、イベント ハンドラーは、"イベント完了" コールバックの
sender
引数から環境オブジェクトにアクセスできます。アプリで WebView2 オブジェクトへの参照を保持する場合は、可能な限り弱い参照を使用します。
セキュリティのベスト プラクティスに従う
WebView2 を使用すると、ネイティブ アプリケーションで Web コンテンツをホストでき、Web ベースの UI の使用、Web プラットフォームの機能へのアクセス、コードクロスプラットフォームの共有などの利点が提供されます。
ただし、Web コンテンツをホストすると、脆弱性が発生する可能性もあります。 ネイティブ アプリケーション内で Web コンテンツをホストすることで発生する可能性のある脆弱性を回避するには、Web コンテンツとホスト アプリケーションの間の相互作用を厳密に監視するように WebView2 アプリケーションを設計してください。
「セキュリティで保護された WebView2 アプリを開発する」のガイダンスに従ってください。