.NETとは?
.NETとはWebアプリケーション、コンソールアプリケーション、モバイルアプリケーション、デスクトップアプリケーションなどさまざまな種類のアプリケーションを開発するためのオープンソースフレームワークです。
.NETで最も一般的な言語がC#です。他にもVisual BasicやF#などで使用可能です。
OpenTelemetryやgRPCといった業界標準な実装が重視されておりこれらの実装が容易になっています。
.NETの動作環境は?
WindowsのみならずMacOSやLinuxでも動作できます。
また、.NET MAUIというクラスプラットフォームフレームワークにおいてはiOSやAndroid開発も行えます。
また、そのアプリケーションの種類においてもWeb、デスクトップ、IoT、モバイルなどさまざまな分野においての開発が可能です。
まさに、様々な分野に適合したフレームワークといえます。
C#はレガシーか?
そもそも、レガシーという定義は何でしょうか?
.NETの中心的な言語であるC#は常に新しい言語仕様を取り入れています。毎年アップデートを続けています。
例えば、現代的なプログラミング言語では当たり前になったLINQはC#ではC#3.0の機能として2007年11月に取り入られています。
例えば、async/awaitはC#5.0の機能として2012年8月に取り入られています。
このように現代的な言語では当たり前になった機能はいち早くC#が実装しています。
開発環境構築の容易さ
.NETの開発環境の第一選択肢といえばVisual Studioです。ほかにもVisual Studio CodeやRiderなどが使用可能です。
Visual Studioで開発する場合、このVisual Studioをインストールしてその開発したいフレームワークに合わせてオプション選択するのみでほぼ開発環境構築が終了します。
基本的にこれでコードを書き始めることができるのが素晴らしいところと思います。
Nuget
NuGetパッケージマネージャーは大規模なエコシステムです。
ここからライブラリーを組み込むことで既存のライブラリー資産を活用することができます。
このライブラリーの多数は.NETを使用して構築されており依存性の深さという点からみてもほかの言語より根が浅いことが多いです。
Generic Host
.NETの素晴らしい機能の一つとしてGeneric Host(汎用ホスト)が上げられる。
Generic HostはコンソールアプリをはじめとしてWebアプリでは標準ですし、WPFでもGeneric Hostの使用は推奨事項です。また、.NET MAUIでも採用されています。
主な機能としては
依存関係の挿入(DI)
ログ
構成
グレースフルシャットダウン
などです。
特に、DI(サービス)機構が強力です。
たとえば、ASP.NET CoreにおいてもともとBlazorのプロジェクトだったところにWebAPIの機能も追加したいということはよくある話です。
そうしたときにはGeneric HostにWebAPIのサービスを追加してミドルウェアを追加することで使用する準備が整います。
.NET Aspire
.NET Aspireは監視可能で運用環境に対応したクラウド対応のアプリケーションを構築するためのサービススタックです。クラウドネイティブアプリケーションは通常データベース、ストレージ、キャッシュ、AIなど多数のサービスを使用します。このためにスケーラビリティ、レジリエンス、管理性を確保するため考慮事項がたくさんあります。これらを一貫性あるツールと設定のセットを提供し開発効率の向上を支援します。
たとえば、サーバーとクライアントの2つのプロジェクトを同時に起動しないと動かないような構成のものまた3つ4つみたいなものはよくあると思います。
こうした構成のものであっても順序関係正しく例えば、サーバーから立ち上げてクライアントを立ち上げるというような依存関係を構成してあげることも可能です。
可観測性という面では組み込みのダッシュボードが大変便利です。
アプリからOpenTelemetryを受信して独自UIで各種ログを表示します。また、最近のバージョンではそのログに対してGitHub Copilot Chatに問い合わせをすることができます。
AI
.NETではAIについても対応が進んでいます。Microsoft.Extensions.AIライブラリーによって標準的なLLMクライアントに対する実装が可能になっています。
たとえば、OpenAIやOllamaなど異なるAIに対して同じ実装が可能になっていることを示します。
また、より強力なオーケストレーションをするためにSemantic Kernelもあります。これも一部、Microsoft.Extensions.AIライブラリーと型互換性がとられていたりしてとても使い勝手がよくなっています。
Blazor
ASP.NET Coreの最もモダンなWebフレームワークで単一のプログラミングモデルでサーバーサイドのレンダリングとクライアントサイドのレンダリングの両方をサポートしています。また、ページ単位でその切替もできます。
特徴としては、C#でクライアント側のロジックとサーバー側のロジックを共有することができます。すなわち、同一の言語でサーバーとクライアント側を実装できるので型共有も可能ということになります。
.NETのこれまでのライブラリー資産を生かした開発ができます。
WindowsやLinux、MacOS上でVisual StudioであったりVisual Studio CodeやRiderなどの開発環境で開発できWindowsやLinuxなどにデプロイできます。もちろん、コンテナ化して可搬性を考慮した設計も可能です。