デスクトップアプリ用GUIフレームワーク
一般的なアプリでは、基盤となるSDKやAPIを直接呼び出すことはあまりなく、さらに上位のフレームワークを利用することになるでしょう。
次に、デスクトップアプリを開発するためのGUIフレームワークには、どんなものがあるかを見ていきます。
Windows環境でのGUIフレームワーク
Windows環境のGUIフレームワークと言えば、.NET環境で提供されるWindowsフォームと、WPFが代表的です。
Windowsフォーム
Windowsフォームは、.NET Frameworkで提供されるようになったGUIフレームワークです。WindowsのGUI技術としては、もっともポピュラーと言えるでしょう。画面となるフォームにコントロールなどの部品を配置する手法は、今となっては当たり前ですが、直感的な操作で画面デザインを行える上に、リアルタイムにプロパティの変更が反映されるため、アプリ開発の効率が格段にアップしました。
WPF
WPF(Windows Presentation Foundation)は、.NET Framework 3.0以降で提供されるようになったUIフレームワークです。
WPFで特徴的なのは、XAML(Extensible Application Markup Language)と呼ばれる言語でユーザーインターフェースとなる画面などを記述できることです(XAMLを使わずにすべてコードで記述することも可能)。XAMLは、Microsoftが開発したXMLベースの言語で、WPFをはじめ、UWPアプリの開発や後述するXamarinでも利用されています。XAMLを使えば、ユーザーインターフェースと、アプリケーションのビジネスロジックを分離したアプリ構成が可能になります。
なお、.NET Frameworkから.NETに移行する際、Windowsフォームの存続が危ぶまれましたが、.NET6でも、WindowsフォームとWPFは実装されています(ただし、Windows環境に限定される)。とはいえ、新規にデスクトップアプリを開発するには、Windowsフォームを避けたほうが無難でしょう。
マルチプラットフォームに対応したGUIフレームワーク
.NET環境でマルチプラットフォームに対応したGUIフレームワークには、次のようなものがあります。
Xamarin
Xamarinは、前述のMonoを基盤とした、オープンソースの開発環境及びライブラリです。C#を用いて、iOSやAndroid用のモバイルアプリケーションが開発できることが特徴的です。
Xamarinでは、各プラットフォーム向けに、.NET実行環境と.NET APIが利用でき、ほとんど同じコードを各OS向けにコンパイル、ビルドすることができます。
なお、Xamarinは、同名の企業が開発していましたが、2016年にMicrosoftが同社が買収しました。それ以降は、Microsoft社の製品として公開され、Visual Studioに含まれるようになりました。
Xamarin.Forms
Xamarinでは、各モバイル環境のネイティブAPIを.NET APIにラップしたSDK(Xamarin.Android、Xamarin.iOSなど)と、モバイル環境共通のUIを作成できるXamarin.Formsと呼ばれるUIフレームワークが提供されています。
Xamarin.Formsを使用すると、単一のコードから、AndroidやiOSで動作するUIを作成可能です。Xamarin.Formsでは、C#とXAMLを利用しますが、WPF同様、すべてC#でも記述可能です。XamarinのXAMLは、WPFと文法や構文こそ同じですが、細部では異なる部分も多くあります。例えば、ボタンを定義するタグでも、次のような違いがあります。ボタンのラベルと、クリック時のハンドラを定義するXAMLです。
<Button Text="Click!" Clicked="OnClick" />
<Button Content="Click!" Click="OnClick" />
.NET MAUI
.NET MAUI(.NET マルチプラットフォームアプリ UI)とは、WinUI 3を基盤とした、マルチプラットフォームに対応したフレームワークです。.NET MAUIは、Xamarin.Formsの後継とも呼べるもので、C#とXAMLを利用して、ネイティブのモバイルアプリとデスクトップアプリの開発が可能です。
なお、.NET MAUIは、当初予定のリリース時期から遅れており、執筆時点ではプレビューの段階です(正式リリース予定は2022年の初旬)。現状、開発環境の導入には、コマンドラインからの手動操作が必要です。開発環境をインストールすると、Visual Strudioから、MAUIの新規プロジェクト用テンプレートが利用できるようになります。
Uno Platform
Uno Platformは、オープンソースとして公開されているUIライブラリで、カナダのnventive社がサポートしています。Uno Platformも、.NET MAUIと同様に、.NET環境を基盤としてマルチプラットフォーム向けのアプリを開発することができます。
Uno Platformでは、同じC#とXAMLコードから、各環境(Windows(UWP)、Linux、macOS、Android、iOS、WebAssembly)で動作するアプリの開発が可能です。Uno PlatformのXAMLは、UWPアプリでのXAMLと同じものを利用します。
Uno Platformは、.NET環境をベースとしていて、.NET MAUIとよく似ています。ただし、Uno Platformは、後述するWebAssemblyにも対応して、ブラウザ上で動作するWebアプリまで、単一のコードで開発可能です。従って現時点では、Webアプリまで対応したい場合、Uno Platformを選択すべきでしょう。
なお、Uno Platformは、Visual Studio(プラグインとして)から利用でき、Visual Studio 2019、2022(Preview)に対応しています。
.NET以外のGUIフレームワーク
.NET環境以外にも、マルチプラットフォーム向けのGUIフレームワークが存在します。
Avalonia
Avaloniaとは、XAMLベースのマルチプラットフォームのGUIフレームワークです。オープンソースでもあるAvaloniaは、マルチプラットフォーム版WPFとも呼べるもので、WindowsやLinuxで動作するアプリが開発可能です。ちなみに、WPFの開発時のコードネームは、Avalonという名前でした。
Flutter
Flutterは、Googleによって開発されたオープンソースのUIフレームワークです。Flutterでは、単一のコードから、Android、iOS、Linux、macOS、Windows向けのマルチプラットフォームに対応したアプリを開発可能です。当初のFlutterは、主にモバイル環境向けでしたが、現在では、デスクトップアプリまで開発できるようになっています。
Flutterでのアプリ開発では、主にDart(ダート)というプログラミング言語を用います(C/C++も利用可能)。Dartは、Flutter同様、Googleが開発した言語で、元々はJavaScriptを置き換えることを目的に開発されました。なおDartは、文法的には、C言語スタイルの構文であり、クラスベースのオブジェクト指向言語です。
なお、Flutterでのモバイル開発については、Flutterで始めるモバイルアプリ開発で詳しく解説されています。
Web技術を応用したGUIフレームワーク
次は、Web技術を応用したGUIフレームワークです。Webブラウザ上で動作するWebアプリのフレームワークと、Web技術を利用してデスクトップアプリを構築するためのフレームワークがあります。
ASP.NET Core Blazor
ASP.NET Core Blazor(以下、Blazor)は、Webアプリを作成するためのフレームワークです。Blazorには、サーバーサイド(ASP.NET Core)で動作するBlazor Serverと、Webブラウザー上で動作するBlazor WebAssemblyがあります。
Blazor WebAssemblyは、C#言語を用いて、Webブラウザ上で実行可能なWebアプリケーションを構築するためのフレームワークです。Blazor WebAssemblyでは、HTMLやCSSといった、すでにあるWeb技術をベースとしながら、実行可能なC#コードを埋め込むことができます。モダンWebブラウザでは、バイナリコードを実行できるWebAssemblyという仕組みがあり、その技術を利用しています。さらにWebAssemblyは、Web標準であり、別途アドオンや追加のプラグインをインストールする必要がありません。
なお、Blazorについては、ASP.NET Core Blazorチュートリアルでも解説しています。
.NET MAUI Blazor
Blazorは、まずはWeb環境向けに提供されましたが、.NET 6以降では、デスクトップアプリの開発にも対応する.NET MAUI Blazorが追加される予定です。.NET MAUI Blazorは、.NET MAUIアプリのUI部分に、Blazorコンポーネントを使用し、デスクトップアプリとして動作するものです。.NET MAUI Blazorでは、.NET MAUI Blazorアプリは、.NET MAUIが対応するマルチプラットフォームで実行可能です。
Electron
Electronとは、GitHubが開発したオープンソースのフレームワークです。Windowsだけでなく、macOS、Linuxといったマルチプラットフォームに対応したデスクトップアプリを開発することができます。Blazorと同様に、HTMLやCSS、JavaScript(Node.js)などのWeb技術を利用できることが大きな特徴です。
ただし、Electronでは、.NET環境ではなく、Node.jsの環境と、コンテンツ表示にChromiumを利用します。Node.jsは、JavaScriptの実行環境で、Chromiumは、オープンンソースのWebブラウザ向けソースコード(ライブラリ、エンジンとも言える)です。JavaScriptの実行環境とWebブラウザエンジンをひとつのアプリとすることで、マルチプラットフォームに対応します。
コミュニケーションツールであるSlackやSkype、Microsoft TeamsなどもElectronを利用しています。また、Electron.NETというツールを使えば、ASP.NET Coreを利用して開発したWebアプリを、Electronのデスクトップアプリとして構築することができます。
React Native
React Nativeは、Facebookが開発したオープンソースのモバイルアプリ向けフレームワークです。標準では、Android、iOS用のネイティブアプリのみの対応ですが、React Native for Webや、React Native for Widnows + macOSといったライブラリがあり、そのようなライブラリを利用することによって、Webアプリやデスクトップアプリの開発が可能となります。
React Nativeは、名前のとおり、Reactという、Facebookが開発したJavaScriptのUIライブラリがベースになっています。つまりReact Nativeは、HTMLやCSS、JavaScriptといったWeb技術を用いて、モバイルやデスクトップ用アプリが構築できるとうことです。
React Nativeについては、基礎からはじめるReact Native入門で詳しく解説されています。
WebView2コンポーネント
WebView2は、フレームワークというより、コントロールやコンポーネントというカテゴリになりますが、GUIアプリにWeb技術を取り込む手法として、大変有用なものですので、ここで紹介しておきます。
WebView2は、アプリ上で、Webコンテンツを表示、動作させるためのコンポーネントです。従来のWebViewは、IEをベースとしていましたが、WebView2では、Chromium(Microsoft Edge)がベースになっています。.NET 6では、Windowsフォームでも利用できる、WebView2をベースとしたコンポーネント、Blazor WebViewコントロールが提供されています。このコンポーネントを、WindowsフォームやWPFに配置すれば、Blazorが動作するデスクトップアプリも開発可能です。
WebView2は、もちろん、Win32アプリでも利用可能で、Windows 11では、ランタイムが標準搭載されます。
マルチプラットフォームGUIフレームワークの比較
本記事でとりあげたマルチプラットフォームに対応したGUIフレームワークを、用途と対応する技術要素に関して、以下のような表にまとめてみました。
C#と.NET環境で開発するなら、.NET MAUIまたは、それをベースとしたUno Platformや.NET MAUI Blazorを利用するのが適しているでしょう。Web技術を利用したいなら、BlazorかElectronで、さらにモバイルアプリもというなら、FlutterかReact Nativeという選択になるでしょう。
まとめ
今回は、デスクトップアプリ開発に利用できそうなマルチプラットフォームGUI技術について、簡潔にさわりのみ紹介しました。現状では、発展途上なものもありますが、次回からは、それぞれの技術について、サンプルアプリを作りながら解説する予定としています。マルチプラットフォーム開発の際の参考になれば幸いです。
