.NET Core のガイド.NET Core Guide

Getting Started」 (概要) では、単純な .NET Core アプリケーションを作成する方法を学習できます。Check out the "Getting Started" tutorials to learn how to create a simple .NET Core application. 最初のアプリを、ほんの数分で起動および実行できます。It only takes a few minutes to get your first app up and running.

.NET Core は、GitHub で Microsoft および .NET コミュニティによって管理される一般的な開発プラットフォームです。.NET Core is a general purpose development platform maintained by Microsoft and the .NET community on GitHub. クロスプラットフォームであり、Windows、macOS、Linux をサポートし、デバイス、クラウド、および埋め込み/IoT シナリオで使用できます。It is cross-platform, supporting Windows, macOS and Linux, and can be used in device, cloud, and embedded/IoT scenarios.

.NET Core の典型的な特性は次のとおりです。The following characteristics best define .NET Core:

  • 柔軟な展開: アプリに含めることも、ユーザー全体またはコンピューター全体に side-by-side (横並び) にインストールすることもできます。Flexible deployment: Can be included in your app or installed side-by-side user- or machine-wide.
  • クロスプラットフォーム: Windows、macOS、Linux で実行され、他のオペレーティング システムに移植できます。Cross-platform: Runs on Windows, macOS and Linux; can be ported to other operating systems. サポートされるオペレーティング システム (OS)、CPU、およびアプリケーションのシナリオは Microsoft、その他の企業、および個人によって提供され、時間の経過に伴って増加します。The supported Operating Systems (OS), CPUs and application scenarios will grow over time, provided by Microsoft, other companies, and individuals.
  • コマンドライン ツール: 製品のすべてのシナリオは、コマンドラインで実行できます。Command-line tools: All product scenarios can be exercised at the command-line.
  • 互換性: .NET Core は、.NET 標準経由で .NET Framework、Xamarin、Mono と互換性があります。Compatible: .NET Core is compatible with .NET Framework, Xamarin and Mono, via the .NET Standard.
  • オープン ソース: .NET Core プラットフォームはオープン ソースであり、MIT および Apache 2 ライセンスを使用します。Open source: The .NET Core platform is open source, using MIT and Apache 2 licenses. ドキュメントは CC-BY 下でライセンス付与されています。Documentation is licensed under CC-BY. .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

コンポジションComposition

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

  • .NET ランタイム。型システム、アセンブリ読み込み、ガベージ コレクター、ネイティブ相互運用機能、およびその他の基本的なサービスを提供します。A .NET runtime, which provides a type system, assembly loading, a garbage collector, native interop and other basic services.
  • 一連のフレームワーク ライブラリ。プリミティブ データ型、アプリ コンポジションの種類、および基本的なユーティリティを提供します。A set of framework libraries, which provide primitive data types, app composition types and fundamental utilities.
  • SDK ツールのセットと言語コンパイラ (Roslyn および F#)。.NET Core SDK に含まれており、ベース開発者エクスペリエンスを有効にします。A set of SDK tools and language compilers (Roslyn and F#) that enable the base developer experience, available in the .NET Core SDK.
  • 'dotnet' アプリケ ホスト。 .NET Core アプリの起動に使用されます。The 'dotnet' app host, which is used to launch .NET Core apps. ランタイムの選択、ランタイムのホスト、アセンブリ読み込みポリシーの提供、およびアプリの起動を行います。It selects the runtime and hosts the runtime, provides an assembly loading policy and launches the app. 同じホストが、ほぼ同じ方法で SDK ツールの起動にも使用されます。The same host is also used to launch SDK tools in much the same way.

言語Languages

.NET Core のアプリケーションとライブラリを記述するには、C#、Visual Basic および F# 言語を使用できます。The C#, Visual Basic, and F# languages can be used to write applications and libraries for .NET Core. コンパイラは .NET Core 上で実行され、任意の実行場所で .NET Core 用の開発を可能にします。The compilers run on .NET Core, enabling you to develop for .NET Core anywhere it runs. 一般的に、コンパイラは直接使用せず、SDK ツールを使用して間接的に使用します。In general, you will not use the compilers directly, but indirectly using the SDK tools.

C#、Visual Basic および F# コンパイラと .NET Core ツールは、Visual Studio、Visual Studio Code、Sublime Text、Vim などの複数のテキスト エディターおよび IDE に統合されているか、または統合することができます。これにより、任意のコーディング環境および OS で .NET Core 開発を行うことができます。The C#, Visual Basic, and F# compilers and the .NET Core tools are or can be integrated into several text editors and IDEs, including Visual Studio, Visual Studio Code, Sublime Text and Vim, making .NET Core development an option in your favorite coding environment and OS. この統合は、一部は OmniSharp プロジェクトIonide の優れた要員によって提供されます。This integration is provided, in part, by the good folks of the OmniSharp project and Ionide.

.NET API と互換性.NET APIs and Compatibility

.NET Core は、.NET Framework 基本クラス ライブラリ (BCL) のレイヤーでは .NET Framework のクロスプラットフォーム バージョンとして考えることができます。.NET Core can be thought of as a cross-platform version of the .NET Framework, at the layer of the .NET Framework Base Class Libraries (BCL). これは .NET 標準仕様を実装します。It implements the .NET Standard specification. .NET Core は、.NET Framework または Mono/Xamarin で使用可能な API のサブセットを提供します。.NET Core provides a subset of the APIs that are available in the .NET Framework or Mono/Xamarin. 場合によっては、型は完全には実装されません (一部のメンバーが使用できないか、移動されています)。In some cases, types are not fully implemented (some members are not available or have been moved).

.NET Core API ロードマップの詳細については、「.NET Core Roadmap」 (.NET Core ロードマップ) を参照してください。Look at the .NET Core roadmap to learn more about the .NET Core API roadmap.

.NET 標準との関係Relationship to .NET Standard

.NET 標準は、開発者が各 .NET 実装で予想できる .NET API の一貫性のあるセットを表す API 仕様です。The .NET Standard is an API spec that describes the consistent set of .NET APIs that developers can expect in each .NET implementation. .NET 実装では、.NET 標準準拠と見なされるために、また、.NET 標準をターゲットとするライブラリをサポートするために、この仕様を実装する必要があります。.NET implementations need to implement this spec in order to be considered .NET Standard-compliant and to support libraries that target .NET Standard.

.NET Core は .NET 標準を実装します。したがって、.NET 標準ライブラリがサポートされます。.NET Core implements .NET Standard, and therefore supports .NET Standard libraries.

作業負荷Workloads

.NET Core 自体には 1 つのアプリケーション モデル (コンソール アプリ) が含まれており、ツール、ローカル サービス、およびテキストベースのゲームに便利です。By itself, .NET Core includes a single application model -- console apps -- which is useful for tools, local services and text-based games. 次のような機能を拡張するために、.NET Core の上に追加のアプリケーション モデルがビルドされています。Additional application models have been built on top of .NET Core to extend its functionality, such as:

オープン ソース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 is now one of the most active .NET Foundation projects. 個人、学術、商用などの目的で、個人および企業が自由に採用できます。It can be freely adopted 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.

取得Acquisition

.NET Core は、NuGet.org でのパッケージとスタンドアロンでの配布という 2 つの主な方法で配布されます。.NET Core is distributed in two main ways, as packages on NuGet.org and as standalone distributions.

分布Distributions

.NET Core は、「.NET Core Getting Started」 (.NET Core の概要) ページでダウンロードできます。You can download .NET Core at the .NET Core Getting Started page.

  • Microsoft .NET Core 配布には、CoreCLR ランタイム、関連付けられているライブラリ、コンソール アプリケーション ホスト、および dotnet アプリ ランチャーが含まれています。The Microsoft .NET Core distribution includes the CoreCLR runtime, associated libraries, a console application host and the dotnet app launcher. これは Microsoft.NETCore.App メタパッケージで記述されます。It is described by the Microsoft.NETCore.App metapackage.
  • Microsoft .NET Core SDK 配布には、.NET Core と、NuGet パッケージの復元およびアプリのコンパイルとビルドのためのツール セットが含まれています。The Microsoft .NET Core SDK distribution includes .NET Core and a set of tools for restoring NuGet packages and compiling and building apps.

通常、.NET Core 開発を開始するには、最初に .NET Core SDK をインストールします。Typically, you will first install the .NET Core SDK to get started with .NET Core development. 追加の .NET Core (たとえばプレリリース版) ビルドをインストールすることもできます。You may choose to install additional .NET Core (perhaps pre-release) builds.

パッケージPackages

  • .NET Core パッケージには、.NET Core ランタイムおよびライブラリ (参照アセンブリおよび実装) が含まれています。.NET Core Packages contain the .NET Core runtime and libraries (reference assemblies and implementations). たとえば、System.Net.Http です。For example, System.Net.Http.
  • .NET Core メタパッケージは、バージョン管理されたライブラリ パッケージの適切なセットを参照することで、さまざまなレイヤーおよびアプリモデルを記述します。.NET Core Metapackages describe various layers and app-models by referencing the appropriate set of versioned library packages.

アーキテクチャArchitecture

.NET Core は、クロスプラットフォーム .NET 実装です。.NET Core is a cross-platform .NET implementation. .NET Core に固有の主要なアーキテクチャの問題は、サポートされているプラットフォームでプラットフォーム固有の実装を提供することに関連します。The primary architectural concerns unique to .NET Core are related to providing platform-specific implementations for supported platforms.

環境Environments

.NET Core は、Microsoft Windows、macOS、Linux でサポートされています。.NET Core is supported by Microsoft on Windows, macOS and Linux. Linux 上で Microsoft は、Red Hat Enterprise Linux (RHEL) および Debian 配布ファミリで実行されている .NET Core を主にサポートしています。On Linux, Microsoft primarily supports .NET Core running on Red Hat Enterprise Linux (RHEL) and Debian distribution families.

現在、.NET Core は X64 CPU をサポートしています。.NET Core currently supports X64 CPUs. Windows では、X86 もサポートされています。On Windows, X86 is also supported. ARM64 および ARM32 は進行中です。ARM64 and ARM32 are in progress.

.NET Core Roadmap」 (.NET Core ロードマップ) は、ワークロードと OS および CPU の環境サポートと計画に関する詳細情報を提供します。The .NET Core Roadmap provides more detailed information on workload and OS and CPU environment support and plans.

他の企業やグループは、他のアプリの種類および環境に対して .NET Core をサポートする場合があります。Other companies or groups may support .NET Core for other app types and environment.

適応できる設計Designed for Adaptability

.NET Core は、その他の .NET 製品と非常に似ているがユニークな製品としてビルドされています。.NET Core has been built as a very similar but unique product relative to other .NET products. 新しいワークロード用に新しいコンパイラ ツールチェーンにより、新しいプラットフォームへの広範な適応性を可能にするように設計されています。It has been designed to enable broad adaptability to new platforms, for new workloads and with new compiler toolchains. 進行中の複数の OS および CPU ポートがあり、さらに多くの OS に移植できます。It has several OS and CPU ports in progress and may be ported to many more. 例として、LLVM コンパイラによる .NET Core のネイティブ コンパイルの初期プロトタイプである、LLILC プロジェクトがあります。An example is the LLILC project, which is an early prototype of native compilation for .NET Core via the LLVM compiler.

この製品は複数の部分に分割されており、さまざまなスケジュールで新しいプラットフォームにさまざまな部分を適応させることができます。The product is broken into several pieces, enabling the various parts to be adapted to new platforms on different schedules. ランタイムとプラットフォーム固有の基本的なライブラリは、ユニットとして移植する必要があります。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 is a project bias to 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 chart below 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 does not yet implement any Unix-only concepts. また、Linux 実装と macOS 実装の大部分は Unix 実装全体で共有されており、Linux 固有の実装と macOS 固有の実装はほぼ同じサイズです。You will 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 are a mix of platform-specific and platform-neutral libraries in .NET Core. このパターンは次のいくつかの例に見られます。You can see the pattern in a few examples:

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

.NET Core のサイズとシェイプは、既存の .NET 実装と比較するとよくわかります。It is perhaps easiest 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 はその後 15 年以上にわたり、Microsoft によって製造される主要な .NET 実装となっています。The .NET Framework has been the primary .NET implementation produced by Microsoft during that 15+ year span.

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

  • アプリモデル -- .NET Core は、すべての .NET Framework アプリモデルをサポートするわけではありません。その理由の 1 つは、それらの多くが WPF (DirectX の上にビルドされる) などの Windows テクノロジに基づいてビルドされることにあります。App-models -- .NET Core does not support all the .NET Framework app-models, in part because many of them are built on Windows technologies, such as WPF (built on top of DirectX). コンソールおよび ASP.NET Core アプリモデルは、.NET Core と .NET Framework の両方でサポートされています。The console and ASP.NET Core app-models are supported by both .NET Core and .NET Framework.
  • API -- .NET Core には、.NET Framework と同じ API の多くが含まれており (ただし、数はそれよりも少ない)、異なるファクタリングを使用します (アセンブリ名が異なります。主要なケースでは型シェイプが異なります)。APIs -- .NET Core contains many of the same, but fewer, APIs as the .NET Framework, and with a different factoring (assembly names are different; type shape differs in key cases). 現在、これらの違いにより、通常は .NET Core のポート ソースへの変更が必要となります。These differences currently typically require changes to port source to .NET Core. .NET Core は .NET 標準 API を実装します。この API は、時間の経過に伴って .NET Framework BCL API のより多くの部分を含めるようにサイズが増加します。.NET Core implements the .NET Standard API, which will grow to include more of the .NET Framework BCL API over time.
  • サブシステム -- .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) is not 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 is straightforward to share code, using either source or binary sharing techniques.

Mono との比較Comparison with Mono

Mono は、オリジナルのクロスプラットフォームおよびオープン ソースの .NET 実装であり、2004 年に登場しました。Mono is the original cross-platform and open source .NET implementation, first shipping in 2004. .NET Framework のコミュニティの複製として考えることができます。It can be thought of as a community clone of the .NET Framework. Mono プロジェクト チームは、互換性のある実装を提供するために、Microsoft によって発行されたオープン .NET 標準 (特に ECMA 335) に依存していました。The Mono project team relied on the open .NET standards (notably ECMA 335) published by Microsoft in order 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 example, Xamarin.iOS) through the Xamarin product. .NET Core はこれらをサポートしていません。.NET Core doesn't support these.
  • 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 workloads.