# C# の起動プロファイル

<Image
  src={dotnetIcon}
  alt=".NET ロゴ"
  width={100}
  height={100}
  class:list={'float-inline-left icon'}
  data-zoom-off
/>

Aspire は、AppHost とサービス プロジェクトの両方で定義された _起動プロファイル_ を活用して、Aspire ベースの分散アプリケーションにおけるデバッグと公開の体験に関する複数の側面の構成を簡素化します。

:::note
この記事は、`launchSettings.json` を使用する C# AppHost と .NET サービス プロジェクトに適用されます。TypeScript AppHost では、代わりに `aspire.config.json` でプロファイルを定義します。詳細は、[AppHost 構成](/ja/app-host/configuration/) と [TypeScript AppHost のプロジェクト構造](/ja/app-host/typescript-apphost/) を参照してください。
:::

## 起動プロファイルの基本

テンプレートから新しい .NET アプリケーションを作成すると、_launchSettings.json_ という名前のファイルを含む `Properties` ディレクトリがあることがよくあります。起動設定ファイルには _起動プロファイル_ の一覧が含まれます。各起動プロファイルは、`dotnet` がアプリケーションをどのように開始するかを定義する、関連オプションの集合です。

次の JSON は、ASP.NET Core アプリケーションの _launchSettings.json_ ファイルにある起動プロファイルの例です:

```json title="JSON — launchSettings.json"
{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "profiles": {
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "http://localhost:5130",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": false,
      "applicationUrl": "https://localhost:7106;http://localhost:5130",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}
```

前述の _launchSettings.json_ ファイルでは、`http` と `https` の 2 つの起動プロファイルを定義しています。それぞれに独自の環境変数、起動 URL、その他のオプションがあります。.NET アプリケーションを起動するときは、使用する起動プロファイルを選択できます:

```bash title="Terminal"
dotnet run --launch-profile https
```

起動プロファイルを指定しない場合は、既定で最初の起動プロファイルが選択されます。`--no-launch-profile` オプションを使うと、起動プロファイルなしで .NET アプリケーションを起動することもできます。_launchSettings.json_ ファイルの一部のフィールドは環境変数に変換されます。たとえば `applicationUrl` フィールドは `ASPNETCORE_URLS` 環境変数に変換され、ASP.NET Core がバインドするアドレスとポートを制御します。

起動プロファイルを使用して .NET アプリケーションを起動すると、`DOTNET_LAUNCH_PROFILE` 環境変数には使用された起動プロファイル名が設定されます。

## C# AppHost 向けの起動プロファイル

Aspire では、C# AppHost は .NET アプリケーションであるため、他の .NET プロジェクトと同様に `launchSettings.json` ファイルがあります。次の JSON は、スターター テンプレート（`dotnet new aspire-starter`）から新しい Aspire プロジェクトを作成したときに生成される `launchSettings.json` ファイルの例です:

```json title="JSON — launchSettings.json"
{
  "$schema": "https://json.schemastore.org/launchsettings.json",
  "profiles": {
    "https": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "https://localhost:17134;http://localhost:15170",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "DOTNET_ENVIRONMENT": "Development",
        "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21030",
        "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22057"
      }
    },
    "http": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "launchBrowser": true,
      "applicationUrl": "http://localhost:15170",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "DOTNET_ENVIRONMENT": "Development",
        "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19240",
        "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20154"
      }
    }
  }
}
```

Aspire テンプレートでは、通常の ASP.NET Core アプリケーションと同様の起動プロファイル セットが定義されています。C# AppHost プロジェクトを起動すると、`DistributedApplication` が開始され、Aspire ダッシュボードが Aspire によってオーケストレーションされるリソース情報を取得するために使う Web サーバーをホストします。

## AppHost の起動プロファイルと .NET サービス プロジェクト

C# AppHost は、複数のサービス プロジェクトの起動を調整する責任を担います。コマンド ライン、Visual Studio、または別の開発環境から AppHost を実行すると、AppHost 用の起動プロファイルが選択されます。続いて AppHost は、起動するサービス プロジェクト内で一致する起動プロファイルを見つけようとし、そのオプションを使ってサービス プロジェクトの環境と既定のネットワーク構成を制御します。

AppHost がサービス プロジェクトを起動する場合、`--launch-profile` オプションを直接使うわけではありません。代わりに、Aspire は有効な起動プロファイルを解決し、`dotnet run` および `dotnet watch` との整合性のために `DOTNET_LAUNCH_PROFILE` を設定し、（起動プロファイルの `applicationUrl` フィールドから導出される）`ASPNETCORE_URLS` 環境変数を別のポートになるよう調整します。既定では、Aspire は `WithReplicas` を通じた複数インスタンスのサポートのため、ASP.NET Core アプリケーションの前段にリバース プロキシを挿入します。

`environmentVariables` などのその他の設定は、変更せずにアプリケーションへ渡されます。

## 起動プロファイル選択の制御

理想的には、AppHost とそのサービス プロジェクトの間で起動プロファイル名をそろえることで、AppHost 側でプロファイルを切り替えると連携する全プロジェクトでも一括で切り替えられます。ただし、`AddProject` に `launchProfileName` を渡すことで、特定プロジェクトで使うプロファイルを指定することもできます:

```csharp title="C# — AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);

builder.AddProject<Projects.InventoryService>(
    "inventoryservice",
    launchProfileName: "mylaunchprofile");

builder.Build().Run();
```

前述のコードは、`inventoryservice` リソースを `mylaunchprofile` 起動プロファイルのオプションで起動します。起動プロファイルの優先順位ロジックは次のとおりです:

1. `launchProfileName` 引数が指定されていれば、その起動プロファイルを使用する。
2. AppHost と同名の起動プロファイルを使用する（`DOTNET_LAUNCH_PROFILE` 環境変数を読み取って判定）。
3. _launchSettings.json_ の既定（先頭）起動プロファイルを使用する。
4. 起動プロファイルを使用しない。

サービス プロジェクトを起動プロファイルなしで強制起動するには、`launchProfileName` 引数を `null` に設定します。

## ASP.NET Core プロジェクト向けの起動プロファイルとエンドポイント

ASP.NET Core プロジェクトを AppHost に追加する際、Aspire は _launchSettings.json_ ファイルを解析し、適切な起動プロファイルを選択して、`applicationUrl` フィールド内の URL に基づきアプリケーション モデル内へエンドポイントを自動生成します。自動挿入されたエンドポイントを変更するには `WithEndpoint` を使用します:

```csharp title="C# — AppHost.cs"
var builder = DistributedApplication.CreateBuilder(args);

builder.AddProject<Projects.InventoryService>("inventoryservice")
    .WithEndpoint("https", endpoint => endpoint.IsProxied = false);

builder.Build().Run();
```

前述のコードは、Aspire が .NET アプリケーションの前段に配置するリバース プロキシを無効化し、アプリケーションが HTTP(S) 経由の要求へ直接応答できるようにします。

## 関連項目

- [プロジェクト リソース](/ja/integrations/dotnet/project-resources/)
- [AppHost 構成](/ja/app-host/configuration/)
- [TypeScript AppHost のプロジェクト構造](/ja/app-host/typescript-apphost/)
- [インナー ループ ネットワーク](/ja/fundamentals/networking-overview/)
- [.NET 環境のドキュメント](https://learn.microsoft.com/ja-jp/aspnet/core/fundamentals/environments)