サーバー アプリ用 .NET と .NET Framework

サーバー側のアプリをビルドする際にサポートされる .NET 実装は、次の 2 つです。

実装 含まれているバージョン
.NET .NET Core 1.0 から 3.1、.NET 5、およびそれ以降のバージョンの .NET。
.NET Framework .NET Framework 1.0 から 4.8

この 2 つは多数の同じコンポーネントを共有しているため、両者でコードを共有できます。 ただし、2 つには基本的な違いがあり、どちらを選択するかは実行内容によって決まります。 この記事では、それぞれを使用するタイミングに関するガイダンスを提供します。

.NET は、次のような場合にお使いのサーバー アプリケーションで使用してください。

  • クロスプラット フォームが必要である。
  • マイクロサービスが対象である。
  • Docker コンテナーを使用している。
  • 高パフォーマンスでスケーラブルなシステムが必要である。
  • 1 つのアプリケーションに複数の .NET バージョンが必要である。

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

  • 現在、アプリで .NET Framework を使用している (移行ではなく拡張することをお勧めします)。
  • お使いのアプリで .NET で使用できないサードパーティ製のライブラリや NuGet パッケージを使用している。
  • .NET で使用できない .NET Framework テクノロジをアプリで使用している。
  • お使いのアプリで、.NET がサポートされていないプラットフォームを使用している。

.NET を選択するタイミング

以下のセクションでは、前述の .NET Framework を選択する理由について詳しく説明します。

クロスプラットフォームの必要性

Windows、Linux、macOS などの複数のプラットフォーム上で Web またはサービス アプリケーションを実行する必要がある場合は、.NET を使用します。

.NET により、前述のオペレーティング システムがご自分の開発ワークステーションとしてサポートされています。 Visual Studio では、Windows および macOS 用の統合開発環境 (IDE) が用意されています。 また、macOS、Linux、および Windows 上で動作する Visual Studio Code も使用できます。 Visual Studio Code により、.NET は IntelliSense、デバッグなどを含めサポートされています。 Sublime、Emacs、VI などのほとんどのサード パーティ製エディターは、.NET で使用することができます。 これらのサード パーティ製エディターでは、[Omnisharp](https://www.omnisharp.net/) を使用して、エディターを IntelliSense にします。 また、コード エディターの使用は避けて、サポートされているすべてのプラットフォームで利用可能な .NET CLI を直接使用することもできます。

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

マイクロサービス アーキテクチャでは、サービスの境界を越えて、複数のテクノロジを組み合わせて使用できます。 このテクノロジの組み合わせによって、他のマイクロサービスやサービスと連携する新しいマイクロサービスに .NET を段階的に採用することができます。 たとえば、.NET Framework、Java、Ruby などのモノリシックなテクノロジを使用して開発されたマイクロサービスまたはサービスを組み合わせることができます。

使用できるインフラストラクチャ プラットフォームは多数あります。 [Azure Service Fabric](https://azure.microsoft.com/services/service-fabric/) は、大規模で複雑なマイクロサービス システム向けに設計されています。 [Azure App Service](https://azure.microsoft.com/services/app-service/) は、ステートレス マイクロサービスに推奨されます。 「コンテナー」セクションで説明するように、Docker ベースのマイクロサービスの代替手段は、どのようなマイクロサービスのアプローチにも適しています。 .NET は、これらすべてのプラットフォームでサポートされるため、お使いのマイクロサービスをホストするのに最適です。

マイクロサービス アーキテクチャの詳細については、「[.NET マイクロサービス:コンテナー化された .NET アプリケーションのアーキテクチャ](../architecture/microservices/index.md)」を参照してください。

コンテナー

通常、コンテナーは、マイクロサービス アーキテクチャとともに使用されます。 コンテナーは、任意のアーキテクチャ パターンに従う Web アプリやサービスをコンテナー化するためにも使用できます。 .NET Framework は Windows コンテナーで使用できます。 .NET のモジュール性と軽量性はコンテナーに適しています。 コンテナーを作成して展開する場合、そのイメージのサイズは .NET Framework より .NET の方がはるかに小さくなります。 クロスプラットフォームであるため、Linux Docker コンテナーにサーバー アプリを展開することができます。

Docker コンテナーは、オンプレミスの Linux または Windows インフラストラクチャ、または Azure Kubernetes Service などのクラウド サービスでホストできます。 Azure Kubernetes Service は、コンテナーベースのアプリケーションの管理、調整、およびスケールをクラウドで行うことができます。

高パフォーマンスでスケーラブルなシステム

お使いのシステムに実現しうる最高のパフォーマンスとスケーラビリティが必要な場合、NET と ASP.NET Core があなたに最適な選択肢です。 ASP.NET Core は Windows Server および Linux 向けの高パフォーマンスなサーバー ランタイムであり、TechEmpower のベンチマークで高パフォーマンスの Web フレームワークとして上位に評価されています。

何百ものマイクロサービスが実行される可能性があるマイクロサービス アーキテクチャの場合は特に、パフォーマンスとスケーラビリティが重要です。 ASP.NET Core では、少数のサーバー/仮想マシン (VM) 数でシステムが動作します。 サーバーまたは VM が減るので、インフラストラクチャとホスティングにかかるコストを節約できます。

アプリケーション レベルでのサイド バイ サイドの .NET バージョン

複数バージョンの .NET に依存するアプリケーションをインストールする場合は、.NET をお勧めします。 この実装では、同じコンピューターに、異なるバージョンの .NET ランタイムをサイドバイサイド インストールすることがサポートされています。 サイド バイ サイド インストールを行うと、同じサーバー上で、それぞれ使用する .NET バージョンが異なる複数のサービスを実行できるようになります。 また、アプリケーションのアップグレードと IT 運用に関係するリスクとコストを軽減できます。

.NET Framework で、サイドバイサイド インストールはできません。 これは Windows のコンポーネントであり、1 台のコンピューターには同時に 1 つのバージョンしか存在させることができません。 .NET Framework の前のバージョンは、各バージョンに置き換えられます。 新しいバージョンの .NET Framework を対象とする新しいアプリをインストールすると、以前のバージョンが置き換えられてしまうために、そのコンピューターで実行されている既存のアプリが破損してしまう場合があります。

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

.NET は、新しいアプリケーションやアプリケーション パターンに大きな利益をもたらします。 ただし、.NET Framework は既存の多くのシナリオで一般的に選択されているため、すべてのサーバー アプリケーションで .NET Framework は .NET に置き換えられていません。

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

ほとんどの場合、お使いの既存のアプリケーションを .NET に移行する必要はありません。 .NET は、ASP.NET Core で新しい Web サービスを作成するなど、既存のアプリケーションを拡張するような場合に使用することをお勧めします。

.NET で使用できないサードパーティ製のライブラリや NuGet パッケージ

.NET Standard を使用すると、NET Core/5+ を含め、すべての .NET 実装間でコードを共有できます。 NET Standard 2.0 の互換モードを使用すると、.NET Standard および .NET プロジェクトで .NET Framework ライブラリを参照できます。 詳細については、「[.NET Framework ライブラリのサポート](whats-new/whats-new-in-dotnet-standard.md#support-for-net-framework-libraries)」を参照してください。

ライブラリまたは NuGet パッケージで、.NET Standard や .NET にないテクノロジが使用されている場合にのみ、.NET Framework は使用してください。

.NET で使用できない .NET Framework テクノロジ

一部の .NET Framework テクノロジは .NET では使用できません。 .NET にはない最も一般的なテクノロジを、以下に列挙します。

  • ASP.NET Web Forms アプリケーション: ASP.NET Web Forms は、.NET Framework でのみ使用できます。 ASP.NET Core は、ASP.NET Web Forms に使用できません。

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

  • ワークフローに関連するサービス: Windows Workflow Foundation (WF)、ワークフロー サービス (1 つのサービスに WCF と WF) および WCF Data Services (旧称: ADO.NET Data Services) は、NET Framework でのみ使用できます。

  • 言語のサポート: Visual Basic と F# は現在 .NET でサポートされていますが、サポートされないプロジェクトの種類もあります。 サポートされるプロジェクト テンプレートの一覧については、[dotnet new のテンプレート オプション](../core/tools/dotnet-new.md#arguments)に関するセクションを参照してください。

詳細については、.NET で使用できない .NET Framework テクノロジに関する記事を参照してください。

.NET がプラットフォームでサポートされない

Microsoft やサードパーティ製のプラットフォームの中には、.NET がサポートされていないものもあります。 一部の Azure サービスにより、.NET ではまだ使用できない SDK が提供されています。 そのような場合は、クライアント SDK の代わりに同等の REST API を使用できます。

関連項目