.NET アプリを発行する
ASP.NET Core を使用したアプリのコーディングは、HTML、CSS、JavaScript を使用した静的 Web サイトの設計とは異なります。 静的 Web サイトは、静的ファイルをサポートする任意の Web サーバーにデプロイできます。 Web サーバーは静的ファイルを処理する必要がありません。HTTP 経由でそれらを提供するだけです。 Web ブラウザーがリソースを要求すると、Web サーバーは単にファイルをブラウザーに送り返します。
一方、ASP.NET Core アプリは動的な Web アプリケーションです。 Web サーバー上でプログラムとして実行されます。 ユーザーの Web ブラウザーが Web サーバーに要求を送信すると、Web サーバーがアプリを実行して応答を生成し、Web サーバーが応答をブラウザーに返します。
.NET アプリの発行は、サーバーにデプロイするためにアプリを準備するプロセスです。 .NET アプリを発行するときは、アプリとその依存関係を、簡単にデプロイできるフォルダーにパッケージ化します。 発行されたアプリにソース コード ファイルは含まれませんが、コンパイル済みのアセンブリ (DLL)、構成ファイル、アプリに必要なその他の資産など、アプリの実行に必要なすべてのファイルが含まれます。 その後、アプリを Web サーバー、クラウド サービス、またはその他のホスティング環境にデプロイできます。
デプロイの種類
.NET アプリを発行する場合は、フレームワーク依存型と自己完結型の 2 種類のデプロイから選択できます。 選択するデプロイの種類は、アプリのパッケージ化とデプロイの方法に影響します。
フレームワークに依存する展開
フレームワーク依存型のデプロイには、アプリのファイルと依存関係のみが含まれます。 .NET ランタイムは含まれません。 代わりに、アプリを実行するにはターゲット マシンに .NET ランタイムがインストールされている必要があります。 この種類のデプロイは、.NET アプリの既定です。
独立型の展開
自己完結型のデプロイには、アプリのファイル、依存関係、.NET ランタイムが含まれます。 .NET ランタイムはアプリに含まれているため、アプリを実行するためにターゲット マシンに .NET ランタイムがインストールされている必要はありません。 ランタイムを含めると、自己完結型のデプロイはフレームワーク依存型のデプロイよりも大きくなりますが、移植性も高くなります。 また、同じマシン上で複数バージョンの .NET ランタイムをサイド バイ サイドで実行することも容易になります。
デプロイの種類の選択
選択するデプロイの種類は、アプリの要件とターゲット環境によって異なります。 デプロイの種類を選択する際は、次の要素を考慮してください。
デプロイの種類
長所
短所
フレームワーク依存
- 展開サイズが小さい
- デプロイ時間がより短い
- オペレーティング システムに関係なく、ターゲット マシンにインストールされている .NET ランタイムを使用する
- ターゲット マシンに .NET ランタイムをインストールする必要がある
- ターゲット マシンにインストールされている .NET ランタイムのバージョンを管理する必要がある
自己完結型
- ターゲット マシンに .NET ランタイムをインストールする必要はない
- 複数バージョンの .NET ソフトウェアをサイド バイ サイドで実行するのが容易になる
- デプロイ サイズがより大きい
- デプロイ時間が遅くなる
- .NET ランタイムの更新はアプリと一緒にデプロイする必要がある
アプリをデプロイする場所
アプリを発行したら、ASP.NET Core をサポートする任意の環境にデプロイできます。 いくつかの選択肢を次に示します。
Kestrel
既定では、ASP.NET Core アプリは、ASP.NET Core の組み込み Web サーバーである Kestrel で実行されます。 Kestrel はクロスプラットフォームであり、ハイ パフォーマンスを実現するために調整されています。 HTTPS、HTTP/2、HTTP/3、WebSocket など、最新のすべての Web サーバー機能がサポートされています。 また、カスタマイズ可能かつ拡張可能であるため、アプリのニーズに合わせて構成できます。 Kestrel は、ASP.NET Core アプリの推奨される Web サーバーです。
Kestrel は ASP.NET Core に組み込まれているため、Windows、macOS、Linux など、.NET を実行できる任意のマシンにアプリをデプロイできます。 Kestrel は単独でうまく機能しますが、Kestrel で実行されているアプリは、多くの場合、インターネット インフォメーション サービス (IIS)、Nginx、Apache などのリバース プロキシ サーバーの背後にデプロイされます。 リバース プロキシ サーバーはインターネットから受信した要求を処理し、それらを Kestrel に転送します。 これにより、負荷分散、キャッシュ、SSL ターミネーションなどのリバース プロキシ サーバーの機能を利用できます。
インターネット インフォメーション サービス (IIS)
Windows にデプロイする場合は、IIS で ASP.NET Core アプリをホストできます。 これを行うには、IIS 用の ASP.NET Core モジュールをインストールする必要があります。 このモジュールでは、IIS から Kestrel に要求が転送されて、アプリが実行されます。 これにより、プロセス管理、ログ、セキュリティなど、IIS の機能を利用できます。
Containers
コンテナー化された環境にデプロイする場合は、ASP.NET Core アプリを Docker コンテナーとしてパッケージ化できます。 これにより、Docker Desktop、Docker Enterprise、Kubernetes など、Docker をサポートする任意のコンテナー ランタイムでアプリを実行できます。 コンテナーは移植可能かつスケーラブルであるため、基になるオペレーティング システムに関係なく、Docker をサポートする任意のマシン上でアプリを実行できます。
Azure
Azure にデプロイする場合は、Azure App Service または Azure Container Apps で ASP.NET Core アプリをホストできます。 さまざまなツールを使用して、コマンド ラインからアプリを Azure に簡単にデプロイできます。 それらのツールを以下に示します。
- Visual Studio Code 用 Azure ツールの拡張機能
- Visual Studio
- Azure CLI
- Azure Developer CLI (azd)