# Avalonia

## 概要

Avaloniaは、.NET向けのクロスプラットフォームUIフレームワークです。Windows、macOS、Linux、iOS、Android、WebAssemblyなど幅広いプラットフォームをサポートし、XAMLベースの柔軟なスタイリングシステムを提供します。WPFの精神的後継として位置づけられ、WPF開発者に馴染みのある開発体験を提供しながら、真のクロスプラットフォーム対応を実現しています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| クロスプラットフォームUI | Windows、macOS、Linux、iOS、Android、WebAssembly、tvOSに対応したUIレンダリング |
| XAMLマークアップ | WPFライクなXAML構文によるUI定義、データバインディング、スタイリング |
| テーマシステム | Fluent DesignテーマとSimpleテーマを標準搭載 |
| コントロールライブラリ | 豊富な標準コントロール（ボタン、テキストボックス、リストビュー、DataGrid、ColorPickerなど） |
| レンダリングエンジン | Skiaベースの高品質2Dレンダリング |
| GPU対応 | OpenGL、Vulkan、Metal、DirectXによるハードウェアアクセラレーション |
| デザイナーサポート | Visual Studio、JetBrains Rider向けのXAMLプレビュー機能 |
| ソースジェネレーター | コンパイル時コード生成によるパフォーマンス最適化 |
| アクセシビリティ | OSのAutomation/Accessibility APIとの統合 |
| ヘッドレステスト | UIテスト用のヘッドレス実行環境 |

## 技術スタック

### コア

- フレームワーク: .NET 10.0 / .NET 8.0
- 言語: C# 14.0
- レンダリングエンジン: Skia
- ビルドシステム: MSBuild / Nuke

### 主要ライブラリ

- Avalonia.BuildServices: ビルドタスク統合
- HarfBuzz: テキストシェーピング
- MicroCom: COM相互運用
- XUnit / NUnit: テストフレームワーク

### プラットフォーム固有

- Windows: Win32 API、WPF Interoperability
- macOS/iOS/tvOS: Cocoa Native、Metal
- Linux: X11、FreeDesktop、Framebuffer
- Android: Android SDK
- Browser: WebAssembly (wasm-tools)

## ディレクトリ構成

```
Avalonia-master/
├── src/                          # ソースコード
│   ├── Avalonia.Base/            # コアランタイム（プロパティシステム、レイアウト、入力など）
│   ├── Avalonia.Controls/        # UIコントロールライブラリ
│   ├── Avalonia.Controls.ColorPicker/  # カラーピッカーコントロール
│   ├── Avalonia.Desktop/         # デスクトップアプリケーションサポート
│   ├── Avalonia.Dialogs/         # ダイアログコントロール
│   ├── Avalonia.Themes.Fluent/   # Fluent Designテーマ
│   ├── Avalonia.Themes.Simple/   # Simpleテーマ
│   ├── Markup/                   # XAMLパーサーとローダー
│   │   ├── Avalonia.Markup/
│   │   ├── Avalonia.Markup.Xaml/
│   │   └── Avalonia.Markup.Xaml.Loader/
│   ├── Skia/                     # Skiaレンダリングバックエンド
│   ├── Windows/                  # Windows固有実装
│   │   ├── Avalonia.Win32/
│   │   └── Avalonia.Win32.Automation/
│   ├── Avalonia.Native/          # macOS/iOS Native実装
│   ├── Avalonia.X11/             # Linux X11実装
│   ├── Avalonia.FreeDesktop/     # Freedesktopサポート
│   ├── Android/                  # Androidプラットフォーム
│   ├── iOS/                      # iOSプラットフォーム
│   ├── Browser/                  # WebAssembly/Browserプラットフォーム
│   ├── Headless/                 # ヘッドレステスト環境
│   ├── Avalonia.OpenGL/          # OpenGLサポート
│   ├── Avalonia.Vulkan/          # Vulkanサポート
│   ├── Avalonia.Metal/           # Metalサポート
│   └── tools/                    # 開発ツール
│       ├── Avalonia.Generators/  # ソースジェネレーター
│       ├── Avalonia.Analyzers.CSharp/  # コードアナライザー
│       └── Avalonia.Designer.HostApp/  # デザイナーホストアプリ
├── packages/                     # NuGetパッケージ定義
│   └── Avalonia/                 # メインパッケージ
├── samples/                      # サンプルアプリケーション
│   ├── ControlCatalog/           # コントロールカタログ
│   ├── ControlCatalog.Desktop/   # デスクトップ版
│   ├── ControlCatalog.Android/   # Android版
│   ├── ControlCatalog.iOS/       # iOS版
│   ├── ControlCatalog.Browser/   # ブラウザ版
│   ├── RenderDemo/               # レンダリングデモ
│   ├── BindingDemo/              # データバインディングデモ
│   └── VirtualizationDemo/       # 仮想化デモ
├── tests/                        # テストプロジェクト
│   ├── Avalonia.Base.UnitTests/  # 基本機能の単体テスト
│   ├── Avalonia.Controls.UnitTests/  # コントロールの単体テスト
│   ├── Avalonia.Markup.Xaml.UnitTests/  # XAMLの単体テスト
│   ├── Avalonia.Skia.RenderTests/  # レンダリングテスト
│   ├── Avalonia.IntegrationTests.Appium/  # 統合テスト
│   └── Avalonia.Benchmarks/      # パフォーマンスベンチマーク
├── build/                        # ビルド設定
├── nukebuild/                    # Nukeビルドスクリプト
├── docs/                         # ドキュメント
├── native/                       # ネイティブコード
└── api/                          # API定義
```

## セットアップ

### 必要条件

- .NET SDK 10.0.101以上（または.NET 8.0）
- Visual Studio 2022以上（オプション）
- JetBrains Rider 2017.2以上（オプション）
- Xcode（macOSでネイティブビルドを行う場合）
- Node.js LTS（ブラウザ/WebAssemblyビルドの場合）

### インストール手順

1. リポジトリのクローン:
```bash
git clone https://github.com/AvaloniaUI/Avalonia.git
cd Avalonia
git submodule update --init
```

2. .NETワークロードのインストール:
```bash
dotnet workload install android ios maccatalyst wasm-tools
```
注意: Unix系OSではsudoが必要です。

3. サンプルのビルドと実行:
```bash
cd samples/ControlCatalog.Desktop
dotnet restore
dotnet run
```

### Visual Studioでの開発

- `Avalonia.sln`: 全プラットフォーム対応（ワークロードのインストールが必要）
- `Avalonia.Desktop.slnf`: デスクトップのみ（追加ワークロード不要）

### macOSでのネイティブビルド

```bash
./build.sh CompileNative
```

## 開発

### ビルド

Nukeを使用したビルド:
```bash
# Nukeのインストール
dotnet tool install --global Nuke.GlobalTool --version 6.2.1

# コンパイル
nuke --target Compile --configuration Release

# パッケージの作成
nuke --target Package --configuration Release
```

Nukeをインストールせずにビルド:
```bash
dotnet run --project nukebuild/_build.csproj -- --configuration Debug
```

### テスト

```bash
# テストの実行
nuke --target RunTests --configuration Release
```

テストの種類:
- **単体テスト**: `tests/`ディレクトリ内の各`*.UnitTests`プロジェクト
- **統合テスト**: `tests/Avalonia.IntegrationTests.Appium/`（Windows/macOSで実行）
- **レンダリングテスト**: `tests/Avalonia.Skia.RenderTests/`

### コーディングスタイル

- [.NET Core コーディングスタイル](https://github.com/dotnet/runtime/blob/master/docs/coding-guidelines/coding-style.md)に準拠
- 1行あたり約120文字を目安
- パブリックメソッドにはXMLドキュメントを記述
- `#region`の使用は禁止

### テストの命名規則

```csharp
void Calling_Foo_Should_Increment_Bar()
void Rectangle_2px_Stroke_Filled()
```

### NuGetパッケージの利用

```
Install-Package Avalonia
Install-Package Avalonia.Desktop
```

詳細は[NuGetパッケージページ](https://www.nuget.org/packages/Avalonia/)を参照してください。
