C#でブラウザを作る方法|WebView2でできること・導入手順・よくある悩みを解決
はじめに
C#でブラウザを作りたい場合、現在もっとも現実的な方法は「WebView2」を使うことです。WebView2を使えば、C#のWindowsアプリ内にChromiumベースのブラウザ機能を組み込めます。
「C# ブラウザ」と検索する人の多くは、ChromeやEdgeのような本格ブラウザを一から作りたいというより、社内システム専用ブラウザ、Webアプリ表示用のデスクトップアプリ、キオスク端末向けブラウザ、簡易的なURL閲覧ツールなどを作りたいケースが多いはずです。
この記事では、C#でブラウザを作る方法を、WebView2の基本から導入手順、サンプルコード、よくあるエラー、配布時の注意点まで順番に解説します。
1. C#でブラウザを作るならWebView2が最適な理由
1-1. 「C# ブラウザ」で検索する人が作りたいもの
C#でブラウザを作る目的はさまざまです。たとえば、次のような用途があります。
社内Webシステムだけを表示する専用ブラウザを作りたい、特定のURLだけを開ける業務端末を作りたい、WebアプリをWindowsアプリのように配布したい、HTMLやJavaScriptで作った画面をC#アプリに組み込みたい、Webページの表示や操作をC#側から制御したい、といったケースです。
このような用途であれば、ブラウザエンジンを自作する必要はありません。WebView2を使えば、C#アプリの中に高機能なブラウザ表示領域を簡単に組み込めます。
1-2. WebView2とは?Chromiumベースのブラウザ部品
WebView2は、Microsoft EdgeのChromiumエンジンを利用して、Windowsアプリ内にWebコンテンツを表示するためのコントロールです。
C#のWinFormsやWPFアプリに配置すると、アプリの一部としてWebページを表示できます。通常のWebサイト表示だけでなく、JavaScriptの実行、C#とJavaScriptのメッセージ連携、Cookie管理、ダウンロード制御、新しいウィンドウの制御なども可能です。
つまりWebView2は、「C#でブラウザをゼロから作る」のではなく、「C#アプリに最新ブラウザ機能を埋め込む」ための仕組みです。
1-3. 旧WebBrowserコントロールとの違い
以前はC#でWebページを表示する場合、WinFormsのWebBrowserコントロールがよく使われていました。しかし、WebBrowserコントロールは古いInternet Explorerベースです。
現在のWebサイトは、HTML5、CSS3、最新JavaScript、モダンな認証方式などを前提に作られています。そのため、WebBrowserコントロールでは表示が崩れたり、JavaScriptが動かなかったり、ログイン画面が正しく表示されなかったりすることがあります。
一方、WebView2はChromiumベースなので、現代的なWebサイトとの互換性が高く、C#でブラウザを作るなら基本的にはWebView2を選ぶべきです。
1-4. C#で自作ブラウザを作るメリットと限界
C#で自作ブラウザを作るメリットは、業務に合わせた画面や操作を自由に設計できることです。戻る、進む、更新、URL制限、ログ出力、認証連携、独自メニューなど、通常ブラウザにはない機能を追加できます。
一方で、ChromeやEdgeのような汎用ブラウザを完全に再現するのは簡単ではありません。タブ管理、拡張機能、開発者ツール、セキュリティ制御、プロファイル管理などを本格的に作り込むには多くの実装が必要です。
そのため、C#ブラウザ開発では「何でもできるブラウザ」ではなく、「目的に特化したブラウザ」を作るのが現実的です。
2. C#ブラウザ開発でWebView2を使う前に知っておくこと
2-1. WebView2でできること
WebView2を使うと、C#アプリで次のようなことができます。
Webページの表示、URL遷移、戻る・進む・更新、ページタイトルの取得、現在URLの取得、JavaScriptの実行、C#とJavaScriptの双方向通信、Cookieの取得・削除、キャッシュやユーザーデータの管理、ダウンロード処理、新しいウィンドウの制御、ローカルHTMLの表示などです。
通常の簡易ブラウザに必要な機能は、WebView2だけでかなり実装できます。
2-2. WebView2でできないこと・注意点
WebView2は便利ですが、万能ではありません。
たとえば、Chrome拡張機能をそのまま自由に使う用途には向きません。また、Webサイト側の制限により、C#からJavaScriptを実行しても期待どおり動かない場合があります。ログイン状態やCookieを扱う場合は、セキュリティや個人情報管理にも注意が必要です。
また、WebView2はWebView2 Runtimeに依存します。開発PCでは動いても、配布先PCにRuntimeがないと起動しないことがあります。
2-3. WinFormsとWPFのどちらを選ぶべきか
C#でブラウザを作る場合、WinFormsでもWPFでもWebView2を使えます。
簡単に作りたいならWinFormsがおすすめです。ボタンやテキストボックスを配置して、イベント処理を書くだけで簡易ブラウザを作れます。
一方、見た目を細かく作り込みたい場合や、MVVMで設計したい場合はWPFが向いています。業務アプリとして長期的に保守するならWPF、学習や小規模ツールならWinFormsを選ぶとよいでしょう。
2-4. 必要な開発環境と対応OS
WebView2を使ったC#ブラウザ開発では、Visual Studio、.NET、Microsoft.Web.WebView2パッケージ、WebView2 Runtimeが必要です。
対応OSは主にWindowsです。Windowsデスクトップアプリとしてブラウザ機能を組み込む用途に適しています。
開発では、Visual StudioのWindows Forms AppまたはWPF Appを作成し、NuGetからMicrosoft.Web.WebView2を追加します。
2-5. WebView2 Runtimeは必要?配布時の注意点
WebView2を使うアプリを実行するには、WebView2 Runtimeが必要です。多くのWindows環境ではすでにインストールされていますが、必ず入っているとは限りません。
配布時には、Runtimeを事前にインストールしてもらう、インストーラーに含める、Fixed Version Runtimeをアプリに同梱するなどの方法を検討します。
社内配布の場合は、配布先PCのOS、権限、ネットワーク制限、Runtimeの有無を事前に確認しておくとトラブルを減らせます。
3. C#で簡単なブラウザを作る全体手順
3-1. Visual Studioで新規プロジェクトを作成する
まずVisual Studioを起動し、新しいプロジェクトを作成します。
初心者であれば「Windows Forms App」を選ぶと分かりやすいです。言語はC#、フレームワークは.NET 6以降や.NET Frameworkなど、利用環境に合わせて選択します。
プロジェクト名は、たとえば「SimpleCSharpBrowser」などにしておくとよいでしょう。
3-2. NuGetでMicrosoft.Web.WebView2を追加する
次に、WebView2を使うためにNuGetパッケージを追加します。
Visual Studioのソリューションエクスプローラーでプロジェクトを右クリックし、「NuGetパッケージの管理」を開きます。参照タブで「Microsoft.Web.WebView2」を検索し、インストールします。
インストール後、ビルドしてエラーが出なければ準備完了です。
3-3. フォームにWebView2コントロールを配置する
NuGetを追加すると、ツールボックスにWebView2コントロールが表示されます。
フォームにWebView2をドラッグ&ドロップし、画面の大部分を占めるように配置します。DockプロパティをFillにすると、フォームサイズに合わせてWebView2が広がります。
上部にURL入力用のTextBox、移動用のButton、戻る・進む・更新ボタンを配置すれば、簡単なブラウザ画面になります。
3-4. URL入力欄と戻る・進む・更新ボタンを作る
ブラウザらしくするには、最低限次のUIを用意します。
URLを入力するTextBox、移動ボタン、戻るボタン、進むボタン、更新ボタンです。
TextBoxに入力されたURLをWebView2に渡すことで、指定したページを表示できます。ボタンのClickイベントに処理を書けば、基本的なブラウザ操作を実装できます。
3-5. 入力したURLをWebView2で表示する
WebView2でページを開くには、SourceプロパティにURLを設定します。
ただし、ユーザーが「example.com」のように入力した場合、そのままでは正しいURLとして扱えないことがあります。そのため、
3-6. 最小構成のサンプルコード
以下は、WinFormsでWebView2を使った簡易ブラウザを作る最小構成の例です。
C#using Microsoft.Web.WebView2.Core;
namespace SimpleCSharpBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeBrowser();
}
private async void InitializeBrowser()
{
await webView21.EnsureCoreWebView2Async();
webView21.Source = new Uri("https://www.google.com");
}
private void btnGo_Click(object sender, EventArgs e)
{
var url = txtUrl.Text.Trim();
if (string.IsNullOrEmpty(url))
{
return;
}
if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "https://" + url;
}
webView21.Source = new Uri(url);
}
private void btnBack_Click(object sender, EventArgs e)
{
if (webView21.CanGoBack)
{
webView21.GoBack();
}
}
private void btnForward_Click(object sender, EventArgs e)
{
if (webView21.CanGoForward)
{
webView21.GoForward();
}
}
private void btnReload_Click(object sender, EventArgs e)
{
webView21.Reload();
}
}
}
このコードだけでも、URL入力、ページ表示、戻る、進む、更新ができるC#ブラウザの基本形になります。
4. ブラウザらしい機能を追加する方法
4-1. 戻る・進む・再読み込み・停止を実装する
WebView2には、戻る・進む・再読み込みのためのメソッドが用意されています。
C#if (webView21.CanGoBack)
{
webView21.GoBack();
}
if (webView21.CanGoForward)
{
webView21.GoForward();
}
webView21.Reload();
webView21.Stop();
CanGoBackやCanGoForwardで実行可能か確認してから呼び出すと、エラーを防げます。
4-2. アドレスバーに現在のURLを表示する
ページ遷移後に現在のURLをアドレスバーへ反映するには、NavigationCompletedイベントを使います。
C#private void webView21_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
{
txtUrl.Text = webView21.Source?.ToString();
}
これにより、リンクをクリックして別ページへ移動した場合でも、現在のURLをTextBoxに表示できます。
4-3. ページタイトルを取得してフォーム名に表示する
ページタイトルをフォームのタイトルバーに表示すると、よりブラウザらしくなります。
C#private void webView21_CoreWebView2InitializationCompleted(
object sender,
CoreWebView2InitializationCompletedEventArgs e)
{
webView21.CoreWebView2.DocumentTitleChanged += (s, args) =>
{
this.Text = webView21.CoreWebView2.DocumentTitle;
};
}
Webページのタイトルが変わるたびに、フォーム名も更新されます。
4-4. JavaScriptを実行する
WebView2では、C#側からJavaScriptを実行できます。
C#string result = await webView21.CoreWebView2.ExecuteScriptAsync("document.title");
MessageBox.Show(result);
画面内の要素を取得したり、ボタンをクリックしたり、フォームに値を入力したりすることも可能です。
ただし、WebサイトによってはC#側からの操作が制限される場合があります。自社サイトや自分で管理しているWebアプリで使うのが安全です。
4-5. C#とJavaScriptでデータをやり取りする
WebView2では、JavaScriptからC#へメッセージを送ることもできます。
C#側ではWebMessageReceivedイベントを使います。
C#webView21.CoreWebView2.WebMessageReceived += (sender, args) =>
{
string message = args.TryGetWebMessageAsString();
MessageBox.Show(message);
};
JavaScript側では次のように送信します。
JavaScriptwindow.chrome.webview.postMessage("Hello from JavaScript");
この仕組みを使うと、HTML UIで入力された内容をC#側に渡したり、C#側の処理結果をWeb画面へ反映したりできます。
4-6. ダウンロードや新しいウィンドウを制御する
WebView2では、ファイルダウンロードや新しいウィンドウの制御もできます。
たとえば、リンククリックで別ウィンドウが開かれそうになったとき、同じWebView2内で開くように制御できます。
C#webView21.CoreWebView2.NewWindowRequested += (sender, e) =>
{
e.Handled = true;
webView21.CoreWebView2.Navigate(e.Uri);
};
業務アプリでは、勝手に外部ブラウザが開かれると困る場合があります。そのようなときに便利です。
4-7. Cookie・キャッシュ・ユーザーデータを管理する
WebView2はCookieやキャッシュ、ログイン状態などをユーザーデータフォルダーに保存します。
複数ユーザーで同じPCを使う場合や、ログイン情報を残したくない場合は、ユーザーデータフォルダーの扱いに注意が必要です。
一時的なブラウザとして使いたい場合は、専用のユーザーデータフォルダーを作成し、終了時に削除する設計も検討できます。
5. WebView2導入時によくあるエラーと解決策
5-1. WebView2がツールボックスに表示されない
NuGetでMicrosoft.Web.WebView2をインストールしても、ツールボックスにWebView2が表示されないことがあります。
この場合は、Visual Studioを再起動する、プロジェクトをビルドする、対象フレームワークを確認する、ツールボックスをリセットする、といった方法を試してください。
それでも表示されない場合は、コードからWebView2を生成する方法もあります。
5-2. NuGetでインストールしたのにビルドできない
ビルドエラーが出る場合は、パッケージの復元に失敗している可能性があります。
NuGetパッケージの復元を実行し、Microsoft.Web.WebView2が正しく参照に追加されているか確認してください。また、古い.NET FrameworkやVisual Studioを使っている場合、対応バージョンが合っていないこともあります。
5-3. 画面が真っ白でページが表示されない
WebView2が真っ白なまま表示される場合、初期化処理が完了していない可能性があります。
EnsureCoreWebView2Asyncを呼び出してからURLを設定しているか確認しましょう。また、ネットワーク接続、プロキシ設定、ウイルス対策ソフト、社内セキュリティ設定が原因でページが読み込めない場合もあります。
5-4. Runtimeが見つからない・起動しない
配布先PCでWebView2が起動しない場合、WebView2 Runtimeがインストールされていない可能性があります。
開発PCでは問題なく動いても、配布先PCではRuntimeがないために動かないことがあります。インストーラーにRuntimeの導入処理を含めるか、事前にインストールしてもらうようにしましょう。
5-5. URLを入力しても遷移しない
URLを入力してもページが開かない場合、入力値が正しいURL形式になっていない可能性があります。
たとえば「example.com」とだけ入力した場合、Uriとして扱えないことがあります。
C#if (!url.StartsWith("http://") && !url.StartsWith("https://"))
{
url = "https://" + url;
}
5-6. JavaScript実行やメッセージ連携が動かない
JavaScriptを実行する場合は、WebView2の初期化が完了している必要があります。また、ページの読み込み完了前に実行すると、対象の要素がまだ存在せず失敗することがあります。
NavigationCompletedイベント後に実行する、またはJavaScript側でDOMContentLoadedを待つなどの工夫が必要です。
C#とJavaScriptのメッセージ連携では、window.chrome.webview.postMessageを使っているか、WebMessageReceivedイベントを登録しているか確認しましょう。
5-7. 64bit・32bit設定でつまずく場合の確認ポイント
WebView2を使うアプリでは、Any CPU、x64、x86の設定が原因で動作が不安定になることがあります。
特に古いライブラリや外部DLLと組み合わせる場合は、プラットフォームターゲットを確認してください。配布先PCの環境に合わせてx64またはx86を明示した方が安定する場合もあります。
6. 作成したC#ブラウザを配布する方法
6-1. WebView2 Runtimeの配布方法を選ぶ
C#で作成したWebView2ブラウザを配布する場合、アプリ本体だけでなくWebView2 Runtimeの扱いを考える必要があります。
Runtimeが配布先PCに入っていれば、そのまま動作します。入っていない場合は、アプリとは別にインストールしてもらうか、インストーラーに組み込む必要があります。
6-2. Evergreen RuntimeとFixed Version Runtimeの違い
WebView2 Runtimeには、主にEvergreen RuntimeとFixed Version Runtimeがあります。
Evergreen Runtimeは自動更新されるRuntimeです。常に新しい状態に保ちやすく、一般的な配布ではこちらが使いやすいです。
Fixed Version Runtimeは、特定バージョンのRuntimeをアプリに同梱する方法です。動作環境を固定したい場合や、厳密な検証が必要な業務アプリで選択されることがあります。
6-3. インストーラーにRuntimeを含めるべきケース
社内配布や一般ユーザー向け配布では、Runtimeの有無でトラブルが起きやすいため、インストーラー側でRuntimeを確認・導入できるようにしておくと安心です。
特に、ユーザーに手動インストールを依頼できない場合、オフライン環境で使う場合、PC管理権限が制限されている場合は、配布方式を事前に決めておく必要があります。
6-4. 配布先PCで動作確認すべきポイント
配布前には、開発PC以外の環境で動作確認しましょう。
確認すべきポイントは、アプリが起動するか、WebView2 Runtimeが存在するか、対象URLを表示できるか、ログインできるか、ダウンロードが動くか、プロキシ環境で通信できるか、セキュリティソフトにブロックされないか、などです。
開発PCでは気づかない問題が、配布先PCで発生することはよくあります。
6-5. 社内ツールとして配布する場合の注意点
社内ツールとしてC#ブラウザを配布する場合は、管理者権限、ネットワーク制限、プロキシ、証明書、認証方式、アップデート方法を確認しておく必要があります。
また、ユーザーデータフォルダーにログイン情報やCookieが残る場合があります。共有PCで使うなら、ログアウト処理やデータ削除機能も検討しましょう。
7. C#ブラウザ開発で意識したいセキュリティ
7-1. 任意のURLを開ける場合のリスク
C#ブラウザで任意のURLを開けるようにすると、悪意のあるサイトにアクセスされる可能性があります。
社内システム専用ブラウザとして使うなら、許可したドメインだけを開けるように制限するのがおすすめです。NavigationStartingイベントを使えば、遷移先URLを確認してブロックできます。
7-2. JavaScript実行時に注意すべきこと
C#側からJavaScriptを実行できる機能は便利ですが、扱いを間違えると危険です。
ユーザー入力をそのままJavaScriptに埋め込むと、意図しないスクリプト実行につながる可能性があります。特にログイン画面や個人情報を扱う画面では、実行するJavaScriptを最小限にしましょう。
7-3. ローカルファイルアクセスの扱い方
WebView2でローカルHTMLやローカルファイルを表示する場合は、アクセス範囲に注意が必要です。
ローカルファイルとWebコンテンツを不用意に連携させると、情報漏えいのリスクが高まります。ローカルファイルを表示する場合は、信頼できるファイルだけを扱う設計にしましょう。
7-4. Cookie・ログイン情報を保存する場合の注意点
WebView2ではCookieやログイン状態が保存されることがあります。これは便利ですが、共有PCや業務端末では注意が必要です。
ログイン情報を残したくない場合は、終了時にCookieを削除する、ユーザーデータフォルダーを分ける、シークレット的な運用にするなどの対策を検討しましょう。
7-5. 業務アプリに組み込む場合の安全な設計
業務アプリにWebView2を組み込む場合は、表示するURLを限定し、不要なJavaScript実行を避け、外部サイトへの遷移を制限する設計が安全です。
また、C#とJavaScriptのメッセージ連携では、受け取ったデータを必ず検証してください。Webページから送られてきた値をそのままファイル操作やDB操作に使うのは避けるべきです。
8. C#ブラウザの実用例
8-1. 社内Webシステム専用ブラウザ
もっとも実用的なのは、社内Webシステム専用ブラウザです。
通常のブラウザを使うと、ユーザーが関係ないサイトを開いたり、設定を変更したりする可能性があります。C#で専用ブラウザを作れば、特定URLだけを表示し、戻る・進む・印刷など必要な機能だけを提供できます。
8-2. キオスク端末・業務端末向けブラウザ
受付端末、注文端末、工場端末、店舗端末など、決められたWeb画面だけを表示する用途にも向いています。
全画面表示にしたり、アドレスバーを非表示にしたり、特定操作を禁止したりすれば、キオスク端末向けのブラウザとして使えます。
8-3. Webアプリをデスクトップアプリ化する
既存のWebアプリをWindowsアプリのように配布したい場合にも、WebView2は便利です。
C#側で起動処理、設定保存、ファイル操作、通知、ローカル連携などを担当し、画面はWebアプリで表示する構成にできます。
8-4. HTML UIを使ったC#アプリ
C#アプリの画面をHTML、CSS、JavaScriptで作り、WebView2に表示する方法もあります。
デザインの自由度が高く、Webフロントエンドの技術を活用できます。C#側とはWebMessageReceivedやpostMessageで連携できます。
8-5. 自動操作・画面表示ツールとしての活用
WebView2を使えば、Webページを表示しながらC#側で一部の操作を補助するツールも作れます。
たとえば、特定ページを開く、入力欄に値をセットする、ページタイトルやURLを取得する、操作ログを保存する、といった用途です。
ただし、外部サイトの自動操作は利用規約に反する場合があります。自社管理のWebシステムや許可された範囲で使いましょう。
9. C#ブラウザ開発に関するよくある質問
9-1. C#だけで本格的なブラウザは作れる?
C#だけで画面や操作部分を作ることはできますが、ブラウザエンジンまで自作するのは現実的ではありません。
実用的には、WebView2のような既存のブラウザエンジンを使い、その上に独自UIや業務機能を追加する形になります。
9-2. WebView2は無料で使える?
WebView2は無料で利用できます。C#のWindowsアプリに組み込んで、Webコンテンツを表示する用途で使えます。
ただし、配布時にはRuntimeの扱いやライセンス条件を確認しておくと安心です。
9-3. EdgeをインストールしていないPCでも動く?
WebView2はMicrosoft Edge本体ではなく、WebView2 Runtimeを使用します。
そのため、Edgeブラウザを普段使っていないPCでも、WebView2 Runtimeがインストールされていれば動作します。逆に、Runtimeがない環境では起動できない場合があります。
9-4. Chrome拡張機能は使える?
WebView2はChromiumベースですが、Chrome拡張機能を通常のChromeと同じ感覚で自由に使う用途には向いていません。
拡張機能に依存したブラウザを作りたい場合は、WebView2で実現できる範囲を事前に確認する必要があります。
9-5. スマホ向けブラウザもC#で作れる?
この記事で解説しているWebView2は、主にWindowsデスクトップアプリ向けです。
スマホ向けにC#でブラウザ機能を作りたい場合は、.NET MAUIなど別の技術を検討する必要があります。ただし、Windows向けのWebView2とは仕組みや対応範囲が異なります。
9-6. WebBrowserコントロールからWebView2へ移行すべき?
基本的には、WebBrowserコントロールからWebView2への移行をおすすめします。
WebBrowserコントロールは古いInternet Explorerベースのため、現在のWebサイトでは表示や動作に問題が出やすいです。今後C#でブラウザ機能を作るなら、WebView2を使う方が安全です。
まとめ
C#でブラウザを作るなら、WebView2を使う方法がもっとも現実的です。WebView2を使えば、WinFormsやWPFアプリにChromiumベースのブラウザ機能を簡単に組み込めます。
簡易ブラウザであれば、URL入力欄、戻る・進む・更新ボタン、WebView2コントロールを配置するだけで作成できます。さらに、JavaScript実行、C#とのメッセージ連携、Cookie管理、ダウンロード制御、新しいウィンドウ制御などを追加すれば、業務用途にも使えるブラウザになります。
一方で、WebView2 Runtimeの配布、セキュリティ、Cookieやログイン情報の管理、任意URLを開けるリスクには注意が必要です。
C#ブラウザ開発では、ChromeやEdgeのような汎用ブラウザを作るよりも、社内システム専用ブラウザや業務端末向けブラウザのように、目的を絞って作るのがおすすめです。

