このページの本文へ

開発者を魅了するマイクロソフトの開発プラットフォームを探れ 第3回

「すべてのアプリのための統一プラットフォーム」を目指した.NETの過去、現在、未来

あらゆるプラットフォームで、どんなアプリでも .NETが20年目に到達した高み

2022年01月25日 09時00分更新

文● 大谷イビサ 編集●ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 昨年リリースされた.NET 6は、マイクロソフトが長らく目指してきた「すべてのアプリのための統一プラットフォーム」の1つの到達点だ。Windowsのみならず、あらゆるプラットフォームで、デスクトップやWebだけでなく、どんなアプリでも。2002年の.NET Framework 1.0のリリース以来、20年目を迎える.NETは、果たしてどこまで行き着いたのか? Visual Studio 2022(関連記事:開発生産性の向上を実感!64ビット化した「Visual Studio 2022」の魅力)に引き続きマイクロソフトコーポレーション 井上章氏、日本マイクロソフト 横井 羽衣子氏が解説してくれた。

すべての開発者に選択肢を 進化を続けてきた.NET

 .NET 6の話の前に、まずは.NETおよび.NET Frameworkについておさらいしておこう。

 特定の言語に依存しない開発環境を目指して生まれた.NETは、.NET Frameworkとして2002年に1.0がリリース。長らくWindows向けの開発・実行プラットフォームとして多くの開発者に使われてきた。しかし、その後マルチプラットフォームを前提に進化を続け、LinuxやMac、iOS、Androidなど、さまざまなOSで利用可能になった。アプリケーションに関してもデスクトップ、Webアプリケーション、クラウド、モバイル、ゲーミング、IoT、AIに至るまで幅広くカバーするに至っている。

 Windows環境を前提としたオリジナルの.NET Frameworkは、Webアプリケーション向けのASP.NETやデスクトップアプリケーション向けのWPFやWin Formsなどのアプリケーションモデルをサポートしていた。その後、マルチプラットフォーム対応の過程で、Windowsに加え、LinuxやMacをサポートしたマルチプラットフォームの「.NET Core」が登場し、続いて、iOSやAndroidなどのモバイルOSでの統合開発を実現する「Xamarin」が追加。.NET Core 3.1の時点では、実装の異なる3つのアプリケーションモデルが提供されていたことになる。

.NET Core 3.1の時点での3つのアプリケーションモデル

 そして現在、マイクロソフトが挑んでいるのは、これら.NET Framework、.NET Core、Xamarinという3つのアプリケーションモデルを統一する「One .NET」というビジョンである。.NET Coreを進化させ、今まで異なっていたSDK、クラスライブラリ、ツールチェーンを統一し、クロスプラットフォームでネイティブのUI、Web UIに対応。ビジョンにはクラウドネイティブ化も含まれており、すべてのモダンワークロードで最適なソリューションに仕上げていくというのが、マイクロソフトの構想だ。

 横井氏は、「開発ターゲットが分散したのではなく、サティアCEOが訴えてきた通り、あらゆる開発者の選択肢を増やす方向性だと思っています。私たちのツールやプラットフォームを使っていただければ、どの選択肢をとっても、開発者が作りたいものを容易に実現できる。こういう世界観を目指しています」と語る。

パフォーマンスにこだわる.NET 長期サポートやロードマップも明示

 こうした背景で生まれた.NET 6は、クラスライブラリやSDKの統一を実現。新たにC# 10やF#6をリリースするとともに、Apple M1プロセッサーもサポートした。さらに.NET 5と異なり、長期サポート(LTS)も実施する。ただし、.NET 6は既存のアプリケーションモデルをすべて網羅するわけではなく、ASP.NET Web FormsやWCF(Windows Communication Foundation)やWF(Windows Workflow Foundation)などはレガシーなフレームワークとして対応が見送られている。

 異なる言語で記述されたプログラムをいったん中間言語化し、実行時にネイティブコードにコンパイルするという.NETのアーキテクチャでは、バージョンアップのたびにパフォーマンスが焦点になる。その点、従来の.NET 5に比べても、リクエスト数で92%のパフォーマンスアップとなっている。実際、.NET 6のASP.NET CoreのWebアプリケーションは、Node.jsに比べて10倍の速度をたたき出したという。

最新の.NET 6のパフォーマンス

 .NET 6においてWebアプリケーションの高速化にこだわるのは、クラウドへの投資でもある。井上氏は、「クラウドは基本的に従量課金。同じプログラムでもパフォーマンスがよければ、リソースの利用効率がよいため、結局コストにも跳ね返ってくるはずです」と指摘する。

 2021年11月にリリースされたばかりの.NET 6だが、今後も毎年11月にメジャーバージョンアップがリリースされる。さらに奇数年にリリースされるバージョンはLTS(長期間サポート)となり、3年のサポートが提供されるという。「今の.NETはOSSでもあり、他のOSSと同じように頻繁にアップデートがリリースされています。ただ、実業務においてはバージョンアップのサイクルがわかっていたほうが使いやすいので、スケジュールが明らかになっています」と井上氏は説明する。確かにエンタープライズの企業としては、先々の予定が明らかになっていた方が安心して技術に投資できる。

.NETのロードマップ

 加えて、井上氏は「同じバージョンを長期的に使い続けるといった考え方から、できる限り新しいバージョンに短い周期でアップデートしていく、アジャイル的なプロセスや考え方にシフトしやすいことも挙げられます。セキュアなアプリケーション開発といった観点では、今やもっとも考慮すべき事項が脆弱性への対応でしょう」と持論を披露する。

ASP.NET Core Blazor対応も強化 C#によるWeb UI開発がより身近に

 .NET 6ではC#の開発者によるWebフロントエンド開発を容易にする「ASP.NET Core Blazor」への対応もより強化されている。

 Webアプリケーションの開発は、サーバー側とフロントエンド側で利用する言語やフレームワークが異なる。フロントエンドのWeb UIは基本JavaScriptがベースで、AngularやReact、Vueなどのフレームワークを用いて開発するのが一般的だ。こうしたJavaScriptのフレームワークを知らなくとも、C#のような言語でフロントエンドを開発可能にするのがASP.NET Core Blazorの役割だ。C#でWebアプリケーションを開発できるという観点では、.NET 6で入ってこなかったASP.NET Web Formsの移行先ともいえる。

 ASP.NET Core Blazorは、ほとんどのモダンWebブラウザでサポートされているWeb Assemblyを技術基盤としている。そのため、C#で書いたコードがWeb Assemblyとしてネイティブのパフォーマンスで動作する。作り方によってはオフライン実行させたり、PWA(Progressive web apps)としてマシンにインストールし、ネイティブアプリのように動かすことも可能だ。「以前のSilverlightやFlashのようにプラグイン上で動作させるのではなく、Web標準のWeb Assemblyで動かせるところが大きなメリット」と井上氏は語る。

 ASP.NET Core Blazorは、WebブラウザにDLLをダウンロードし、Web Assembly上で実行することができる。完全にクライアント側で実行されるため、サーバーコンポーネントは不要でオフライン実行も可能だが、ダウンロードサイズが大きい。その代わりにBlazorサーバーでプログラムを実行して、SignalRという技術でレンダリングするという方法も用意されている。この場合は永続的なコネクションが必要で、UIレイテンシも高いが、起動も高速で、古いWebブラウザやシンクライアントでも利用できるというメリットがある。

Blazorの2つの利用モード

 .NET 6では、このASP.NET Core Blazorの強化が図られた。たとえば、中間言語からWebAssemblyへのコンパイルを事前に行なえるようになった。これにより、初回の起動がスピードアップし、WebAssemblyアプリのダウンロードサイズも小さくできる。サーバー実行クライアント実行の両者の差を埋めるアップデートが図られたという。

モバイル開発も容易に 軽量なMinimal APIも用意

 モバイル開発に関しては、Xamarinに代わって「.NET Multi-Platform App UI」、通称.NET MAUIと呼ばれるフレームワークが用意される。

 Visual Studio 2022からこの.NET MAUIを扱うと、単一のプロジェクトで、複数のデバイスへのアプリのデプロイが可能になる。共通のコードを持ちつつ、デバイスごとに異なるUIはXAMLを用いて設計。各プラットフォームのエミュレーターを起動させれば、デバッグ作業も可能だ。Windowsはもちろんのこと、iOS、iOSコードをMac上で動かせるMac Catalyst、Androidに対応する。ただ、こちらは.NET 6のリリース時ではなく、2022年春にGAとなる予定だ。

複数デバイスへのアプリのデプロイが容易になる.NET MAUI

 さらに、この.NET MAUIと前述したBlazorを組み合わせることで、コンポーネントの再利用率を向上させることができる。「コンポーネント化しやすいBlazorの特徴を活かし、C#とBlazorで作ったコンポーネントをiOSやAndroidの開発に活かすことができます」と井上氏は語る。

 また、クラウドネイティブアプリの開発に関して、.NET 6ではシンプルなMinimal APIが用意された。単一ファイル内に、少ない作法でC#のプログラムを記述でき、オブジェクト指向的な記述に慣れていないユーザーも、開発の生産性を上げることが可能だ。

長年夢見てきた統一プラットフォーム .NET 6で1つの集大成に

 WindowsというOS、しかもデスクトップ中心の用途という、ある意味で特定な環境での開発効率を高めるべくスタートした.NETだが、20年目を迎えていよいよ「すべてのアプリの統一プラットフォーム」という高みに到達しつつある。「(GAになっていない)MAUIという積み残しはあるものの、.NET 6のリリースをもってOne.NETというビジョンが完成したと捉えています」と井上氏も感慨深そう。20年前、常套句のように言われていた「Windowsしばり」「囲い込み」のような姿は、もはやみじんも感じられない。

いよいよ完成したOne .NETの世界観

 井上氏は、長らく.NETで開発してきたプログラマーの現状について、「さまざまなアプリを開発せざるを得ない状況で、ターゲットにあわせたツールやフレームワークを選ばなければならない。システムもクラウドにシフトしているので、インフラやサービスも変化している。開発現場は複雑化している」と指摘する。

 そんな中でも開発者は、.NETという統一プラットフォーム、そしてVisual Studioという統合開発環境を使うことで、好きなアプリをさまざまなターゲットで展開し、高い生産性を維持できる。これがマイクロソフトの開発者に向けたメッセージだ。「あらゆるプラットフォームで、どんなアプリでも」。.NET 6とVisual Studioは複雑化する開発現場をシンプルするマイクロソフトの提案だ。

 最後は、入社した次の年にリリースされた.NETを社内から見続けてきた横井氏のコメントで締めたい。「.NET Frameworkがリリースされる前、COMの時代からマイクロソフトはマルチプラットフォームを夢⾒てきました。マイクロソフトは粘り強さがすごい会社なので(笑)、そこから20年間のたえまぬ努力、試行錯誤を繰り返しながら今回の.NET CoreとFrameworkの統⼀に至り、ようやく目指してきた世界観がだいぶ見えてきたなと思います。さまざまな反省と20年の時を経て、今は何よりも開発者のこと、オープンであることを目指し、考え抜かれて作られているので、ぜひ.NETとVisual Studioの世界にダイブしてもらいたいです」

 来週2月3日(木)に開催される「Microsoft Developer Day」では、こうした.NET 6やVisual Studioを含めたマイクロソフトの最新開発プラットフォームについてのセッションも開催されるので、興味ある方はぜひ参加してもらいたい。

■関連サイト

【参加費無料】2月3日 13:00 ~ 開催 Microsoft Developer Day
開発者のための開発者によるオンライン技術イベント。日々チャレンジされているすべての開発者の皆様に、Visual Studio 2022、.NET 6、GitHub Enterprise、Azureなどの最新技術情報をお届けします。

お申込みはこちら

【コミュニティイベント】2月3日 18:30 ~ 開催 Microsoft Developer Night
技術コミュニティ向けのイベント「Microsoft Developer Night」を開催。”夜の部” ともいえる本イベントは、Java、ウェブ開発、AI、IoT、Mixed RealityなどMicrosoft Developer Dayには予定されていない内容を含む各種開発技術に関するセッションで構成され、Microsoft MVP受賞者が最新の技術知識を解説します。

お申込みはこちら


(提供:日本マイクロソフト)

カテゴリートップへ

この連載の記事