.NET Standardとは特集:マイクロソフトテクノロジーの現在と未来(1/3 ページ)

.NET Standardは、さまざまな.NET開発/実行環境でのAPIの統一と互換性向上を狙ったもの。その概要と実際の使用例を見てみよう。

» 2017年07月28日 05時00分 公開
[かわさきしんじInsider.NET編集部]
「特集:マイクロソフトテクノロジーの現在と未来」のインデックス

連載目次

 本特集では、Buildやde:codeなど、マイクロソフトが開催するカンファレンスなどで発表されたさまざまなテクノロジー、フレームワークなどを取り上げ、マイクロソフトがコンピューティングの将来をどう見据えているかについて考えていく。今回は「.NET Standard」を取り上げる。

.NET Standardとは

 .NET Standardとは、さまざまな.NET環境(.NETランタイム、.NETプラットフォーム)で使用可能なAPIセットを定めた仕様(とそれを実現するための機構)である。本稿執筆時点(2017年7月27日)ではバージョン2.0がプレビュー段階にあり、2017年第3四半期のリリースが予定されている(ロードマップを参照)。

 .NET CoreとXamarin(および、そのベースとなっているMono、同じくMonoをベースとしたUnity)が普及して以来、.NETプログラムを開発/実行する環境はマイクロソフトが提供する.NET Frameworkだけではないことが明確になってきた。こうした状況を端的に示しているのが、マイクロソフトが開催するカンファレンスなどでよく目にする以下の図だ。

さまざまな.NET環境とその上に構成されるフレームワーク さまざまな.NET環境とその上に構成されるフレームワーク
de:code 2017における日本マイクロソフトの井上章氏によるセッション「.NET 15 周年の今こそ考えるクラウド ネイティブ アプリケーションと .NET の活用」のセッション資料より。

 .NET環境ごとにベースクラスライブラリがあり、その上にさらに個別にさまざまなフレームワーク/ライブラリが構築されている(もちろん、実際には.NETコードを実行可能な環境はこの他にも多数存在している)。.NET Standardはこの図にあるベースクラスライブラリ部分の仕様を策定して、統一的なものにしようという試みだ。

.NET Standardによりベースクラスライブラリが統一される .NET Standardによりベースクラスライブラリが統一される
上と同じく日本マイクロソフトの井上章氏によるde:code 2017セッション「.NET 15 周年の今こそ考えるクラウド ネイティブ アプリケーションと .NET の活用」のセッション資料より

 正確には、.NET Standardは「全ての.NET環境(.NETプラットフォーム)が実装すべきAPIセット」を示すものであり、.NET Frameworkや.NET Coreといった個々の.NET環境がこれに従ってAPI群を実装していくことで、「特定のバージョンの.NET Standard」をターゲットとする全ての環境で「ベースクラスライブラリレベルでのバイナリ互換性」が実現される。

 さまざまな.NET環境で共通に使用できるコードを実装する仕組みとしては、これまでPCL(Portable Class Library)があったが、これは「プロファイルベース」と呼ばれるもの。あるプロファイル(.NET Frameworkの特定バージョン、WindowsやWindows Phoneの特定バージョンなど、主にマイクロソフトのプラットフォームの集合を指す)を選べば、ターゲットとするプラットフォームの組み合わせと、それらで使用可能なAPIセットが決定する。

 プロファイルはプラットフォームの組み合わせごとに多数存在し、特定のプロファイルで使用できるAPIは、そこでターゲットとされている全てのプラットフォームで共通に使えるものだけとなる。そのため、多くの環境をサポートしようとすると、使用可能なAPIに制約が生まれる。

 .NET Standardはバージョンごとに「線形的」な管理が行われていて、新しいバージョンの.NET Standardは古いバージョンで定められている全てのAPIセットを含むようになっている。従来のPCLのようにプロファイル(プラットフォーム)ごとに使用できるAPIが決定するのではなく、.NET Standardの特定バージョンをサポートしている環境であれば、その全てで、そのバージョンで規定されているAPIやそのバージョンをターゲットとして作成されたクラスライブラリ(.NET StandardベースのPCL)が利用できる。こうしたことから、クロスプラットフォームで実行可能なライブラリを作成する手段として、従来のPCLを置き換えるものと.NET Standardを捉えることもできる。

 .NET Standardはバージョン1.0から始まり、これまでに1.6がリリースされていて、本稿冒頭でも述べたように2017年中にはバージョン2.0のリリースも予定されている。どの環境で.NET Standardのどのバージョンがサポートされているかは「NET Standard Versions」ページや「.NET Standard」ページで参照できる。前者のページから抜き出したものを以下に掲載する(見出し列は.NET Standardのバージョン。その下の各行はプラットフォームを表し、見出し列の.NET Standardバージョンがそのプラットフォームのどのバージョンでサポートされるかを示している)。

.NETプラットフォームとそれがサポートする.NET Standardのバージョン .NETプラットフォームとそれがサポートする.NET Standardのバージョン
.NET Standard Versions」ページより。

 例えば、.NET Framework 4.5.1がサポートしている.NET Standardのバージョンは1.2までであり、.NET Framework 4.6.1では.NET Standard 2.0までがサポートされている。一方、.NET Core 1.0でサポートされているのは.NET Standard 1.6までだ。ここで、.NET Core 1.0と.NET Framework 4.6.1の両者でコードを共有したいというのであれば、その両者で利用可能な.NET Standard 1.6ベースのライブラリを作成することになる。つまり、バージョンが新しくなると、使用できるAPIは増えるが、サポートできるプラットフォームが少なくなる。逆に、古いバージョンは多くのプラットフォームでサポートされるが、使用できるAPIは少なくなる。

 .NET Standardの各バージョンで規定されるAPI、そのバージョンをサポートするプラットフォーム、以前のバージョンとの差異などの情報についても提供されている。例えば、以下に示すのは.NET Standard 1.6についての情報を記したページだ。

.NET Standard 1.6に関する概要 .NET Standard 1.6に関する概要

 ここからはそのバージョンの概要、以前のバージョンとの差異、追加されたAPIの数などを参照できる。[Previous]リンクや[Next]リンクでバージョン間をたどることもできる。また、.NET API Browserを使えば、特定のAPIが、特定の.NET Standardバージョンでサポートされているかを確認できる。

.NET API Browser .NET API Browser

 例えば、この画像は.NET Standard 1.6で追加されたAPIであるSystem.AppContext.TargetFrameworkNameを検索しているところだ。バージョン選択用のドロップダウンから[1.5]を選択すれば、検索結果は「No results」となる。

 .NET Standard 2.0は従来のバージョンに対して、2万を超えるAPIが追加されている(これにより、.NET Standard 2.0で規定されるAPIの総数は3万3千を超えるとのこと)。また、.NET Standard 2.0では、.NET Standardベースのクラスライブラリから.NET Frameworkベースのライブラリを参照できるようにもなっている(それらのライブラリが.NET Standardで規定されているAPIを使用している場合)。これらは従来の.NET Framework上で作られていたコードの.NET Standard化、つまりクロスプラットフォームでのコード共有の可能性を大きく広げるものといえるだろう。

 次ページでは、実際に.NET Standard 2.0ベースのクラスライブラリを作成して、それを幾つかのプロジェクトで使ってみよう。

       1|2|3 次のページへ

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。