インタビュー「今後は .NET は 1 つだけになり、Windows、Linux、macOS、iOS、Android、tvOS、watchOS、WebAssembly などをターゲットにできるようになります」と、Microsoft の Richard Lander 氏は Build 2019 開発者会議での .NET 5.0 の発表で約束しました。
.NET は、ランタイム (共通言語ランタイム)、コンパイラ、および多数のライブラリとフレームワークを含む Microsoft の開発スタックです。
Build 2019のDeveloper DNAボードに示されたプログラマーの使用パターン
現実はランダー氏が示唆するよりも複雑だ。「現在、少なくとも3つの異なるフレームワークがあります」と、先週シアトルで開催されたソフトウェア大手のBuildカンファレンスでThe Registerの取材に応じた開発ツール担当コーポレートバイスプレジデントのジョン・モンゴメリー氏は述べた。「Mono、.NET Core(まもなくバージョン3.0になります)、そして完全なフレームワークがあります。さらに、その上に様々なバリエーションがあります。例えば、モバイル開発用のXamarinは、特別なコンパイラ技術を備えたMonoを使用しています。」
.NET Core 3.0 の後継である .NET 5 の登場後も、これら 3 つの .NET フレームワークは存在し続けます。
「NET 5は、現在の.NET Standardのスーパーセットです。.NET Standardとは、この仕様に従えばどのプラットフォームでも実行できるという仕様です」と、開発ツールの最高責任者は述べた。「.NET 5の大きな特徴は、MonoとXamarinを.NET Coreに統合したことです。完全な.NET Frameworkの技術を全て取り込むわけではありません。.NET Frameworkは今後も長らくWindowsに搭載され続けるでしょうが、大きな進歩は期待できません。」
マイクロソフトの考える.NET 5
.NET Framework 4.8 が当面サポートされ続ける理由は 2 つあります。1 つは、既存アプリケーションとの互換性です。既存アプリケーションの多くは .NET Core に移植されません。もう 1 つは、.NET Framework の 2 つの人気コンポーネントが .NET 5 に含まれないことです。これらのコンポーネントとは、Windows Communication Framework (WCF - Windows Vista の前身となる Longhorn の 3 本柱の 1 つ) と、ASP.NET のオリジナルバージョンである ASP.NET Web Forms です。
しかし、Microsoftの統合の主張は、単なる作り話ではありません。Monoと.NET Coreは、はるかに近いものになるでしょう。「おそらく最も大きな統合は、統合された基本クラスライブラリです。現時点では、それぞれわずかに異なる実装が2つあります」とモンゴメリー氏は語りました。
Monoはしばらくの間、.NET Coreからコードを移行してきました。そして、その作業を完了させようとしています。そして、2つのコンパイラ技術を統合しています。現在、Mono / Xamarin側には、iOSに必要なAOT(Ahead-of-Time)コンパイラがあります。これは.NET 5.0に導入される予定です。そして、JIT(Just-In-Time)技術を取り入れ、モバイル技術もJIT上で実行できるようにします。
「共通言語ランタイムの実装は、Monoと.NET Coreに統合されます。そして、その上のライブラリシステムは、さまざまなシナリオに合わせて調整されます。つまり、モバイル用のライブラリセット、マイクロサービス用のライブラリセット、デスクトップ開発用のライブラリセットなどが用意されることになります。」
それでもMonoは消滅することはないと彼はThe Regに語った。「Monoへのエンジニアリング投資は減少します。そのほとんどが.NET 5.0に流れ込むでしょう。コミュニティもエンジニアリング投資を減らし、ワークロードは徐々に.NET 5.0に移行するでしょう。しかし、私たちはこのプロジェクトを潰そうとはしません。Monoに依存し、.NET 5.0に移植できない可能性のある大規模なアプリケーションはまだ存在するのです。」
問題の一つは、Monoがデスクトップアプリケーション向けのクロスプラットフォームGUIをサポートしていることです。Microsoftは.NET Core向けのクロスプラットフォームGUIを提供する予定はありますか?
「引き続き検討を進めています。この技術にはパフォーマンスと設計上の欠陥があります。Visual Studio for MacはMonoを使用しており、アクセシビリティなどの面で課題があります。現在は主にモバイルシナリオに注力しており、Xamarin Formsが主な解決策となっています」とモンゴメリー氏は述べています。
.NET Framework は引き続き提供されますが、Windows デスクトップアプリケーションは .NET Core 3.0(現在プレビュー版)以降でコンパイルできます。これは、Windows フォーム、Windows Presentation Foundation(WPF)、ユニバーサル Windows プラットフォーム(UWP)の 3 つの Windows GUI フレームワークすべてに当てはまります。これらのフレームワークは現在オープンソース化されていますが、オープンソース化されているのは .NET Core の移植版のみであることに注意してください。これらの進化に伴い、.NET Framework のバージョンも更新される予定ですか?
「.NET Core 向けに WPF や Windows Forms を開発しているエンジニアリング チームは、Windows 向けに開発しているエンジニアリング チームと同じです。スマートな変更があればそれをアップストリーム化するかもしれませんが、それは意図したことではありません」と Montgomery 氏は語りました。
.NET 5 を使用する Windows デスクトップ開発者には、2 つの展開オプションがあります。「特定の .NET Core をアプリケーションにバインドして展開することができます。もう 1 つのオプションは、システム全体で共通の場所に .NET Core があり、アプリがその場所に移動し、.NET Core が見つからない場合はインストールするというものです。」
「.NET Frameworkに似ていますが、システムレベルでも複数の.NET Coreを並行して使用できる点が異なります。これにより、セキュリティ上の脆弱性があった場合でも、1つの共通コンポーネントで対応できます。静的バージョンを構築する場合は、開発者として対応する必要があります」とモンゴメリー氏はThe Regに語った。
インタビューのこの時点で、少し混乱が生じました。「Windows Update で .NET Core のサービスを提供したことはないと思います」とモンゴメリー氏は言いました。しかし、それは想定されているのでしょうか?「もしかしたら。まだ決定していません。」
しかし、先ほどWindows Updateで対応されるとおっしゃいましたね。「対応できる可能性はあります」と彼は言いました。懸念されるのは、「特に.NETの進化のスピードを考えると」互換性を損なう変更が導入されることです。