# 機能設計書 89-動的プロファイル生成(Azure)

## 概要

本ドキュメントは、Windows Terminal が Azure Cloud Shell の利用可否を検出し、利用可能な場合に Azure Cloud Shell プロファイルを動的に生成する機能を記述する。

### 本機能の処理概要

**業務上の目的・背景**：Azure Cloud Shell はクラウドベースのシェル環境であり、Azure リソースの管理に使用される。本機能は Azure Cloud Shell への接続が利用可能な場合に自動的にプロファイルを生成し、ユーザーが Windows Terminal から直接 Azure Cloud Shell にアクセスできるようにする。

**機能の利用シーン**：Azure の利用が可能な環境で Windows Terminal を起動した際に、Azure Cloud Shell プロファイルが自動的に追加される。

**主要な処理内容**：
1. AzureConnection::IsAzureConnectionAvailable() で Azure Cloud Shell の利用可否を確認
2. 利用可能な場合、Azure Cloud Shell 用プロファイルを生成
3. プロファイルに ConnectionType として AzureConnection を設定

**関連システム・外部連携**：Azure Cloud Shell サービス、AzureConnection（TerminalConnection）。

**権限による制御**：Azure サブスクリプションとアカウント認証が必要（接続時に認証フローが起動）。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| - | - | - | バックグラウンド処理。直接の関連画面はない |

## 機能種別

データ連携 / 自動検出

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| profiles | std::vector<winrt::com_ptr<Profile>>& | Yes | 生成プロファイル格納先 | - |

### 入力データソース

- AzureConnection::IsAzureConnectionAvailable() の戻り値

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| Profile | winrt::com_ptr<Profile> | Azure Cloud Shell 用のプロファイルオブジェクト |

### 出力先

profiles ベクタに追加。

## 処理フロー

### 処理シーケンス

```
1. AzureCloudShellGenerator::GenerateProfiles() が呼び出される
2. AzureConnection::IsAzureConnectionAvailable() で利用可否を確認
3. 利用可能な場合
   └─ CreateDynamicProfile("Azure Cloud Shell") でプロファイル作成
   └─ 開始ディレクトリ: デフォルト
   └─ カラースキーム: Vintage (ダーク/ライト両方)
   └─ ConnectionType: AzureConnection::ConnectionType()
4. 利用不可の場合
   └─ 何も生成しない
```

### フローチャート

```mermaid
flowchart TD
    A[GenerateProfiles 開始] --> B[IsAzureConnectionAvailable?]
    B -->|Yes| C[Azure Cloud Shell プロファイル作成]
    C --> D[開始ディレクトリ設定]
    D --> E[カラースキーム Vintage 設定]
    E --> F[ConnectionType 設定]
    F --> G[profiles に追加]
    B -->|No| H[終了 - プロファイルなし]
    G --> H
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-89-01 | 利用可否チェック | AzureConnection::IsAzureConnectionAvailable() で利用可否を判定 | プロファイル生成前 |
| BR-89-02 | カラースキーム | Azure Cloud Shell のデフォルトカラースキームは Vintage | プロファイル生成時 |
| BR-89-03 | 接続タイプ | AzureConnection::ConnectionType() を接続タイプとして設定 | プロファイル生成時 |

### 計算ロジック

該当なし。

## データベース操作仕様

該当なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 利用不可 | Azure Connection が利用できない環境 | プロファイル生成をスキップ |

### リトライ仕様

リトライなし。

## トランザクション仕様

該当なし。

## パフォーマンス要件

IsAzureConnectionAvailable() の呼び出しは軽量。

## セキュリティ考慮事項

- Azure Cloud Shell への接続時に OAuth 認証フローが実行される（プロファイル生成時点では認証は行われない）。

## 備考

- 名前空間：`Windows.Terminal.Azure`（LegacyProfileGeneratorNamespaces.h で定義）
- ジェネレータアイコン：`ms-appx:///ProfileGeneratorIcons/AzureCloudShell.png`
- プロファイル名：「Azure Cloud Shell」

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | AzureCloudShellGenerator.h | `src/cascadia/TerminalSettingsModel/AzureCloudShellGenerator.h` | AzureCloudShellGenerator クラス定義（24-31行目） |

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | AzureCloudShellGenerator.cpp | `src/cascadia/TerminalSettingsModel/AzureCloudShellGenerator.cpp` | GenerateProfiles メソッド（40-51行目） |

**主要処理フロー**:
1. **42行目**: AzureConnection::IsAzureConnectionAvailable() で利用可否チェック
2. **44行目**: CreateDynamicProfile("Azure Cloud Shell") でプロファイル作成
3. **45行目**: 開始ディレクトリをデフォルト（DEFAULT_STARTING_DIRECTORY）に設定
4. **46-47行目**: カラースキームを Vintage（ダーク/ライト両方）に設定
5. **48行目**: ConnectionType を AzureConnection::ConnectionType() に設定
6. **49行目**: profiles ベクタに追加

### プログラム呼び出し階層図

```
AzureCloudShellGenerator::GenerateProfiles (40行目)
    │
    ├─ AzureConnection::IsAzureConnectionAvailable()
    │
    └─ [利用可能時]
           ├─ CreateDynamicProfile("Azure Cloud Shell")
           └─ AzureConnection::ConnectionType()
```

### データフロー図

```
[入力]                      [処理]                        [出力]

AzureConnection ────▶ IsAzureConnectionAvailable ──▶ bool
利用可否                          │
                                  ▼
                         [利用可能な場合]
                         CreateDynamicProfile
                                  │
                                  ▼
                         Profile オブジェクト
                         (ConnectionType=Azure)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| AzureCloudShellGenerator.h | `src/cascadia/TerminalSettingsModel/AzureCloudShellGenerator.h` | ヘッダ | クラス定義 |
| AzureCloudShellGenerator.cpp | `src/cascadia/TerminalSettingsModel/AzureCloudShellGenerator.cpp` | ソース | Azure プロファイル生成実装 |
| IDynamicProfileGenerator.h | `src/cascadia/TerminalSettingsModel/IDynamicProfileGenerator.h` | ヘッダ | ジェネレータインターフェース |
| LegacyProfileGeneratorNamespaces.h | `src/cascadia/TerminalSettingsModel/LegacyProfileGeneratorNamespaces.h` | ヘッダ | 名前空間定数 |
| AzureConnection.h | `src/cascadia/TerminalConnection/AzureConnection.h` | ヘッダ | Azure 接続クラス |
