# Windows Terminal

## 概要

Windows Terminal は、Microsoft が開発するオープンソースのモダンなコマンドラインターミナルアプリケーションです。従来の Windows Console Host（conhost.exe）を刷新し、マルチタブ、豊富なカスタマイズ、GPU アクセラレーションによる描画、Unicode/UTF-8 対応、24ビットカラーなど、現代的なターミナル体験を提供します。PowerShell、CMD、WSL、SSH など複数のコマンドラインツールを統一的に扱えます。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| マルチタブ | 複数のシェル・コマンドラインアプリを同時にタブで管理 |
| 複数プロファイル | PowerShell、CMD、WSL、SSH 等のプロファイルを切り替え |
| テーマ・カスタマイズ | JSON 設定ファイルによる外観・動作の自由なカスタマイズ |
| 設定エディタ | GUI ベースの設定変更インターフェース |
| GPU 描画（Atlas Renderer） | DirectX ベースの高速テキスト描画エンジン |
| ANSI/VT シーケンス対応 | 256色・24ビットカラー・高度なターミナル描画 |
| 背景透過・アクリル効果 | ウィンドウ透明度のカスタマイズ |
| フォント選択 | Cascadia Code 推奨、自由なフォント選択が可能 |
| ConPTY（疑似コンソール） | 新しいコンソール API による他ターミナルとの互換性 |
| ショートカットカスタマイズ | キーバインドの自由な設定 |

## 技術スタック

### コア

- フレームワーク: XAML / WinUI（UI 層）、C++/WinRT（Windows Runtime 対応）
- 言語: C++（コア実装）、C#（UI・設定エディタ）、XAML（UI 定義）
- 描画エンジン: DirectWrite / DirectX（Atlas Renderer）
- ビルドシステム: MSBuild / Visual Studio Solution
- パッケージ管理: vcpkg（C++依存）、NuGet（.NET依存）

### 主要ライブラリ

- **fmt** (v11.1.4) — フォーマッティングライブラリ
- **ms-gsl** (v3.1.0) — Guidelines Support Library
- **jsoncpp** (v1.9.5) — JSON パーサー（設定ファイル処理）
- **cli11** (v2.4.2) — CLI 引数パーサー
- **cmark** (v0.30.3) — CommonMark パーサー
- **WIL** — Windows Implementation Libraries（Microsoft）

## ディレクトリ構成

```
terminal-main/
├── src/                          # ソースコード
│   ├── cascadia/                 # Windows Terminal UI層（XAML/C++/C#）
│   │   ├── CascadiaPackage/     # アプリケーションパッケージ
│   │   ├── TerminalApp/         # アプリケーションロジック
│   │   ├── TerminalControl/     # コントロールライブラリ
│   │   ├── TerminalSettingsEditor/ # 設定エディタ UI
│   │   ├── WindowsTerminal/     # メインアプリケーション
│   │   └── WpfTerminalControl/  # WPF用コントロール
│   ├── host/                     # Windows Console Host (conhost.exe)
│   ├── buffer/                   # テキストバッファ
│   ├── renderer/                 # 描画エンジン
│   ├── terminal/                 # VTパーサー・入力処理
│   ├── server/                   # コンソールサーバー
│   ├── interactivity/            # Win32 API インタラクション
│   ├── types/                    # 型定義・ユーティリティ
│   ├── til/                      # Terminal Implementation Library
│   ├── winconpty/                # ConPTY（疑似コンソール）
│   ├── tools/                    # ColorTool 等ユーティリティ
│   ├── audio/                    # MIDI オーディオ対応
│   ├── tsf/                      # Text Services Framework
│   └── inc/                      # 共通ヘッダーファイル
├── build/                        # ビルド設定・CI/CDパイプライン
├── doc/                          # 仕様書・開発ガイド
├── tools/                        # ビルドツール・スクリプト
├── samples/                      # サンプルコード
├── res/                          # リソース（フォント、テクスチャ）
├── oss/                          # オープンソースコンポーネント
└── .github/                      # GitHub Actions ワークフロー
```

## セットアップ

### 必要条件

- Windows 10 2004 (build 19041) 以上
- Visual Studio 2022（C++ Desktop Development + UWP Development ワークロード）
- Windows 11 SDK (10.0.22621.0 以上)
- PowerShell 7 以上
- .NET Framework Targeting Pack（テスト用）
- Windows の「開発者モード」を有効化

### インストール方法

**方法1: WinGet 設定ファイル（推奨）**

```powershell
winget configure .config\configuration.winget
```

**方法2: PowerShell ビルド**

```powershell
Import-Module .\tools\OpenConsole.psm1
Set-MsBuildDevEnvironment
Invoke-OpenConsoleBuild
```

**方法3: Cmd ビルド**

```cmd
.\tools\razzle.cmd
bcz
```

## 開発

### ビルド

```powershell
Import-Module .\tools\OpenConsole.psm1
bcz dbg    # Debug設定でビルド
bcz rel    # Release設定でビルド
```

### デバッグ・実行

```powershell
opencon     # Windows Terminal 実行
openbash    # Bash 実行
openps      # PowerShell 実行
```

### テスト

```powershell
runut       # ユニットテスト実行
runft       # フィーチャーテスト実行
testcon     # 全テスト実行
```

### コードフォーマット

```powershell
runformat       # C++/XAML フォーマット
runxamlformat   # XAML のみフォーマット
```

- **C++**: clang-format（Microsoft 規約準拠）
- **XAML**: XamlStyler (v3.2501.8)
- **EditorConfig**: インデント・文字セット統一
