VB.NET(.NET Framework 4.7)のWeb Forms(ASPX)アプリを.NET 8へ移行したい——結論から言うと「そのまま移行」は難しく、UIはASP.NET Coreで作り替えが必要です。本記事では、なぜ移行ツールで進まないのか、VB→C#変換の現実、段階移行の具体手順を整理します。
VB.NET(.NET Framework 4.7)Webアプリを.NET 8へ移行したいときの結論
.NET 8(ASP.NET Core)へ移行したい理由は、パフォーマンス改善、クラウド/コンテナ対応、最新のライブラリ利用、開発体験の刷新など、現場ではどれも切実です。一方で、VB.NETで作られた.NET Framework 4.7のWebアプリ(MVP構成)を「プロジェクト変換だけ」で.NET 8へ上げるのは、多くのケースで現実的ではありません。特にUIがWeb Forms(ASPX)である時点で、移行は“アップグレード”ではなく“再構築(リプレース)”が主戦略になります。
| やりたいこと | 現実 | おすすめ方針 |
|---|---|---|
| VB.NETのまま.NET 8のWebアプリへ移行 | ツール/テンプレート/周辺が弱く、運用面で不利 | WebはC#へ寄せ、VBは必要ならライブラリに限定 |
| Web Forms(ASPX)のまま.NET 8へ変換 | ASP.NET CoreはWeb Forms非対応 | UIをMVC/Razor Pages/Blazor等で再実装 |
| 一気に全面移行(ビッグバン) | 工期・品質・業務影響リスクが大きい | 段階移行(共存)で「壊さず置き換える」 |
なぜ.NET Upgrade Assistantで移行できないのか
「.NET Upgrade Assistantを使ったが移行できない」という相談は非常に多いです。ここで押さえるべきポイントは2つあります。
Upgrade Assistantは“魔法の変換機”ではなく、移行作業の補助ツール
Microsoft Learnのドキュメント上、.NET Upgrade AssistantはC#だけでなくVisual Basic(VB)でも利用でき、ASP.NETなど複数のプロジェクト種別を対象としています。さらに、複雑なWebアプリ向けに「サイドバイサイド(段階)移行」という考え方も説明されています。
ただし重要なのは、Web Forms(ASPX)をそのままASP.NET Coreへ“変換”する機能ではない、という点です。Web FormsはASP.NET Coreがサポートしていないため、UIは別方式で作り直す必要があります。結果として、Upgrade Assistant単体では「UIまで含めた移行完了」になりません。
そもそもUpgrade Assistantは「推奨ツール」が変わっている
2025年末時点のMicrosoft Learnでは、.NET Upgrade Assistantは公式にdeprecated(非推奨)とされ、代替として「GitHub Copilot app modernization」系のエージェント利用が案内されています。既にUpgrade Assistantを触った後でも、この事実は押さえておく価値があります(今後の社内標準や手順書、監査対応に影響します)。
| 観点 | 押さえるポイント | 実務への影響 |
|---|---|---|
| Web Forms | ASP.NET CoreはWeb Forms非対応 | ASPXを“移行”ではなく“再実装”として見積もる |
| ツール選定 | Upgrade Assistantはdeprecated | 新規案件は推奨ツールで進める方が将来の説明が楽 |
| 進め方 | 段階移行(共存)が安全 | 業務影響を最小化し、リリースを刻める |
VBのまま.NET 8のWebアプリに移行できるのか
ここは誤解が生まれやすいポイントです。結論だけ言うと、「VBで.NET 8を動かす」ことと「VBでASP.NET CoreのWebアプリを実務レベルで運用する」ことは別問題です。
- Upgrade Assistant自体はVBプロジェクトも対象に含めています(少なくとも“分析・補助”の文脈ではVBが前提に入っています)。
- 一方でASP.NET Coreの世界では、C#中心のテンプレート/サンプル/周辺エコシステムで進む前提になりがちです。VBのテンプレートについては「用意されない」方向の議論が長く続いています。
現場視点でのおすすめはシンプルです。
- Web(ASP.NET Core)はC#で作る(採用/教育/保守が最も安定しやすい)
- VBを残すなら「ライブラリ層」に限定(業務ルールや計算などのドメインロジック)
「VBを捨てるかどうか」は感情論になりやすいですが、移行プロジェクトでは“言語”よりも“UI方式(Web Forms)”のほうが難易度を決定づけます。VB→C#が終わっても、Web Forms→ASP.NET Coreは別ゲームだと割り切るほうが、計画と見積もりが現実に寄ります。
VB→C#一括変換ツールはあるか
VB→C#の変換支援として、Visual Studio拡張の「Code Converter (VB – C#)」はよく使われます。Roslynベースで、ソリューション単位の変換にも対応し、ローカルで完結(コードを外部に送らない)という点が実務で扱いやすいです。
変換ツールを使うときの現実的な期待値
「一括変換したら終わり」と考えると失敗します。ツールは強力ですが、“コンパイルが通るC#”まで持っていくには手直しが前提です。特に大規模案件だと、以下のような“VBっぽさ”が残り、設計負債として再燃します。
| 変換後に起きがち | 理由 | 現場の対処 |
|---|---|---|
| Option Strict/暗黙変換の差で警告・バグ | VBは暗黙変換が入りやすい | 型を明示、null/DBNull、数値変換を統一 |
| ByRef/Optional/既定値の挙動差 | 言語仕様の違いが表面化 | メソッド設計を見直し、DTO化や引数オブジェクト化 |
| イベント(Handles/WithEvents)周りの違和感 | Web Formsのイベントモデルと相性が悪い | UI再実装とセットで整理(後述) |
| プロジェクト参照/名前空間/Resourcesのズレ | ソリューション構造の差・古いcsproj/vbproj | SDK-styleへ寄せる前に依存関係を棚卸し |
つまり、VB→C#変換は「移行の入り口」です。ここを越えると、次は“Web Formsをどうするか”が本丸になります。
(最重要)ASPX(Web Forms)のUIを.NET 8(ASP.NET Core)にできるか
UIがWeb Forms(ASPX)である場合、Web FormsをそのままASP.NET Core(.NET 8)で動かすことはできません。Microsoftの回答でも、ASP.NET CoreはWeb Formsをサポートしないことが明確に言及されています。
ここで「じゃあ移行できないの?」となりがちですが、正確にはこうです。
- Web Forms“のまま”は無理
- Web Forms“から”は移行できる(ただしUIは再実装)
Web FormsのUIを置き換える選択肢
置き換え先の選定は、チームのスキルとシステムの性格で最適解が変わります。Web Formsの「画面イベント中心」「サーバーサイドで状態管理」「コントロールの部品化」に近い思想をどれだけ引き継ぎたいかで選ぶと、判断がぶれにくいです。
| 置き換え先 | 向いているケース | Web Formsからの移行観点 |
|---|---|---|
| ASP.NET Core MVC | 画面/機能が多く、整理しながら移行したい | イベント駆動から「HTTP/アクション」思考へ転換が必要 |
| Razor Pages | ページ単位で移行しやすい、画面中心のアプリ | 「ページ=モデル+ハンドラ」でWeb Formsに近い感覚がある |
| Blazor(Server/Was m) | コンポーネントでUIを作り、C#中心で寄せたい | コントロールツリーに近い発想で移行しやすい場面がある |
| SPA(React等)+API | UIを刷新したい、長期的にフロントを資産化したい | Web Formsの考え方から最も離れるが、最終形は強い |
「MVPで作っているからMVCにしやすいはず」と期待されがちですが、Web FormsのMVPは“プレゼン層の責務”が散らばっていることも多く、画面数が多いほど“UIの再構成”が発生します。MVPは資産ですが、過信せず、移行前に責務を再定義するのがコツです。
段階移行が現実解になる理由
大規模Web Formsアプリで最も危険なのは、移行期間中に「本番稼働を止める」「大規模な作り替えを一括リリースする」ことです。そこで実務で採られやすいのが、段階移行(Strangler Figパターン)です。Microsoft Learnでも、ASP.NET Framework→ASP.NET Core移行は多くの本番アプリで難しく、段階移行が有効である旨が説明されています。
YARP(リバースプロキシ)で“共存”させて、置き換えを進める
段階移行の典型は「新しいASP.NET Coreアプリを入口にして、未移行のリクエストは既存のASP.NET(.NET Framework)へフォールバックする」方式です。Microsoft Learnのガイドでも、ASP.NET Core側をプロキシとして作り、YARPで既存アプリへ転送する流れが明確に示されています。
この構成にすると、移行の進め方が“業務に優しい”形になります。
- URL単位・画面単位で置き換えできる
- 新旧が同じドメインで見える(ユーザー体験を壊しにくい)
- 本番リリースを小さく刻める(不具合時の切り戻しも容易)
段階移行のロードマップ例
| フェーズ | 目的 | 成果物 | リスク | 抑え方 |
|---|---|---|---|---|
| 準備 | 移行しやすい形に整地する | 依存関係棚卸し、テスト観点、ログ整備 | 後で全部詰む | 「System.Web依存」を見える化 |
| 共存基盤 | 新旧が同居できる入口を作る | ASP.NET Coreプロキシ(YARP)、ルーティング方針 | URL/認証/セッションが崩れる | 最初に“共通の横断設計”を作る |
| 小さく移行 | リスクの低い画面から置換 | 新画面(Razor等)、共通部品 | 二重実装が増える | 移行対象の選び方をルール化 |
| 本丸移行 | コア業務の置換と最適化 | 認証刷新、セッション整理、データアクセス更新 | 業務影響が出る | 並行稼働/段階リリース/監視 |
| 撤去 | 旧Web Formsを止める | 旧アプリ退役、運用手順/監査整理 | 残骸が残る | “移行完了の定義”を事前に合意 |
段階共存を成功させる「具体的な実装ポイント」
段階移行は概念だけだと進みません。実装で詰まりやすいポイントを、先に潰しておくことが成功率を上げます。
仮想ディレクトリ構成は新旧で揃える
段階移行では、仮想ディレクトリ(パス)の構成が一致していることが重要とされています。これはルート生成、認可、その他サービスに影響するため、異なる仮想ディレクトリを“うまく吸収する”確実な方法が見つかっていない、という注意書きがあります。最初の設計でパス戦略を決めないと、後で手戻りが大きくなります。
認証・セッションの橋渡しを設計に含める
共存期間中の地雷は「ログイン」「セッション」「権限」です。Microsoft Learnの段階移行向けドキュメントでは、旧アプリとの通信(Remote app setup)や、YARPによるフォールバック、リモート認証・リモートセッションといったトピックが挙げられています。
実務では、次の順で考えると破綻しにくいです。
- 共存期間は「認証は旧を正」として、まずは新側は入口/プロキシに徹する
- 新画面が増えてきた段階で、認証を中立化(OIDC等)して新旧を寄せる
- 最後に旧の認証方式を撤去する
段階移行用の設定例として、ASP.NET Framework側のweb.configにキーを置き、ASP.NET Core側のappsettings.jsonにも同じ値を置く、といった“両者に共通の設定値を持たせる”説明があります。こういった「共存前提の設計」を先に作るのがポイントです。
Upgrade Assistantが案内する「サイドバイサイド(段階)」の考え方を理解する
Upgrade Assistant(または後継の推奨ツール)を使う場合も、発想は同じです。段階移行モードは「.NETプロジェクトを既存の.NET Frameworkプロジェクトの隣に置き、エンドポイントは.NET側で受け、その他は.NET Framework側へ送る」方式として説明されています。ここを理解していると、移行の設計を“ツールの都合”ではなく“アーキテクチャの都合”で組み立てられます。
ロジック層を分離する:MVPを活かして“使い回せる資産”を増やす
Web Forms→ASP.NET Core移行で最初にやるべきは、UIをいきなり書き換えることではありません。最初にやるべきは、「UIに依存しない資産」を最大化することです。
具体的には、次のように分割していきます。
- ドメイン(業務ルール・計算・状態遷移)
- アプリケーション(ユースケース:登録、更新、承認、検索)
- インフラ(DBアクセス、外部API、ファイル、メール)
- プレゼン(Web Forms、MVC/Razor、Blazorなど)
MVPでPresenter/Modelを持っている場合、すでに「画面とロジックを分ける」土台があります。ここでのポイントは、PresenterがSystem.Web(HttpContext、Session、Request、Response)に触っていないかをチェックし、触っている場合は“境界”を作って追い出すことです。例えば、ユーザー情報や権限は「IUserContext」等のインターフェースに閉じ込め、Web Forms側はそれを実装する、ASP.NET Core側も別実装にする、といったやり方です。
共有ライブラリは「段階移行」前提でターゲットを決める
共存期間があるなら、共有ライブラリは「旧(.NET Framework)でも新(.NET 8)でも動く」形が必要になります。よくある現実解は次のどちらかです。
- 共存期間はライブラリを.NET Standard 2.0相当に寄せる(両方から参照しやすい)
- ライブラリをマルチターゲット(net47x + net8.0)にして段階的に新APIへ寄せる
どちらも正解になり得ますが、Web Formsアプリでは古い依存(古いNewtonsoft.Json、古いDIコンテナ、古いEFなど)が絡むことが多いので、最初から“理想の最新構成”に飛ぶより、共存しながら確実に置換できる設計のほうが進みます。
Web Forms特有の機能はどう置き換えるか
Web Formsからの移行が難しい理由は、単に画面が多いからではありません。「Web Formsの機能が、ASP.NET Coreでは別の考え方に置き換わる」からです。置換表を先に作ると、見積もりがブレにくくなります。
| Web Formsでよく使うもの | ASP.NET Coreでの置き換えの方向性 | 移行の勘所 |
|---|---|---|
| ViewState依存の状態保持 | サーバー/クライアント双方で状態を明示管理 | 「状態が必要な理由」を洗い出し、最小化する |
| サーバーコントロール(GridView等) | UIコンポーネント(Blazor/JS)やテンプレートへ | “見た目”より“操作”を先に移行設計する |
| PostBackイベント(Button_Clickなど) | Razor PagesのOnPost/MVCアクション/Blazorイベント | HTTP境界で「入力→検証→処理→出力」を定義 |
| HttpModule/HttpHandler | Middleware/Endpoint/Filter | 横断機能(ログ、認証、例外)は早めに統一 |
| web.config中心の設定 | appsettings.json+環境変数+シークレット管理 | 段階移行では“共有設定”の設計が鍵 |
「VB→C#は完了、UIはWeb Forms」その次に取るべき実務手順
後日談としてよくあるのが、「VB→C#変換は終わった。けれどUIはASPX(Web Forms)のまま。ここから.NET 8にできるか?」という状況です。ここからは次の二段構えで考えると迷いません。
まずは“できるところ”から.NET 8対応を進める
- 業務ロジック/サービス層を.NET 8対応(または共存可能な形)へ
- データアクセスの方針を決める(既存EF6継続/EF Core移行/段階的置換)
- 共通部品(ログ、例外、設定、バリデーション)を新側へ寄せる
UIはWeb Formsの概念を引きずらず、置換設計に落とす
Web Formsの画面を移行するとき、よくある失敗は「ASPXページを1枚ずつ“同じ形”で再現しようとする」ことです。Web Formsの“イベントライフサイクル”をそのまま再現しようとすると、ASP.NET Core側で不自然な設計になり、保守性が落ちます。
おすすめは逆です。
- 画面ごとに「入力モデル」「出力モデル」を定義する
- Presenter/コードビハインドがやっていた仕事を、ユースケース(サービス)へ寄せる
- UIは“薄く”し、表示と入力制御に集中させる
すぐに全面移行が難しいなら「共存運用」を前提にする
大規模案件では「移行完了まで2〜3年」になることも珍しくありません。その場合、現実解は既存Web Formsを維持しつつ、.NET 8側で新機能を作って段階共存です。
Microsoft Learnのガイドでも、ASP.NET Core側でプロキシを作り、YARPで旧アプリへフォールバックする形が示されています。これにより、移行中もユーザーは同じ入口から利用でき、開発側は“新しい実装を積み上げる”ことができます。
共存の切り分けは、次のような設計が分かりやすいです。
- /legacy/* は旧Web Formsへ
- /app/*(または/feature/*)は新ASP.NET Coreへ
- まずは「参照系(検索/一覧/詳細)」から新へ寄せる
- 次に「更新系(登録/承認)」を移行する
画面の選定基準を明文化すると、社内説明・ベンダー管理・品質保証が一気に楽になります。
「移行するべきか」を判断するための比較表
現実には「.NET 8にしたい」だけでは決められず、工期、予算、人材、運用、監査など複数の制約が絡みます。そこで、意思決定のための比較表を用意しておくと、会議が前に進みます。
| 選択肢 | 概要 | メリット | デメリット | 向いている状況 |
|---|---|---|---|---|
| .NET Framework継続(4.8/4.8.1へ) | Web Formsを維持して延命 | UI作り替え不要、短期で安定 | モダン化は進みにくい | 短期に大改修できない、まず延命が必要 |
| 段階移行(YARP+新旧共存) | 入口をCoreにし、少しずつ置換 | リスク低、リリースを刻める | 共存期間の複雑性 | 大規模・止められない・段階リリース可能 |
| 全面リプレース(ビッグバン) | 新規に作り直して一括切替 | 最終形が綺麗、負債を断ち切れる | 失敗時の影響が最大 | スコープが限定的、強い統制と予算がある |
.NET Framework延命も「立派な戦略」になり得る
Web Formsを維持するなら、.NET Framework側を最新の4.8.1へ上げる、という選択肢が現実的です。.NET Framework 4.8.1はWindowsに紐づくサポート方針で、サポートされているWindows上で動かす限りサポートされる、とされています。
「.NET 8へ移行できないから終わり」ではなく、延命しつつ段階移行の準備を整えるのは、失敗しにくいアプローチです。
.NET 8のサポート期限も含めて計画する
移行の意思決定では、LTS/STSのサイクルも無視できません。.NET 8(LTS)のサポート期限は明示されており、移行計画の“終着点”をいつに置くかの材料になります。
移行プロジェクトを成功させるチェックリスト
最後に、現場で効くチェックリストをまとめます。移行は「技術」より「段取り」で失敗します。
- 画面資産の棚卸し:aspx/ascxの数、共通マスタ/ユーザーコントロール、第三者コントロールの依存
- System.Web依存の洗い出し:HttpContext/Session/Request/Response、HttpModule/Handler、Global.asax
- データアクセス方針:EF6の継続/EF Core移行/併用/段階移行
- 認証・認可:Forms認証、Membership、独自認証、SAML/OIDCの有無
- 運用要件:オンプレIIS継続か、コンテナ/クラウドへ寄せるか
- テスト戦略:自動テストの導入範囲、移行中の回帰テストの回し方
- リリース戦略:段階リリース(YARP共存)にするか、全面切替にするか
このチェックリストを埋めるだけで、「Upgrade Assistantが通らない」理由が技術的に説明でき、かつ“次に何をするべきか”が具体化します。
まとめ:最短ルートは「C#+ASP.NET CoreでUIを作り替え、段階移行で置換する」
VB.NET(.NET Framework 4.7)のWebアプリを.NET 8へ移行したい場合、Web Forms(ASPX)の存在が最大の分岐点です。Web Formsをそのまま.NET 8へ持ち上げることはできないため、現実的な戦略は次のいずれかになります。
- 短期:.NET Frameworkを4.8/4.8.1へ上げて延命し、移行準備(分離・テスト・共通化)を進める
- 中長期:YARPによる共存を作り、Razor Pages/MVC/BlazorなどでUIを置換していく
VB→C#変換ツールは確かに存在し、移行を加速できます。しかし、最終的に効くのは「UI以外を再利用できる構造を作ること」と「共存運用を設計して、置換を積み上げること」です。焦って全面移行に突っ込むより、段階移行で確実に前へ進める計画を立てるのが、最短ルートになります。

コメント