MicrosoftEdgeWebView2でWindowsアプリにやさしいブラウザー機能をつけよう!

※本ページにはプロモーション(広告)が含まれています。
MicrosoftEdgeWebView2でWindowsアプリにやさしいブラウザー機能をつけよう!

microsoftの最新環境に備えたいのに、edgeベースのwebview2をどう導入すれば良いのか、何から手を付ければ良いのか分からず戸惑っていませんか?

安心してください。Windowsアプリに詳しい開発者から得た具体的なセットアップ手順とつまずきやすい箇所の対処法をまとめています。独自の小技も添えているので、作業時間を短縮しながら安定したブラウザー機能を組み込めます。

準備に迷いがちな工程を一つずつ確認し、動くところまで丁寧に進めてみませんか。読み終えるころには自信を持ってWebView2を扱えるようになります。

目次

MicrosoftEdgeWebView2をインストールして準備ばっちりにしよう

MicrosoftEdgeWebView2をインストールして準備ばっちりにしよう

WindowsアプリでサクッとWebView2を使えるように、まずは公式のインストーラーを使って準備を進めましょう。

  1. Evergreen Bootstrapperのダウンロード:マイクロソフトのWebView2配布ページから最新のブートストラッパー(軽量インストーラー)を取得します。
  2. インストーラーの実行:ダウンロードしたMicrosoftEdgeWebView2RuntimeInstallerX64.exeをダブルクリックしてガイドに沿って進めます。
  3. NuGetパッケージを導入:Visual StudioのパッケージマネージャーでMicrosoft.Web.WebView2をプロジェクトに追加します。
  4. 動作確認:プロジェクトをビルドしてサンプルコードを実行し、WebView2コントロールが表示されるかチェックします。

ブートストラッパーを使うと、常に最新のランタイムが自動更新されるので、セキュリティ面の心配が減ります。

かんたんBootstrapperで入れる方法

かんたんBootstrapperで入れる方法

かんたんBootstrapperはMicrosoft公式が用意している手軽なインストーラーで、ダウンロードして実行するだけでWebView2ランタイムを自動で組み込めます。コマンド操作なしでセットアップできるので、開発をすぐに始めたいときにぴったりです。

この方法のポイントは最新版を自動で取得・適用できることです。手動でランタイムを管理する手間がなくなり、古いバージョンによるトラブルを減らせます。

かんたんBootstrapperなら、チーム全員が同じ手順で環境を整えられるので、新人さんへの共有もスムーズです。

①公式ページを開いてBootstrapperをもらう

手順
公式WebView2ダウンロードページを開く

Webブラウザーで以下のURLを開いてください: https://developer.microsoft.com/ja-jp/microsoft-edge/webview2/ 。

手順
Evergreen Bootstrapperを選んでダウンロード

「Evergreen Bootstrappers」からご利用のOSアーキテクチャに合うEXEをクリックして入手してください。

OSのビット数(x86/x64/ARM64)に間違いがあると正しく動作しないので注意してください。

②ダウンロードしたexeをダブルクリックする

手順
ダウンロードしたexeをダブルクリックする

ダウンロードフォルダにあるMicrosoftEdgeWebView2Setup.exeを探します。見つかったらアイコンをダブルクリックしてください。

はじめて実行したときはWindows SmartScreenが「不明な発行元」と表示するかもしれません。その場合は詳細情報を選んでから「実行」をクリックしましょう。

公式ファイルなのでSmartScreenで警告が出ても安心して「実行」を選んでください。

③「Install」を押して待つ

手順
「Install」を押して待つ

インストール画面の「Install」ボタンをクリックすると、必要なファイルがネットから取得され始めます。進行状況はバーで表示されるので、完了するまでゆったり待ちましょう。

ダウンロードに時間がかかる場合はプロキシやセキュリティソフトの設定を見直してみましょう。

インストール完了後、ログは%TEMP%\WebView2Setup.logで確認できます。

④完了と出たら閉じてパソコンを再起動する

手順
完了メッセージを閉じる&再起動する

インストーラー画面に「完了」と出たら「閉じる」をクリックします。インストール直後はバックグラウンドで設定反映が進んでいることがあるので、一度Windowsを再起動しておくと安心です。

再起動せずにアプリを起動するとWebView2が正しく読み込まれない場合があります。

事前に作業中のファイルはすべて保存しておくと、データの消失を防げます。

スタンドアロンインストーラーで入れる方法

スタンドアロンインストーラーで入れる方法

スタンドアロンインストーラーは必要なファイルがひとまとめになったオフライン向けパッケージです。社内ネットワークが制限されている環境や、一度ダウンロードしておけば何度も繰り返しインストールしたいときに頼りになります。

この方法のいちばんの魅力はバージョンを固定できるところ。Webインストーラーのような自動更新に影響されず、いつでも同じ環境を再現できるので、トラブルシューティングや検証作業でぐっと安心感が高まります。

実際に使ってみると、ダウンロードサイズはだいたい100MB前後。自分の環境ではダウンロードからインストール完了まで2分ほどでした。管理者権限が必要なので、「管理者として実行」を忘れないようにしましょう。

①アーキテクチャに合ったインストーラーを選んで落とす

まずは自分のWindowsがどんなアーキテクチャ(パソコンの頭の働き方)かを調べて、それに合ったインストーラーを公式サイトから手に入れましょう。

手順
Windowsのアーキテクチャを確認する

画面左下のスタートボタンを右クリックして「システム」を選び、「デバイスの仕様」にある「システムの種類」を見ます。ここで x64 か x86 か ARM64 かがわかります。

手順
WebView2公式ダウンロードページを開く

ブラウザーで「Microsoft Edge WebView2 ダウンロード」と検索して公式リンクにアクセスします。必ずMicrosoftのサイトと確認してください。

手順
該当アーキテクチャ用インストーラーをダウンロード

自分のアーキテクチャと同じ行のインストーラーをクリックしてダウンロードします。基本的には「Evergreen Bootstrapper」がおすすめです。

②exeを右クリックして「管理者として実行」を選ぶ

手順
exeを右クリックして管理者として実行を選ぶ

exeファイルを右クリックして表示されたメニューから管理者として実行をクリックしてください。

ユーザーアカウント制御のダイアログが出たらはいを選ぶと、管理者権限でプログラムが起動します。

メニューに「管理者として実行」が見当たらないときはShiftキーを押しながら右クリックすると表示される場合があります。

exeを管理者権限で実行するとシステム操作が可能になるため、必ず信頼できるプログラムか確認してから実行してください。

③利用規約に同意して次へ進む

利用規約の同意画面が出てきます。中身をざっと眺めて「同意する」準備をしましょう。

手順
利用規約に同意するチェックを入れる

「私は利用規約に同意します」のチェックボックスをオンにします。少し目を通すだけでも安心感が違います。

手順
「次へ」をクリックする

右下の「次へ」ボタンをクリックしてインストールを続けます。

オフライン環境だと規約の全文表示に時間がかかる場合があります。焦らず少し待ってみましょう。

ちょっとでも利用条件を把握しておくと、後で「あれ?」とならずに済みますよ。

④「Successfully installed」が見えたら閉じる

手順
インストール完了を確認してウィンドウを閉じる

緑色のテキストでSuccessfully installedが表示されたら、ウィンドウ右上の「×」をクリックしてインストーラーを閉じてください。

コマンドプロンプト画面が残っていると次の動作でエラーになることがあります。必ず閉じたことを確認してください。

固定バージョンをプロジェクト用に置く方法

固定バージョンをプロジェクト用に置く方法

プロジェクト用にWebView2の固定バージョンを配置すると、配布先の環境に依存せず同じ挙動を保証できます。

このやり方はインターネット接続が不安定な現場や社内ネットワークだけで動かす必要があるときに頼もしいです。また、ランタイムの自動アップデートに振り回されずに開発やテストが進められるのも心強いポイントです。

特にバージョン差による表示崩れやAPIの挙動変化を避けたい業務アプリでは、固定バージョンを丸ごとプロジェクトフォルダに置いておくのがおすすめです。

①ZIP版をダウンロードして解凍する

まずはMicrosoftの公式サイトからZIP版のWebView2ランタイムを手に入れていきましょう。

手順
ダウンロードページを開く

ブラウザーで「Microsoft Edge WebView2 Evergreen Standalone Installer」のページを表示します。最新バージョンのZIPを探しましょう。

手順
ZIPファイルをダウンロード

「.zip(x64)」や「.zip(x86)」など必要なアーキテクチャを選んでダウンロードします。

手順
ファイルを解凍する

ダウンロードしたZIPを右クリックして「すべて展開」を選び、プロジェクトフォルダーなど分かりやすい場所に解凍してください。

ZIP版はx86とx64があるので、開発する環境に合わせたものを選んでください。

解凍先をプロジェクト直下にするとビルドスクリプトで取り込みやすくなります。

②解凍したフォルダーをプロジェクト直下にコピーする

手順
解凍したフォルダーをプロジェクト直下にコピーする

解凍した「Microsoft.WebView2.<バージョン>」フォルダーをエクスプローラーで開いてください。

プロジェクトのルートフォルダー(例:C:\Users\<ユーザー名>\source\repos\<プロジェクト名>)にドラッグ&ドロップします。

こうしてSDKがプロジェクト直下に置かれると、後でVisual Studioから参照設定するときに迷わず指定できるようになります。

③コードからフォルダーへのパスを指定する

手順
コードからランタイムフォルダーを指定する

アプリケーション起動時に展開先フォルダーを指定すると、WebView2がそちらを優先して使います。

たとえばC#の場合、CreateAsyncメソッドの引数にフォルダパスを渡します。

var env = await CoreWebView2Environment.CreateAsync(browserExecutableFolder: @”C:\MyApp\WebView2Runtime”); await webView2.EnsureCoreWebView2Async(env);

フォルダー名に全角文字やスペースが入ると読み込みエラーになる場合があります。

AppDomain.CurrentDomain.BaseDirectoryを使えば、実行ファイルからの相対パス指定もできます。

④ビルドして表示確認をする

手順
プロジェクトをビルドする

Visual Studioならメニューの「ビルド」から「ソリューションのビルド」を選びましょう。コマンドライン派ならプロジェクトフォルダで

dotnet build
手順
アプリを起動して表示を見る

ビルドが通ったらF5キーや「デバッグ開始」でアプリを立ち上げます。コマンドラインなら

dotnet run
手順
WebView2でページが出るか確認

組み込んだWebView2コントロールがブラウザーの枠を表示し、指定したURLやローカルHTMLが映し出されれば完璧です。

Edgeランタイムが入っていないとWebView2が立ち上がらないので、事前にインストールを確認してください。

Visual Studioを使う場合はDebug/Releaseやプラットフォーム(x86,x64)を合わせておくと動作が安定しやすいです。

WebView2でアプリにネットの窓を付けてみよう

WebView2でアプリにネットの窓を付けてみよう

自分のアプリにネットの窓を付けて、HTMLやJavaScriptの画面を直接表示したいときありますよね。最近のEdge WebView2を使えば、Windows11やWindows10の最新環境でもサクッと組み込めます。

  • WinForms+WebView2:NuGetでMicrosoft.Web.WebView2を入れて、Toolboxからコントロールを置くだけ
  • WPF+WebView2:XAMLに<WebView2>を追加して、C#でSourceを指定
  • WinUI3/UWP+WebView2:最新のWinUI3プロジェクトにSDKを導入して動的にURLを切り替え

どれもNuGetでSDKを入れたあとは、Sourceプロパティに表示したいURLやローカルHTMLのパスを入れるだけで、専用ブラウザーをまるごとアプリに組み込めます。

注意:アプリ配布前にWebView2ランタイムがインストールされているか必ず確かめてください。Bootstrapperを同梱するとユーザーが気になりません。

エンジニアのひとこと:開発中はUserDataFolderをプロジェクトごとに分けておくと、キャッシュの影響を受けずデバッグがはかどります。

VisualStudioとC#WinFormsで作る

VisualStudioとC#WinFormsで作る

VisualStudioとC#WinFormsなら、普段使い慣れたデザイナー画面でWebView2コントロールをさっと配置できます。

フォームに配置したWebView2は、コードから簡単にナビゲーションやJavaScript連携ができるので、ブラウザーらしい機能を最小限のコードで実現できます。

ドラッグ&ドロップとプロパティ設定だけで基本動作が確認できるので、初めての人でも迷わずにブラウザー機能を試せます。

既存のWinFormsアプリにあとからWeb表示を追加したいときや、短期間で動作検証を重ねながら開発したいときにぴったりの選択肢です。

ツールボックスからWebView2をフォームにドラッグする

手順
ツールボックスからWebView2をフォームにドラッグする

Visual Studioでフォームのデザイナーを開きます。ツールボックスを左側に表示し、WebView2を探します。

見つかったコントロールをクリックしたまま、フォーム上へドラッグ&ドロップします。これで画面内にWebView2コントロールが設置されます。

ツールボックスにWebView2が見当たらない場合は、ツールボックスを右クリック→「アイテムの選択」→参照からMicrosoft.Web.WebView2.WinForms.dllを追加してください。

初期URLプロパティに好きなページを入れる

手順
初期URLプロパティに好きなページを入れる

WebView2コントロールを好きなページで開くには、Source プロパティに表示したいURLを入れます。

たとえばWPFなら、MainWindow.xamlでこんな感じに指定します。

<wv2:WebView2 x:Name="webView" Source="https://www.example.com" />

この設定で起動時に自動的にexample.comが表示されます。

F5キーで走らせてページが開くか見る

手順
F5キーで起動してページを確認

Visual Studioのメニューやツールバーを気にせず、キーボードのF5キーを押します。

するとWebView2ホストアプリがデバッグモードで起動し、指定したURLが自動的に読み込まれます。

起動後のウィンドウを見て、設定したページが問題なく表示されているかチェックしましょう。

もし白いままだったりエラー画面が出たりしたら、アドレスの綴りやプロキシ設定に間違いがないかを確認すると安心です。

WPFでふんわり表示する

WPFでふんわり表示する

WebView2を使うとページ読み込み中に真っ白な画面がチラついてしまうことがあります。そのままパッと表示されると画面が冷たく感じやすいので、WPFのアニメーション機能を使ってOpacity(透過度)をふんわり変化させる手法がおすすめです。読み込み完了のタイミングでゆっくりフェードインさせることで、ユーザーの最初の体験を自然でやさしい印象にできます。

XAMLにWebView2タグを追加する

手順
名前空間を追加する

Visual StudioでMainWindow.xamlを開き、Windowタグ(またはPageタグ)のルート要素にWebView2用の名前空間を宣言します。

xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"

手順
タグを配置する

レイアウト用のGridやStackPanelの中に、WebView2タグを追加します。ここではGridの中に配置する例です。

<wv2:WebView2 x:Name="myWebView" Source="https://www.example.com" />

手順
レイアウトを調整する

ウィンドウに合わせて幅と高さを伸ばし、画面全体を使う設定にすると見栄えよく動作します。

<wv2:WebView2 x:Name="myWebView" Source="https://www.example.com" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />

コードビハインドでNavigateメソッドを呼ぶ

手順
Navigateメソッドを呼ぶ

CoreWebView2の初期化が終わったイベント内で、読み込むURLを指定してNavigateメソッドを呼び出します。

private async void InitializeWebView()
{
    await webView.EnsureCoreWebView2Async();
    webView.CoreWebView2InitializationCompleted += OnWebViewInitializationCompleted;
}

private void OnWebViewInitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
{
    if (e.IsSuccess)
    {
        webView.CoreWebView2.Navigate("https://www.example.com");
    }
}

このようにすると、初期化完了と同時に指定したページが表示されます。

CoreWebView2を使う前にEnsureCoreWebView2Asyncで初期化を待たないと、CoreWebView2がnullのままになる不具合が起きます。

デバッグボタンを押して動きを確かめる

手順
Visual Studioのデバッグを開始する

ツールバーの緑色の再生ボタンをクリックするか、キーボードのF5キーを押してください。ビルドが始まり、Windowsアプリが自動で起動します。

起動後、WebView2に設定したURLやローカルHTMLが表示されるか確認します。画面を操作しながら、出力ウィンドウに表示されるログをチェックすると、読み込み状況やエラーをすぐに把握できます。

デバッグモードで実行しないとブレークポイントが効かないので、ビルド構成が「デバッグ」になっているか必ず確認してください。

初期動作を追うときは、WebView2のInitializeAsyncメソッド直後にブレークポイントを設定しておくと、コントロールがどのタイミングで準備されるかがわかりやすくなります。

C++Win32で組み込む

C++Win32で組み込む

Win32 APIを通じてWebView2を組み込むと、アプリ起動時にCOMを初期化して環境を作るだけでブラウザー機能が実現できます。余計なフレームワークを挟まないので処理の見通しが良く、動作がキビキビして気持ちいいです。

手順としてはCoInitializeExでCOMを立ち上げ、CreateCoreWebView2EnvironmentWithOptionsで環境を用意し、続けてCreateCoreWebView2Controllerでコントローラーを作成します。最後にNavigateを呼び出してページを表示するだけ。主要なコードはこの流れに沿うだけなので、意外とサクッと組み込めます。

プログラマーらしい自由度が手に入るぶん、EdgeランタイムとSDKのバージョンを合わせておくのが肝心です。少しハマるポイントを先に押さえておくと、わくわくしながら組み込みが進みましたよ。

ヘッダーにWebView2.hをインクルードする

まずはプロジェクトの共通ヘッダー(たとえばpch.hなど)を開いてください。

#include "WebView2.h"

この一行でWebView2の型やAPIが使えるようになります。もしエラーが出る場合は、プロジェクトのプロパティ→C/C++→追加のインクルードディレクトリにWebView2 SDKのincludeフォルダーを追加してみてください。

CreateCoreWebView2EnvironmentWithOptionsを呼ぶ

CreateCoreWebView2EnvironmentWithOptionsを呼ぶことで、カスタムオプション付きのWebView2環境を初期化できます。ランタイムのパスやユーザーデータフォルダーを指定できるので、環境ごとにデータを分けたいときに便利です。

HRESULT hr = CreateCoreWebView2EnvironmentWithOptions( L"C:\\Program Files (x86)\\Microsoft\\Edge\\", L"user_data", nullptr, Callback( [&](HRESULT result, ICoreWebView2Environment* env) { if (SUCCEEDED(result)) { env->CreateCoreWebView2Controller(hwnd, Callback( [&](HRESULT res, ICoreWebView2Controller* controller) { // コントローラー取得後の処理 }).Get()); } else { // エラー処理 } return S_OK; }).Get());

この呼び出しは非同期なので、コールバック内でコントローラー取得やエラー処理を行います。特にユーザーデータフォルダーに書き込み権限があるか確認しておくと安心です。

パスやフォルダー名を間違えると初期化に失敗するので注意してください。

メッセージループでWebView2WindowProcを処理する

WebView2 を組み込んだウィンドウは、内部でさまざまなメッセージを受け取っています。そのままだとキー入力やフォーカス移動などがうまく動かないことがあるので、WebView2WindowProc を自分の WndProc に組み込んで、きちんと処理させましょう。

手順
WebView2WindowProc のポインターを取得

コントローラー生成後に QueryInterface で実験用インターフェイスを取り出し、PFN_WebView2WindowProc を受け取ります。

ICoreWebView2ExperimentalController2* expCtrl = nullptr;
webviewController->QueryInterface(IID_PPV_ARGS(&expCtrl));
PFN_WebView2WindowProc webviewWindowProc = nullptr;
expCtrl->get_WindowProc(&webviewWindowProc);
手順
WndProc で呼び出して結果を返す

自作の WndProc に入れて、まず WebView2 にメッセージ処理を任せるようにします。ハンドル済みならそのまま返却しましょう。

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    LRESULT result = 0;
    if(webviewWindowProc
       && SUCCEEDED(webviewWindowProc(hWnd,message,wParam,lParam,&result)))
    {
        return result;
    }
    // ここから通常のメッセージ処理
    return DefWindowProc(hWnd,message,wParam,lParam);
}

WebView2WindowProc 呼び出し前後で独自処理を入れるときは、戻り値を上書きしないように注意してください。

実験用インターフェイスは将来変更される可能性があります。安定版が提供されたらそちらへ移行しましょう。

WebView2でもっと遊ぶアイデアいろいろ

WebView2でもっと遊ぶアイデアいろいろ

WebView2で基本機能に慣れたら、さらに楽しい仕掛けを試してみましょう。ここでは実際に使って「おっ」と声が出た応用アイデアを集めました。

応用技どう楽しくなる?
カスタム右クリックメニュー独自メニューで使い勝手アップ
ホスト&Webの双方向通信JavaScriptからC#呼び出しで深い連携
CSS・JSの動的読み込み見た目や動作をリアルタイムで変更
オフラインキャッシュ活用ネット無しでも重要ページを表示
DevTools埋め込みアプリ内でそのままデバッグ可能

アプリ内でPDFをすらすら表示する

アプリ内でPDFをすらすら表示する

WindowsアプリにWebView2を組み込むと、PDFを自前で特別なライブラリを用意せずにすらすら表示できます。ローカルファイルやWeb上のPDFをCoreWebView2のNavigateメソッドに渡すだけで、PDFビューがそのまま開くので、ユーザーが資料を読むときもストレスフリーです。

さらに、サーバーから取得したPDFデータをメモリ上で扱いたい場合も、バイナリをBase64でエンコードしてData URIに変換すればOK。外部アプリを起動しないぶん、アプリ全体の見た目や使い心地を統一できるのがうれしいポイントです。

WebView2のSourceにPDFファイルのパスを入れる

手順
WebView2のSourceにPDFファイルのパスを入れる

実行時フォルダーにあるPDFを表示するには、AppDomain.CurrentDomain.BaseDirectoryで実行パスを取得して組み合わせるのが安心です。

以下のようにSourceにURIを渡してください。

webView2.Source=new Uri(Path.Combine(AppDomain.CurrentDomain.BaseDirectory,"sample.pdf"));

ズームボタンを作ってScriptを呼ぶ

画面上にズームイン・ズームアウト用のボタンを配置して、クリック時にWebView2へスクリプト呼び出しで拡大縮小を行う手順を説明します。

手順
UIにZoom In/Outボタンを追加

WPFならXAML、WinFormsならデザイナーでボタンを配置します。例としてWPFでは以下のように書きます。

<Button Content="Zoom In" Click="ZoomIn_Click" />

<Button Content="Zoom Out" Click="ZoomOut_Click" />

手順
クリックイベントハンドラーを作成

C#コードビハインドにクリックイベントメソッドを追加します。非同期メソッドにしておくとスムーズです。

private async void ZoomIn_Click(object sender, RoutedEventArgs e)

private async void ZoomOut_Click(object sender, RoutedEventArgs e)

手順
ExecuteScriptAsyncでズーム指示を送信

CoreWebView2のExecuteScriptAsyncを使ってJavaScriptでズーム率を変更します。例では拡大率を20%刻みで調整しています。

await webView.CoreWebView2.ExecuteScriptAsync("document.body.style.zoom = '1.2';");
await webView.CoreWebView2.ExecuteScriptAsync("document.body.style.zoom = '0.8';");

実体験では、連続で呼び出すとレイアウトが乱れることがあったので、ボタン押下後少し間隔をあけると安定しました。

注意点:WebView2が初期化される前にExecuteScriptAsyncを呼ぶと例外が出るので、必ずCoreWebView2Readyイベント以降で実行してください。

JavaScriptとC#でデータをやりとりする

JavaScriptとC#でデータをやりとりする

WebView2を使うと、JavaScriptとC#の間でやりとりがスムーズにできるようになります。

JavaScriptからC#へデータを送るときは、window.chrome.webview.postMessage()を使います。受け取る側のC#では、CoreWebView2.WebMessageReceivedイベントを登録しておけば、JSON形式の文字列をパースして好きなオブジェクトに変換できます。逆にC#からJavaScriptを呼ぶときは、ExecuteScriptAsync()が役立ちます。こちらもJSONをそのまま渡せるので、やりとりのたびに複雑なパーシング処理を組む必要がありません。

リアルタイムで細かい連携が必要なときや、ユーザー操作に合わせてUIを動的に書き換えたいときに特におすすめです。いったん慣れてしまえば、ブラウザーとデスクトップアプリの境界がぐっと近づいて、まるでネイティブとWebが一体化したような開発体験を味わえます。

AddHostObjectToScriptでオブジェクトを渡す

AddHostObjectToScriptを使うと、C#側で用意したオブジェクトをそのままJavaScriptから呼び出せるようになります。普段のデスクトップアプリとWebの橋渡しがスムーズにできて、UIの拡張にも役立ちますよ。

下に実際に使ったときのステップをまとめました。迷わず手を動かせるように細かくご紹介します。

手順
COM公開可能なクラスを用意する

JavaScriptから呼び出すには ComVisible属性を付ける必要があります。簡単な例を以下のコードで示します。

using System.Runtime.InteropServices; [ComVisible(true)] public class Bridge { public void ShowMessage(string message) { MessageBox.Show(message); } }
手順
WebView2初期化後にオブジェクトを登録

CoreWebView2が準備できたタイミングで登録します。自分が使っている初期化処理の後に下の一行を追加してください。

webView.CoreWebView2.AddHostObjectToScript(“bridge”, new Bridge());
手順
JavaScriptから呼び出し

あとはHTMLやJSコードで次のようにアクセスできます。メッセージ表示がアプリのUIでポップアップされるのを確認してみてください。

window.chrome.webview.hostObjects.bridge.ShowMessage(“Hello from JS”);

クラスのメソッドはプリミティブ型(文字列や数値)や構造体で受け渡ししてください。複雑な型は正常にシリアライズされないことがあるので注意しましょう。

window.chrome.webview.postMessageでイベントを受け取る

手順
イベントリスナーを登録する

WebView2ホスト側から送られてくるメッセージを受け取るには、WebページのJavaScriptでイベントリスナーを登録します。

以下のコードをページの先頭、またはDOMが読み込まれたあとに実行してください。

window.chrome.webview.addEventListener('message', event => { const data = event.data console.log('受信したデータ:', data) // dataに応じた処理をここで行う })

WebView2 のバージョンが古い場合は window.chrome.webview.onmessage を使うケースがありますが、最近のバージョンでは addEventListener('message') が推奨されています。

ダークモードに切り替えてみる

ダークモードに切り替えてみる

WebView2はWindowsのテーマに合わせて自動で明暗を切り替えられます。ダークモードにすることで画面の眩しさが和らぎ、長時間の利用でも目が疲れにくくなります。

落ち着いた配色は夜間や暗い場所での操作にぴったりです。シンプルな設定でアプリ全体の雰囲気が引き締まり、見た目の統一感もアップします。

WebView2ThemeをDarkに設定する

WebView2の見た目をダークに揃えたいときは起動時にブラウザー側へダークモードのフラグを渡すとパッと反映できます。

手順
ダークモード用フラグを準備する

CoreWebView2EnvironmentOptionsに「–force-dark-mode」を渡すとダークテーマがONになります。

var envOptions = new CoreWebView2EnvironmentOptions("--force-dark-mode");
手順
環境を作成してWebView2を初期化

先ほどのオプションを使ってCoreWebView2Environmentを作り、WebView2へ反映させます。

var env = await CoreWebView2Environment.CreateAsync(null, null, envOptions);
await webView.EnsureCoreWebView2Async(env);

CSS prefers-color-schemeを使ってスタイルを変える

ダークモードやライトモードに応じて見た目を切り替えるには、prefers-color-schemeメディア機能を使います。Windowsのテーマ設定に合わせて自然に色が切り替わるので、WebView2を使ったアプリにとてもおすすめです。

@media (prefers-color-scheme: dark) { body { background-color: #121212; color: #e0e0e0; } } @media (prefers-color-scheme: light) { body { background-color: #ffffff; color: #202020; } }
手順
CSSにメディアクエリを追加

作成中のCSSファイルを開き、先ほどの@mediaブロックを貼り付けて保存します。

手順
WebView2をリロード

Windowsのテーマを切り替えたあと、WebView2を再読み込みするとスタイル変更が反映されます。

実際に触ってみると、テーマ変更直後は少しタイムラグがあるので、リロードボタンを押すと確実に新しい配色が見られます。

よくある質問

よくある質問
WebView2って何ですか?

WebView2はWindowsアプリにEdge(Chromium)ベースのブラウザー機能を手軽に組み込めるコントロールです。実際に組み込んでみると、既存のHTMLやJavaScript資産を再利用できるので、社内ツールの画面表示が驚くほどスムーズになりました。

インストールが途中で止まってしまいます

動作確認PCでランタイムのインストーラーが途中で止まったときは、管理者権限で実行すると解消しました。ネットワークからのダウンロードに時間がかかる場合はオフラインインストーラーを使うと安定して進みます。

どんな場面で使うと便利ですか?

設定画面をWeb UIで作りたいときや社内マニュアルをそのままアプリに埋め込みたいときに威力を発揮します。過去の経験では、社内向け通知欄をHTMLで整形する必要があった場面でとても助かりました。

更新はどうやって管理すればいい?

WebView2 RuntimeはMicrosoftが自動更新を提供してくれるので、固定バージョンでの運用以外はそのまま任せると安全です。社内でバージョン管理が必要な場合はFixed Versionモードに切り替えて、定期的に新バージョンをテストしてから配布すると安心感が増します。

インストールが途中で止まったときは?

インストールが進まないと不安になりますよね。プログレスバーが長時間止まったままなら、いくつかの原因と対処方法を試してみましょう。

  1. 管理者権限で実行してみる:インストーラーのアイコンを右クリックして「管理者として実行」を選ぶ。
  2. ウイルス対策ソフトの一時停止:誤検知でブロックされる場合があるため、インストール中は一時的にオフにする。
  3. Windows Updateサービスの確認:更新が保留中だと止まることがあるので、最新の更新を適用してから再試行する。
  4. 一時フォルダの掃除:%TEMP%フォルダ内の古いファイルを削除してからインストーラーを再起動する。

まれに他のインストーラーが裏で動いていると邪魔をするため、タスクマネージャーで関連プロセスを終了してから試してみてください。

オフライン環境でも入れられる?

ネット環境がなくても動作するEdge WebView2のオフライン用インストーラーパッケージが公開されています。事前にMicrosoftサイトから必要なファイルをまとめて取得すれば、インターネットに繋がらないマシンにも問題なく導入できます。

オフラインインストーラーにはEvergreen版と固定バージョン版があるので、プロジェクトの要件に合わせて選択してください。固定バージョン版を使うとバージョン管理がしやすく、再配布する際も安心です。

Edgeを消してもWebView2は動く?

WebView2はブラウザーアプリとは別のランタイムとして動くため、Edge本体を削除しても基本的に影響を受けません。実際にEdgeをアンインストールしてみた環境でも、自作アプリのWebView2部分は問題なく立ち上がりました。ただし、コアコンポーネントが残っていることが前提なので、Evergreen版ランタイムを導入しておくと安心感が高まります。

サイズを小さくするコツはある?

WebView2を導入するとき、小さなファイルを好むなら、ブートストラッパー配布がおすすめです。この仕組みだと必要最低限のランタイムだけをネットから取得するので、インストーラー本体は約1MBと驚くほど軽くなります。

さらにサイズを削りたいときは、固定バージョン配布から不要なロケール(言語ファイル)を除外したり、開発用のデバッグシンボルをリリースビルドに含めないように設定すると、1〜2MB程度の節約に繋がります。

まとめ

まとめ

Windowsアプリにブラウザー機能をつけるには、まずMicrosoft Edge WebView2ランタイムをインストールし、プロジェクトにWebView2 SDKを追加しました。そのあとデザイナーやコードでWebView2コントロールを配置し、Navigateメソッドで好きなURLを表示できるようにしました。

ここまでの手順で基本的なページ表示はバッチリです。次はJavaScriptとの双方向通信やDevToolsの表示など、プログラマーならではの便利機能を試してみてください。試行錯誤しながら、アプリの操作性や見た目を自由にカスタマイズするのが楽しいポイントです。

WebView2を使いこなせば、ニュースフィードやチャット機能、リッチなコンテンツをアプリにすんなり組み込めます。ぜひこの流れを参考に、実際のプロジェクトで活用してみてください。きっとアプリ開発がもっと楽しくなります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次