サーバー アプリ用 .NET Core と .NET Framework の選択Choosing between .NET Core and .NET Framework for server apps

.NET を使用してサーバー側のアプリケーションをビルドする場合に選択できるサポート対象の実装には、.NET Framework と .NET Core の 2 つがあります。There are two supported implementations for building server-side applications with .NET: .NET Framework and .NET Core. この 2 つは多数の同じコンポーネントを共有しているため、両者でコードを共有できます。Both share many of the same components and you can share code across the two. ただし、2 つには基本的な違いがあり、どちらを選択するかは実行内容によって決まります。However, there are fundamental differences between the two and your choice depends on what you want to accomplish. この記事では、それぞれを使用するタイミングに関するガイダンスを提供します。This article provides guidance on when to use each.

次のような場合、サーバー アプリケーションには .NET Core を使用します。Use .NET Core for your server application when:

  • クロスプラット フォームが必要である。You have cross-platform needs.
  • マイクロサービスが対象である。You are targeting microservices.
  • Docker コンテナーを使用している。You are using Docker containers.
  • 高パフォーマンスでスケーラブルなシステムが必要である。You need high-performance and scalable systems.
  • 1 つのアプリケーションに複数の .NET バージョンが必要である。You need side-by-side .NET versions per application.

次のような場合、サーバー アプリケーションには .NET Framework を使用します。Use .NET Framework for your server application when:

  • 現在、アプリで .NET Framework を使用している (移行ではなく拡張することをお勧めします)。Your app currently uses .NET Framework (recommendation is to extend instead of migrating).
  • アプリが .NET Core で使用できないサードパーティ製の .NET ライブラリや NuGet パッケージを使用している。Your app uses third-party .NET libraries or NuGet packages not available for .NET Core.
  • アプリで、.NET Core で使用できない .NET テクノロジを使用している。Your app uses .NET technologies that aren't available for .NET Core.
  • アプリで、.NET Core をサポートしていないプラットフォームを使用している。Your app uses a platform that doesn’t support .NET Core.

どのような場合に .NET Core を選択すべきかWhen to choose .NET Core

以下のセクションで、前述の .NET Core を選択する理由について詳しく説明します。The following sections give a more detailed explanation of the previously stated reasons for picking .NET Core.

クロスプラットフォームの必要性Cross-platform needs

複数のプラットフォーム (Windows、Linux、macOS ) で実行する必要があるアプリケーション (Web/サービス) の場合は、.NET Core を使用します。If your application (web/service) needs to run on multiple platforms (Windows, Linux, and macOS), use .NET Core.

.NET Core は、開発ワークステーションとして前述のオペレーティング システムをサポートしています。.NET Core supports the previously mentioned operating systems as your development workstation. Visual Studio では、Windows および macOS 用の統合開発環境 (IDE) が用意されています。Visual Studio provides an Integrated Development Environment (IDE) for Windows and macOS. また、macOS、Linux、および Windows 上で動作する Visual Studio Code も使用できます。You can also use Visual Studio Code, which runs on macOS, Linux, and Windows. Visual Studio Code は、IntelliSense、デバッグなどの .NET Core をサポートしています。Visual Studio Code supports .NET Core, including IntelliSense and debugging. Sublime、Emacs、VI など、ほとんどのサード パーティ製エディターは、.NET Core で動作します。Most third-party editors, such as Sublime, Emacs, and VI, work with .NET Core. これらのサード パーティ製エディターでは、Omnisharp を使用して、エディターを IntelliSense にします。These third-party editors get editor IntelliSense using Omnisharp. さらに、コード エディターをまったく使用せずに、サポートされているすべてのプラットフォームで利用可能な .NET Core CLI ツールを直接使用することもできます。You can also avoid any code editor and directly use the .NET Core CLI tools, available for all supported platforms.

マイクロサービス アーキテクチャMicroservices architecture

マイクロサービス アーキテクチャでは、サービスの境界を越えて、複数のテクノロジを組み合わせて使用できます。A microservices architecture allows a mix of technologies across a service boundary. このテクノロジの組み合わせによって、他のマイクロサービスやサービスと連携する新しいマイクロサービスに .NET Core を段階的に採用することができます。This technology mix enables a gradual embrace of .NET Core for new microservices that work with other microservices or services. たとえば、.NET Framework、Java、Ruby などのモノリシックなテクノロジを使用して開発されたマイクロサービスまたはサービスを組み合わせることができます。For example, you can mix microservices or services developed with .NET Framework, Java, Ruby, or other monolithic technologies.

使用できるインフラストラクチャ プラットフォームは多数あります。There are many infrastructure platforms available. Azure Service Fabric は、大規模で複雑なマイクロサービス システム向けに設計されています。Azure Service Fabric is designed for large and complex microservice systems. Azure App Service は、ステートレス マイクロサービスに推奨されます。Azure App Service is a good choice for stateless microservices. コンテナー」セクションで説明するように、Docker ベースのマイクロサービスの代替手段は、どのような種類のマイクロサービスのアプローチにも適しています。Microservices alternatives based on Docker fit any kind of microservices approach, as explained in the Containers section. これらすべてのプラットフォームでは .NET Core がサポートされるため、マイクロサービスをホストするには最適です。All these platforms support .NET Core and make them ideal for hosting your microservices.

マイクロサービス アーキテクチャの詳細については、「.NET Microservices:Architecture for Containerized .NET Applications」(.NET マイクロサービス: コンテナー化された .NET アプリケーションのアーキテクチャ) を参照してください。For more information about microservices architecture, see .NET Microservices. Architecture for Containerized .NET Applications.

コンテナーContainers

通常、コンテナーは、マイクロサービス アーキテクチャと組み合わせて使用されます。Containers are commonly used in conjunction with a microservices architecture. コンテナーは、任意のアーキテクチャ パターンに従う Web アプリやサービスをコンテナー化するためにも使用できます。Containers can also be used to containerize web apps or services that follow any architectural pattern. Windows コンテナーで .NET Framework を使用できますが、モジュール方式で軽量である .NET Core はコンテナーに適しています。.NET Framework can be used on Windows containers, but the modularity and lightweight nature of .NET Core makes it a better choice for containers. コンテナーを作成して展開する場合、そのイメージのサイズは .NET Framework より .NET Core の方がはるかに小さくなります。When creating and deploying a container, the size of its image is much smaller with .NET Core than with .NET Framework. また、クロスプラットフォームであるため、Linux Docker コンテナーなどにサーバー アプリを展開することができます。Because it's cross-platform, you can deploy server apps to Linux Docker containers, for example.

Docker コンテナーは、オンプレミスの Linux または Windows インフラストラクチャ、または Azure Kubernetes Service などのクラウド サービスでホストできます。Docker containers can be hosted in your own Linux or Windows infrastructure, or in a cloud service such as Azure Kubernetes Service. Azure Kubernetes Service は、コンテナーベースのアプリケーションの管理、調整、およびスケールをクラウドで行うことができます。Azure Kubernetes Service can manage, orchestrate, and scale container-based applications in the cloud.

高パフォーマンスでスケーラブルなシステムの必要性A need for high-performance and scalable systems

システムで考えられる最高のパフォーマンスとスケーラビリティが必要な場合、NET Core と ASP.NET Core が最適です。When your system needs the best possible performance and scalability, .NET Core and ASP.NET Core are your best options. .NET は Windows Server および Linux 向けの高パフォーマンスなサーバー ランタイムであり、TechEmpower のベンチマークで高パフォーマンスの Web フレームワークとして上位に評価されました。High-performance server runtime for Windows Server and Linux makes .NET a top performing web framework on TechEmpower benchmarks.

何百ものマイクロサービスが実行される可能性があるマイクロサービス アーキテクチャの場合は特に、パフォーマンスとスケーラビリティが重要です。Performance and scalability are especially relevant for microservices architectures, where hundreds of microservices may be running. ASP.NET Core では、少数のサーバー/仮想マシン (VM) 数でシステムが動作します。With ASP.NET Core, systems run with a much lower number of servers/Virtual Machines (VM). サーバー/VM が減るので、インフラストラクチャとホスティングにかかるコストを節約できます。The reduced servers/VMs save costs in infrastructure and hosting.

アプリケーション レベルごとに異なる .NET バージョンの必要性A need for side by side of .NET versions per application level

複数バージョンの .NET に依存するアプリケーションをインストールする場合は、.NET Core をお勧めします。To install applications with dependencies on different versions of .NET, we recommend .NET Core. .NET Core では、同じコンピューター上で、複数バージョンの .NET Core ランタイムのサイド バイ サイド インストールを利用できます。.NET Core offers side-by-side installation of different versions of the .NET Core runtime on the same machine. サイド バイ サイド インストールによって、同じサーバー上で、使用する .NET Core バージョンが異なる複数のサービスを実行できるようになります。This side-by-side installation allows multiple services on the same server, each of them on its own version of .NET Core. また、アプリケーションのアップグレードと IT 運用に関係するリスクとコストを軽減できます。It also lowers risks and saves money in application upgrades and IT operations.

どのような場合に .NET Framework を選択すべきかWhen to choose .NET Framework

新しいアプリケーションやアプリケーション パターンの場合は特に .NET Core の利点があります。.NET Core offers significant benefits for new applications and application patterns. ただし、既存の多くのシナリオでは .NET Framework が一般的に選択されているため、すべてのサーバー アプリケーションで .NET Framework を .NET Core で置き換えることはできません。However, the .NET Framework continues to be the natural choice for many existing scenarios and as such the .NET Framework isn't replaced by .NET Core for all server applications.

現在の .NET Framework アプリケーションCurrent .NET Framework applications

ほとんどの場合、既存のアプリケーションを .NET Core に移行する必要はありません。In most cases, you don’t need to migrate your existing applications to .NET Core. ASP.NET Core で新しい Web サービスを作成するなど、既存のアプリケーションを拡張する際には、代わりに .NET Core を使用することをお勧めします。Instead, a recommended approach is to use .NET Core as you extend an existing application, such as writing a new web service in ASP.NET Core.

.NET Core で使用できないサードパーティ製の .NET ライブラリや NuGet パッケージを使用する必要性A need to use third-party .NET libraries or NuGet packages not available for .NET Core

ライブラリは、短期間で .NET Standard を採用しています。Libraries are quickly embracing .NET Standard. .NET Standard を使用すると、.NET Core を含め、すべての .NET 実装全体でコードを共有できます。.NET Standard enables sharing code across all .NET implementations including .NET Core. .NET Standard 2.0 を使用すれば、さらに簡単です。With .NET Standard 2.0, this is even easier:

  • API サーフェスがはるかに大きくなりました。The API surface became much larger.
  • .NET Framework 互換モードが導入されました。Introduced a .NET Framework compatibility mode. この互換モードにより、.NET Standard/.NET Core プロジェクトは .NET Framework ライブラリを参照できます。This compatibility mode allows .NET Standard/.NET Core projects to reference .NET Framework libraries. 互換モードの詳細については、「Announcing .NET Standard 2.0」(.NET Standard 2.0 のお知らせ) を参照してください。To learn more about the compatibility mode, see Announcing .NET Standard 2.0.

そのため、ライブラリまたは NuGet パッケージが、.NET Standard/.NET Core で使用できないテクノロジを使用している場合にのみ、.NET Framework を使用する必要があります。So only in cases where the libraries or NuGet packages use technologies that aren't available in .NET Standard/.NET Core, you need to use the .NET Framework.

.NET Core で使用できない .NET テクノロジを使用する必要性A need to use .NET technologies not available for .NET Core

一部の .NET Framework テクノロジは .NET Core では使用できません。Some .NET Framework technologies aren't available in .NET Core. その一部は、.NET Core の今後のリリースで使用できるようになる可能性があります。Some of them might be available in later .NET Core releases. それ以外は .NET Core の対象となる新しいアプリケーション パターンには適用されず、使用可能にならない可能性があります。Others don’t apply to the new application patterns targeted by .NET Core and may never be available. .NET Core にはない最も一般的なテクノロジを、以下のリストに示します。The following list shows the most common technologies not found in .NET Core:

  • ASP.NET Web フォーム アプリケーション:ASP.NET Web フォームは、.NET Framework でのみ使用できます。ASP.NET Web Forms applications: ASP.NET Web Forms are only available in the .NET Framework. ASP.NET Core は、ASP.NET Web フォームに使用できません。ASP.NET Core cannot be used for ASP.NET Web Forms. ASP.NET Web フォームが .NET Core で使用できるようになる予定はありません。There are no plans to bring ASP.NET Web Forms to .NET Core.

  • ASP.NET Web ページ アプリケーション:ASP.NET Web ページは、ASP.NET Core に含まれていません。ASP.NET Web Pages applications: ASP.NET Web Pages aren't included in ASP.NET Core.

  • WCF サービスの実装。WCF services implementation. 現在のところ、.NET Core から WCF サービスを利用する WCF クライアント ライブラリがある場合でも、WCF サーバーの実装は .NET Framework でのみ可能です。Even when there’s a WCF-Client library to consume WCF services from .NET Core, WCF server implementation is currently only available in the .NET Framework. このシナリオは .NET Core の現在の計画に含まれていませんが、将来に向けて検討中です。This scenario is not part of the current plan for .NET Core but it’s being considered for the future.

  • ワークフローに関連するサービス:.Windows Workflow Foundation (WF)、ワークフロー サービス (1 つのサービスに WCF と WF) および WCF Data Services (旧称: "ADO.NET Data Services") は、NET Framework でのみ使用できます。Workflow-related services: Windows Workflow Foundation (WF), Workflow Services (WCF + WF in a single service) and WCF Data Services (formerly known as "ADO.NET Data Services") are only available in the .NET Framework. WF/WCF+WF/WCF Data Services を .NET Core に導入する予定はありません。There are no plans to bring WF/WCF+WF/WCF Data Services to .NET Core.

  • 言語のサポート:Visual Basic と F# は現在 .NET Core でサポートされていますが、サポートされないプロジェクトの種類もあります。Language support: Visual Basic and F# are currently supported in .NET Core, but not for all project types. サポートされるプロジェクト テンプレートの一覧については、dotnet new のテンプレート オプションに関するセクションを参照してください。For a list of supported project templates, see Template options for dotnet new.

公式のロードマップに加え、.NET Core に移植される予定のフレームワークが他にもあります。In addition to the official roadmap, there are other frameworks to be ported to .NET Core. 詳細な一覧については、port-to-core とマークされている CoreFX の論点を参照してください。For a full list, see the CoreFX issues marked as port-to-core. この一覧は、Microsoft がそれらのコンポーネントを .NET Core に導入する予定ではありません。This list doesn’t represent a commitment from Microsoft to bring those components to .NET Core. 単に、コミュニティからの希望をまとめたものです。They're simply capturing the desire from the community to do so. port-to-core とマークされているいずれかのコンポーネントに関心がある場合は、GitHub のディスカッションに参加してください。If you care about any of the components marked as port-to-core, participate in the discussions on GitHub. また、一覧に欠けている点があるとお考えの場合は、CoreFX リポジトリに登録してください。And if you think something is missing, file a new issue in the CoreFX repository.

.NET Core をサポートしていないプラットフォームを使用する必要性A need to use a platform that doesn’t support .NET Core

Microsoft やサードパーティ製のプラットフォームの中には、.NET Core をサポートしないものもあります。Some Microsoft or third-party platforms don’t support .NET Core. 一部の Azure サービスでは、.NET Core ではまだ使用できない SDK が提供されます。Some Azure services provide an SDK not yet available for consumption on .NET Core. すべての Azure サービスでは .NET Core を使用しているために、これは過渡的な状況です。This is a transitional circumstance, as all of Azure services use .NET Core. その間、クライアント SDK の代わりに同等の REST API をいつでも使用できます。In the meantime, you can always use the equivalent REST API instead of the client SDK.

関連項目See also