# Ghostty

## 概要

Ghosttyは、高速で機能豊富なネイティブターミナルエミュレータです。速度、機能、ネイティブUI体験の3つを同時に提供することを目指しており、既存のターミナルエミュレータのようにいずれかを妥協する必要がありません。Zigで書かれたコアライブラリと、各プラットフォーム向けのネイティブUI（macOS: SwiftUI、Linux: GTK）を組み合わせた、モダンなターミナルエミュレータです。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| 標準準拠のターミナルエミュレーション | ECMA-48およびxterm互換の制御シーケンスを実装し、高い互換性を実現 |
| 高性能レンダリング | macOSではMetal、LinuxではOpenGLを使用したGPUアクセラレーションレンダリング |
| マルチウィンドウ・タブ・ペイン | 複数ウィンドウ、タブ、分割ペインによる高度なウィンドウ管理 |
| ネイティブUI体験 | macOSはSwiftUI、LinuxはGTKを使用した各プラットフォーム固有のUI |
| libghostty | 組み込み可能なC互換ターミナルエミュレータライブラリ |
| libghostty-vt | ターミナルシーケンスのパースと状態管理に特化した軽量ライブラリ |
| Shell統合 | Bash、Zsh、Fish向けのシェル統合スクリプト |
| クラッシュレポート | 自動クラッシュレポート生成機能（Sentry形式） |
| 国際化対応 | 多言語翻訳サポート（i18n） |

## 技術スタック

### コア

- 言語: Zig 0.15.2以上
- ビルドシステム: Zig Build System
- ターミナルエミュレーション: 独自実装（ECMA-48/xterm準拠）
- レンダリング: Metal（macOS）、OpenGL（Linux）、WebGL（ブラウザ）

### 主要ライブラリ

- FreeType: フォントレンダリング
- HarfBuzz: テキストシェーピング
- fontconfig: フォント検出（Linux）
- libxev: イベントループ
- GTK4: Linuxネイティブ UI
- CoreText: macOSフォント処理
- Sentry: クラッシュレポート
- oniguruma: 正規表現エンジン
- libpng: PNG画像処理
- zlib: 圧縮処理
- simdutf: SIMD最適化UTF処理

## ディレクトリ構成

```
ghostty-main/
├── src/                    # Zigソースコード（コアロジック）
│   ├── apprt/              # アプリケーションランタイム（GTK/組込み/ブラウザ）
│   ├── benchmark/          # ベンチマークツール
│   ├── build/              # ビルド設定
│   ├── cli/                # CLIコマンド
│   ├── config/             # 設定管理
│   ├── crash/              # クラッシュレポート
│   ├── font/               # フォント処理
│   ├── input/              # 入力処理
│   ├── inspector/          # インスペクタ
│   ├── renderer/           # レンダラー（Metal/OpenGL/WebGL）
│   ├── shell-integration/  # シェル統合スクリプト
│   ├── terminal/           # ターミナルエミュレーション
│   ├── termio/             # ターミナルI/O
│   └── unicode/            # Unicode処理
├── macos/                  # macOSネイティブアプリ（SwiftUI）
│   ├── Sources/            # Swiftソースコード
│   └── Tests/              # Swiftテスト
├── pkg/                    # 依存パッケージ（C/C++ライブラリ）
│   ├── freetype/           # FreeTypeバインディング
│   ├── harfbuzz/           # HarfBuzzバインディング
│   ├── macos/              # macOS固有バインディング
│   ├── opengl/             # OpenGLバインディング
│   └── ...
├── po/                     # 翻訳ファイル（gettext）
├── dist/                   # 配布用設定
├── flatpak/                # Flatpakパッケージング
├── snap/                   # Snapパッケージング
├── nix/                    # Nixパッケージング
├── example/                # サンプルコード
├── test/                   # テストデータ
├── include/                # C APIヘッダー
└── vendor/                 # サードパーティリソース
```

## セットアップ

### 必要条件

- **Zig**: バージョン 0.15.2 以上
- **macOS**: Xcode 26 および macOS 26 SDK
- **Linux**: GTK4、blueprint-compiler 0.16.0以上

### インストール手順

1. リポジトリをクローン:
   ```shell
   git clone https://github.com/ghostty-org/ghostty
   cd ghostty
   ```

2. ビルド:
   ```shell
   zig build
   ```

3. 実行:
   ```shell
   zig build run
   ```

### Nixユーザー向け

```shell
nix develop  # 開発環境に入る
zig build    # ビルド
```

## 開発

### ビルドコマンド

| コマンド | 説明 |
| --- | --- |
| `zig build` | デバッグビルド |
| `zig build run` | Ghosttyを実行 |
| `zig build test` | ユニットテストを実行 |
| `zig build run-valgrind` | Valgrind下で実行（メモリリーク検出） |
| `zig build update-translations` | 翻訳ファイルを更新 |
| `zig build dist` | ソースtarballをビルド |
| `zig build distcheck` | ソースtarballをビルドして検証 |

### テスト

```shell
# 全テスト実行
zig build test

# フィルタ付きテスト
zig build test -Dtest-filter=<filter>
```

### Linting

- **Prettier**: ドキュメントとリソースのフォーマット
  ```shell
  prettier --write .
  ```

- **SwiftLint**: Swiftコードのリント
  ```shell
  swiftlint lint --fix
  ```

- **ShellCheck**: シェルスクリプトのチェック
  ```shell
  shellcheck --check-sourced --severity=warning $(find . -name "*.sh" -type f)
  ```

- **Alejandra**: Nixモジュールのフォーマット
  ```shell
  alejandra .
  ```

### ログ出力

環境変数 `GHOSTTY_LOG` でログ出力先を制御できます:
- `stderr`: 標準エラー出力
- `macos`: macOS統合ログ

```shell
GHOSTTY_LOG=stderr,macos ghostty
```
