キーワードはたくさんありますが、他の技術と混同しやすいものや、抑えておきたい開発技術をピックアップしています。

(お断り:弊社の経験や現在の考えに依る内容となりますので、あくまで参考として。また、網羅性はなく、トピックの粒度を意識したものではありません。)

.NET Core

.NETはMicrosoftの技術ですが、.NET Coreはオープンソースの開発基盤ライブラリです。.NETの名前があるためWindowsのみでの動作をイメージしますがそうではありません。

Windows、Linux、macOSを対象としています。2019年の秋には.NET Coreはバージョン3.0となり、現在、最もMicrosoftが力を入れている開発技術の一つです。 これから新しいアプリケーションを開発する状況で、Microsoft系の技術を選択する(既に技術資産がある等の理由)場合には、.NET Coreをベースとした開発を選択することが解です。

UWP

UWP(ユニバーサルWindowsプラットフォーム)は、Windows 10が動作する様々なデバイスで実行可能な、共通のバイナリを提供します。UWP以前には、ソースコードレベルで互換性のあるUniversal appは存在しましたが、UWPではバイナリレベルでの互換性を実現しています。

UWPはデバイスごとに異なる画面サイズで動作するため、「アダプティブUI」を実現する必要があります。「アダプティブUI」では、画面サイズに応じて最適な画面レイアウトを提供します。また、特定のデバイスファミリ(DesktopやMobileなど、デバイスファミリと呼ぶいくつかのカテゴリがある)のみで動作するバイナリも作成可能です。 今後は、Windowsデスクトップアプリケーションの場合はUWP、WEBアプリケーションの場合はASP.NET Coreが選択するフレームワークとなります。

ASP.NET Core

新しくWebアプリケーション開発を行う場合、どのような技術を選択するかは難しいです。(特にマネジメントにとって長期的な運用を考慮する場合には)

以前は、LAMPに代表されるようなスクリプト系での開発にするか、JavaでのWEBアプリケーション開発にするか、または、MicrosoftのASP.NET(またはASP.NET MVC)かが大きな選択肢でした。

特に、MVC以前の純粋なASP.NETは、社内システムではよく使われていましたが、商用の選択肢としてのプレゼンスは特に日本では弱い傾向にあった(人気がなかった)と思っています。

現在はASP.NET Coreが現れMicrosoft系技術も選択肢として以前より大きくなりました。ASP.NET Coreはオープンソースとなり、IISは必須ではなくなりました。.NET Coreにより、サーバサイドでもクロスプラットフォームとなっています。 JavaScript系のフロント技術により、リッチなユーザインタフェースの実現が以前より容易で当たり前になった現在、デスクトップアプリケーションが活躍する領域は(少し)狭くなりました。特に従来から使用しているC#を継続したい開発者によっては、十分な選択肢となります。結果、技術選定の選択肢は増えてしまいました。

WPF

デスクトップアプリケーションのユーザインタフェース技術としては、ある意味枯れており、一方で現在最も普及しているものとなります。WPFの重要性はしばらく変わりません。しかし、選択可能な技術が増えたことにより、今後、新規のアプリケーション(プロダクト)を開発する際の選択の可能性は、状況(ユーザの利用環境など)により変化してくるでしょう。

WPFでアプリケーションを作成するには、MVVMやXAMLなどの基本的な事柄以外にも、学んでおくべき「癖」のようなものがあります。文字列に依存した動的なBindingによるパフォーマンスへの影響や、使い方によってはメモリリークにつながるUIコンポーネントなどがそれにあたります。はじめてWPFでアプリケーションを設計するとき、これらの「癖」は大きな壁になることがあります。

一方で、WPFはDirectX 9ベースの技術であり、Windows 7でも動作可能なことが、Windows 7クライアントを数多く抱えるユーザ企業に受け入れられています。同時に、最新のGPUの性能は十分に引き出せず、UIのパフォーマンスに不満を感じることも少なくありません。最新のGPUの性能を十分に引き出すには、DirectX 12を使用可能な、Windows 10 + UWPの組み合わせが必要となります。 なお、UIの表現力は劣りますが、開発者の確保や特定のパフォーマンスを優先する場合、Windows Formsも、いまだ選択肢の一つになりえます。

Xamarin

スマートフォン、タブレットとPC、そして、Windows、AndroidとiOS、マルチスクリーン、マルチプラットフォームとサポートするものが多くなるほど開発コストは増大します。

Xamarinにより、C#を用いてそれらに対応したネイティブアプリを、開発コストを抑えながら作成することができます。日本では思ったほど流行っていない印象ですが、海外での方が多くの事例があるようです。(閉じた世界での話ですが、実際、弊社グループにおいても日本法人より中国現地法人にて多くの経験を持っています)。

XamarinはMonoが土台になっています。Monoは、.NET Framework互換のオープンソースであり、マルチプラットフォームをサポートしています。 結果、現在は.NETの処理系は「.NET Framework」、「.NET Core」、「Mono(Xamarin)」が存在することになります。

.NET 5

来年(2020年11月)には.NET 5が登場予定です。現在は「.NET Framework」、「.NET Core」、「Mono(Xamarin)」と、3つの実装が存在する.NETが、.NET 5において統合される予定です。これによって、単一のフレームワークで多くのデバイス、OS、アプリケーションをサポートすることができるようになります。 マルチプラットフォームの開発基盤が統一されることにより、以降の開発手法はこちらに流れていくと考えられます。

余談

Silverlightのサポートの終了が予定されています。Silverlightアプリケーションの移行の検討をスタートする必要があります。