アプリケーションモダナイゼーションとは
現在のWindows Formsの原型は、Windows 95が登場した1995年に登場しました。本稿の執筆時点である2020年より、およそ25年前のテクノロジーということになります。
25年の間には、ハードウェアやネットワークは大きな進化や発展を繰り返しました。その環境の変化に合わせて、Windowsもさまざまな新機能の追加や改修を繰り返し、稼働するPC環境や利用方法も大きく変化しました。
同じように、WindowsアプリのプラットフォームもWindows Formsだけではなく、Windows Presentation Foundation(WPF)やUniversal Windows Platoform(UWP)などのテクノロジーが登場し、より高度な表現が行えるクライアントアプリケーションを構築できるようになりました。
そして現在、世界では7億を超えるWindowsデバイスが稼働しています。240万のアプリケーションが開発されているマーケットになっており、今現在も利用され続けています。
しかし、前述の通り利用されている環境は変化しています。私たち開発者はその変化に対応するべく既存のデスクトップアプリを進化させる必要があります。
このように、アプリケーションの機能を現代のニーズにマッチしたものへと進化させることを「アプリケーションの近代化」「モダナイゼーション」と呼びます。
モダナイゼーションにおけるアプローチ
モダナイゼーションを行うとなると、開発当時から今までの間に広まったその間に多くの機能や公開されている新しいAPI、Open Sourceのライブラリなどの機能追加もありますが、まず現在のアプリケーション自体をモダンなものにする必要があります。
モダンにするために検討すべき項目には以下があります。
- セキュアで信頼性の高い環境の実現
- 新しい環境に対する相互運用性に対応
- UXの強化
セキュアで信頼性の高い環境の実現(モダンなパッケージングの仕組み)
セキュアで信頼性の高い環境でアプリケーションを配布・実行するためには、その方法がシンプルであり、セキュアで信頼性のある仕組みによりパッケージングされて、配信されることが重要と言われています。
Windows Vista以降の一般ユーザー向けWindowsでは、OSの重要部分へのアクセスを行う場合に「User Access Controlにより一時的な管理者権限を付与する」ということを強制します。
この機能が加わることによって、システムの重要部分にユーザーの許可なく暗黙的な操作を行うことができなくなりました。
しかし、この方法には欠点があります。それは「セットアップパッケージ自体が不正な操作を行うアプリケーションである」という場合です。この場合、ユーザーが誤って管理者権限に昇格してしまうと、そのPCには不正な操作が行われることになります。
このような問題に対処するため、現在新しいパッケージ方法として、MSIXという形式が公開されています。
MSIXでは、パッケージを行う際、アプリケーションはシステムの重要箇所に対してアクセスする場合、事前にマニフェストを定義することを強制します。
これにより、インストール時にアプリがアクセスする箇所を事前に通知し、不正検知を行うきっかけを作ります。
また、アプリのインストール箇所は通常のWindowsファイルシステムとは異なる場所に行い、アプリケーション内で利用するファイルの展開や削除を適切に行う仕組みが用意されています。
- 参考リンク:MSIXとは
新しい環境に対する相互運用性
前述の通り、.NET Frameworkは最終バージョンが4.8であることを発表しました。加えて、今後登場する新しい機能は.NET Coreで実現することが公言されています。
.NET Coreは.NET Foundationでソースが管理されており、Microsoftをはじめとする多くのベンダーが、この環境を支援しています。
つまり、今後登場する新しいサービスや機能は、.NET Coreをベースに開発されていくことになるため、引き続きアプリケーションをバージョンアップしたり、新しい環境に対応させたりするのであれば、既存の.NET Frameworkベースのアプリケーションも.NET Coreをベースにするほうがスムーズに進化させることができます。
配布方式の進化
.NET Coreの配布方式は、実行環境にインストールされている.NET Coreランタイムに依存して実行するFramework dependent deployment(FDD)という方式に加えて、アプリケーションの実行に必要となるライブラリを同梱して配布するSelf contained deployment(SCD)が追加されました。
後者の場合、アプリケーションが依存する.NET Coreのバージョンがインストールされているかどうかを気にすることなく、アプリケーションを配布することができるようになります。
- 参考リンク:.NET Core アプリケーションの展開
UXの強化
Windows 10のバージョン1903以降には、WinFormsやWPF、Win32アプリに対して、Fluent Design Systemを用いた現代的なデザインをサポートするUniversal Windows Platform(UWP)のコントロールを追加することができるXAML Islandsというシナリオがサポートされるようになりました。
これらのコントロールを用いることで従来UWPのみで利用できたUI機能を活用できるようになりました。
ただし、これらの機能の多くは前述のMSIXによるパッケージを行い、パッケージIDを付与する必要があります。
- 参考リンク:デスクトップ アプリの現代化
しかし、多くの既存アプリは、すでに現在のプラットフォームにおけるインストールエクスペリエンスを持つものや、作成済みのUIが存在します。そのため、既存機能はそれらを極力利用したくなることでしょう。
本稿ではマイグレーションと併せ、それらのUIに対するモダナイズのアプローチとして「ComponentOne」のThemes for Windowsを用いて、統一的なデザインの適用方法やTiles for WPFを利用してUIをモダナイズする方法をご紹介します。
対象読者
- C#/.NET Frameworkを使用してクライアントアプリを開発する開発者
開発環境
今回使用した環境やアプリケーション、SDK、ライブラリは以下の通りです。
- Windows 10 Version 1909
-
Visual Studio 2019 16.4.4
- .NETデスクトップ開発ワークロード
- .NET Coreクロスプラットフォームの開発ワークロード
- .NET Core 3.0 SDK
- ComponentOne 2019J v3
- Reactive Property v6.2