SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windowsで進化するマルチプラットフォームGUI開発

Windowsで進化するマルチプラットフォームGUI技術を解説~デスクトップアプリ開発の概観~

Windowsで進化するマルチプラットフォームGUI開発 第1回

デスクトップアプリ用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を使えば、ユーザーインターフェースと、アプリケーションのビジネスロジックを分離したアプリ構成が可能になります。

WPF開発画面(XAML定義とウィンドウ画面)
WPF開発画面(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です。

Xamarin.Forms
<Button Text="Click!" Clicked="OnClick" />
WPF
<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の新規プロジェクト用テンプレートが利用できるようになります。

Androidエミュレーターでの動作画面
Androidエミュレーターでの動作画面
Windowsでの動作画面
Windowsでの動作画面

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技術について、簡潔にさわりのみ紹介しました。現状では、発展途上なものもありますが、次回からは、それぞれの技術について、サンプルアプリを作りながら解説する予定としています。マルチプラットフォーム開発の際の参考になれば幸いです。

参考文献

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Windowsで進化するマルチプラットフォームGUI開発連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/15579 2022/02/24 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー