Ghostty について

Ghostty は、高速・高機能・ネイティブであることで他と一線を画すターミナルエミュレーターです。優れたターミナルエミュレーターは数多くありますが、いずれも速度・機能・ネイティブ UI のいずれかを選ぶことを強いられます。Ghostty はその三つすべてを備えています。

どのカテゴリーにおいても、Ghostty が最高(つまり最速、最高機能、最もネイティブ)だと主張するつもりはありません。ただ、Ghostty を作り始めたとき、どのターミナルもせいぜい三つのうち二つまでしか選べないと感じていました。私は三つのカテゴリーすべてで競争力のあるターミナルを作りたかったのです。そして Ghostty はその目標を達成していると信じています。

詳細に入る前に、Ghostty が Mitchell Hashimoto(そう、私です!)によって始められた情熱のプロジェクトであることにも触れておきます。これは私が自由な時間に取り組み、愛情を注いできたものです。プロジェクトと関わるときは、どうかこのことを忘れないでください。素晴らしい貢献者たちと一緒に、私は最善を尽くしていますが、これは私たちの誰にとってもフルタイムの仕事ではありません。

ネイティブ

「ネイティブ」の大まかな意味は、Ghostty があなたのデスクトップ環境で期待されるように見え、感じられ、動作するよう設計されているということです。

重要なのは、Ghostty が macOS と Linux のネイティブアプリケーションだということです。macOS では GUI は Swift で書かれ、AppKit と SwiftUI を使用しています。Linux では GUI は Zig で書かれ、GTK4 C API を使用しています1。これらの GUI は、私たちが「libghostty」と呼ぶ、Zig で書かれた共有コアと連携します。Zig に馴染みのない方のために説明すると、Zig はネイティブのマシンコードにコンパイルされるシステムプログラミング言語です。

その一部は、タブや分割、エラーメッセージなどの機能にネイティブ UI コンポーネントを使用することです2。これは、テキスト UI と独自ウィジェットを使う、あるいはこれらの機能をまったくサポートしない他の多くのターミナルエミュレーターとは対照的です。

もう一部は、すでに使い慣れている標準的なキーボード・マウスショートカットを使用することです。Ghostty は各プラットフォームの慣例に合わせて、macOS と Linux で異なるデフォルトのバインディングを使用します。

そして三つ目として、Ghostty は実行中のプラットフォームに固有のシステム機能と統合します。たとえば macOS では、Quick Look、感圧タッチ、macOS のセキュア入力 API、再起動時のウィンドウ状態復元などをサポートしています。これらはすべて macOS が提供するネイティブ API であり、Linux デスクトップ環境には同等のものはありません。

高機能

Ghostty は日常的な利用に役立つ豊富な機能を提供しようとしています。これらはターミナル機能とアプリケーション機能の二つに分けられます。

ターミナル機能には、ターミナル内で動作するプログラムが利用できる能力が含まれます。たとえば Ghostty は、Kitty グラフィックスプロトコル、ライト/ダークモード通知、ハイパーリンクなどをサポートしています。これにより Neovim や Zellij などのターミナルアプリケーションは、他のターミナルエミュレーターではできなかったことを実現できます3。

アプリケーション機能は、ターミナルエミュレーターそのものを操作するための、より高レベルな機能です。たとえば Ghostty は、ネイティブタブ、分割、macOS でのドロップダウンターミナル、システムのダーク/ライトモードに応じたテーマ切替などをサポートしています。

高速

Ghostty は高速であることを目指しています。

性能は人によって激しい議論になりがちな分野なので、私の唯一の主張は、Ghostty が最速のターミナルエミュレーターと同クラスであることを目指しているという点です。一部のベンチマークでは速く、他のベンチマークでは遅いこともありますが、いずれの場合も Ghostty が遅いとは言えないはずです。

「速い」というのも意味の多い言葉です。「速い」は人によって異なるものを意味しうるからです。たとえば、次は「速い」と言えるもののほんの一部のリストです:起動時間、スクロール速度、IO スループット、制御シーケンスのスループット、フレームレートなど。

将来は、Ghostty がさまざまな性能カテゴリーでどのように動作するかについて、詳細なベンチマークと説明を提供したいと考えています。最初の公開リリースでは、Ghostty が上記のとおり「速い」ことを目指している、とだけ述べておきます。

速度がターミナルエミュレーターにとってそれほど重要ではないと考える人が多いのは承知していますが、Ghostty の新規ユーザーからは、速度向上が日常の使用感にどれほど顕著に影響したかに驚いたという声を何度もいただいています。あなたも同じように感じてくれることを願っています。

libghostty

Ghostty はそのアーキテクチャでも一線を画しています。Ghostty のコアは、libghostty と呼ばれるクロスプラットフォームで C ABI 互換のライブラリです。libghostty はコアのターミナルエミュレーション、フォント処理、レンダリング機能を提供します。

Ghostty の GUI アプリケーションは libghostty の利用者です。macOS アプリは Swift で書かれ、AppKit と SwiftUI を使い、libghostty の C API にリンクしています。Linux アプリは Zig で書かれ、GTK4 C API を使い、やはり libghostty にリンクしています4。

このアーキテクチャにより、ターミナルエミュレーションと GUI を明確に分離できます。これは Ghostty がネイティブという目標を達成するための鍵となるアーキテクチャです。

このアーキテクチャは Ghostty をユニークにしています。Ghostty プロジェクトは、他のターミナルエミュレータープロジェクトが共有コアの上に構築できるようにすることも目指しているからです。これにより、コアのターミナルエミュレーションを再実装する必要なく、より高レベルな機能と UI に集中できる、より多様なターミナルエミュレーターのエコシステムが可能になります。

Note

最初の公開リリース時点では、libghostty はまだ安定した API ではなく、スタンドアロンの安定したライブラリとしてもリリースされていません。ただし、すでに macOS と Linux の GUI アプリケーションで使用されています。目標は API を安定化し、将来スタンドアロンのライブラリとしてリリースすることです。

Footnotes

  1. Linux には macOS のような「ネイティブ」な GUI ツールキットはありませんが、GTK4 は標準の GUI ツールキットに最も近いものです。重要なのは、私たちは独自ウィジェットを描画せず、Ghostty がデスクトップ環境に自然に溶け込むということです。 ↩

  2. Linux は GTK4 と(オプションで)Adwaita を使用するため、Ghostty は GTK4 アプリケーションのように見え、感じられます。それが「ネイティブ」かどうかは、あなたのデスクトップ環境と「ネイティブ」の定義によって変わります。注 1 も参照してください。 ↩

  3. たとえば、Neovim はフレーム間のテアリングを防ぐために同期レンダリングを使用しています。 ↩

  4. GTK4 アプリは Zig で書かれているため、伝統的な意味ではリンクしません。代わりに、公開されている libghostty API を使用し、単一の Zig コンパイル単位としてコンパイルされます。 ↩