# インフラ設計書

## 概要

本ドキュメントは、Microsoft Windows Terminal プロジェクトのインフラストラクチャ設計を記載する。Windows Terminalは、Windows 10/11上で動作するネイティブデスクトップアプリケーション（C++17 / C++/WinRT）であり、クラウドサービスやサーバー構成を持たないクライアントサイドアプリケーションである。本書では、ビルド基盤、CI/CD パイプライン、パッケージング・配布基盤、開発環境、テスト基盤を中心にインフラ構成を定義する。

## システム構成

### 全体構成

Windows Terminal は以下の層で構成されるクライアントサイドアプリケーションである。サーバーインフラは持たず、ビルド・配布・テストのためのCI/CD基盤がインフラの中核をなす。

- **開発環境**: Visual Studio 2022 + Windows 11 SDK + PowerShell 7
- **ビルド基盤**: MSBuild + vcpkg + NuGet（Azure Pipelines上で実行）
- **テスト基盤**: TAEF (Test Authoring and Execution Framework)
- **パッケージング基盤**: MSIX / WAP (Windows Application Packaging)
- **配布基盤**: Microsoft Store / GitHub Releases / WinGet / App Installer

### サーバー構成

本プロジェクトはクライアントサイドアプリケーションであり、常駐サーバーは存在しない。CI/CD実行はAzure Pipelinesのホステッドエージェント上で行われる。

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| Azure Pipelines ホステッドエージェント | CI/CDビルド・テスト実行 | Microsoft提供の仮想マシン (windows-latest) | オンデマンド |
| GitHub Actions ランナー | WinGet公開・スペルチェック等 | GitHub提供のホステッドランナー | オンデマンド |

### ネットワーク構成

クライアントアプリケーションのため、本番運用におけるネットワークインフラは存在しない。ビルド・配布に関連するネットワーク要素は以下の通り。

- **Azure DevOps**: CI/CDパイプライン実行、NuGetフィード（TerminalDependencies）ホスティング
- **GitHub**: ソースコード管理、GitHub Actions実行、Releases配布
- **Microsoft Store**: MSIXパッケージ配布チャネル
- **vcpkg レジストリ**: C++依存関係の取得（`builtin-baseline: fe1cde61e971d53c9687cf9a46308f8f55da19fa`）

## ミドルウェア

本プロジェクトで使用するビルド・開発ツールチェーンを以下に示す。

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| Visual Studio 2022 | v143 ツールセット | IDE・ビルド環境 |
| MSBuild | Visual Studio 2022同梱 | ビルドシステム |
| Windows 11 SDK | 10.0.22621.0 | Windows API・ランタイム |
| vcpkg | builtin-baseline: fe1cde61 | C++パッケージ管理 |
| NuGet | Visual Studio同梱 | .NETパッケージ管理 |
| PowerShell | 7+ | ビルドスクリプト・自動化 |
| TAEF | 10.100.251104001 | テスト実行フレームワーク |
| XamlStyler | 3.2501.8 | XAMLコードフォーマッター |
| fmt | 11.1.4 | C++フォーマットライブラリ |
| ms-gsl | 3.1.0 | C++ Guidelines Support Library |
| jsoncpp | 1.9.5 | JSON パーサー |
| CLI11 | 2.4.2 | コマンドラインパーサー |
| cmark | 0.30.3 | Markdown パーサー |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| Azure DevOps (Azure Pipelines) | CI/CDパイプライン実行 | YAML定義パイプライン |
| Azure DevOps NuGet フィード | TerminalDependencies パッケージ配布 | NuGet プロトコル |
| GitHub | ソースコード管理・PR・Issues | Git / GitHub API |
| GitHub Actions | WinGet公開・スペルチェック・プロジェクト管理 | YAML ワークフロー |
| Microsoft Store | アプリケーション配布（自動更新） | MSIX / Store API |
| WinGet (Windows Package Manager) | コマンドライン配布 | wingetcreate |
| OneBranch | リリースビルド・ナイトリービルド | Azure Pipelines拡張 |

## スケーリング設計

### ビルドパイプラインのスケーリング

- **並列ビルド**: x64, x86, ARM64 の3アーキテクチャを並列でビルド
- **MSBuild Cache**: `MSBuildCacheCacheUniverse: 202310210737` によるビルドキャッシュで再ビルド時間を短縮
- **オンデマンドエージェント**: Azure Pipelinesのホステッドエージェントにより、負荷に応じた自動スケーリング

### ビルド構成マトリクス

| 構成 | 対象アーキテクチャ | 用途 |
| --- | --- | --- |
| Debug | x64, x86, ARM64 | 開発・デバッグ |
| Release | x64, x86, ARM64 | リリースビルド |
| AuditMode | x64 | 静的解析・コード監査 |
| Fuzzing | x64 | セキュリティファジングテスト |

## 可用性設計

### 配布チャネルの冗長性

アプリケーションの配布は複数のチャネルを通じて行われ、単一障害点を排除している。

1. **Microsoft Store** (プライマリ): 自動更新対応、推奨配布チャネル
2. **GitHub Releases** (セカンダリ): `.msixbundle` ファイルの直接ダウンロード
3. **WinGet** (ターシャリ): `winget install Microsoft.WindowsTerminal` による配布
4. **App Installer** (Canary): Windows 11向けCanaryビルド配布
5. **Portable ZIP** (Canary): アンパッケージ版の直接配布

### ビルドパイプラインの可用性

- **メインCI** (`ci.yml`): mainブランチおよびfeatureブランチへのプッシュ・PRで自動実行
- **ナイトリービルド** (`ob-nightly.yml`): 定期的な自動ビルドによるリグレッション早期検出
- **Canaryビルド**: デイリービルドによる最新状態の継続的検証

### バージョニング

- XES (eXtensible Enterprise Suite) バージョニング: `Major.Minor.yyMM.dd##`
- `XesBaseYearForStoreVersion: 2025`
- Store版とGitHub Releases版で統一されたバージョン体系

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git (GitHub リポジトリ) | コミット毎 | 無期限 |
| ビルド成果物 | Azure Pipelines Artifacts | ビルド毎 | Azure DevOps保持ポリシーに準拠 |
| NuGetパッケージ | Azure DevOps NuGet フィード | パッケージ更新毎 | フィード保持ポリシーに準拠 |
| リリースバイナリ | GitHub Releases | リリース毎 | 無期限 |
| Store パッケージ | Microsoft Store | 提出毎 | Microsoft Store ポリシーに準拠 |

## 監視設計

### ビルドパイプライン監視

- **Azure Pipelines ダッシュボード**: ビルド成功率、テスト結果、ビルド時間の可視化
- **GitHub Actions ステータス**: ワークフロー実行結果の自動通知
- **PR ステータスチェック**: CI結果をPRに自動反映（マージゲート）

### コード品質監視

- **AuditMode ビルド**: x64向けに静的解析を定期実行
- **CppCoreCheck**: C++ Core Guidelines準拠チェック（`StaticAnalysis.ruleset`）
- **ファジングテスト** (`fuzz.yml`): VTコマンドパーサーおよびコンソールホストのセキュリティ検査
- **スペルチェック** (`spelling2.yml`): ドキュメント・コードコメントのスペル検査

### パフォーマンス監視

- **Windows Performance Toolkit**: `ConsolePerf.wprp`, `Terminal.wprp` によるパフォーマンストレース取得
- **PGO (Profile-Guided Optimization)**: `pgo.yml` パイプラインによるプロファイルベースの最適化
- **ConsoleBench**: ベンチマークツールによる描画パフォーマンス計測

## 備考

### プロジェクト固有の特性

- 本プロジェクトはクライアントサイドのネイティブWindowsアプリケーションであり、一般的なWebアプリケーションやクラウドサービスとは異なり、サーバーインフラを持たない
- インフラの中核は「ビルド・テスト・配布パイプライン」であり、Azure Pipelines + GitHub Actionsの組み合わせで自動化されている
- マルチアーキテクチャ対応（x64, x86, ARM64）のため、ビルドマトリクスが複雑であり、並列ビルドによる効率化が不可欠
- MSIXパッケージングにより、Windows Storeからのインストール・自動更新が実現されている

### サポート対象プラットフォーム

| 項目 | 値 |
| --- | --- |
| 最小OS要件 | Windows 10 2004 (build 19041) |
| 最大テスト済みOS | Windows 11 (build 26100) |
| 対応アーキテクチャ | x64, x86, ARM64 |
| .NET Framework | 4.8 |
| C++標準 | C++17 |

### リリースチャネル

| チャネル | パッケージID | 更新頻度 |
| --- | --- | --- |
| Stable | Microsoft.WindowsTerminal | 安定版リリース時 |
| Preview | Microsoft.WindowsTerminal.Preview | プレビュー版リリース時 |
| Canary | Microsoft.WindowsTerminalCanary | デイリー（ナイトリービルド） |
