.NET関連の調査メモ（2024.06）

# はじめに

ごっちゃになっているので再調査した。
スマホ、Windows8、マルチプラットフォームなどの野望でごたついたり、イノベーションの日進月歩があったりしたので知識更新が必要だった。
業務系（エンタープライズ）を前提とする。ゲームなどは違う観点が必要になる。

# 用語

## C# と VB.NET
開発言語。
しがらみがないならC#採用の一択。C#では使えるが、VB.NETでは使えないフレームワークなどが多い。逆はほぼない。
マイクロソフトはC#をメインとして今後も発展させていく方針である。
VB.NETもサポート継続はされるので、既存資産などの理由があるなら引き続き使うことに特に問題はない。

>「VB」というVB.NETとは別の開発言語がかつて存在した。構文が似ているVB.NETの先祖だが、互換性はない。
環境と文脈によって「VB」というワードの意味が異なる。「VB.NET」を「VB」と略する人間もいる。

## .NET Framework
2000年ごろからあるWindows専用のフレームワーク。
歴史が長いのでライブラリや知見が多いし安定している。
すでに利用していて、引き続きWindows環境で動かすことを想定しているなら「.NET Framework」から無理に変更しなくてよい。
「.NET Framework」にしがらみがないなら、「.NET」を採用するべき。

WindowsOS上で動かすなら、Windowsフォームアプリケーション。
WindowsServerのIIS上に配置するならWebアプリやWebApi。

サポート期限は2031までは保証するらしい。（延長する可能性が高いと筆者は思っている。）

## .NET(= .NET Core)
「.NET Framework」より新しく最適化されているマルチプラットフォーム用のフレームワーク。
マイクロソフトは「.NET Framework」の後継扱いしている。
「.NET Framework」にしがらみがないなら、「.NET」を採用するべき。（しかし、「.NET Framework」にしがらみがないというのは、Windows自体に特にしがらみがないということでは？）
~~Coreが生き残って「.NET Framework」の後継をやるとは思っていなかった。~~

>MS公式（2024.06時点）
すべての新しい製品開発で .NET 6 以降 を使用することをお勧めします。これらの新しい .NET バージョンはクロスプラットフォームであり、より多くのアプリケーションの種類をサポートし、高いパフォーマンスを実現します。
>次のいずれかが true の場合にのみ、.NET Framework をダウンロードしてください。
 >   ビルド中のアプリケーションには .NET Framework が必要です。
    使用中のアプリケーションには .NET Framework が必要です。

## WPF（Windows Presentation Foundation）
UIフレームワーク。
XAML学習コストを払ってでもメリットを享受したいなら採用候補となる。
画面レンダリング周りが最適化されているため、画面レンダリングの負荷を大幅に下げることがメリット。CG系など。

## UWP（ユニバーサルWindowsプラットフォーム）
UWPはサポートが減っていく方針っぽいので新規案件で使うな。
モバイル対応を夢見ていた時代のあだ花。

>MS公式（2024.06時点）
UWP は引き続きサポートされていますが、Windows アプリを開発する場合は WinUI とWindows アプリ SDKを使用することをお勧めします。


## Xamarin
マルチプラットフォーム用のフレームワーク。
2024年5月1日でサポート終了であるため、新規案件で使うな。

## .NET MAUI(.NET Multi-Platform App UI)
2022年5月リリースの新しめのフレームワーク。「Xamarin」の後継らしい。
WindowsOS,MacOS,iOS,Androidの4つのマルチプラットフォーム対応のUIフレームワーク。
要件にマッチしたアーリーアダプターは試してもいいのでは。

ただしスマホアプリ用（iOS、Android）のマルチプラットフォームならFlutterのほうがいいと思う。Googleがスマホに注力している。マイクロソフトはスマホに注力していない。

## Blazor
2018年リリースのUIフレームワーク。
Browser + Razor の造語。RazorはHTMLの言語構文の一種。
ブラウザ用のSPA(Single Page Application)用がメインらしいが、他にもいろいろできるようになっているらしい。
ただしSPAをやる必要があるなら、他の言語（フレームワーク）と比較するべきと思う。（本記事では深堀しない。）

## .NET Aspire
2023年リリースのツール。フレームワークではないらしい。
分散アプリケーションを開発を便利にしてくれるらしい。（本記事では深堀しない。）


# 結論（2024.06時点）
・マイクロソフト系の言語で、WindowsOS用アプリを新規開発をやるなら「C#」「.NET」一択である。
・Webアプリ開発やクロスプラットフォーム開発もできる。その明確なメリットはC#が使えることである。
（C#だけで完結できるなら学習コストが下がるし、ソースの使いまわしがしやすい。
　一方でWebアプリやクロスプラットフォーム目的なら、マイクロソフト系以外の言語が選択肢に入る。）

# 所感
あたりまえの結論だが、何を採用するかは組織の要件次第となる。
筆者環境ではシェアと知見が少ないものは様子見がベターとなる。
マイクロソフトほどの大手がバックについていても、シェアが少なければいずれサポートが打ち切られてしまうということの再確認もできた。

筆者環境では「VB.NET」「.NET Framework」「Webアプリ」の資産がちょっと強いので、移行するべきか否かを調査の前提としていた。
「VB.NET」「.NET」「Webアプリ」をVS2022の新規プロジェクト作成で試行錯誤したが一覧に表示されなかった。Web上で検索してもこの組み合わせのユースケースは見つからなかった。
「VB.NET」「.NET Framework」「Webアプリ」は可能だった。
「C#」「.NET」「Webアプリ」は可能だった。

# 図表

![図表.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233237/e1fa612e-51b9-a392-39f9-21e285c127a0.png)

ChatGPT作。「VB.NET」「.NET」「Webアプリ」ができると主張するが、筆者には見つけられなかったので×(?)にしている。




# 参考リンク

## 公式

https://learn.microsoft.com/ja-jp/lifecycle/products/microsoft-net-framework

https://dotnet.microsoft.com/ja-jp/download/dotnet-framework

https://learn.microsoft.com/ja-jp/windows/uwp/

## 公式以外

https://www.ipentec.com/document/windows-development-new-ui-platforms-have-slumped

https://zenn.dev/zead/articles/dotnet-history-20240610

https://pipin68k.hatenablog.com/entry/2023/04/24/071856

https://itskillmap.com/menu3_02/

https://www.publickey1.jp/blog/23/cvisual_basicnet.html

https://qiita.com/noonworks/items/0ce9dfb0635458a3b0f2

https://forest.watch.impress.co.jp/docs/news/1509919.html

https://forest.watch.impress.co.jp/docs/news/1411796.html

https://zenn.dev/microsoft/articles/blazor-dotnet8-all