WebView2 アプリの開発ベスト プラクティス

運用 WebView2 アプリの開発には、次のベスト プラクティスをお勧めします。

エバーグリーン WebView2 ランタイムを使用する

ほとんどの WebView2 アプリには、修正済みバージョン ランタイムを使用するのではなく、エバーグリーン WebView2 ランタイムを使用することをお勧めします。

Evergreen ランタイムはクライアント上で自動的に更新されるため、WebView2 アプリで最新の機能とセキュリティ修正プログラムを利用できます。 また、Evergreen ランタイムは、修正済みバージョン ランタイムよりもディスク上に必要な記憶領域が少なくなります。 修正済みバージョンのランタイム配布は、厳格な互換性要件を持つアプリに対してのみお勧めします。

WebView2 ランタイムのエバーグリーン バージョンと固定バージョンを参照してください

WebView2 アプリが Evergreen WebView2 ランタイムと正常に動作するようにするには、以下のサブセクションで推奨される方法を使用します。

WebView2 ランタイムがインストールされていることを確認します

エバーグリーン WebView2 ランタイムを使用する場合、アプリで WebView2 コントロールを使用する前に、プログラムでチェックして、エバーグリーン WebView2 ランタイムがクライアントにインストールされていることを確認します。

アプリと WebView2 ランタイムの配布」の「WebView2 ランタイムが既にインストールされているかどうかを検出する」を参照してください。

WebView2 ランタイムの更新を処理する

エバーグリーン WebView2 ランタイムを使用する場合は、エバーグリーン WebView2 ランタイムの更新を処理します。 Evergreen WebView2 ランタイムの Updates は自動的にダウンロードされますが、実行中の WebView2 アプリは現在のバージョンの WebView2 ランタイムを引き続き使用するため、セキュリティ更新プログラムが不足している可能性があります。 新しいバージョンを採用するには、アプリが以前の WebView2 オブジェクトへのすべての参照を解放するか、再起動する必要があります。 NewBrowserVersionAvailable イベント ハンドラーを実装すると、シームレスな移行のために終了する前にユーザーの状態を保存するように推奨して、更新のためにアプリを再起動するようユーザーに求めることができます。

アプリと WebView2 ランタイムの配布」で「エバーグリーン WebView2 ランタイムの更新を処理する」を参照してください。

Edge プレビュー チャネルを使用して上位互換性テストを実行する

Evergreen WebView2 ランタイムを使用する場合は、Microsoft Edge (Beta、Dev、または Canary) のプレビュー チャネルを使用して上位互換性テストを実行します。

Evergreen ランタイムは自動的に更新されるため、定期的に互換性テストを実行して、WebView2 アプリが新しいランタイム バージョンで期待どおりに動作し続けることを確認する必要があります。 これは、WebView2 コントロールで Web コンテンツを Microsoft Edge プレビュー チャネルに対してテストすることで実行できます。

プレビュー チャネルをデプロイして、Microsoft Edge とセルフホストのプレビュー チャネルを使用したプレリリース テストのガイダンスに従います。

新しい API に機能検出を使用する

エバーグリーン WebView2 ランタイムを使用する場合は、機能検出を使用して、インストールされたランタイムが最近追加された API をサポートしているかどうかをテストします。 特定のバージョンの Webview2 SDK で開発された WebView2 アプリを実行するには、クライアントに互換性のあるバージョンの WebView2 ランタイムがインストールされている必要があります。

エバーグリーン WebView2 ランタイムを使用している場合、クライアント上のランタイムが最新バージョンに自動的に更新されないシナリオが考えられます。 さらに、一部のグループ ポリシーはランタイムの更新を一時停止します。 その結果、WebView2 アプリに更新プログラムをプッシュするときに、クライアントのインストールされたランタイムで使用できない新しい API を呼び出そうとすると、アプリが機能しない可能性があります。 したがって、機能検出を使用して、WebView2 アプリで使用される新しい API が、クライアントにインストールされている WebView2 ランタイムでサポートされていることを確認する必要があります。

インストールされているランタイムがプレリリースおよび WebView2 のリリース SDK に最近追加された API をサポートしているかどうかをテストするには、「機能検出」を参照してください。

修正済みバージョン ランタイムを使用している場合は、定期的に更新する

固定バージョンの WebView2 ランタイムを使用する場合は、セキュリティ リスクを軽減するために、アプリにパッケージ化されている WebView2 ランタイムを定期的に更新してください。 修正済みバージョン ランタイムを更新する頻度を決定するには、アプリの脅威モデルを検討する必要があります。 たとえば、Webview2 アプリでサードパーティのコンテンツを使用する場合は、常にコンテンツが信頼されていないと見なしてください。

参照:

ユーザー データ フォルダーの有効期間を管理する

WebView2 アプリでは、Cookie、資格情報、アクセス許可などのデータを格納するユーザー データ フォルダーが作成されます。 ユーザー データ フォルダーを作成した後、ユーザー データ フォルダーの有効期間を管理する責任はアプリにあります。 たとえば、アプリがアンインストールされたときにクリーンアップを実行する必要があります。

参照:

ランタイム プロセスのエラーまたは終了を処理する

WebView2 アプリは、アプリ プロセスと共に実行されるランタイム プロセスのコレクションによってサポートされます。 これらのサポートするランタイム プロセスは、メモリ不足やユーザーによる終了など、さまざまな理由で失敗する可能性があります。 WebView2 アプリは、アプリが障害から回復し、引き続きスムーズに実行できるように、これらのプロセス関連のイベントを処理する必要があります。

「WebView2 でのプロセス関連のイベントの処理」を参照してください。

環境オブジェクトのイベント ハンドラー

CoreWebView2Environment オブジェクトに対するアプリのイベント ハンドラーのいずれかに環境オブジェクトへの参照が保持されており、アプリがイベント ハンドラーを削除せずに環境ハンドラーとイベント ハンドラーへの参照を解放するだけの場合、環境オブジェクトとハンドラー オブジェクトの間に循環参照が発生し、メモリがリークする可能性があります。

このようなメモリ リークを防ぐには、次の手順を実行します。

  • 追加されたイベント ハンドラーの場合は、環境オブジェクトを解放する前にイベント ハンドラーを削除します。

  • イベント ハンドラーで環境オブジェクトへの参照を保持しないようにします。 代わりに、イベント ハンドラーは "event completed" コールバックの sender 引数から環境オブジェクトにアクセスできます。

  • アプリで WebView2 オブジェクトへの参照を保持する場合は、可能な限り弱い参照を使用します。

セキュリティのベスト プラクティスに従う

WebView2 を使用すると、ネイティブ アプリケーションで Web コンテンツをホストできます。Web ベースの UI の使用、Web プラットフォームの機能へのアクセス、クロスプラットフォームでのコード共有などの利点があります。

ただし、Web コンテンツをホストすると、脆弱性が発生する可能性もあります。 ネイティブ アプリケーション内で Web コンテンツをホストすることにより発生する可能性のある脆弱性を回避するには、Web コンテンツとホスト アプリケーション間の相互作用を注意深く監視するように WebView2 アプリケーションを設計してください。

セキュリティで保護された WebView2 アプリを開発する」のガイダンスに従ってください。

関連項目

WebView2 リファレンス:

Microsoft Edge エンタープライズのドキュメント: