.NET Core についてAbout .NET Core

.NET Core には次の特徴があります。.NET Core has the following characteristics:

  • クロスプラットフォーム: Windows、macOS、Linux のオペレーティング システムで実行されます。Cross-platform: Runs on Windows, macOS, and Linux operating systems.
  • アーキテクチャ全体で一貫性がある: x64、x86、ARM を含めた複数のアーキテクチャ上でコードが同じ動作で実行されます。Consistent across architectures: Runs your code with the same behavior on multiple architectures, including x64, x86, and ARM.
  • コマンドライン ツール: ローカル開発と継続的インテグレーションのシナリオで使用できる、使いやすいコマンドライン ツールが含まれます。Command-line tools: Includes easy-to-use command-line tools that can be used for local development and in continuous-integration scenarios.
  • 柔軟な展開: アプリに含めることも、横並びにインストールすること (ユーザー全体またはシステム全体のインストール) もできます。Flexible deployment: Can be included in your app or installed side-by-side (user-wide or system-wide installations). Docker コンテナーで使用できます。Can be used with Docker containers.
  • 互換性: .NET Core は、.NET Standard 経由で .NET Framework、Xamarin、Mono と互換性があります。Compatible: .NET Core is compatible with .NET Framework, Xamarin, and Mono, via .NET Standard.
  • オープン ソース: .NET Core プラットフォームはオープン ソースであり、MIT および Apache 2 ライセンスを使用します。Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. .NET Core は .NET Foundation プロジェクトです。.NET Core is a .NET Foundation project.
  • Microsoft によるサポート: .NET Core は、.NET Core サポートごとに Microsoft によってサポートされます。Supported by Microsoft: .NET Core is supported by Microsoft, per .NET Core Support.

言語Languages

.NET Core のアプリケーションとライブラリを記述するには、C#、Visual Basic および F# 言語を使用できます。C#, Visual Basic, and F# languages can be used to write applications and libraries for .NET Core. これらの言語は、任意のテキスト エディターまたは統合開発環境 (IDE) で使用できます。これには次のものが含まれます。These languages can be used in your favorite text editor or Integrated Development Environment (IDE), including:

この統合は、OmniSharp および Ionide プロジェクトの共同作成者によって、一部提供されています。This integration is provided, in part, by the contributors of the OmniSharp and Ionide projects.

APIAPIs

.NET Core は多くのシナリオに対応する API を公開しています。次のうちのいくつかを次に示します。.NET Core exposes APIs for many scenarios, a few of which follow:

.NET core では .NET Standard 仕様を実装することで .NET Framework や Mono の API との互換性を提供します。.NET Core provides compatibility with .NET Framework and Mono APIs by implementing the .NET Standard specification.

FrameworksFrameworks

.NET Core 上には、次のような複数のフレームワークが構築されています。Multiple frameworks have been built on top of .NET Core:

コンポジションComposition

.NET Core は、次の部分で構成されます。.NET Core is composed of the following parts:

  • 型システム、アセンブリ読み込み、ガベージ コレクター、ネイティブ相互運用機能、およびその他の基本的なサービスを提供する .NET Core ランタイムThe .NET Core runtime, which provides a type system, assembly loading, a garbage collector, native interop, and other basic services. .NET Core フレームワーク ライブラリはプリミティブ データ型、アプリ コンポジションの種類、および基本的なユーティリティを提供します。.NET Core framework libraries provide primitive data types, app composition types, and fundamental utilities.
  • Web アプリ、IoT アプリ、モバイル バックエンドなど、最新のクラウド ベースのインターネットに接続されているアプリケーションを構築するためのフレームワークを提供する ASP.NET ランタイムThe ASP.NET runtime, which provides a framework for building modern cloud-based internet connected applications, such as web apps, IoT apps, and mobile backends.
  • .NET Core 開発者エクスペリエンスを有効にする .NET Core CLI ツールと言語コンパイラ (Roslyn および F#)。The .NET Core CLI tools and language compilers (Roslyn and F#) that enable the .NET Core developer experience.
  • .NET Core アプリと CLI ツールの起動に使用する dotnet ツールThe dotnet tool, which is used to launch .NET Core apps and CLI tools. ランタイムの選択、ランタイムのホスト、アセンブリ読み込みポリシーの提供、アプリおよびツールの起動を行います。It selects the runtime and hosts the runtime, provides an assembly loading policy, and launches apps and tools.

これらのコンポーネントは、次の方法で配布されます。These components are distributed in the following ways:

  • .NET Core ランタイム - .NET Core のランタイムおよびフレームワーク ライブラリが含まれています。.NET Core Runtime -- includes the .NET Core runtime and framework libraries.
  • ASP.NET Core ランタイム - ASP.NET Core ランタイムおよび .NET Core のランタイムおよびフレームワーク ライブラリが含まれています。ASP.NET Core Runtime -- includes ASP.NET Core and .NET Core runtime and framework libraries.
  • .NET core SDK -- .NET CLI ツール、ASP.NET Core ランタイム、.NET Core ランタイムおよびフレームワークが含まれています。.NET Core SDK -- includes the .NET CLI Tools, ASP.NET Core runtime, and .NET Core runtime and framework.

ソースを開くOpen source

.NET Core はオープン ソース (MIT ライセンス) であり、2014 年に Microsoft によって .NET Foundation に提供されたものです。.NET Core is open source (MIT license) and was contributed to the .NET Foundation by Microsoft in 2014. 現在では、最もアクティブな .NET Foundation プロジェクトの 1 つとなっています。It's now one of the most active .NET Foundation projects. 個人、学術、商用などの目的で、個人および企業が使用できます。It can be used by individuals and companies, including for personal, academic, or commercial purposes. 複数の企業が、アプリ、ツール、新しいプラットフォーム、およびホスティング サービスの一部として .NET Core を使用しています。Multiple companies use .NET Core as part of apps, tools, new platforms, and hosting services. これらの企業の一部は、GitHub の .NET Core に多大な貢献をしており、.NET Foundation テクニカル ステアリング グループの一員として製品の方向性に関するガイダンスを提供しています。Some of these companies make significant contributions to .NET Core on GitHub and provide guidance on the product direction as part of the .NET Foundation Technical Steering Group.

適応できる設計Designed for adaptability

.NET Core は、その他の .NET 製品と比較すると非常に似ているがユニークな製品としてビルドされています。.NET Core has been built as a very similar but unique product compared to other .NET products. 新しいプラットフォームとワークロードに幅広く適応できるように設計されており、複数の OS および CPU ポートを使用できます (また、移植先が増える可能性があります)。It was designed to enable broad adaptability to new platforms and workloads and it has several OS and CPU ports available (and it may be ported to many more).

この製品は複数の部分に分割されており、さまざまな時間で新しいプラットフォームにさまざまな部分を適応させることができます。The product is broken into several pieces, enabling the various parts to be adapted to new platforms at different times. ランタイムとプラットフォーム固有の基本的なライブラリは、ユニットとして移植する必要があります。The runtime and platform-specific foundational libraries must be ported as a unit. プラットフォームに依存しないライブラリは、構造により、すべてのプラットフォームでそのまま機能します。Platform-agnostic libraries should work as-is on all platforms, by construction. 開発者の効率性を高めるために、プロジェクトではプラットフォーム固有の実装を低減する傾向にあり、その方向でアルゴリズムまたは API を完全または部分的に実装できる場合は、プラットフォームに依存しない C# コードが常に優先されます。There's a project bias towards reducing platform-specific implementations to increase developer efficiency, preferring platform-neutral C# code whenever an algorithm or API can be implemented in-full or in-part that way.

ユーザーから、複数のオペレーティング システムをサポートするには .NET Core をどのように実装すべきかという質問をよく受けます。People commonly ask how .NET Core is implemented in order to support multiple operating systems. 多いのは、個別の実装を行うのか、または条件付きコンパイルを使用するのかという質問です。They typically ask if there are separate implementations or if conditional compilation is used. どちらも正しいですが、条件付きコンパイルが特に好まれる傾向にあります。It's both, with a strong bias towards conditional compilation.

次の図に示すように、CoreFX の大部分は、すべてのプラットフォーム間で共有されているプラットフォームに依存しないコードです。You can see in the following chart that the vast majority of CoreFX is platform-neutral code that is shared across all platforms. プラットフォームに依存しないコードは、すべてのプラットフォームで使用される 1 つのポータブル アセンブリとして実装できます。Platform-neutral code can be implemented as a single portable assembly that is used on all platforms.

CoreFX:プラットフォームごとのコードの行

Windows 実装と Unix 実装はほぼ同じサイズです。Windows and Unix implementations are similar in size. CoreFX は、Microsoft.Win32.Registry などの Windows 専用の機能をいくつか実装しますが、Unix 専用の概念はまだあまり実装されていないので、Windows の実装の方が大きくなります。Windows has a larger implementation since CoreFX implements some Windows-only features, such as Microsoft.Win32.Registry but doesn't yet implement many Unix-only concepts. また、Linux 実装と macOS 実装の大部分は Unix 実装全体で共有されており、Linux 固有の実装と macOS 固有の実装はほぼ同じサイズです。You'll also see that the majority of the Linux and macOS implementations are shared across a Unix implementation, while the Linux and macOS-specific implementations are roughly similar in size.

.NET Core には、プラットフォーム固有のライブラリとプラットフォームに依存しないライブラリが混在しています。There's a mix of platform-specific and platform-neutral libraries in .NET Core. このパターンは次のいくつかの例に見られます。You can see the pattern in a few examples:

  • CoreCLR はプラットフォーム固有です。CoreCLR is platform-specific. メモリ マネージャーやスレッド スケジューラのような OS サブシステムの上に構築します。It builds on top of OS subsystems, like the memory manager and thread scheduler.
  • System.IOSystem.Security.Cryptography.Algorithms は、記憶域および暗号化 API が各 OS で異なるので、プラットフォーム固有です。System.IO and System.Security.Cryptography.Algorithms are platform-specific, given that storage and cryptography APIs are different on each OS.
  • System.CollectionsSystem.Linq は、データ構造上で作成および操作を行うので、プラットフォームに依存しません。System.Collections and System.Linq are platform-neutral, given that they create and operate over data structures.

その他の .NET 実装との比較Comparisons to other .NET implementations

.NET Core のサイズとシェイプは、既存の .NET 実装と比較するとよくわかります。It's probably easier to understand the size and shape of .NET Core by comparing it to existing .NET implementations.

.NET Framework との比較Comparison with .NET Framework

.NET は、最初に 2000 年に Microsoft によって発表され、進化してきました。.NET was first announced by Microsoft in 2000 and then evolved from there. .NET Framework はその後 20 年近くにわたり、Microsoft によって製造される主要な .NET 実装となっています。The .NET Framework has been the primary .NET implementation produced by Microsoft during that nearly two decade period.

.NET Core と .NET Framework の主な違いは、次のとおりです。The major differences between .NET Core and the .NET Framework:

  • アプリ モデル -- .NET Core は一部の .NET Framework アプリ モデルをサポートしていません。App-models -- .NET Core doesn't support all the .NET Framework app-models. 具体的には、ASP.NET Web フォームと ASP.NET MVC はサポートしませんが、ASP.NET Core MVC をサポートしています。In particular, it doesn't support ASP.NET Web Forms and ASP.NET MVC, but it supports ASP.NET Core MVC. また、.Net Core 3.0 以降、.NET Core は Windows 上の WPF と Windows フォームのみをサポートしています。And starting with .NET Core 3.0, .NET Core also supports WPF and Windows Forms on Windows only.
  • API -- .NET Core には、ファクタリングが異なる (アセンブリ名が異なる、型に対して公開されているメンバーが主要なケースで異なる) .NET Framework 基本クラス ライブラリの大規模なサブセットが含まれています。APIs -- .NET Core contains a large subset of .NET Framework Base Class Library, with a different factoring (assembly names are different; members exposed on types differ in key cases). 場合によっては、これらの違いにより、.NET Core へのポート ソースの変更が必要になることがあります。In some cases, these differences require changes to port source to .NET Core. 詳細については、.NET Portability Analyzer に関するページを参照してください。For more information, see The .NET Portability Analyzer. .NET Core は .NET Standard API 仕様を実装します。.NET Core implements the .NET Standard API specification.
  • サブシステム -- .NET Core は、より単純な実装とプログラミング モデルを目的として、.NET Framework 内のサブシステムのサブセットを実装します。Subsystems -- .NET Core implements a subset of the subsystems in the .NET Framework, with the goal of a simpler implementation and programming model. たとえば、コード アクセス セキュリティ (CAS) はサポートされていませんが、リフレクションはサポートされています。For example, Code Access Security (CAS) isn't supported, while reflection is supported.
  • プラットフォーム -- .NET Framework は Windows と Windows Server をサポートしており、.NET Core は macOS と Linux もサポートしています。Platforms -- The .NET Framework supports Windows and Windows Server while .NET Core also supports macOS and Linux.
  • オープン ソース -- .NET Core はオープン ソースであり、.NET Framework の読み取り専用のサブセットはオープン ソースです。Open Source -- .NET Core is open source, while a read-only subset of the .NET Framework is open source.

.NET Core はユニークな製品で、.NET Framework およびその他の .NET 実装とは大きな違いがありますが、ソースまたはバイナリの共有技術を使用してこれらの実装の間でコードを簡単に共有できます。While .NET Core is unique and has significant differences to the .NET Framework and other .NET implementations, it's straightforward to share code between these implementations, using either source or binary sharing techniques.

.NET Core は横並びのインストールに対応しており、そのランタイムは .NET Framework から完全に独立しているため、.NET Framework がインストールされているコンピューターに何の問題もなくインストールできます。Because .NET Core supports side-by-side installation and its runtime is completely independent of the .NET Framework, it can be installed on machines with .NET Framework installed without any issues.

Mono との比較Comparison with Mono

Mono は .NET の元のクロスプラットフォームです。Mono is the original cross-platform of .NET. .NET Framework のオープンソースの代替として始まり、iOS および Android デバイスが普及するにつれてモバイル デバイスをターゲットとするように移行してきました。It started out as an open-source alternative to .NET Framework and transitioned to targeting mobile devices as iOS and Android devices became popular. .NET Framework のコミュニティの複製として考えることができます。It can be thought of as a community clone of the .NET Framework. Mono プロジェクト チームは、互換性のある実装を提供するために、Microsoft によって発行されたオープン .NET standards (特に ECMA 335) に依存していました。The Mono project team relied on the open .NET standards (notably ECMA 335) published by Microsoft to provide a compatible implementation.

.NET Core と .NET Mono の主な違いは、次のとおりです。The major differences between .NET Core and Mono:

  • アプリモデル -- Mono は、Xamarin 製品を介して .NET Framework アプリモデル (たとえば、Windows フォーム) のサブセット、およびモバイル開発用のいくつかの追加のもの (たとえば、Xamarin.iOS) をサポートしています。App-models -- Mono supports a subset of the .NET Framework app-models (for example, Windows Forms) and some additional ones for mobile development (for example, Xamarin.iOS) through the Xamarin product. .NET Core では、Xamarin をサポートしていません。.NET Core doesn't support Xamarin.
  • API -- Mono は、.NET Framework API の大規模なサブセットをサポートしており、同じアセンブリ名およびファクタリングを使用します。APIs -- Mono supports a large subset of the .NET Framework APIs, using the same assembly names and factoring.
  • プラットフォーム -- Mono は、さまざまなプラットフォームおよび CPU をサポートしています。Platforms -- Mono supports many platforms and CPUs.
  • オープン ソース --Mono と .NET Core は両方とも MIT ライセンスを使用しており、.NET Foundation プロジェクトです。Open Source -- Mono and .NET Core both use the MIT license and are .NET Foundation projects.
  • フォーカス -- 近年、Mono はモバイル プラットフォームに重点を置いており、.NET Core はクラウドとデスクトップのワークロードを重視しています。Focus -- The primary focus of Mono in recent years is mobile platforms, while .NET Core is focused on cloud and desktop workloads.

将来The future

.NET 5 は .NET Core の次期リリースであり、プラットフォームの統合を表していることが発表されました。It was announced that .NET 5 will be the next release of .NET Core and represents a unification of the platform. このプロジェクトは、次のいくつかの主要な方法で .NET を改善することを目的としています。The project aims to improve .NET in a few key ways:

  • 共通のランタイム動作と開発者エクスペリエンスを備えた、あらゆる場所で使用できる 1 つの .NET ランタイムとフレームワークを生成します。Produce a single .NET runtime and framework that can be used everywhere and that has uniform runtime behaviors and developer experiences.
  • .Net Core、.NET Framework、Xamarin、Mono を最大限に活用して .NET の機能を拡張します。Expand the capabilities of .NET by taking the best of .NET Core, .NET Framework, Xamarin and Mono.
  • 開発者 (Microsoft とコミュニティ) が連携して取り組んで拡張し、すべてのシナリオを向上させることができる単一のコードベースから製品を構築します。Build that product out of a single code-base that developers (Microsoft and the community) can work on and expand together and that improves all scenarios.

.NET 5 向けの計画内容の詳細については、「Introducing .NET 5」(.NET 5 の概要) を参照してください。For more details about what's being planned for .NET 5, see Introducing .NET 5.