.NET とは何ですか? 概要

.NET は、さまざまな種類のアプリケーションを構築するための、無料でクロスプラットフォームのオープンソース開発者用プラットフォームです。 .NET は、多くの大規模アプリによって運用環境で使用される高パフォーマンス ランタイム上に構築されています。

クラウド アプリ

クロスプラットフォーム クライアント アプリ

Windows アプリ

その他のアプリの種類

特徴

.NET 機能を使用すると、開発者は信頼性の高いパフォーマンスの高いコードを生産的に記述できます。

.NET を使用する

.NET アプリとライブラリは、NET CLI や、Visual Studio のような統合開発環境 (IDE) を使用して、ソース コードとプロジェクト ファイルからビルドされます。

次の例は、最小限の .NET アプリです。

プロジェクト ファイル:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>
</Project>

ソース コード:

Console.WriteLine("Hello, World!");

アプリは、.NET CLI を使用してビルドして実行できます。

% dotnet run
Hello, World!

また、2 つの個別の手順としてビルドして実行することもできます。 次の例は、app という名前のアプリの場合です。

% dotnet build
% ./bin/Debug/net6.0/app 
Hello, World!

バイナリ ディストリビューション

  • .NET SDK -- アプリの開発、ビルド、テストのためのツール、ライブラリ、ランタイムのセット。
  • .NET ランタイム -- アプリを実行するためのランタイムとライブラリのセット。

.NET は次の場所からダウンロードできます。

無料かつオープン ソース。

.NET は無料のオープンソースであり、.NET Foundationプロジェクトです。 .NET は、Microsoft と GitHub コミュニティによっていくつかのリポジトリで管理されています。

.NET ソースとバイナリは MIT ライセンスでライセンスされています。 バイナリ ディストリビューションの場合、追加のライセンスが Windows で適用されます

サポート

Android、Apple、Linux、および Windows オペレーティングシステム上の .NET は Microsoft によってサポートされています。 Arm64、x64、x86 のアーキテクチャで使用できます。 また、macOS Rosetta 2 などのエミュレートされた環境でもサポートされています。

.NET の新しいバージョンは、毎年 11 月にリリースされます。 奇数年の .NET リリースは、Long-Term サポート (LTS) リリースであり、3 年間サポートされます。 偶数年のリリースは、Standard-Term サポート (STS) リリースであり、18 か月間サポートされます。 品質レベルや破壊的変更ポリシーなど、リリースに関するすべての面で同じです。 詳細については、「リリースとサポート」を参照してください。

Microsoft の .NET チームは、他の組織と協力して、さまざまな方法で .NET を配布およびサポートしています。

Red Hat Enterprise Linux (RHEL) 上の .NET は Red Hat によってサポートされています。

Tizen プラットフォーム上の .NET は Samsung によってサポートされています。

ランタイム

共通言語ランタイム (CLR) は、すべての .NET アプリが構築されている基盤です。 ランタイムの基本的な機能は次のとおりです。

  • ガベージ コレクション。
  • メモリの安全性とタイプ セーフ。
  • プログラミング言語の高度なサポート。
  • クロスプラットフォーム設計。

.NET は、"マネージド コード" ランタイムと呼ばれることがあります。 "マネージド" と呼ばれるのは、メモリ管理にガベージ コレクターを使用していること、タイプ セーフとメモリの安全性を強制していることが主な理由です。 CLR によって、メモリ、スレッド、例外など、さまざまなオペレーティング システムとハードウェアの概念が仮想化 (または抽象化) されます。

CLR は、当初からクロスプラットフォーム ランタイムになるように設計されました。 複数のオペレーティング システムとアーキテクチャに移植されてきました。 クロスプラットフォームの .NET コードは、通常、新しい環境で実行するために再コンパイルする必要はありません。 代わりに必要なのは、アプリを実行するために別のランタイムをインストールすることだけです。

このランタイムで、デバッガー用のさまざまな診断サービスと API、ダンプトレースのツール、監視を公開します。 監視の実装は、主に OpenTelemetry を中心に構築されており柔軟なアプリケーション監視とサイト信頼性エンジニアリング (SRE) を実現します。

ランタイムは、P/Invoke、値型、およびネイティブ/マネージド コード境界を越えて値を転送する機能の組み合わせにより、低レベルの C スタイルの相互運用機能を提供します。

Languages

ランタイムは、複数のプログラミング言語をサポートするように設計されています。 C#、F#、Visual Basic の言語は Microsoft によってサポートされ、コミュニティと共同で設計されています。

  • C# は、モダンなオブジェクト指向のタイプ セーフなプログラミング言語です。 C 言語ファミリーをルーツとしているため、C、C++、Java、JavaScript のプログラマーであればすぐに使いこなすことができます。

  • F# は、簡潔性、堅牢性、パフォーマンスの高いコードを書くための相互運用可能なプログラミング言語です。 F# プログラミングはデータ指向であり、コードでは関数を使用してデータを変換する必要があります。

  • Visual Basic では、通常の人間の言語に近い、より冗長な構文が使用されます。 プログラミング初心者にとっては、より習得しやすい言語といえます。

コンパイル

.NET アプリ (C# のような高度な言語で記述) は、中間言語 (IL) にコンパイルされます。 IL は、任意のオペレーティング システムまたはアーキテクチャでサポートできるコンパクトなコード形式です。 ほとんどの .NET アプリでは、複数の環境でサポートされている API が使用され、実行に必要なのは .NET ランタイムのみです。

CPU (Arm64 や x64 など) で実行するには、IL をネイティブ コードにコンパイルする必要があります。 .NET では、Ahead-Of-Time (AOT) と Just-In-Time (JIT) の両方のコンパイル モデルがサポートされています。

  • Android、macOS、Linux では、JIT コンパイルが既定であり、AOT は省略可能です (ReadyToRun の場合など)。
  • iOS では、AOT は必須です (シミュレーターで実行されている場合を除く)。
  • WebAssembly (Wasm) 環境では、AOT は必須です。

JIT の利点は、基盤となるオペレーティング システムとハードウェアごとに、所定の環境で CPU 命令と呼び出し規則に合わせてアプリを (変更なしで) コンパイルできることです。 また、品質レベルがより高いまたは低いコードをコンパイルして、起動と定常状態のスループット パフォーマンスを向上させることもできます。

AOT の利点は、最適なアプリ起動を提供し、(場合によっては) 配置を小さくできることです。 主な欠点は、(他のネイティブ コードと同じで) 個別の配置ターゲットごとにバイナリをビルドする必要があることです。 AOT コードは、一部のリフレクション パターンと互換性がありません。

ランタイム ライブラリ

.NET には、クラス ライブラリの包括的な標準セットがあります。 これらのライブラリによって、多くの汎用およびワークロード固有の型とユーティリティ機能の実装が提供されます。

.NET ランタイム ライブラリで定義されている型の例をいくつか以下に示します。

詳細については、「ランタイム ライブラリの概要」を参照してください。

NuGet パッケージ マネージャー

NuGet は、.NET のパケット マネージャーです。 これにより、開発者はコンパイル済みのバイナリを相互に共有できます。 NuGet.org は、コミュニティから多くの人気のあるパッケージを提供しています。

[ツール]

.NET SDK は、.NET アプリケーションを開発および実行するためのライブラリとツールのセットです。 これには、MSBuild ビルド エンジン、Roslyn (C# および Visual Basic) コンパイラ、F# コンパイラが含まれます。 ほとんどのコマンドは、dotnet コマンドを使用して実行されます。 CLI ツールは、ローカル開発と継続的インテグレーションに使用できます。

IDE の Visual Studio ファミリにより、.NET および C#、F#、Visual Basic 言語の優れたサポートが提供されます。

GitHub CodespacesGitHub セキュリティ機能は .NET をサポートしています。

ノートブック

.NET Interactive は、ユーザーが Web、マークダウン、ノートブック全体の対話型エクスペリエンスを作成できるようにする CLI ツールと API のグループです。

詳細については、次のリソースを参照してください。

CI/CD

MSBuild と .NET CLI は、次のようなさまざまな継続的インテグレーション ツールと環境で使用できます。

詳細については、「継続的インテグレーション (CI) 環境で .NET SDK を使用する」をご覧ください。

デプロイ モデル

.NET アプリは、次の 2 つの異なるモードで発行できます。

  • "自己完結型" アプリには、.NET ランタイムと依存ライブラリが含まれます。 単一ファイルまたは複数ファイルにできます。 そのアプリケーションのユーザーは、.NET ランタイムがインストールされていないコンピューター上でそれを実行することができます。 自己完結型アプリは、常に 1 つのオペレーティング システムとアーキテクチャ構成を対象としています。
  • "フレームワーク依存" アプリには、互換性のあるバージョンの .NET ランタイムが必要です。通常はグローバルにインストールされます。 フレームワーク依存アプリは、1 つのオペレーティング システムとアーキテクチャ構成に対して発行することも、サポートされているすべての構成を対象とする "移植可能" として発行することもできます。

.NET アプリは、既定でネイティブ実行可能ファイルを使用して起動されます。 実行可能ファイルは、オペレーティング システムとアーキテクチャ固有の両方です。 dotnet コマンドを使用してアプリを起動することもできます。

アプリは コンテナーに配置できます。 Microsoft は、さまざまなターゲット環境用のコンテナー イメージを提供しています。

.NET の歴史

2002 年に、Microsoft によって、Windows アプリを作成するための開発プラットフォームである .NET Framework がリリースされました。 現在、.NET Framework はバージョン 4.8 であり、引き続き Microsoft によって完全サポートされています。

2014 年に、Microsoft によって、.NET Framework のクロスプラットフォームのオープンソースの後継版として .NET Core が導入されました。 この新しい .NET の実装では、バージョン 3.1 までは .NET Core という名前が保持されていました。 .NET Core 3.1 の次のバージョンからは .NET 5 という名前になりました。

新しい .NET バージョンが年に 1 回リリースされ続けており、そのたびにメジャー バージョン番号が大きくなっています。 重要な新機能が含まれ、新しいシナリオが可能になることも多いです。

.NET エコシステム

.NET には複数のバリエーションがあり、それぞれ異なる種類のアプリがサポートされています。 複数のバリエーションがある理由には、歴史的なものと技術的なものがあります。

.NET の実装 (歴史順):

  • .NET Framework -- Windows と Windows Server の幅広い機能にアクセスできます。 また、Windows ベースのクラウド コンピューティングにも広く使用されます。 最初の .NET です。
  • Mono -- .NET Framework のクロスプラットフォーム実装。 最初のコミュニティおよびオープンソース .NET です。 Android、iOS、Wasm アプリに使用されます。
  • .NET (Core) -- .NET Framework との大幅な互換性を保ちながら、クラウド時代に向けて見直された、クロスプラットフォームでオープンソースの .NET 実装。 Linux、macOS、および Windows アプリに使用されます。

次のステップ