Windowsデスクトップアプリケーションのクロスプラットフォーム化

Windowsデスクトップアプリケーションのフレームワークに関して

以前は、Windowsデスクトップアプリケーション開発において「定番」とされるフレームワークが存在しておりました。

●1990年代: MFC (Win32)
●2000年代: Windows Forms
●2010年代: WPF

しかし、2024年時点では多様なフレームワークが存在し、かつてのような「定番」と呼べるフレームワークは見当たらなくなりました。Microsoftの開発者向けドキュメントには、以下のフレームワークが紹介されています。


フレームワーク一覧
フレームワーク 開発言語 特徴 適用シナリオ
.NET MAUI C# クロスプラットフォーム対応、
XAML/コードベースUI、
Fluent Designサポート
iOS、Android、Windows、macOSで動作するアプリ開発
Blazor Hybrid C# クロスプラットフォーム対応、
Web技術使用、
Fluent Designサポート
Web開発者がデスクトップアプリ
開発
React Native for Windows JavaScript, TypeScript クロスプラットフォーム対応、
JavaScript/TypeScript使用、
Fluent Designサポート
React Native使用開発者が
Windowsアプリ開発
WinUI 3 C#, C++ 最新UI機能、XAMLベースUI、
Fluent Designサポート
モダンなUIを持つWindows
デスクトップアプリ開発
UWP C#, C++, Visual Basic Windows 10全デバイス共通API、Fluent Designサポート、
XAMLベースUI
Xbox、HoloLens、
Surface Hub含むWindows 10
デバイス向けアプリ開発
WPF C#, Visual Basic XAMLベースUI、
データバインディング、
豊富なグラフィックス&アニメーションサポート
複雑なUI、
データ集約型デスクトップアプリ開発
Windows Forms C#, Visual Basic 伝統的Windowsデスクトップアプリ、
ドラッグ&ドロップUIデザイン
単純なGUIデスクトップアプリの
迅速開発
Win32 C++, Rust 高度なWindows機能アクセス、C++/Rust使用 既存のWin32アプリ維持・更新、
高度なシステム機能が
必要なアプリ開発

フレームワークの選定基準について

選択肢が多様化した現在、目的と環境に応じて適切なフレームワークを選定することが重要です。選定基準としては、以下の点を考慮するとよいでしょう。

●プラットフォーム対応: Windowsで動作すればよいのか。それともiOSやAndroidのアプリにもしたいのか。あるいはWebアプリとした方がよいのか。
●クロスプラットフォーム対応: 単一のコードベースから複数のプラットフォームにアプリを展開できるかどうか。
●言語サポート: 開発者が対応でき、アプリケーションの要求を満たせる言語で開発できるかどうか。
●UI デザイン: フレームワークが提供する UI コンポーネントの種類やデザインシステム(Fluent Design、Material Designなど)のサポート状況。
●開発者の生産性: ホットリロード、UI デザイナーの有無、IDE のサポート(Visual Studio、VS Code、Riderなど)。
●パフォーマンスとネイティブ機能のサポート: アプリのパフォーマンス要件を満たし、プラットフォーム固有の機能やデバイスのネイティブ機能を利用できるかどうか。
●コミュニティとサポート: オープンソースプロジェクトの場合、活発なコミュニティとサポート体制が整っているかどうか。

クロスプラットフォーム開発に適したフレームワークの選定について

近年、弊社には、iPhone, iPadやAndroidでもアプリケーションを動かしたいというご要望を多くいただくようになり、Windowsだけでなく、他のプラットフォームでも動作するアプリケーションの需要が高まっていることを実感しております。Microsoftも、Windowsでの動作を前提としていた.NET Frameworkの開発を4.8系列で終了し、クロスプラットフォームを前提とした.NETへと完全に移行しました。ASP.NETやEntity Frameworkなどのフレームワークも、クロスプラットフォーム化されています。 しかしながら、デスクトップアプリケーションのフレームワークに関しては、以下のような状況です。

●Windowsをターゲットとするフレームワークで開発が継続しているのはWinUI 3だけです。
●WPFやWindows Formsは.NETでも引き続き使用可能ですが、新機能の追加はされておらず、事実上の開発終了状態です。
●Blazor HybridやReact Nativeの開発には、従来のWPFやWindows Formsとは異なるスキルセットが必要です。Web系の開発に慣れている開発者を確保できる場合には、検討する価値があります。
●.NET MAUIは、OSネイティブのUI部品を.NETでラップしてマルチプラットフォーム化する設計思想であり、各OSの最大公約数的な機能となっています。従来のWPFのような高度なUIを実現することは難しく、パフォーマンス面でも不利です。

コミュニティベースで開発されているフレームワークに目を向けると、以下の製品が見つかります。

●Uno Platform
●Avalonia

Uno Platformは、"WinUI Everywhere"をキャッチフレーズに開発が進められているオープンソースのアプリケーションフレームワークです。Windows上で動作する場合はWinUI 3がそのまま動作し、Windows以外のプラットフォームではUno PlatformがWinUI 3互換レイヤーを提供します。Uno Platformが提供する互換レイヤーの互換性は高く、弊社で担当したプロジェクトでは、WinUI 3で作成したアプリケーションが、LinuxやiOSだけでなく、ブラウザアプリとしても、一部機能を除けばそのまま動作したという経験があります。Microsoftの開発者向けドキュメントでも、WinUI 3のアプリケーションをクロスプラットフォーム化する方法として紹介されています。

Avalonia UIは、.NET Foundationの出資により開発が進められているオープンソースのアプリケーションフレームワークです。WPFをクロスプラットフォーム化するのではなく、「より優れたWPF」を目指して設計されています。Avalonia UIが直接画面に描画するため、WPFと同様の高度なUIを実現できます。WPFとの互換性は失われていますが、APIの設計思想やXAMLの記述方法などはWPFと似ているため、WPFでの開発経験をそのまま活かすことが可能です。

どちらも300人以上のコミッターが活発に開発を進めていますが、まだ安定していない開発途上のプロジェクトということでもあります。

既存WPFアプリケーションのクロスプラットフォーム化について

弊社には、現行のWPFアプリケーションをiPhone, iPadやAndroidで動かしたいというご相談もいただいております。これには、XAMLをWinUI3やAvaloniaの書式に書き直したり、WinUI3では対応していないUIイベントに対する処理を代替するなどの移植作業が必要になります。これはWPFの理想である「画面とロジックの分離」を実現したMVVMでアプリケーションが記述されていればそれほど難しくはありませんが、現実にはコードビハインドで直接画面を操作する実装がされていることが一般的です。つまり、WPFの細部の仕様に依存したコードが書かれているため、他のフレームワークに移植することは極めて困難です。しかし弊社には、そのようなアプリケーションの移植を行った実績もございます。


現役のアプリケーションのモダナイゼーションについて

実際に弊社にご相談いただく事例としては、機能追加や改善の更新が日々行われている「生きた」アプリケーションをクロスプラットフォーム化したい、というものがあります。このような場合、クロスプラットフォーム化の修正を同時に行うと収拾がつかなくなる恐れがあるため、弊社ではコンバーターを作成し、以下のような作業フローを提案させていただいております。これにより、現行アプリケーションの開発ライフサイクルを継続しつつ、クロスプラットフォーム化したアプリケーションのリリースを並行して行うことが可能です。

modernization

関連リンク

Xamarin ~クロスプラットフォーム開発~ Microsoft系技術/『開発技術の選択~2022年冬~』 WPF導入支援 Silverlightで構築したシステムの移行支援 .NET MAUI ~ 新しいUI開発の統合版 ~ WinUI 3 導入支援