
2026/03/21 7:11
ゴーストリング
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Ghostling は、Raylib を使用してウィンドウ作成とレンダリングを行い、単一ファイルに libghostty ライブラリを埋め込む方法を示す、C 言語で完全に実装された軽量デモターミナルです。
本プロジェクトは libghostty‑vt(ゼロ依存の VT パーサ)に依存し、以下のコアターミナル機能を提供します:テキスト再流しによる画面サイズ変更;24‑ビットと256色完全対応;太字/イタリック/反転スタイル;Unicode/複数コードポイントグラフェム処理;Shift/Ctrl/Alt/Super 修飾子付きキーボード入力;Kitty キーボードプロトコル;X10、通常、ボタン、任意イベントモードを含む包括的マウストラッキングとレポート形式(SGR、URxvt、UTF8、X10);スクロールホイールサポート;ドラッグ可能スクロールバー;フォーカス報告。
Ghostling は意図的に最小限で設計されており、完全装備のターミナルとして日常使用を想定していません。正確性についても限定的な監査しか行われていません。これは libghostty のレンダラー非依存設計を示す例です:ライブラリはパースと状態管理を担当し、実際の描画はユーザーが選択したシステム(この場合は Raylib)に委ねられます。
今後の libghostty‑vt の拡張として、Kitty Graphics Protocol、OSC クリップボードサポート、および OSC タイトル設定を予定しています。デバッグビルドは追加の安全チェックにより遅くなりますが、リリースビルドは効率的に動作します。
このバージョンは Key Points List の主要ポイントをすべて保持しつつ、要約を簡潔で明瞭に保っています。
本文
Ghostling(ゴーストリング)とは?
Ghostling は、libghostty C API を単一の C ファイルで構築した最小限機能付きターミナルをデモンストレーションするプロジェクトです。
ウィンドウ作成と描画には Raylib を使用し、シングルスレッド(ただし libghostty‑vt はスレッド対応)で動作します。また、メインの Ghostty GUI が GPU 直接描画を行うのに対して、Ghostling は 2D グラフィックスレンダラーを採用しています。これにより、libghostty の柔軟性とさまざまな環境での活用方法が示されています。
注意
Ghostling ターミナルは日常的に使う完全機能付きターミナルではありません。
libghostty に基づく最小実装として作られたもので、デモ目的ですので、正確性を保証するための監査は行っていません。C で書かれている点にご留意ください。
Libghostty(リブゴーストティ)とは?
Libghostty は Ghostty のコアから抽出した埋め込み型ライブラリです。
C API と Zig API の両方を公開しており、任意のアプリケーションが高速で正確なターミナルエミュレーションを組み込むことができます。
Ghostling は libghostty‑vt を使用しています。これは依存関係ゼロ( libc も不要)で次の機能を提供します:
- VT シーケンス解析
- ターミナル状態管理(カーソル位置、スタイル、テキスト再流し、スクロールバックなど)
- レンダラー状態管理
描画やウィンドウ作成コードは含まれていません。Ghostling のように、利用者側で独自に実装します。
核心ロジックは Ghostty から直接抽出されており、以下の優れた特長をそのまま継承しています:
- 優れた精度・完全性を備えたターミナルエミュレーション
- SIMD 最適化されたパーシング
- 先進的な Unicode 対応
- 高度に最適化されたメモリ使用量
- 数百万の日次アクティブユーザーによって検証・テスト済み
主な機能
Ghostling は libghostty の薄いラッパーですが、以下のような機能を備えています:
| 機能 | 内容 |
|---|---|
| 文字列再流し付きリサイズ | ウィンドウサイズ変更時にテキストが自動で再配置されます |
| フル24‑bitカラー・256色パレット | 高彩度のカラーモードをサポート |
| ボールド、イタリック、逆転スタイル | 文字装飾を多様に表現 |
| Unicode & マルチコードポイント(グレム)の扱い | シェーディングやレイアウトは不要ですが、正確なグラフェム処理が可能 |
| キーボード入力 (Shift, Ctrl, Alt, Super) | 修飾キーを含む完全サポート |
| Kitty キーボードプロトコル | Kitty ターミナルのキーボード互換性 |
| マウス追跡(X10、通常、ボタン、任意イベント) | さまざまなマウスモードに対応 |
| マウス報告形式 (SGR, URxvt, UTF8, X10) | 多様な出力フォーマットを提供 |
| スクロールホイール | ビューポートスクロールバックまたはアプリへ転送 |
| スクロールバー(ドラッグでスクロール) | UI の便利さ向上 |
フォーカス報告 ( / ) | ターミナルのフォーカス状態を通知 |
| その他 | Ghostty がサポートする全ターミナルエミュレーション機能 |
今後実装予定
libghostty‑vt でまだ公開されていないが、将来的に実装予定の機能は以下です:
- Kitty Graphics Protocol
- OSC クリップボードサポート
- OSC タイトル設定
Ghostling 自体では未テスト・未実装の可能性がある追加項目もあります(例:Windows サポート – libghostty‑vt は Windows をサポートしています)。リストは随時更新されます。
取り扱わない機能
Libghostty はコアターミナルエミュレーションに集中しており、以下のような GUI 上位レイヤーの機能は含みません:
- タブ
- 複数ウィンドウ
- スプリット(分割)
- セッション管理
- 設定ファイルや GUI
- 検索 UI(ただし検索ロジック自体は libghostty‑vt に実装)
必要に応じて利用者側で実装する想定です。本例は最小限に留めています。
ビルド方法
必要条件
- CMake 3.19+
- C コンパイラ
- Zig 0.15.x(PATH に入っていること)
Raylib はまだインストールされていない場合、CMake の
FetchContent で自動取得します。
cmake -B build -G Ninja cmake --build build ./build/ghostling
注意
デバッグビルドは Ghostty 内の多くの安全性・正確性チェックにより極めて遅くなります。ベンチマークには使用しないでください。
リリース(最適化)ビルド:
cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release cmake --build build
初回の
configure 後はビルドステップだけ実行すれば十分です。
FAQ
なぜ Zig ではなく C を使うのか?
libghostty‑vt は完全に機能し、検証済みの Zig API を備えています。Ghostty GUI 自体もこの API を使用していますが、本デモは「最小限の C API」を示すためです。C は多くの開発者環境で広く使われており、アクセスしやすいというメリットがあります。
Rust など他言語はどうなる?
libghostty‑vt は C API を持ち、依存関係ゼロなのでほぼ任意の言語に薄いバインディングを作ることができます。Ghostty プロジェクトが公式に C と Zig 以外の言語用バインディングを維持するかは未定ですが、コミュニティ側で多様な言語への対応を期待しています。
libghostty は Raylib が必要?
いいえ! Libghostty はレンダラーや GUI フレームワークに関して一切の意見を持ちません。ブラウザ向け WASM も含め、単独で使用可能です。高性能な「レンダー状態 API」だけを提供し、必要な描画コードは利用者が実装します。Ghostty GUI が Metal/OpenGL 用に使う API と同じものを Raylib の 2D グラフィックス API に適用しています。
なぜ CMake・Raylib を選んだのか?
「何かを選ぶ必要があった」だけです。任意のビルドシステム・ライブラリを使用できます。CMake は広くサポートされており、Raylib はウィンドウ作成と 2D 描画に優れたシンプルなライブラリです。詳細に囚われすぎず、実装に集中してください。