# データベース設計書

## 概要

本ドキュメントは、Windows Terminal プロジェクトのデータ永続化構造を定義するデータベース設計書である。本プロジェクトはリレーショナルデータベースを使用せず、JSONファイルベースのデータ永続化アーキテクチャを採用している。設定データは `settings.json`（ユーザー設定）および `defaults.json`（デフォルト設定）に格納され、アプリケーション状態は `state.json` に保持される。

本書では、JSONデータ構造を論理テーブルとして整理し、各エンティティのプロパティ定義とエンティティ間のリレーションを記述する。

**データ永続化方式**: JSONファイル（`settings.json`, `defaults.json`, `state.json`）
**設定モデル実装**: `src/cascadia/TerminalSettingsModel/`
**継承メカニズム**: `INHERITABLE_SETTING` マクロによる親→子の値継承

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| CascadiaSettings | CascadiaSettings | 全設定の最上位コンテナ。グローバル設定・プロファイル・拡張パッケージを統合管理 |
| GlobalAppSettings | GlobalAppSettings | ウィンドウ動作・UI動作・描画設定などのグローバル設定 |
| Profile | Profile | ターミナルプロファイル（PowerShell、cmd等）の定義 |
| AppearanceConfig | AppearanceConfig | プロファイルの外観設定（色・背景・カーソルなど） |
| FontConfig | FontConfig | プロファイルのフォント設定 |
| ColorScheme | ColorScheme | 16色カラースキーム定義 |
| Theme | Theme | UIテーマ設定（ウィンドウ・タブ行・タブの外観） |
| WindowTheme | WindowTheme | ウィンドウ固有のテーマ設定 |
| TabRowTheme | TabRowTheme | タブ行固有のテーマ設定 |
| TabTheme | TabTheme | タブ固有のテーマ設定 |
| Command | Command | コマンド定義（名前・アイコン・アクション） |
| ActionAndArgs | ActionAndArgs | アクション種別とその引数 |
| ActionMap | ActionMap | キーバインディングとコマンドのマッピング |
| NewTabMenuEntry | NewTabMenuEntry（派生クラスを含む） | 新規タブメニューのエントリ定義 |
| ApplicationState | ApplicationState | アプリケーション状態の永続化（ユーザー編集不可） |
| WindowLayout | WindowLayout | ウィンドウレイアウト情報 |
| ExtensionPackage | ExtensionPackage | 拡張パッケージ定義 |
| FragmentSettings | FragmentSettings | 設定フラグメント（外部設定統合） |

## 各テーブル定義

### 1. CascadiaSettings

全アプリケーション設定の最上位コンテナ。`settings.json` と `defaults.json` を読み込み、マージした結果を保持する。
**ソース**: `src/cascadia/TerminalSettingsModel/CascadiaSettings.h`, `CascadiaSettings.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Hash | hstring | YES | 設定ファイルのハッシュ値（変更検出用） |
| GlobalSettings | GlobalAppSettings | NO | グローバル設定オブジェクトへの参照 |
| AllProfiles | IObservableVector\<Profile\> | NO | 全プロファイル（有効・無効を含む） |
| ActiveProfiles | IObservableVector\<Profile\> | NO | 有効なプロファイルのみのフィルタリングビュー |
| ActionMap | ActionMap | NO | キーバインディング・コマンドマップ |
| Extensions | IVectorView\<ExtensionPackage\> | YES | 拡張パッケージ一覧 |
| Warnings | IVectorView\<SettingsLoadWarnings\> | YES | 設定読み込み時の警告一覧 |
| LoadError | IReference\<SettingsLoadErrors\> | YES | 設定読み込みエラー情報 |

### 2. GlobalAppSettings

ウィンドウ動作、UI動作、描画設定等を管理するグローバル設定エンティティ。`INHERITABLE_SETTING` マクロにより、値は親設定（defaults.json）から子設定（settings.json）へ継承される。
**ソース**: `src/cascadia/TerminalSettingsModel/GlobalAppSettings.h`, `GlobalAppSettings.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| DefaultProfile | hstring | YES | デフォルトプロファイルのGUID文字列 |
| InitialRows | int32_t | NO | ウィンドウ初期行数。デフォルト: 30 |
| InitialCols | int32_t | NO | ウィンドウ初期列数。デフォルト: 80 |
| AlwaysShowTabs | bool | NO | タブバーの常時表示。デフォルト: true |
| ShowTabsFullscreen | bool | NO | フルスクリーン時のタブ表示。デフォルト: false |
| NewTabPosition | NewTabPosition(enum) | NO | 新規タブの挿入位置（AfterLastTab / AfterCurrentTab）。デフォルト: AfterLastTab |
| ShowTitleInTitlebar | bool | NO | タイトルバーにターミナルタイトルを表示。デフォルト: true |
| ConfirmCloseAllTabs | bool | NO | 全タブ閉鎖時の確認ダイアログ表示。デフォルト: true |
| Language | hstring | YES | UI言語設定 |
| TabWidthMode | TabViewWidthMode(enum) | NO | タブ幅モード（Equal等）。デフォルト: Equal |
| UseAcrylicInTabRow | bool | NO | タブ行へのアクリル効果適用。デフォルト: false |
| ShowTabsInTitlebar | bool | NO | タイトルバー内タブ表示。デフォルト: true |
| WordDelimiters | hstring | NO | ダブルクリック選択時の単語区切り文字。デフォルト: ` /\()"'-.,:;<>~!@#$%^&*\|+=[]{}~?` |
| CopyOnSelect | bool | NO | テキスト選択時の自動コピー。デフォルト: false |
| CopyFormatting | CopyFormat(enum) | NO | コピー時の書式保持設定。デフォルト: 0（なし） |
| WarnAboutLargePaste | bool | NO | 大量テキスト貼り付け時の警告。デフォルト: true |
| WarnAboutMultiLinePaste | WarnAboutMultiLinePaste(enum) | NO | 複数行貼り付け時の警告。デフォルト: Automatic |
| TrimPaste | bool | NO | 貼り付け時の空白トリム。デフォルト: true |
| InitialPosition | LaunchPosition | YES | ウィンドウ初期位置（X, Y座標） |
| CenterOnLaunch | bool | NO | 起動時のウィンドウ中央配置。デフォルト: false |
| LaunchMode | LaunchMode(enum) | NO | ウィンドウ起動モード（Default/Maximized/Fullscreen/Focus）。デフォルト: DefaultMode |
| SnapToGridOnResize | bool | NO | リサイズ時のグリッドスナップ。デフォルト: true |
| GraphicsAPI | GraphicsAPI(enum) | YES | 描画用グラフィックスAPI |
| DisablePartialInvalidation | bool | NO | 部分無効化の無効化。デフォルト: false |
| SoftwareRendering | bool | NO | ソフトウェアレンダリング使用。デフォルト: false |
| TextMeasurement | TextMeasurement(enum) | YES | テキスト測定方式 |
| DebugFeaturesEnabled | bool | NO | デバッグ機能の有効化。デフォルト: DEBUG時true / Release時false |
| AlwaysOnTop | bool | NO | 常に最前面表示。デフォルト: false |
| AutoHideWindow | bool | NO | ウィンドウ自動非表示。デフォルト: false |
| TabSwitcherMode | TabSwitcherMode(enum) | NO | タブ切り替えモード（InOrder/MostRecentlyUsed/Disabled）。デフォルト: InOrder |
| DisableAnimations | bool | NO | アニメーション無効化。デフォルト: false |
| StartupActions | hstring | NO | 起動時実行アクション文字列。デフォルト: "" |
| FocusFollowMouse | bool | NO | マウス追従フォーカス。デフォルト: false |
| WindowingBehavior | WindowingMode(enum) | NO | ウィンドウ動作（UseNew/UseAnyExisting/UseExisting）。デフォルト: UseNew |
| TrimBlockSelection | bool | NO | ブロック選択のトリム。デフォルト: true |
| MinimizeToNotificationArea | bool | NO | 通知領域への最小化。デフォルト: false |
| AlwaysShowNotificationIcon | bool | NO | 通知領域アイコン常時表示。デフォルト: false |
| ShowAdminShield | bool | NO | 管理者権限シールド表示。デフォルト: true |
| FirstWindowPreference | FirstWindowPreference(enum) | NO | 最初のウィンドウ設定（DefaultProfile/PersistedLayout/PersistedLayoutAndContent） |
| SearchWebDefaultQueryUrl | hstring | NO | Web検索デフォルトURL。デフォルト: `https://www.bing.com/search?q=%22%s%22` |
| EnableColorSelection | bool | NO | 色選択機能（実験的）。デフォルト: false |
| EnableShellCompletionMenu | bool | NO | シェル補完メニュー（実験的）。デフォルト: false |
| EnableUnfocusedAcrylic | bool | NO | フォーカス外アクリル効果。デフォルト: true |
| AllowHeadless | bool | NO | ヘッドレスモード許可。デフォルト: false |
| DisabledProfileSources | IVector\<hstring\> | YES | 無効なプロファイルソース一覧 |
| Theme | ThemePair | YES | 適用テーマ（ダーク/ライト名のペア） |
| ColorSchemes | IMapView\<hstring, ColorScheme\> | NO | 色スキームマップ（名前→ColorScheme） |
| Themes | IMapView\<hstring, Theme\> | NO | テーママップ（名前→Theme） |
| ActionMap | ActionMap | NO | キーバインディング・コマンドマップ |
| NewTabMenu | IVector\<NewTabMenuEntry\> | NO | 新規タブメニュー構成。デフォルト: RemainingProfilesEntry |

### 3. Profile

ターミナルプロファイルを定義するエンティティ。各プロファイルはコマンドライン、外観設定、動作設定を持つ。`INHERITABLE_SETTING` マクロにより、defaults → profile の値継承をサポート。
**ソース**: `src/cascadia/TerminalSettingsModel/Profile.h`, `Profile.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Guid | guid | NO | プロファイルの一意識別子（主キー） |
| Name | hstring | NO | プロファイル表示名。デフォルト: "Default" |
| Source | hstring | YES | プロファイル生成元（プロファイルジェネレーター名） |
| Hidden | bool | NO | UI上の非表示フラグ。デフォルト: false |
| Deleted | bool | NO | ユーザーによる明示的削除フラグ（読み取り専用） |
| Orphaned | bool | NO | システムから消失したプロファイル（読み取り専用） |
| Padding | hstring | NO | パディング（上, 右, 下, 左）。デフォルト: "8, 8, 8, 8" |
| Updates | guid | YES | 更新対象プロファイルのGUID |
| Origin | OriginTag(enum) | NO | 設定出所（None/InBox/Fragment/User/Generated） |
| HistorySize | int32_t | NO | スクロールバック履歴行数。デフォルト: 9001 |
| SnapOnInput | bool | NO | 入力時のスクロール下端移動。デフォルト: true |
| AltGrAliasing | bool | NO | AltGrキーのエイリアシング。デフォルト: true |
| AnswerbackMessage | hstring | YES | ターミナルアンサーバックメッセージ |
| Commandline | hstring | NO | 実行コマンドライン。デフォルト: `%SystemRoot%\System32\cmd.exe` |
| ScrollState | ScrollbarState(enum) | NO | スクロールバー表示状態。デフォルト: Visible |
| AntialiasingMode | TextAntialiasingMode(enum) | NO | テキストアンチエイリアシング方式。デフォルト: Grayscale |
| StartingDirectory | hstring | YES | 起動ディレクトリパス |
| Icon | IMediaResource | NO | プロファイルアイコン。デフォルト: U+E756 |
| SuppressApplicationTitle | bool | NO | アプリケーションタイトル抑制。デフォルト: false |
| ConnectionType | guid | YES | 接続タイプGUID（Azure Cloud Shell等） |
| CloseOnExit | CloseOnExitMode(enum) | NO | プロセス終了時の動作（Never/Graceful/Always/Automatic）。デフォルト: Automatic |
| TabTitle | hstring | YES | タブタイトル（明示指定時） |
| TabColor | IReference\<Color\> | YES | タブ色（オプション） |
| BellStyle | BellStyle(flags) | NO | ベル音スタイル（Audible/Window/Taskbar）。デフォルト: Audible |
| BellSound | IVector\<IMediaResource\> | YES | カスタムベル音リソース |
| EnvironmentVariables | IMap\<hstring, hstring\> | YES | 環境変数マップ |
| RightClickContextMenu | bool | NO | 右クリックコンテキストメニュー。デフォルト: false |
| Elevate | bool | NO | 管理者権限で実行。デフォルト: false |
| AutoMarkPrompts | bool | NO | プロンプト自動マーク。デフォルト: true |
| ShowMarks | bool | NO | スクロールバーマーク表示。デフォルト: false |
| ReloadEnvironmentVariables | bool | NO | 環境変数リロード。デフォルト: true |
| ForceVTInput | bool | NO | VT入力強制。デフォルト: false |
| AllowVtChecksumReport | bool | NO | VTチェックサムレポート許可。デフォルト: false |
| AllowVtClipboardWrite | bool | NO | VTクリップボード書き込み許可（OSC 52）。デフォルト: true |
| AllowKeypadMode | bool | NO | キーパッドモード許可。デフォルト: false |
| PathTranslationStyle | PathTranslationStyle(enum) | NO | パス変換スタイル。デフォルト: None |
| DefaultAppearance | AppearanceConfig | NO | デフォルト外観設定（ネストオブジェクト） |
| UnfocusedAppearance | AppearanceConfig | YES | フォーカス外時の外観設定（ネストオブジェクト） |
| FontInfo | FontConfig | NO | フォント設定（ネストオブジェクト） |

### 4. AppearanceConfig

プロファイルの外観設定を定義するエンティティ。デフォルト外観とフォーカス外外観の2インスタンスがProfile内に存在する。
**ソース**: `src/cascadia/TerminalSettingsModel/AppearanceConfig.h`, `AppearanceConfig.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| DarkColorSchemeName | hstring | NO | ダークモード時の色スキーム名。デフォルト: "Campbell" |
| LightColorSchemeName | hstring | NO | ライトモード時の色スキーム名。デフォルト: "Campbell" |
| Foreground | IReference\<Color\> | YES | フォアグラウンド色（オプション上書き） |
| Background | IReference\<Color\> | YES | バックグラウンド色（オプション上書き） |
| SelectionBackground | IReference\<Color\> | YES | 選択範囲の背景色（オプション上書き） |
| CursorColor | IReference\<Color\> | YES | カーソル色（オプション上書き） |
| Opacity | float | NO | 不透明度（0.0〜1.0）。デフォルト: 1.0 |
| CursorShape | CursorStyle(enum) | NO | カーソル形状（Bar/Vintage/Underscore等）。デフォルト: Bar |
| CursorHeight | uint32_t | NO | カーソル高さ（%指定）。デフォルト: 25 |
| BackgroundImagePath | IMediaResource | YES | 背景画像パス |
| BackgroundImageOpacity | float | NO | 背景画像の不透明度。デフォルト: 1.0 |
| BackgroundImageStretchMode | Stretch(enum) | NO | 背景画像のストレッチモード。デフォルト: UniformToFill |
| BackgroundImageAlignment | ConvergedAlignment(enum) | NO | 背景画像の配置。デフォルト: Center |
| RetroTerminalEffect | bool | NO | レトロターミナル効果（実験的）。デフォルト: false |
| PixelShaderPath | IMediaResource | YES | ピクセルシェーダパス（実験的） |
| PixelShaderImagePath | IMediaResource | YES | ピクセルシェーダ画像パス（実験的） |
| IntenseTextStyle | IntenseStyle(enum) | NO | 濃いテキストスタイル（Bold/Bright/All）。デフォルト: Bright |
| AdjustIndistinguishableColors | AdjustTextMode(enum) | NO | 区別しにくい色の自動調整。デフォルト: Automatic |
| UseAcrylic | bool | NO | アクリル効果の使用。デフォルト: false |

### 5. FontConfig

プロファイルのフォント設定を定義するエンティティ。
**ソース**: `src/cascadia/TerminalSettingsModel/FontConfig.h`, `FontConfig.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| FontFace | hstring | NO | フォントファミリー名。デフォルト: "Cascadia Mono" |
| FontSize | float | NO | フォントサイズ（ポイント）。デフォルト: 12 |
| FontWeight | FontWeight | NO | フォント太さ。デフォルト: Normal |
| FontAxes | IMap\<hstring, float\> | YES | 可変フォント軸設定 |
| FontFeatures | IMap\<hstring, float\> | YES | OpenTypeフォント機能設定 |
| EnableBuiltinGlyphs | bool | NO | 組み込みグリフの有効化。デフォルト: true |
| EnableColorGlyphs | bool | NO | カラーグリフの有効化。デフォルト: true |
| CellWidth | hstring | YES | セル幅設定 |
| CellHeight | hstring | YES | セル高さ設定 |

### 6. ColorScheme

16色のカラースキームを定義するエンティティ。
**ソース**: `src/cascadia/TerminalSettingsModel/ColorScheme.h`, `ColorScheme.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Name | hstring | NO | 色スキーム名（主キー） |
| Origin | OriginTag(enum) | NO | 設定出所（None/InBox/Fragment/User） |
| Foreground | Color | NO | デフォルトフォアグラウンド色 |
| Background | Color | NO | デフォルトバックグラウンド色 |
| SelectionBackground | Color | NO | 選択範囲の背景色 |
| CursorColor | Color | NO | カーソル色 |
| Black (Table[0]) | Color | NO | 黒 |
| Red (Table[1]) | Color | NO | 赤 |
| Green (Table[2]) | Color | NO | 緑 |
| Yellow (Table[3]) | Color | NO | 黄 |
| Blue (Table[4]) | Color | NO | 青 |
| Purple (Table[5]) | Color | NO | 紫 |
| Cyan (Table[6]) | Color | NO | シアン |
| White (Table[7]) | Color | NO | 白 |
| BrightBlack (Table[8]) | Color | NO | 明るい黒（グレー） |
| BrightRed (Table[9]) | Color | NO | 明るい赤 |
| BrightGreen (Table[10]) | Color | NO | 明るい緑 |
| BrightYellow (Table[11]) | Color | NO | 明るい黄 |
| BrightBlue (Table[12]) | Color | NO | 明るい青 |
| BrightPurple (Table[13]) | Color | NO | 明るい紫 |
| BrightCyan (Table[14]) | Color | NO | 明るいシアン |
| BrightWhite (Table[15]) | Color | NO | 明るい白 |

### 7. Theme

UIテーマを定義するエンティティ。ウィンドウ、タブ行、タブの各部分のテーマ設定を持つ。
**ソース**: `src/cascadia/TerminalSettingsModel/Theme.h`, `Theme.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Name | hstring | NO | テーマ名（主キー） |
| Window | WindowTheme | YES | ウィンドウテーマ設定 |
| Settings | SettingsTheme | YES | 設定画面テーマ |
| TabRow | TabRowTheme | YES | タブ行テーマ設定 |
| Tab | TabTheme | YES | タブテーマ設定 |

### 8. WindowTheme

ウィンドウ固有のテーマ設定。
**ソース**: `src/cascadia/TerminalSettingsModel/Theme.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| RequestedTheme | ElementTheme(enum) | NO | テーマ要求（Dark/Light/Default）。デフォルト: Default |
| Frame | ThemeColor | YES | フレーム色 |
| UnfocusedFrame | ThemeColor | YES | フォーカス外フレーム色 |
| RainbowFrame | bool | NO | レインボーフレーム（実験的）。デフォルト: false |
| UseMica | bool | NO | Mica素材使用。デフォルト: false |

### 9. TabRowTheme

タブ行固有のテーマ設定。
**ソース**: `src/cascadia/TerminalSettingsModel/Theme.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Background | ThemeColor | YES | タブ行背景色 |
| UnfocusedBackground | ThemeColor | YES | フォーカス外時のタブ行背景色 |

### 10. TabTheme

タブ固有のテーマ設定。
**ソース**: `src/cascadia/TerminalSettingsModel/Theme.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Background | ThemeColor | YES | タブ背景色 |
| UnfocusedBackground | ThemeColor | YES | フォーカス外時のタブ背景色 |
| IconStyle | IconStyle(enum) | NO | アイコンスタイル（Default/Hidden/Monochrome）。デフォルト: Default |
| ShowCloseButton | TabCloseButtonVisibility(enum) | NO | 閉鎖ボタン表示（Always/Hover/Never/ActiveOnly）。デフォルト: Always |

### 11. Command

コマンドの定義。名前、アイコン、実行するアクションを保持する。
**ソース**: `src/cascadia/TerminalSettingsModel/Command.h`, `Command.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| ID | hstring | YES | コマンドの一意識別子 |
| Name | hstring | YES | コマンド表示名 |
| LanguageNeutralName | hstring | YES | 言語中立的なコマンド名（読み取り専用） |
| Description | hstring | NO | コマンド説明。デフォルト: "" |
| Icon | IMediaResource | YES | コマンドアイコン |
| ActionAndArgs | ActionAndArgs | YES | 実行するアクションと引数 |
| IterateOn | ExpandCommandType(enum) | NO | コマンド展開タイプ。デフォルト: None |
| Origin | OriginTag(enum) | NO | 設定出所 |
| HasNestedCommands | bool | NO | ネストコマンドの有無（読み取り専用） |
| NestedCommands | IMapView\<hstring, Command\> | YES | ネストされた子コマンドマップ |

### 12. ActionAndArgs

アクション種別とその引数を保持するエンティティ。
**ソース**: `src/cascadia/TerminalSettingsModel/ActionAndArgs.h`, `ActionAndArgs.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Action | ShortcutAction(enum) | NO | アクション種別（NewTab/CloseTab/SplitPane等、約80種類） |
| Args | IActionArgs | YES | アクション引数（アクション種別ごとに異なる型） |

主要なアクション種別:

| ShortcutAction | 説明 | Args型 |
| --- | --- | --- |
| NewTab | 新しいタブを開く | NewTabArgs |
| CloseTab | タブを閉じる | CloseTabArgs |
| CloseWindow | ウィンドウを閉じる | なし |
| SwitchToTab | 指定タブに切り替え | SwitchToTabArgs |
| NextTab / PrevTab | 次/前のタブ | NextTabArgs / PrevTabArgs |
| SplitPane | ペイン分割 | SplitPaneArgs |
| MoveFocus | フォーカス移動 | MoveFocusArgs |
| ResizePane | ペインリサイズ | ResizePaneArgs |
| CopyText | テキストコピー | CopyTextArgs |
| SendInput | 入力送信 | SendInputArgs |
| SetColorScheme | 色スキーム設定 | SetColorSchemeArgs |
| ToggleFullscreen | フルスクリーン切り替え | なし |
| OpenSettings | 設定を開く | OpenSettingsArgs |
| ExecuteCommandline | コマンドライン実行 | ExecuteCommandlineArgs |
| ToggleCommandPalette | コマンドパレット切り替え | ToggleCommandPaletteArgs |

### 13. ActionMap

キーバインディングとコマンドのマッピングを管理するエンティティ。
**ソース**: `src/cascadia/TerminalSettingsModel/ActionMap.h`, `ActionMap.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| AvailableActions | IMapView\<hstring, ActionAndArgs\> | NO | 利用可能なアクション一覧 |
| NameMap | IMapView\<hstring, Command\> | NO | コマンド名→Commandマップ |
| KeyBindings | IMapView\<KeyChord, Command\> | NO | キーバインディング→Commandマップ |
| GlobalHotkeys | IMapView\<KeyChord, Command\> | NO | グローバルホットキーマップ |
| AllCommands | IVectorView\<Command\> | NO | 全コマンドリスト |
| ExpandedCommands | IVector\<Command\> | NO | 展開済みコマンドリスト |

### 14. NewTabMenuEntry（派生クラスを含む）

新規タブメニューの各エントリを表すエンティティ群。基底クラスと複数の派生クラスで構成される。
**ソース**: `src/cascadia/TerminalSettingsModel/NewTabMenuEntry.h`

**基底: NewTabMenuEntry**

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Type | NewTabMenuEntryType(enum) | NO | エントリ種別 |

**派生: ProfileEntry** — プロファイルへのリンク

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Profile | Profile | NO | 参照先プロファイル |
| ProfileIndex | int32_t | NO | プロファイルインデックス |
| Icon | IMediaResource | YES | アイコン |

**派生: SeparatorEntry** — セパレータ（プロパティなし）

**派生: FolderEntry** — フォルダ（サブメニュー）

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Name | hstring | NO | フォルダ名 |
| Icon | IMediaResource | YES | アイコン |
| Inlining | FolderEntryInlining(enum) | NO | インライン化設定（Never/Auto） |
| AllowEmpty | bool | NO | 空フォルダ表示許可 |
| Entries | IVector\<NewTabMenuEntry\> | NO | 子エントリ一覧（再帰構造） |

**派生: ActionEntry** — アクションへのリンク

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| ActionId | hstring | NO | 参照先アクションID |
| Icon | IMediaResource | YES | アイコン |

**派生: RemainingProfilesEntry** — 未割当プロファイル自動列挙

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Profiles | IMap\<int32_t, Profile\> | NO | 対象プロファイルマップ |

**派生: MatchProfilesEntry** — 正規表現マッチングによるプロファイル抽出

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Name | hstring | YES | 名前の正規表現パターン |
| Commandline | hstring | YES | コマンドラインの正規表現パターン |
| Source | hstring | YES | ソースの正規表現パターン |
| Profiles | IMap\<int32_t, Profile\> | NO | マッチしたプロファイルマップ |

### 15. ApplicationState

ユーザーが直接編集しないアプリケーション状態を `state.json` に永続化するエンティティ。Shared（共有）とLocal（ローカル）の2つのファイルスコープを持つ。
**ソース**: `src/cascadia/TerminalSettingsModel/ApplicationState.h`, `ApplicationState.cpp`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| SettingsHash | hstring | YES | 設定ファイルのハッシュ値（Shared） |
| GeneratedProfiles | std::unordered_set\<guid\> | YES | 動的生成済みプロファイルのGUID集合（Shared） |
| PersistedWindowLayouts | IVector\<WindowLayout\> | YES | 永続化されたウィンドウレイアウト（Local） |
| RecentCommands | IVector\<hstring\> | YES | 最近使用したコマンド履歴（Shared） |
| DismissedMessages | IVector\<InfoBarMessage\> | YES | 非表示にされた情報バーメッセージ（Shared） |
| AllowedCommandlines | IVector\<hstring\> | YES | 許可されたコマンドライン一覧（Local） |
| DismissedBadges | std::unordered_set\<hstring\> | YES | 非表示にされたバッジID集合（Local） |
| SSHFolderGenerated | bool | NO | SSHフォルダ生成済みフラグ（Shared）。デフォルト: false |

### 16. WindowLayout

ウィンドウレイアウト情報を保持するエンティティ。ApplicationStateの子要素として永続化される。
**ソース**: `src/cascadia/TerminalSettingsModel/ApplicationState.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| TabLayout | IVector\<ActionAndArgs\> | YES | タブレイアウト（各タブの復元アクション） |
| InitialPosition | IReference\<LaunchPosition\> | YES | ウィンドウ初期位置（X, Y座標） |
| InitialSize | IReference\<Size\> | YES | ウィンドウ初期サイズ（幅、高さ） |
| LaunchMode | IReference\<LaunchMode\> | YES | ウィンドウ起動モード |

### 17. ExtensionPackage

拡張パッケージを定義するエンティティ。外部の設定フラグメントを統合するために使用される。
**ソース**: `src/cascadia/TerminalSettingsModel/CascadiaSettings.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Source | hstring | NO | 拡張パッケージのソースパス |
| Scope | FragmentScope(enum) | NO | スコープ（User/Machine） |
| Icon | hstring | YES | アイコンリソース |
| DisplayName | hstring | NO | 表示名 |
| Fragments | IVector\<FragmentSettings\> | NO | 含まれるフラグメント設定 |

### 18. FragmentSettings

設定フラグメントの定義。外部から提供されるプロファイルや色スキームを管理する。
**ソース**: `src/cascadia/TerminalSettingsModel/CascadiaSettings.h`

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| Source | hstring | NO | フラグメントソース |
| Json | hstring | NO | JSON内容 |
| Filename | hstring | NO | ファイル名 |
| ModifiedProfiles | IVector\<FragmentProfileEntry\> | YES | 変更されたプロファイル一覧 |
| NewProfiles | IVector\<FragmentProfileEntry\> | YES | 新規追加プロファイル一覧 |
| ColorSchemes | IVector\<FragmentColorSchemeEntry\> | YES | 色スキーム一覧 |

## 備考

### データ永続化ファイル構成

| ファイル | 用途 | 編集可否 |
| --- | --- | --- |
| `defaults.json` | デフォルト設定値（アプリケーション組み込み） | 不可（読み取り専用） |
| `settings.json` | ユーザーカスタム設定 | 可 |
| `state.json` | アプリケーション状態の永続化 | 不可（アプリケーション管理） |

### 設定の継承メカニズム

本プロジェクトでは `INHERITABLE_SETTING` マクロにより、以下の優先順位で設定値が決定される：

1. **ユーザー設定** (`settings.json`) — 最高優先度
2. **フラグメント設定** — 拡張パッケージ提供の設定
3. **デフォルト設定** (`defaults.json`) — 最低優先度

Profile内部でも `profiles.defaults` セクションの値が各プロファイルに継承される仕組みを持つ。

### RDBを使用しない理由

Windows TerminalはデスクトップUIアプリケーションであり、以下の理由からRDBではなくJSONファイルベースの永続化を採用している：

- 設定データの構造がツリー型であり、フラットなテーブルよりJSONの階層構造が適している
- ユーザーが手動で設定ファイルを編集できることが重要な要件である
- データ量が少なく、ファイル全体のロード/セーブで十分なパフォーマンスが得られる
- 外部依存（DBエンジン）を排除し、単体で動作するアプリケーションとしての要件を満たす
