.NET の概要

.NET は、さまざまな種類のアプリケーションを構築するための、無料でクロスプラットフォームのオープンソース開発者用プラットフォームです。 複数の言語で記述されたプログラムを実行でき、最も一般的なものは C# です。 それは、多くの大規模アプリによって運用環境で使われる高パフォーマンスのランタイムに依存しています。

.NET をダウンロードし、初めてのアプリの作成を始める方法については、作業の開始に関する記事をご覧ください。

.NET プラットフォームは、生産性、パフォーマンス、セキュリティ、信頼性を提供するように設計されています。 ガベージ コレクター (GC) を介した自動メモリ管理が用意されています。 GC と厳密な言語コンパイラを使っているため、タイプ セーフかつメモリ セーフです。 async/await および Task プリミティブにより、コンカレンシーを提供します。 広範な機能を備え、複数のオペレーティング システムとチップ アーキテクチャでのパフォーマンス用に最適化されたライブラリの大きなセットが含まれています。

.NET には、次の設計ポイントがあります。

  • ランタイム、ライブラリ、言語、ツールを備えたフルスタックの生産性であり、そのすべてが開発者のユーザー エクスペリエンスに貢献します。
  • セーフ コードが基本的なコンピューティング モデルですが、アンセーフ コードを使うと手動で最適化できる範囲が広がります。
  • 静的コードと動的コードの両方がサポートされているため、多くのさまざまなシナリオが可能になります。
  • ネイティブ コードの相互運用とハードウェア組み込み関数は、低コストで高忠実 (生の API と命令のアクセス) です。
  • コードはプラットフォーム間で移植可能 (OS とチップ アーキテクチャ) ですが、特定のプラットフォームをターゲットにすると特殊化と最適化が可能になります。
  • 汎用プログラミング モデルの特殊な実装により、プログラミング ドメイン間の適応性 (クラウド、クライアント、ゲーム) が有効になります。
  • OpenTelemetry や gRPC などの業界標準が、特注ソリューションより優先されます。

.NET は、Microsoft とコミュニティによって管理されています。 ユーザーがセキュリティで保護された信頼性の高いアプリケーションを運用環境に展開できるように、定期的に更新されます。

コンポーネント

.NET には、次のコンポーネントが含まれています。

  • ランタイム -- アプリケーションのコードを実行します。
  • ライブラリ -- JSON 解析などのユーティリティ機能を提供します。
  • コンパイラ -- C# (および他の言語) のソース コードを (ランタイム) 実行可能コードにコンパイルします。
  • SDK とその他のツール - 最新のワークフローでアプリを構築および監視できるようにします。
  • アプリ スタック -- ASP.NET Core や Windows フォームなどで、アプリを作成できるようにします。

ランタイム、ライブラリ、言語が、.NET スタックの柱です。 .NET ツールなどの上位レベルのコンポーネントや、ASP.NET Core などのアプリ スタックは、これらの柱の上に構築されています。 C# は .NET 用の主要なプログラミング言語であり、.NET の多くは C# で記述されています。

C# はオブジェクト指向であり、ランタイムはオブジェクト指向をサポートします。 C# にはガベージ コレクションが必要であり、ランタイムがトレース ガベージ コレクターを提供します。 ライブラリ (およびアプリ スタック) によってそれらの機能から形成される概念とオブジェクト モデルを使うことで、開発者は直感的なワークフローでアルゴリズムを生産的に記述できます。

コア ライブラリでは何千もの型が公開されており、その多くは C# 言語と統合されて機能を提供します。 たとえば、C# の foreach ステートメントを使うと、任意のコレクションを列挙できます。 パターン ベースの最適化により、List<T> などのコレクションを簡単かつ効率的に処理できます。 リソース管理はガベージ コレクションに任せることができますが、プロンプトのクリーンアップは using ステートメントでの IDisposable と直接言語のサポートを使って行うことができます。

複数の処理の同時実行のサポートは、実質的にすべてのワークロードの基本です。 UI の応答性を維持しながらバックグラウンド処理を行うクライアント アプリケーション、何千もの同時要求を処理するサービス、多数の同時刺激に応答するデバイス、コンピューティング集中型操作の処理を並列化する高性能コンピューターなどです。 非同期プログラミングのサポートは、C# プログラミング言語の優れた機能であり、それによって提供される asyncawait キーワードを使うと、非同期操作を簡単に記述および作成しながら、言語が提供するすべての制御フロー コンストラクトの利点を変わらずに完全に利用できます。

型システムによって提供される幅広い機能は、安全性、説明性、ダイナミズム、ネイティブ相互運用にある程度等しく対応します。 まず第一に、型システムはオブジェクト指向プログラミング モデルを可能にします。 型、(単一の基底クラスの) 継承、インターフェイス (既定のメソッド実装を含む)、仮想メソッド ディスパッチが含まれており、オブジェクト指向で可能なすべての型レイヤーに適切な動作を提供します。 ジェネリック型は、クラスを 1 つ以上の型に特化できる広範な機能です。

.NET ランタイムには、ガベージ コレクターを介した自動メモリ管理が用意されています。 どのような言語でも、そのメモリ管理モデルはおそらく、その言語の特徴を最もよく表すものです。 これは、.NET 言語にも当てはまります。 .NET は、自己調整式のトレース GC を備えています。 これは、一般的なケースでは "ユーザーの介入を必要としない" 操作を提供し、さらに極端なワークロードに対しては構成オプションを提供することを目的としています。 現在の GC は、長年にわたる投資と、多数のワークロードからの学習の結果です。

.NET の GC によって管理される型とは対照的に、値の型とスタック割り当てメモリ ブロックでは、データとネイティブ プラットフォームの相互運用に対し、さらに直接的で低レベルの制御が提供されます。 整数型のような .NET のほとんどのプリミティブ型は値の型であり、ユーザーは同様のセマンティクスで独自の型を定義できます。 値の型は、.NET のジェネリック システムによって完全にサポートされています。つまり、List<T> などのジェネリック型は、値の型のコレクションのフラットでオーバーヘッドのないメモリ表現を提供できます。

リフレクションは "データとしてのプログラム" パラダイムであり、アセンブリ、型、メンバーに関して、プログラムの 1 つの部分から別の部分のクエリや呼び出しを動的に実行できます。 これは、遅延バインドされたプログラミング モデルとツールの場合に特に役立ちます。

例外は、.NET の主要なエラー処理モデルです。 例外には、エラー情報をメソッドのシグネチャで表したり、すべてのメソッドで処理したりする必要がないという利点があります。 アプリケーションの信頼性には、適切な例外処理が不可欠です。 アプリがクラッシュするのを防ぐには、予期される例外をコードで意図的に処理できます。 クラッシュするアプリは、定義されていない動作を示すアプリより信頼性が高く、診断が容易です。

ASP.NET Core や Windows フォームなどのアプリ スタックは、低レベルのライブラリ、言語、ランタイムを基に構築され、それらを利用します。 アプリ スタックでは、アプリの構築方法と実行のライフサイクルが定義されています。

SDK や他のツールを使うと、開発者のデスクトップと継続的インテグレーション (CI) の両方で、最新の開発者エクスペリエンスを実現できます。 最新の開発者エクスペリエンスには、コードをビルド、分析、テストできる機能が含まれます。 .NET プロジェクトは、多くの場合、NuGet パッケージの復元と依存関係の構築を調整する 1 つの dotnet build コマンドでビルドできます。

NuGet は、.NET のパケット マネージャーです。 これには、多くのシナリオのための機能を実装する数十万のパッケージが含まれています。 アプリの大部分は、何らかの機能を NuGet パッケージに依存しています。 NuGet ギャラリーは、Microsoft によって管理されています。

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

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

.NET ソースとバイナリは MIT ライセンスでライセンスされています。 Windows では、追加のライセンスが適用されます

サポート

.NET は複数の組織によってサポートされており、それらが連携して、.NET を複数のオペレーティング システムで実行できるようにし、最新の状態に保っています。 Arm64、x64、x86 のアーキテクチャで使用できます。

.NET の新しいバージョンは、リリースとサポートのポリシーに従って、毎年 11 月にリリースされます。 Patch Tuesday (第 2 火曜日) に毎月更新されます (通常、太平洋標準時の午前 10 時)。

.NET エコシステム

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

.NET の実装:

  • .NET Framework - 初代の .NET。 Windows と Windows Server の幅広い機能にアクセスできます。 これは、メインテナントで積極的にサポートされています。
  • Mono -- コミュニティおよびオープンソースの最初の .NET。 .NET Framework のクロスプラットフォーム実装。 Android、iOS、WebAssembly 向けに積極的にサポートされています。
  • .NET (Core) -- 最新の .NET。 .NET Framework との大幅な互換性を保ちながら、クラウド時代に向けて見直された、クロスプラットフォームでオープンソースの .NET 実装。 Linux、macOS、Windows 向けに積極的にサポートされています。

次のステップ