.NET 用語集
この用語集の主な目的は、.NET のドキュメントで頻繁に出現する用語と頭字語の意味を明確にすることです。
Ahead Of Time コンパイラ。
JIT と同様に、このコンパイラも IL をマシン コードに変換します。 JIT コンパイルとは異なり、AOT コンパイルはアプリケーションが実行される前に行われ、通常は、別のコンピューターで実行されます。 AOT ツール チェーンは実行時にコンパイルされないので、コンパイルに費やされる時間を最小限に抑える必要はありません。 つまり、より多くの時間を最適化に費やすことができます。 AOT のコンテキストはアプリケーション全体であるため、AOT コンパイラはモジュール間のリンクとプログラム全体の分析も実行します。これは、すべての参照が追跡されて、1 つの実行可能ファイルが生成されることを意味します。
「CoreRT」と「.NET Native」を参照してください。
ワークロード固有の API。 次に例をいくつか示します。
- .NET Aspire
- ASP.NET
- ASP.NET Web API
- Entity Framework (EF)
- Windows Presentation Foundation (WPF)
- Windows Communication Foundation (WCF)
- Windows Workflow Foundation (WF)
- Windows フォーム (WinForms)
.NET Framework に付属する元の ASP.NET 実装 (ASP.NET 4.x および ASP.NET Framework とも呼ばれます)。
ASP.NET は、元の ASP.NET と ASP.NET Core の両方を参照する包括的な用語である場合があります。 特定のインスタンスで用語が含まれる意味は、コンテキストによって決まります。 両方の実装を意味するために ASP.NET を使っているのではないことを明確にしたい場合は、ASP.NET 4.x を参照してください。
ASP.NET のドキュメントをご覧ください。
ASP.NET のクロスプラットフォームで高パフォーマンスなオープンソースの実装。
ASP.NET Core のドキュメントをご覧ください。
アプリケーションまたは他のアセンブリから呼び出すことができる API のコレクションを含む .dll または .exe ファイル。
アセンブリには、インターフェイス、クラス、構造体、列挙型、デリゲートなどの型が含まれています。 プロジェクトの bin フォルダー内のアセンブリは、"バイナリ" と呼ばれることもあります。 「ライブラリ」もご覧ください。
基本クラス ライブラリ。
System.* (および限られた範囲の Microsoft.*) 名前空間を構成する一連のライブラリ。 BCL は汎用の下位レベル フレームワークであり、ASP.NET Core などの上位レベル アプリケーション フレームワークはそれを基にして構築されています。
.NET の BCL のソース コードは、.NET ランタイム リポジトリに含まれています。 BCL API の大部分は、.NET Framework でも使用できるため、このソース コードは、.NET Framework BCL ソース コードが分岐したものと考えることができます。
次の用語は、多くの場合、BCL が参照するのと同じ API のコレクションを意味します。
共通言語ランタイム (Common Language Runtime)。
厳密な意味はコンテキストによって異なります。 共通言語ランタイムとは、通常、 .NET Framework のランタイム または .NET のランタイムを指します。
CLR によって、メモリの割り当てと管理が処理されます。 CLR は、アプリの実行だけでなく、JIT コンパイラを使って実行時にコードを生成してコンパイルする仮想マシンでもあります。
.NET Framework の CLR 実装は Windows のみです。
.NET の CLR 実装 (Core CLR とも呼ばれます) は、.NET Framework CLR と同じコード ベースからビルドされます。 当初は、Core CLR は Silverlight のランタイムであり、複数のプラットフォーム (特に Windows と OS X) で実行するように設計されていました。これはまだクロスプラットフォーム ランタイムですが、多くの Linux ディストリビューションのサポートが含まれるようになりました。
「ランタイム」も参照してください。
「CLR」を参照してください。
CLR とは異なり、CoreRT は仮想マシンではありません。つまり、JIT が含まれないため、実行時にコードを生成して実行する機能はありません。 ただし、GC およびランタイム型識別 (RTTI) とリフレクションの機能は備えています。 ただ、CoreRT の型システムはリフレクション用のメタデータが必要ないように設計されています。 メタデータが必要ないと、AOT ツール チェーンで余分なメタデータのリンクを削除し、(さらに重要なこととして) アプリが使っていないコードを特定することができます。 CoreRT は開発中です。
「CoreRT の概要」と「.NET ランタイム ラボ」を参照してください。
Linux、Windows、iOS など、複数の異なるオペレーティング システム上で使用できるアプリケーションを開発し、実行することができます。OS ごとに作成し直す必要はありません。 そのため、異なるプラットフォーム上のアプリケーション間でコードを再利用し、一貫性を保つことができます。
「プラットフォーム」を参照してください。
特定のテクノロジ用のアプリケーションを構築して実行するために使われるすべての実行時ソフトウェア、開発ツール、およびコミュニティ リソース。
".NET エコシステム" という用語は ".NET スタック" などの用語と似ていますが、サードパーティのアプリとライブラリを含む点が異なります。 文章での使用例を次に示します。
- ".NET Standard の背後にある意図は、.NET エコシステムの高度な統一性を確立することでした。"
一般に、特定のテクノロジに基づくアプリケーションの開発と展開を容易にする API の包括的なコレクション。 この一般的な意味でのアプリケーション フレームワークの例としては、ASP.NET Core や Windows フォームなどがあります。 フレームワークとライブラリは、同義語として使われることがよくあります。
以下の用語の "フレームワーク" という単語には、別の意味があります。
"フレームワーク" は、.NET の実装を意味する場合があります。
意味はコンテキストによって異なります。 .NET のフレームワーク ライブラリを参照する場合があります。その場合は、BCL が参照するのと同じライブラリを参照します。 また、BCL 上に構築され、Web アプリ用の追加 API を提供する ASP.NET Core フレームワーク ライブラリも参照できます。
ガベージ コレクター (Garbage Collector)。
ガベージ コレクターは、自動メモリ管理の実装です。 GC は、使われなくなったオブジェクトによって占有されているメモリを解放します。
「ガベージ コレクション」をご覧ください。
中間言語 (Intermediate Language)。
C# などの高レベル .NET 言語は、中間言語 (IL) と呼ばれるハードウェアに依存しない命令セットにコンパイルされます。 IL は、MSIL (Microsoft IL) や CIL (Common IL) などと呼ばれることもあります。
Just-In-Time コンパイラ。
AOT と同様に、このコンパイラは IL をプロセッサが理解するマシン コードに変換します。 AOT とは異なり、JIT のコンパイルはオンデマンドで行われ、コードを実行する必要があるコンピューター上で実行されます。 JIT コンパイルはアプリケーションの実行中に行われるため、コンパイル時間は実行時間の一部になります。 したがって、JIT コンパイラでは、コードの最適化に要する時間と、結果のコードによって得られる時間の節約のバランスを考える必要があります。 ただし、JIT は実際のハードウェアを認識するので、開発者はさまざまな実装を出荷する必要がなくなります。
.NET の実装には次のものが含まれます。
- 1 つまたは複数のランタイム。 次に例を示します。 CLR、CoreRT。
- .NET Standard のバージョンを実装し、追加の API を含めることができるクラス ライブラリ。 例: .NET Framework、.NET のBCL。
- 必要に応じて、1 つまたは複数のアプリケーション フレームワーク。 例: ASP.NET、Windows フォーム、WPF は、.NET Framework および .NET に含まれています。
- 必要に応じて、開発ツール。 一部の開発ツールは、複数の実装間で共有されます。
.NET の実装の例:
詳細については、「.NET 実装」を参照してください。
アプリまたは他のライブラリで呼び出すことができる API のコレクション。 .NET ライブラリは 1 つ以上のアセンブリで構成されます。
ライブラリとフレームワークは同義語として使われることがよくあります。
オープンソース、クロス プラットフォーム .NET 実装小規模なランタイムが必要な場合に使用されます。 これは、Android、Mac、iOS、tvOS、watchOS で Xamarin アプリケーションをサポートするランタイムであり、主に小さなフットプリントを必要とするアプリに重点を置いています。
現在公開されているすべての .NET Standard バージョンをサポートしています。
これまで Mono は .NET Framework の多数の API を実装し、Unix で人気の高い機能の一部をエミュレートしていました。 Unix 上でこれらの機能に依存する .NET アプリケーションを実行するために使用される場合があります。
一般的に Mono は、Just-In-Time コンパイラと共に使用されますが、iOS のようなプラットフォームに使用される完全な静的コンパイラ (Ahead Of Time コンパイル) としても機能します。
詳細については、Mono のドキュメントを参照してください。
アプリが自己完結型であり、発行時にネイティブ コード コンパイル 展開モード。 ネイティブ AOT アプリでは、実行時に JIT コンパイラは使用しません。 .NET ランタイムがインストールされていないマシンで実行できます。
詳細については、ネイティブ AOT のデプロイに関する説明を参照してください。
.NET には 2 つの意味があり、目的の意味はコンテキストによって異なります。
- .NET は、 .NET Standard およびすべての .NET 実装 ワークロードの総称として使用できます。
- .NET は、.NET Core と呼ばばれ、以前は .NET のクロスプラットフォームで高パフォーマンスのオープンソース実装を指す頻度が高くなります。 また、 .NET 5 (および .NET Core) 以降のバージョン または .NET 5 以降のとも呼ばれます。
たとえば、最初の意味は、".NET の実装" などの語句を意図しています。2 つ目の意味は、 .NET SDK .NET CLI などの名前。 最初の意味が意図されていることを示すコンテキストがない場合は、2 番目の意味が意図されていると仮定します。
以前のバージョンの .NET は、.NET Core 1 から 3.1 と呼ばれます。 バージョン番号は 4 をスキップし、3.1 に続くバージョンは .NET 5 と呼ばれ、名前から "Core" が削除されます。 "Core" の削除は、この .NET の実装がすべての新しい開発に推奨されることを強調するために行われました。 バージョン 4 のスキップは、.NET のこの新しい実装と、 .NET Framework と呼ばれる以前の実装の混乱を避けるために行われました。 .NET Framework の現在のバージョンは 4.8.1 です。
.NET は常にすべて大文字で表し、".Net" とは表記されません。
.NET のドキュメントを参照してください。
.NET のアプリケーションとライブラリを開発するためのクロスプラットフォーム ツールチェーン。 .NET Core CLI とも呼ばれます。
.NET CLI に関するページを参照してください。
「.NET」を参照してください。
Windows でのみ動作する .NET の実装。 共通言語ランタイム (CLR)、基本クラス ライブラリ (BCL)、および ASP.NET、Windows フォーム、WPF などのアプリケーション フレームワーク ライブラリが含まれます。
「.NET Framework ガイド」をご覧ください。
Just-In-Time (JIT) ではなく、Ahead Of Time (AOT) でネイティブ コードを生成するコンパイラ ツール チェーン。
コンパイルは、C++ のコンパイラやリンカーと同様に、開発者のコンピューターで行われます。 未使用のコードが削除され、より多くの時間がコードの最適化に費やされます。 ライブラリからコードを抽出し、実行可能ファイルにそれらをマージします。 結果は、アプリ全体を表す 1 つのモジュールです。
UWP は、.NET Native によってサポートされるアプリケーション フレームワークです。
.NET Native のドキュメントを参照してください。
開発者が .NET 用のアプリケーションとライブラリを作成できるようにする一連のライブラリとツール。 .NET Core SDK とも呼ばれます。
アプリ構築用の .NET CLI、アプリの構築および実行用の .NET ライブラリとランタイム、CLI コマンドとアプリケーションを実行する dotnet 実行可能ファイル (dotnet.exe) が含まれます。
.NET SDK の概要に関するページを参照してください。
.NET の各実装で使用可能な .NET API の正式な仕様。
.NET Standard の仕様は、ライブラリとも呼ばれます。 ライブラリには仕様 (インターフェイス) だけでなく API の実装も含まれるため、.NET Standard を "ライブラリ" と呼ぶのは誤解を招きます。
「.NET Standard」をご覧ください。
ネイティブ (イメージ) 生成。
このテクノロジは、永続的な JIT コンパイラと考えることができます。 通常はコードが実行されるコンピューター上でコードをコンパイルしますが、一般にコンパイルはインストール時に行われます。
NuGet パッケージ (または単にパッケージ) は、同じ名前の 1 つ以上のアセンブリと、作成者名などの追加のメタデータを含む、.zip ファイルです。
.zip ファイルには .nupkg 拡張子があり、複数のターゲット フレームワークバージョンで使用するために、.dll ファイルや.xml ファイルなどのアセットを含めることができます。 アプリまたはライブラリでインストールされるときに、アプリまたはライブラリで指定されているターゲット フレームワークに基づいて適切なアセットが選択されます。 インターフェイスを定義するアセットは ref フォルダーにあり、実装を定義するアセットは lib フォルダーにあります。
オペレーティング システムとそれが動作するハードウェア (Windows、macOS、Linux、iOS、Android)。
文章での使用例を次に示します。
- ".NET Core は、.NET のクロスプラットフォームの実装です。"
- "PCL プロファイルは Microsoft のプラットフォームを表し、.NET Standard はプラットフォームに依存しません。"
従来の .NET のドキュメントでは、.NET の実装、またはすべての実装を含む .NET スタックの意味で ".NET プラットフォーム" が使われることがあります。 これらの使用法はどちらも本来の (OS およびハードウェア) の意味と紛らわしい場合があるので、これらの使用法は避けるようにしています。
"開発者プラットフォーム" という語句の "プラットフォーム" には、別の意味があります。これは、アプリをビルドして実行するためのツールとライブラリを提供するソフトウェアを指します。 .NET は、さまざまな種類のアプリケーションをビルドするためのクロスプラットフォームでオープンソースの開発者プラットフォームです。
POCO (単純な従来の CLR オブジェクト) は、パブリック プロパティまたはフィールドのみを含む .NET データ構造です。 POCO には、次のような他のメンバーを含めることはできません。
- methods
- events
- デリゲート
これらのオブジェクトは、主にデータ転送オブジェクト (DTO) として使用されます。 純粋な POCO は別のオブジェクトを継承したり、インターフェイスを実装したりすることはありません。 POCO はシリアル化で使用するのが一般的です。
一般的には、マネージド プログラムの実行環境です。 OS は、ランタイム環境の一部ですが、.NET ランタイムの一部ではありません。 この単語の意味での .NET ランタイムの例をいくつか以下に示します。
- 共通言語ランタイム (CLR)
- .NET Native (UWP の場合)
- Mono ランタイム
一部のコンテキストでの "ランタイム" という単語には、別の意味があります。
.NET 5 のダウンロード ページの " .NET ランタイム"。
" .NET ランタイム" またはその他のランタイム ("ASP.NET Core ランタイム" など) をダウンロードできます。 この用法での "ランタイム" は、マシン上でフレームワークに依存するアプリを実行するためにマシンにインストールする必要があるコンポーネントのセットです。 .NET ランタイムには、CLR と .NET 共有フレームワークが含まれています。これにより、BCL が提供されます。
" .NET ランタイム ライブラリ"
BCL が意味するのと同じライブラリを意味します。 ただし、ASP.NET Core ランタイムなどの他のランタイムには、BCL 上に構築されたその他のライブラリと共に、異なる共有フレームワークがあります。
-
ここでの "ランタイム" は、.NET アプリが実行されている OS プラットフォームと CPU アーキテクチャを意味します (例:
linux-x64
)。 次の例に示すように、"ランタイム" は .NET の実装の意味で使用されることがあります。
- "さまざまな .NET ランタイムで、.NET Standard の特定のバージョンが実装されます。 … .NET ランタイムの各バージョンは、サポートしている .NET Standard の最高のバージョンをアドバタイズします …"
- "複数のランタイムで実行することを目的としたライブラリは、このフレームワークをターゲットとする必要があります。" (.NET Standard を指している場合)
意味はコンテキストによって異なります。 " .NET 共有フレームワーク" は、.NET ランタイムに含まれるライブラリを意味します。 この場合、.NET の共有フレームワークは、BCL が参照するのと同じライブラリを参照します。
共有フレームワークは他にもあります。 "ASP.NET Core 共有フレームワーク" は、ASP.NET Core ランタイムに含まれるライブラリを意味します。これには、BCL に加えて、Web アプリで使用される追加の API が含まれています。
フレームワークに依存するアプリの場合、共有フレームワークは、アプリを実行するマシンのフォルダーにインストールされたアセンブリに含まれているライブラリで構成されます。 自己完結型アプリの場合、共有フレームワーク アセンブリはアプリに含まれています。
詳細については、「Deep-dive into .NET Core primitives, part 2: the shared framework」(.NET Core プリミティブの詳細、パート 2: 共有フレームワーク) を参照してください。
全体としてアプリケーションの構築と実行に使われるプログラミング テクノロジのセット。
".NET スタック" は、.NET Standard および .NET のすべての実装を指します。 ".NET スタック" という語句は、.NET の 1 つの実装を参照できます。
.NET アプリまたはライブラリが依存する API のコレクション。
アプリまたはライブラリでは、.NET Standard の 1 つのバージョン (.NET Standard 2.0 など) をターゲットにできます。これは、.NET のすべての実装で標準化された API のセットの仕様です。 また、アプリまたはライブラリは、.NET の特定の実装のバージョンをターゲットにすることもでき、その場合は実装固有の API にアクセスできます。 たとえば、Xamarin.iOS をターゲットにするアプリは、Xamarin が提供する iOS API ラッパーにアクセスできます。
一部のターゲット フレームワーク (たとえば、 .NET Framework) では、使用可能な API は、.NET 実装がシステムにインストールするアセンブリによって定義されます。これには、アプリケーション フレームワーク API (ASP.NET、WinForms など) を含めることができます。 パッケージ ベースのターゲット フレームワークでは、フレームワーク API はアプリまたはライブラリでインストールされるパッケージによって定義されます。
「ターゲット フレームワーク」をご覧ください。
ターゲット フレームワーク モニカー (Target Framework Moniker)。
.NET アプリまたはライブラリのターゲット フレームワークを指定するための標準化されたトークン形式。 通常、ターゲット フレームワークは短い名前によって参照されます (net462
など)。 長い形式の TFM ( .NETFramework,Version=4.6.2
など) は存在しますが、一般的にターゲット フレームワークの指定には使用されません。
「ターゲット フレームワーク」をご覧ください。
ユニバーサル Windows プラットフォーム (Universal Windows Platform)。
モノのインターネット (IoT) のためにタッチ対応の Windows アプリケーションとソフトウェアを構築するために使われる .NET の実装。 PC、タブレット、スマートフォン、さらには Xbox など、ターゲットにしたいさまざまな種類のデバイスを統合するように設計されています。 UWP は、一元的なアプリ ストア、実行環境 (AppContainer)、Win32 の代わりに使う Windows API のセット (WinRT) など、多くのサービスを提供します。 アプリは、C++、C#、Visual Basic、および JavaScript で記述することができます。 C# と Visual Basic を使用する場合、.NET API は .NET によって提供されます。
誰かがビルドしているアプリの種類。 アプリ モデルよりも一般的です。 たとえば、このページを含むすべての .NET ドキュメント ページの上部には、 Workloads のドロップダウン リストがあります。これにより、 Web、 Mobile、 Cloud、 Cloud ネイティブ、 Desktop のドキュメントに切り替えることができます。
コンテキストによっては、"ワークロード" は、特定の種類のアプリをサポートするために、インストールできる Visual Studio 機能のコレクションを指します。 例については、「 Visual Studio ワークロードの構成」を参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。