3 ポイント 投稿者 GN⁺ 2025-09-24 | 3件のコメント | WhatsAppで共有
  • 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件のコメント

 
yshrust 2025-09-24

1.0 から使っていますが、スクロールと検索がないこと以外は満足しています(笑)。iTerm を使っていましたが、これに落ち着きました。

 
GN⁺ 2025-09-24
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

    • (Goのレイアウトっぽくはない)むしろそれが良い点だ。goのpkg/ src/ などのディレクトリ構造は、それほど良い構造ではない
  • Ghosttyを本当に気に入りたいのに、惜しい点がある

    • ⌘Fでの検索にまだ対応していない
    • 過去の出力や特定の文字列をキーボードだけで選択・コピーする方法がない
    • ⌘.キーでCTRL-Cを送信できない(Macユーザーなら期待する機能だ)
    • フォントレンダリングがまだTerminal.appほど滑らかではない。font-thicken-strengthで調整してみたが100%同じにはならない。Metalレンダリングの特性上、不可能か非常に難しいように思える。1日中テキストだけを見る立場では、非常に重要な部分だ
    • ⌘.を押すとCTRL-Cが送信される設定は可能
      keybind = "cmd+.=text:\x03"
      
      関連する議論 : https://news.ycombinator.com/item?id=42889411
    • まもなく対応予定 : https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • スクロールバック検索は1.3バージョンに入る予定だが、あと6か月ほどはかかりそうだ。Ghosttyも最近急速に進化しているので、1.2のリリースノートも見ておく価値がある
    • ポイントが上下に激しく動いているのを見ると、自分の書いた内容が誤解を招いたようだ。実際、クロスプラットフォームで各ベンダーごとにネイティブGUIを実装するという発想はとても素晴らしい。実際にこのプロジェクトが存在することをとてもうれしく思っている。ただ、個人的にはまだ完璧ではないと感じる。それでも期待しながら見守っている
    • 2つ目の指摘(キーボードで過去の出力を選択すること)が、WezTermを使い続けている主な理由だ
  • Mitchellが開発者体験に注ぐ情熱とディテールへのこだわりは本当にすごい。2011年にサンタモニカで初めてVagrantを使ったときの感動を今でも鮮明に覚えている。iTerm2を置き換えるつもりはまったくなかったのに、Ghosttyに触れてすぐに夢中になった

  • 最近ghosttyを毎日使っている。最近乗り換えた。macOSでcaps lockをcmdにマッピングしておくと、cmd+cも問題なく動く。デフォルト設定が賢くよくできていて、カスタマイズが簡単ではないこと以外はすべて満足している。Gruvbox lightテーマもとても見やすい。Zigで書かれていること自体もとてもクールで、Zigが実運用に十分な準備ができた言語か気になるなら、ghosttyがその答えになるはずだ。もう他のターミナルに戻ることはなさそうで、本当に満足している。参考までに、ghosttyにaerospaceまで組み合わせると、Macでキーボードだけでほぼ完璧な環境が完成する

    • どうしてghosttyを使うべきなのか教えてもらえないだろうか(Terminal.appをメインで使っている立場として)
    • Clickhouse、Bunもすごいプロジェクトだ
  • 自分のAirmacでghosttyを使っている。兄がコーディングしながら使っていて譲ってくれたMacだ。ghosttyは本当に素晴らしく、心から感謝している。小さな部分かもしれないが、libc依存がないことがなぜかとても大切に感じられる

  • visidataの頻度分析ヒストグラムが正しくレンダリングされず、一部は四角で表示されるのに、残りは菱形の中にクエスチョンマークで出ていた。この問題のせいでまだiTermを離れられない。どんなキーワードで検索すればよいのかもよく分からず、解決が難しかった

    • メインフォントとフォールバックフォントの両方に、そのコードポイントが欠けている可能性がある。ghosttyユーザーなら、iTerm2でどのフォントでそのグリフが表示されているかを確認して、ghosttyで適切な設定があるか探してみることを勧める
  • Ghosttyのテキストリフロー(特にスクロールバックを含む)がNeovimベースのターミナルでも解決されることを願って、引き続き注目している。Ghosttyがターミナル環境に新しい革新をもたらしているのは本当にうれしい https://github.com/neovim/neovim/issues/33155

    • ご本人はneovimターミナルのパワーユーザーなのだろうか。以前、tmuxがneovimを動かす流れから、neovimが直接ターミナルを管理する形にしたくてワークフローを変えようとしたことがある。ファイルを1つのバッファでしか開けないので便利そうだった。どこかのペインでファイルを開くと、すでに別のneovimインスタンスで開かれていることが多かったので試した変更だった。テスト中にlibghosttyに変えて解決しそうなリフロー問題は特に感じなかったし、むしろパラダイムへの適応のほうが難しかった。neovim内蔵ターミナルにどっぷり浸かっている人として、そしてlibghosttyの適用で何が改善されうるのか、体験談を聞いてみたい
  • ghosttyを本当に使いたいのに、cmd+f対応がないのでまだ試せていない。でもこのプロジェクトの発展にはとても期待している

    • ロードマップに含まれている
      https://ghostty.org/docs/install/release-notes/1-2-0#roadmap
    • cmd+shift+fのようなキーで全バッファをデフォルトのテキストエディタで開いて検索する方法が使える。多くの人がこの方法でしのいでいたし、自分も同じだった。内蔵スクロールバック検索が入るまで、十分実用的な代替手段だ
    • なぜこの機能が初期段階で追加されなかったのか気になる。ターミナルで履歴検索は必須なのに、何か複雑な理由でもあったのだろうか。実はMitchell本人も2年前に直接issueを立てていた
      https://github.com/ghostty-org/ghostty/issues/189
    • 多くの人はcmd+fのような履歴検索がないことに不満を言うが、自分は使える環境でも一度も使ったことがない。どういうワークフローを想定しているのか説明してもらえるとありがたい。自分が何か大きなものを見落としているのか気になる
    • 内部でtmuxを起動して、cmd+fをcopy-mode + / にマッピングする方法もある