- libghostty は、あらゆるアプリケーションで利用可能な 埋め込み型ターミナルエミュレータライブラリ として開発が進められている
- 最初の構成要素である libghostty-vt は、パースと状態維持に最適化された 依存性のない API である
- ターミナルエミュレーション の複雑さと重複実装の問題を解決するために登場し、クロスプラットフォームと高い移植性を目指している
- 今後はキーボード入力処理、GPUレンダリング、さまざまなフレームワーク連携 など、追加ライブラリへ拡張していく計画である
- 現在 Zig API はテスト可能で、C API もまもなく公開予定となっており、ユーザーフィードバックを積極的に求めている
紹介と libghostty 開発の背景
- libghostty は、すべてのアプリケーションに最新で高速かつ完全なターミナルエミュレータ機能を組み込めるよう設計された ライブラリプロジェクト である
- 現在、多くのプログラムが独自方式でターミナルエミュレータを直接実装するか、非常に限定的な形のターミナル機能だけを個別に作っているのが実情である
- このように個別開発される ターミナルエミュレーション実装 は、ad-hoc な一回限りのコードベースであることが多く、例外処理や複雑性を十分に扱えないため、不完全さ、バグ、性能低下 の問題にしばしば直面する
- ほとんどの開発者にとってターミナルエミュレーション実装は中核業務ではないため、共通的で再利用性の高いソリューション への需要がある
- libghostty は最小限の依存性で設計された クロスプラットフォーム C API を提供し、これにより多様なアプリケーションで安定かつ高速なターミナルエミュレーション機能を利用できる
libghostty-vt: 最初のライブラリの出発点
libghostty-vt は 依存性がまったくない(libc すら不要)ライブラリであり、ターミナルシーケンスのパースと、カーソル位置、スタイル、改行などのターミナル状態を維持する API を提供する
- このターミナルシーケンスのパースは、ターミナルエミュレータの中核機能であるだけでなく、単純なスタイル付き出力が必要なサイト(GitHub Actions、Vercel のビルドログなど)でも不可欠な役割を果たす
- ターミナルプロトコルのパースは表面的には単純に見えるが、実装難易度は非常に高く、実際に Jediterm など複数の実装で一部シーケンス処理に問題が見られる事例がある
- 一部の開発者は ANSI シーケンスだけを簡単にパースする方式にとどまるが、複雑なスタイル処理(さまざまな RGB 表記法など)や完全な互換性が求められるため、精巧なパーサ が不可欠である
- libghostty-vt は Ghostty の実証済みコアから抽出されており、SIMD 最適化パース、優れた Unicode 対応、高度なメモリ構造、広範なプロトコル互換性(Kitty Graphics、Tmux Control Mode など) を備える
- 単一ファイルの ゼロ依存 C API として提供され、あらゆる汎用言語や環境に容易に組み込める。まず macOS、Linux(x86_64、aarch64)をサポートし、順次 Windows、組み込み、WASM などへ拡張する計画である
- Ghostty GUI よりもさらに広範な対象をサポートできる
長期的に拡張される libghostty
- libghostty-vt に続いて、入力処理(キーボードエンコーディングなど)、GPUレンダリング(OpenGL、Metal)、GTK ウィジェット や Swift フレームワーク などの追加機能を提供するライブラリ群が順次公開される予定である
- こうした機能拡張はモジュール単位で構成され、依存関係やコードサイズ、保守の複雑さを最小限に抑える
libghostty-vt の開発状況
- Zig モジュールとして
libghostty-vt を外部公開する PR(プルリクエスト) が最近マージされ、Zig 開発者はすぐに利用可能である
- C API は定義作業が進行中で、まもなくテスト用として提供される予定である(コアロジックはすでに数年間 Ghostty で使われてきた実証済みのソースである)
- Ghostty の macOS アプリでも内部向け C API を使用しているが、現在の内部ヘッダーは外部公開や一般利用には適していないため、まったく新しい C API を設計中である
- libghostty は Ghostty アプリケーションとは別に バージョン管理 されており、現在はアルファ段階で、早期導入と 言語バインディング開発者の参加 を期待している
- 6か月以内にタグ付きの初回リリースを目標としている
ユーザーフィードバックの募集
- 現在は API 設計段階 にあるため、実際のユーザーの意見やフィードバックが非常に重要な時期である
- Ghostty 以外にも、さまざまなコミュニティメンバーが libghostty ベースのプロジェクトを開発中であり、さらに多くのユーザーの参加を望んでいる
- プロジェクト活用のアイデアや要望があれば、Ghostty Discord やメールを通じて開発者と直接やり取りできる
- libghostty は現在アルファ版であり、API はまだ安定していないが、コアロジックは実運用で検証された高い安定性 を備えている
今後の展望と影響
- Ghostty アプリケーションの 安定性達成 を土台に、いまや libghostty というより大きな目標へ進めるようになった
- libghostty がさまざまなアプリケーションで広く使われるようになれば、Ghostty 単体アプリを超える、より大きな エコシステムへの波及力と影響 を生み出せる
- libghostty の活用が増えれば、Ghostty 本体もさらに豊富な機能と安定性を獲得できる
- Ghostty と libghostty は相互補完的に発展し、開発者とユーザーの双方に利益をもたらす見通しである
3件のコメント
1.0 から使っていますが、スクロールと検索がないこと以外は満足しています(笑)。iTerm を使っていましたが、これに落ち着きました。
Ghostty 1.0 リリース - 高速なクロスプラットフォーム対応ターミナルエミュレーター
Hacker Newsの意見
この人は会社の創業、上場、数十億規模での売却までやり遂げたあと、またコーディングの世界に戻ってくる姿が本当に伝説的
Hashimotoは本当に天才というだけでなく、システムとインターフェースを極限までモジュール化し、絡み合いを最小化する並外れた抽象化能力が何より感嘆に値すると思う。Rich Hickeyが唱えたSimple Made Easyの哲学をそのまま実践している人のように感じる。彼のソフトウェアは、正しく動作せざるを得ない構造で設計されているように思える。そしてGhosttyを初めて使ってみたが、iTerm2とZsh/Powerlevel10kテーマでは常に少しレンダリングの遅延があったのに、ghosttyではほぼ即座に反応する
本当にうらやましくもあり、同時に夢のような人生だと思う。富を得たあと、ただプロジェクトそのもののために創作を続けること、お金のために品質で妥協しなくてよい状況だ。Knuthの古い名言を思い出す
確かに愛情を込めて作られたプロジェクトが、ますます大きな成功を収めている。金に執着しなければ、より良い結果を生み出せることを示している。一方で、こうした人生を享受するには、ある程度の資本が先に必要だという点で、私たちの社会構造や経済全体を振り返らせられる。Knuthの言うように、もう少し時間さえ与えられれば、誰もがより良い結果を出せるはずなのに、常に急いでいると多くを犠牲にすることになる。そして彼のもう一つの名言のように
このあたりで問いが生まれる。私たちは本当に、問題をうまく解決し、人生を楽にする人々にふさわしい報酬を与えているのか。それとも無意味なゲームのスコアを上げているだけなのか。伝説をたくさん生み出す方法とは何だろう。品質の価値を取締役会に説明しなければならない重荷もなく、Mitchellのように情熱を追って生きられる社会をどう作れるかを考えさせられる
実際に会ったことがあるが、本当に温かくていい人だった。Hashicorp創業前にKiipにいたころ、カンファレンスで昼食を共にしたが、Mitchellは本物のハッカーだった。コンピューティングに関するあらゆることを心から愛しているのが伝わってきた。特に分散システムのカンファレンスではとても深く没頭していた。何をやっても必ず成功するだろうと確信した。Ghosttyを見つけて使って以来、満足しながら使い続けている
しかもこの人はttyソフトウェア開発にまで没頭している。Unix技術スタックの中でも本当にオタク心あふれる領域だ
毎日ghosttyを使っていたのに、作った人がMitchell Hashimotoだと今知った。本当にすごい体験だ
Ghosttyは本当にすごい。本物のオムニプラットフォーム(omni-platform)なターミナルエミュレーターがモバイルにまで拡張される可能性があるのは楽しみだ。GhosttyがZigで作られているのも面白い。自分が普段使う最初のZigベースのプログラムで、リポジトリ構造がGolangスタイルとまったく同じなのも興味深い https://github.com/ghostty-org/ghostty
Ghosttyを本当に気に入りたいのに、惜しい点がある
font-thicken-strengthで調整してみたが100%同じにはならない。Metalレンダリングの特性上、不可能か非常に難しいように思える。1日中テキストだけを見る立場では、非常に重要な部分だMitchellが開発者体験に注ぐ情熱とディテールへのこだわりは本当にすごい。2011年にサンタモニカで初めてVagrantを使ったときの感動を今でも鮮明に覚えている。iTerm2を置き換えるつもりはまったくなかったのに、Ghosttyに触れてすぐに夢中になった
最近ghosttyを毎日使っている。最近乗り換えた。macOSでcaps lockをcmdにマッピングしておくと、cmd+cも問題なく動く。デフォルト設定が賢くよくできていて、カスタマイズが簡単ではないこと以外はすべて満足している。Gruvbox lightテーマもとても見やすい。Zigで書かれていること自体もとてもクールで、Zigが実運用に十分な準備ができた言語か気になるなら、ghosttyがその答えになるはずだ。もう他のターミナルに戻ることはなさそうで、本当に満足している。参考までに、ghosttyにaerospaceまで組み合わせると、Macでキーボードだけでほぼ完璧な環境が完成する
自分のAirmacでghosttyを使っている。兄がコーディングしながら使っていて譲ってくれたMacだ。ghosttyは本当に素晴らしく、心から感謝している。小さな部分かもしれないが、libc依存がないことがなぜかとても大切に感じられる
visidataの頻度分析ヒストグラムが正しくレンダリングされず、一部は四角で表示されるのに、残りは菱形の中にクエスチョンマークで出ていた。この問題のせいでまだiTermを離れられない。どんなキーワードで検索すればよいのかもよく分からず、解決が難しかった
Ghosttyのテキストリフロー(特にスクロールバックを含む)がNeovimベースのターミナルでも解決されることを願って、引き続き注目している。Ghosttyがターミナル環境に新しい革新をもたらしているのは本当にうれしい https://github.com/neovim/neovim/issues/33155
ghosttyを本当に使いたいのに、cmd+f対応がないのでまだ試せていない。でもこのプロジェクトの発展にはとても期待している
https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
https://github.com/ghostty-org/ghostty/issues/189