C#でアプリ開発を始めようとすると、最初の重要な決断の一つが「どのUIフレームワークを使うか」ですね。
この記事は2024年12月時点の情報をもとに、2025年に向けてC#によるUIフレームワーク選定で参考となるポイントを整理しました。以下について説明します。
- C# UIフレームワークの全体像と歴史
- 主要UIフレームワークの特徴と使い分け
- UIフレームワークの選定方法
以下のような方に役立つ内容となっています。
- C#でUI開発を始めようとしている方
- レガシーシステムのモダン化を検討している方
- クロスプラットフォーム開発を検討している方
- 適切なフレームワークの選定に悩んでいる方
C#のUI開発フレームワークって色々あって難しいんだよね…。
歴史的な経緯もあり、やや複雑かもしれませんね。
一緒に整理しながら学んでいきましょう!
YouTubeの動画でも解説しています。
UI開発の領域と種類
C#でのUI開発は主に以下の3つの領域があります。
- (1)Webアプリ:ブラウザ上で動作するアプリ。インストール不要。
- (2)Windowsアプリ:Windows OS上で動作するネイティブアプリ。
- (3)クロスプラットフォームアプリ:1つのコードベースから複数環境向けのネイティブアプリをビルド可能。
C#におけるUI開発の領域についてはMicrosoftのC#に関する公式ページも参考にしてください。
それぞれの概要をみていきましょう。
(1)Webアプリ
ブラウザさえあれば利用できるアプリです。アプリのインストールが不要で、URLにアクセスするだけで利用できます。
また、アップデートもサーバーサイドで一括して行えるため、運用の手間が少なくて済みます。
アプリのスタイルとして以下があります。
- 従来型Webアプリ:画面遷移時に再読み込みが発生。昔ながらの紙芝居的なWebアプリ。
- SPA型Webアプリ:ページのリロードや画面遷移なしに、ユーザーの操作に即時に反応するインタラクティブ性を備えたWebアプリ。
従来型であっても、React等のJavaScriptのライブラリを組み合わせることで、UIをSPA型へ拡張することは可能です。
代表的なフレームワークとしては以下があります。
- ASP.NET Core MVC:従来型Webアプリ開発向け
- ASP.NET Core Razor Pages:よりシンプルな従来型Webアプリ開発向け
- ASP.NET Core Blazor:SPAスタイルのWebアプリ開発に特化
(2)Windowsアプリ
Windows OS上で動作するネイティブアプリです。
OSの機能を直接利用できるため、高度な処理や豊富なUI表現が可能です。パフォーマンスも高く、オフライン動作も可能です。
アプリのスタイルとして以下があります。
- 従来型デスクトップアプリ:一般的な業務アプリケーション向け
- リッチUIデスクトップアプリ:高度なUI表現が必要なアプリ向け
- モダンデスクトップアプリ:最新のWindows機能を活用したアプリ向け
代表的なフレームワークとしては以下があります。
- WinForms:従来型デスクトップアプリ向け
- WPF:リッチUIデスクトップアプリ向け
- Windows App SDK:UWPの後継。モダンデスクトップアプリ向け
(3)クロスプラットフォーム
1つのコードベースから、様々な環境で動作するネイティブアプリを開発できます。
アプリのスタイルとして以下があります。
- デスクトップアプリ(Windows/macOS)
- モバイルアプリ(iOS/Android)
代表的なフレームワークとしては以下があります。
- .NET MAUI:最新のクロスプラットフォーム開発フレームワーク
各領域とフレームワークの比較表
以下は、各領域と代表的なフレームワークについて表で整理したものです。
領域 | フレームワーク | アプリケーションスタイル | 対応環境 | UI記述方法 | 対応.NETバージョン | 現在の 開発状況 |
---|---|---|---|---|---|---|
(1)Webアプリ | ASP.NET Core MVC | 従来型 | ブラウザ | Razor/ HTML | .NET Core 1.0-.NET 9 | 成熟 |
ASP.NET Core Razor Pages | 従来型 | ブラウザ | Razor/ HTML | .NET Core 2.0-.NET 9 | 成熟 | |
ASP.NET Core Blazor | SPA | ブラウザ | Razor/ HTML | .NET Core 3.0-.NET 9 | 成長中 | |
(2)Windowsアプリ | WinForms | 従来型デスクトップ | Windows | フォームデザイナー | .NET Framework 1.0-4.8 .NET Core 3.1-.NET 9 | 成熟 |
WPF | リッチUIデスクトップ | Windows | XAML | .NET Framework 3.0-4.8 .NET Core 3.0-.NET 9 | 成熟 | |
Windows App SDK/WinUI3 | モダンデスクトップ | Windows | XAML | .NET 6-.NET 9 | 成長中 | |
(3)クロスプラットフォーム | .NET MAUI | デスクトップ/モバイル | Windows/Mac/iOS/Android | XAML | .NET 6-.NET 9 | 成長中 |
UI記述の方法にもRazor・XAMLとか違いがあるのか…。
対応.NETバージョンや開発状況にも違いがあるんだね。
Razor・XAMLなどでUIのコードをどう記述するかは、この後、各フレームワークの紹介で触れるのでそこで雰囲気を掴みましょう!
開発状況はフレームワーク選定においても重要なポイントですね。これについても後ほど説明します。
参考までにフレームワークの進化の系譜はざっくり以下になります。
大枠の基盤フレームワークとしては、「.NET Framework」と「.NET」を知っておけばよいかと思います。
.NET Framework
Windows向けに設計された開発プラットフォームで、20年以上の歴史があります。現在も多くのシステムで利用されています。
.NET(旧 .NET Core)
Windows/Linux/macOSで動作するクロスプラットフォーム対応の現代的な開発プラットフォームです。コンテナ化やクラウド対応など、最新の開発手法に対応しています。
Microsoftは新規プロジェクトでは「.NET Framework」ではなく「.NET」を選択することを推奨しています。
このような歴史的な背景も踏まえつつ、それぞれ主要なUIフレームワークをみていきましょう。
代表的なUIフレームワーク
代表的なUIフレームワークをダイジェストでいくつか紹介します。
画面をどう記述するかという点にフォーカスし、雰囲気や特徴を掴んでもらえればと思います!
(1)Webアプリ
ASP.NET Core MVC
C#におけるWebアプリ開発の定番フレームワークです。企業の業務システム(エンタープライズシステム)の開発で多く使われています。
MVCとは「Model(データ)」「View(見た目)」「Controller(制御)」の略です。
それぞれの役割を分けることで、大規模な開発でも管理しやすくなります。
主な特徴としては以下があります。
- HTMLベースの画面作成
- サーバーサイドでの画面生成
- 豊富な実績とサンプル
簡単なコード例をみてみましょう。以下はコントローラのコード「HomeController.cs」です。
public class HomeController : Controller
{
public IActionResult Index()
{
var viewModel = new MessageViewModel
{
Message = "Hello World",
CurrentTime = DateTime.Now
};
return View(viewModel);
}
…
以下はビューコード「Index.cshtml」です。
@model MessageViewModel
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1>@Model.Message</h1>
<p>Current Time: @Model.CurrentTime.ToString("yyyy/MM/dd HH:mm:ss")</p>
</div>
以下のように表示されます。
詳しくはこちらの記事も参考にしてください。
ASP.NET Core RazorPages
Razor Pagesは、ASP.NET Core MVCをベースにしつつ、よりシンプルなページベースのWeb開発モデルを提供します。
小規模なWebアプリケーションの開発に適しています。こちらの記事も参考にしてください。
ASP.NET Core Blazor
モダンなWeb開発向けのフレームワークです。C#だけでインタラクティブなWebアプリが作れます。Microsoftが力を入れて開発しているフレームワークです。
主な特徴は以下です。
- C#でのフロントエンド開発
- リアルタイムな画面更新
- コンポーネントベースの開発
サンプルコードをみてみましょう。以下は「Counter.razor」です。ボタンを押すとカウンターの値を更新できます。
@page "/counter"
@rendermode InteractiveServer
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
この「画面」と「状態変数の定義とイベントのコード」のセットがコンポーネントです。
画面は以下のようになります。
C#の(サーバサイド含めた)Webアプリ開発フレームワークやBlazorの位置づけについては以下の記事で紹介しているので、こちらも参考にしてください。
BlazorのServerモード/WASMモードなどについても解説しています!
BlazorについてはWebアプリ開発入門編としてシリーズ化しているので、興味があればぜひこちらもご覧ください。
(2)Windowsアプリ
Windows Forms
Windows向けアプリ開発の入門に最適なフレームワークです。直観的で学習しやすいのが特徴です。
主な特徴は以下です。
- 視覚的な画面構築
- イベントベースの実装
- シンプルな開発手法
Visual Studioのデザイナで以下のように視覚的に画面を構築できます。
サンプルコードをみてみましょう。以下が「Form1.cs」です。
public partial class Form1 : Form
{
int currentCount = 0;
...
private void button1_Click(object sender, EventArgs e)
{
currentCount++;
label1.Text = $"Counter: {currentCount}";
}
}
実行画面は以下のようになります。
こちらの記事も参考にしてください。
WPF(Windows Presentation Foundation)
リッチなWindowsアプリを開発するためのフレームワークです。
主な特徴は以下です。
- XAMLによる画面定義
- データバインディング
- 豊富な表現力
WPFもVisualStudioのデザイナで視覚的に編集ができます。
サンプルコードは画面を表現するXAML部分(「MainWindow.xaml」)と、C#コード部分(「MainWindow.xaml.cs」)に分かれています。
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Label x:Name="label1" Content="Counter: 0" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10"/>
<Button Content="Click Me" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="10,50,0,0" Click="Button_Click" RenderTransformOrigin="0.5,0.5">
<Button.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="-20.555"/>
<TranslateTransform/>
</TransformGroup>
</Button.RenderTransform>
</Button>
</Grid>
</Window>
このXAMLコードはデザイナと同期しています。なので、「デザイナ上の編集」・「XAMLコードを直接編集」を組み合わせて行うことが可能です。
public partial class MainWindow : Window
{
int currentCount = 0;
...
private void Button_Click(object sender, RoutedEventArgs e)
{
currentCount++;
label1.Content = $"Counter: {currentCount}";
}
}
実行画面は以下になります。
ボタンを少し回転させて配置させてみました。このようにWPFはWinFormsよりも、UIの表現力が豊富なのも特徴ですね。
こちらの記事も参考にしてください。
Windows App SDK
Windows App SDKは、UWPの後継となる最新のWindowsアプリ開発プラットフォームです。
WPFと同様にXAMLベースのUI開発が可能で、最新のWindows機能へのアクセスを提供します。
まだ発展途上のプラットフォームですが、今後のWindows開発の主流となることが期待されています。
厳密には、Windows App SDKにおいてUIを担当するフレームワークは「WinUI 3」と呼ばれています。
Windows App SDKについてはこちら、WinUI3についてはこちらの記事もそれぞれ参考にしてください。
(3)クロスプラットフォーム
.NET MAUI
Windows、macOS、iOS、Androidで動作するアプリを1つのコードで開発できます。
主な特徴は以下です。
- クロスプラットフォーム対応
- XAMLベースのUI定義
- プラットフォーム固有機能の利用
WPFと同様にXAML部分とC#コード部分に分かれます。以下が「MainPage.xaml」です。
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MauiApp1.MainPage">
<VerticalStackLayout
Padding="30,0"
Spacing="25">
<Label
x:Name="CounterLabel"
Text="Counter: 0"
HorizontalOptions="Center" />
<Button
x:Name="CounterBtn"
Text="Click me"
Clicked="OnCounterClicked"
HorizontalOptions="Center" />
</VerticalStackLayout>
</ContentPage>
以下は「MainPage.xaml.cs」です。
public partial class MainPage : ContentPage
{
int currentCount = 0;
...
private void OnCounterClicked(object sender, EventArgs e)
{
currentCount++;
CounterLabel.Text = $"Counter: {currentCount}";
}
}
実行画面は以下になります。これはWindows11で起動した画面です。
MAUIは同じコードからAndroid用アプリをビルドすることもできます。以下はAndroidシミュレータで起動した画面です。
必要に応じて、プラットフォームごとに固有のコードを用意することも可能です。
WPF、MAUI、WindowsAppSDKはどれも画面記述にXAMLを使う点は似ていますが、それぞれXAMLの仕様は異なります。
MAUIについてはこちらの記事も参考にしてください。
補足:Webとネイティブアプリのハイブリッド
最近のアプリ開発では、ネイティブアプリとWebアプリの良いところを組み合わせた開発アプローチも注目されています。
具体的には、以下があります。
- (a)ネイティブアプリの中でWebコンテンツを表示
- (b)Webアプリでネイティブアプリのような機能を実現
「(a)ネイティブアプリの中でWebコンテンツを表示」として以下があります。
- WPFやWinForms、MAUIなどのネイティブアプリの中でWebViewを使用して、アプリケーションの一部をWebコンテンツとして実装
- MAUI Blazor Hybridを使用して、Blazorで作成したWebベースのUIをネイティブアプリの中で実行
「(b)Webアプリでネイティブアプリのような機能を実現」として以下があります。
- PWA(Progressive Web Apps)技術を使い、オフライン動作やプッシュ通知といった、従来はネイティブアプリの専売特許だった機能を実現
(例:BlazorアプリをPWAとして展開)
このようなアプローチの大きな利点は、Web開発のスキルを活かしながらネイティブアプリを開発できることと、既存のアプリを段階的にモダン化できることです。
例えば、既存のWebアプリを少しずつネイティブアプリに近づけていったり、逆に既存のネイティブアプリに徐々にWebコンテンツを導入したりできます。
Web・ネイティブのハイブリッドアプローチを知っておくと、フレームワーク選定においても、選択肢の幅が広がるでしょう。
それぞれ以下の記事も参考にしてください。
フレームワーク選定方法
選定方法
フレームワークの選定では、以下の3つの観点から検討することをお勧めします。
- 1.プロジェクトの要件
- 2.開発チームのスキルセット
- 3.フレームワークの成熟度
1.プロジェクトの要件
以下の要件を整理することから始めましょう。
- アプリケーションの種類:Web/デスクトップ/モバイル
- 対象プラットフォーム:Windows専用/クロスプラットフォーム
- UI要件:必要なUI表現の複雑さ
- パフォーマンス要件:応答性能や処理速度の要求水準
要件の優先順位付けも重要です。例えば「クロスプラットフォーム対応」と「リッチなUI表現」のどちらを優先するかで選択が変わってきます。
2.開発チームのスキルセット
既存の開発チームのスキルを活かせるフレームワークを選択することで、開発の立ち上がりが早くなるなどのメリットがあります。
例えば、以下のような考え方があるでしょう。
- Web開発経験者が多い:BlazorなどのWebフレームワークが有利
- WPF経験者が多い:MAUIへの移行がスムーズ
- シンプルなUIで十分:WinFormsが選択肢に
3.フレームワークの成熟度
フレームワークの選定では、現在の開発効率だけでなく、長期的な保守や発展性を考慮することが重要です。
フレームワークは主に成熟したものと成長中のもの(新しいもの)に分類できます。
成熟したフレームワークは以下の特徴があります。
(例:WinForms, WPF, ASP.NET Core MVC)
- 豊富な情報とサンプルコード
- 安定した開発ツール・確立されたベストプラクティス
- 一方で最新技術への対応は限定的な場合も
成長中のフレームワークは以下の特徴があります。
(例:MAUI, Blazor, Windows App SDK)
- 最新の開発手法や技術が利用可能
- 将来的な機能拡張の期待
- ただし情報が限定的な場合も
新しい技術は使いたいけど、ドキュメントとかサンプルが充実してるのも大事だよね…。
そこは悩ましい点ですね。最近だとドキュメントの充実度合いは、AI(例:ChatGPT)の回答精度にも大きく影響します。
現時点での実践的な選定
現時点(2024年末)で、実践的なUIフレームワーク選定における所感は以下のようになります。
Webアプリ開発:
- 安定性を重視する場合:ASP.NET Core MVC
(小規模案件ではRazor Pagesも選択肢) - C#でのフルスタックSPA開発に挑戦する場合:Blazor
(比較的新しい技術だが、ASP.NET Core基盤とWebAssembly採用により、安定性の高いモダンな選択肢)
Windowsアプリ開発:
- WinForms(シンプルなUI)とWPF(リッチなUI)は長年の実績があり信頼性の高い選択肢
- Windows App SDKは最新の技術で、将来性が期待できる
(ただし新しい技術のため、採用時は検証を推奨)
クロスプラットフォーム開発:
- MAUIは最新のクロスプラットフォーム開発基盤として進化を続けており、Microsoftが戦略的に推進(新しい技術のため、採用時は十分な検証が必要)
- より早期にクロスプラットフォーム展開を目指す場合は、実績のあるBlazorでのWeb開発アプローチも有力な選択肢
現時点(2024年末)での所感ですが、2025年にはBlazor、MAUI、Windows App SDKがさらに成熟・普及することが予想されます。
まとめ
C#のUI開発フレームワークは、Webアプリ、Windowsアプリ、クロスプラットフォームアプリの3つの領域に大きく分類されます。
Webアプリ開発ではASP.NET Core MVC、Blazorなど、Windowsアプリ開発ではWinForms、WPF、WindowsAppSDKがあります。
そして、クロスプラットフォーム開発では.NET MAUIがあります。
フレームワークの選定では、プロジェクトの要件、開発チームのスキルセット、そしてフレームワークの成熟度が重要なポイントになります。
特に、2025年に向けて、MAUIやBlazor、WindowsAppSDKなどの成長が期待され、より多くの機能が安定して利用できるようになるでしょう。
また最近では、ネイティブアプリとWeb技術を組み合わせたハイブリッドアプローチも選択肢として検討できます。
プロジェクトの特性を見極め、2025年の開発環境やトレンドも踏まえながら、最適なフレームワークを選定してください。
引き続き、C#やプログラミングの考え方を一緒に学んでいきましょう!