既存の.NET Frameworkアプリの.NET 5への移行に関する考慮事項やレガシーアプリのモダナイゼーションについて解説する連載。最終回は、2021年11月ローンチ予定の.NET 6の最新情報について、Microsoft Build 2021の主な発表からお伝えする。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
既存の.NET Frameworkアプリの.NET 5への移行に関する考慮事項やレガシーアプリのモダナイゼーションについて解説する本連載「.NET 5モダナイズ入門」。最終回となる今回は、今後の.NETについての最新情報をお伝えします。
Microsoftの開発者向け年次イベント「Microsoft Build」が日本時間2021年5月26〜28日に開催されました。2021年の11月にローンチ予定の「.NET 6」については「Preview 4」が公開され、最新情報が発表されました。
大きな方針としては、.NET 6はクロスプラットフォーム対応の強化、クラウド対応の強化、実行速度のさらなる向上が予定されています。「アプリコードはよりシンプルに」という点も強化されています。
これまで同様、デスクトップアプリ、モバイルアプリ、Webアプリそれぞれの開発者が異なるワークロードのアプリを開発する際のハードルが可能な限り低くなるように、さまざまなフレームワークを提供することに注力されています。
なお、.NET 6はLTS(Long Term Support)リリースなので、約3年間のサポートが約束されています。現在のLTSリリース「.NET Core 3.1」のサポート終了は2022年12月3日なので、残りのサポート期間が短くなっています。.NET 6がローンチされる2021年11月以降にリリースを予定しているシステムなら、.NET 6の情報はとても興味深いものとなるでしょう。
詳細はセッション動画「.NET 6 deep dive; what's new and what's coming | OD485」をご覧ください。
以下、Microsoft Build 2021の.NET6に関する主な発表を紹介します。
.NET 5でリリースされるはずだった「.NETとXamarinの統合」が完了します。これによってSDKが統合され、iOS、Android、Macのプロジェクトにおいても.csprojファイルがSDKスタイルに統一されます。ターゲットフレームワークモニカー(TFM)は、「net6.0-ios」「net6.0-android」「net6.0-macos」のような名称になります。
.NET 5のときのおさらいですが、「net6.0」のTFMは、どのプラットフォーム上でも実行できるコードで使用されます。このTFMには通常、クロスプラットフォームで機能する技術のみが含まれます。
「net6.0-windows」「net6.0-ios」「net6.0-android」のTFMは、クロスプラットフォームで機能する技術に加えて、特定のOS固有バインディングを含みます。
これにより、.NET 6のSDKは、全てのプラットフォームで共通のベースクラスライブラリ(BCL)と、プラットフォーム固有の機能ごとにパッケージ化され、必要なものが選択されてインストールされるようになり、歴史的背景により複雑だったSDKの構成がシンプルになります(もちろん、シンプルになるのは利用者目線の参照ライブラリの話であり、SDKの実装をひもといていくとまだまだ複雑な構成になっていますが……)。
.NET 6ではC# 10が利用できます。なお言語の詳細については、筆者の専門分野ではないので触れません。
これまで、Win32アプリならWindows FormsやWPF(Windows Presentation Foundation)、WebアプリならASP.NETやBlazor、モバイルアプリならXamarin.Formsといった、プラットフォームのワークロードごとに異なる固有の技術の習得が必要でした。
それぞれのワークロードのアプリは全て同じC#でコーディングできますが、利用するSDKの構成は異なっており、アプリごとのコーディング方法の作法もかなり違いました。
.NET 6では「.NET Multi-platform App UI」(.NET MAUI)や「Blazor desktop apps」がサポートされ、クロスプラットフォームのアプリ開発環境がさらに強化されると同時に他のワークロードへのアプローチが容易になりました。
デスクトップアプリ開発者がモバイルアプリを開発するような場合、最終的にはモバイルアプリのアーキテクチャに対する深い理解が必要ですが、最初の一歩が踏み出しやすくなるのは、とてもうれしいことです。
それぞれの対応ワークロードは表の通りです。
WinUI | Mac Catalyst(※1) | iOS | Android | |
---|---|---|---|---|
.NET MAUI | 〇 | 〇 | 〇 | 〇 |
Blazor desktop apps | 〇 | 〇 | ×(※2) | ×(※2) |
※1:Mac Catalystは、iPad AppとMac Appでコードを共有する技術です。これにより、iPad向けのアプリにMac用のコードを追加するだけで比較的簡単にMacネイティブアプリとして動かせます。
※2:前身の「Mobile Blazor Bindings」ではiOSとAndroidのサポートがありました。今後対応予定なのかどうかは残念ながら詳しい情報がありませんが、Microsoft Build 2021のセッション内では「まずはWindowsとMacにおけるリッチなデスクトップアプリのシナリオをサポートします」とコメントがあったので、今後のサポートがあるかもしれません。
.NET MAUIはXamarin.Formsの進化版なのでXamarin.Formsと同じように利用できると考えて問題ありません。今回公開された新機能は下記の通りです。
RazorのUIエレメントは.NET MAUIのUIエレメントに対応しており、.NET MAUIではXAMLでUIを記述します。Blazor desktop appsは乱暴にいえば、それをRazorで記述できる技術です。Webアプリ開発者による、リッチクライアントとオフラインアプリの開発にフォーカスしています。
Blazor desktop appsの特長は下記の通りです。
詳細は参考情報「Announcing .NET MAUI Preview 4」をご覧ください。
Microsoft Build 2021では「Minimal Web API」が紹介されました。これまでASP.NET MVCでAPIを記述する場合、初期化のプロセスが多く、100行以上のコードが必要です。その分、起動にも時間がかかりました。Minimal Web APIでは、これが30行程度に削減されて起動時間も高速化しました。
Minimal Web APIに関しては、数年前から同様のコンセプトのものを個人的に開発した方がおり、GitHubにサンプルコードもありますが、今回公式として実現した形です。
例えばクラウド上で自動スケールさせるような場合、初期化プロセスが短いことは大きなメリットです。また、軽量なAPIをさっと書けることはモックAPIを簡単に作成する場合などにもメリットがあるので、便利な新機能といえます。
これまで、Xamarin.Forms、WPF、UWP(Universal Windows Platform)のXAMLでサポートされていたHot Reloadが、WPF、Windows Forms、.NET MAUI(Preview)、ASP.NET Coreアプリのコードビハインド、コンソールアプリ、「WinUI 3」とさまざまな環境で利用可能になります。
Preview 4の時点では、.NET MAUIはWinUI 3のみサポートし、iOSやAndroid、 Mac Catalystは今後サポートされるようです。
詳細は参考情報「Introducing the .NET Hot Reload experience for editing code at runtime」をご覧ください。
.NET 6のSDKインストーラーにはmacOS Arm64対応版が存在するので、Mac上で「Rosetta 2」を介さずにネイティブにASP.NETアプリ、コンソールアプリが動きます。
Macアプリについても、現在「Visual Studio for Mac」では、Universal(およびAppleシリコン対応のバイナリ)が出力できません。少なくともAppleシリコン対応のバイナリが出力可能になると予想されます。
.NET 6は2021年11月に「.NET Conf 2021」でローンチされます。
その前の大きなマイルストーンとして、夏に「Visual Studio 2022」のパブリックプレビューがローンチされるので、その時点ではかなりの機能をさらに詳細に試すことができるでしょう。
まずは、Visual Studio 2022パブリックプレビューを楽しみに待ちたいと思います。
NTTデータ先端技術株式会社
Microsoft MVP for Developer Technologies
Copyright © ITmedia, Inc. All Rights Reserved.