Ghostty: Reflecting on Reaching 1.0

Mitchell Hashimoto

Ghostty:1.0到達を振り返って

原文は Mitchell Hashimoto により に公開されました。 このブログを購読する

これはリリース告知ではない。Ghostty 1.0はすでに公開されている。ダウンロードや詳細はGhosttyのウェブサイトで確認できる。ここでは、このプロジェクトについての個人的な振り返りを綴ってみたい。

Ghostty 1.0が公開された。

2年前に「ターミナルエミュレータをリリースすることになる」と言われても、信じられなかっただろう。昔からターミナルが好きで、キャリアのすべてをターミナルを前提としたソフトウェアの開発に費やしてきた。でも、ターミナルってもう解決済みの問題だよね?そう思っていた。

このプロジェクトを始めたのは2022年、Zigで遊び、グラフィックスプログラミングを試し、ターミナルへの理解を深めるためでしかなかった。公開するつもりなどなかった。そこにイノベーションの余地があるとも思っていなかった。数ヶ月でいろいろ学んで、次に進むつもりだった。

しかし作業を進めるうちに、他のターミナルの見え方が変わってきた。気に入らないトレードオフが見えた。欲しい機能が見えた。改善できるパフォーマンスが見えた。そして停滞も見えた。世の中には素晴らしいターミナルがたくさんあり、合うものがあればそれを使えばいい。ただ、自分は違うものが欲しかったし、同じように思う人もいるのではないかと考えた。

こうしてGhosttyは生まれた。完璧ではないし、完成もしていないし、誰にでも向いているわけでもない。でも、これは自分のプロダクトだ。自分の価値観と、ターミナルはこうあり得るというビジョンを映したものだ。

Ghosttyが他のターミナルとどう違うのか、そしてこのプロジェクトにどんなビジョンを持っているのかについて詳しくは、Ghostty 1.0 is comingの投稿を読んでほしい。

プライベートベータ

Ghosttyで最も物議を醸したのは、プライベートベータだった。本当に、プライベートベータだ。これがプロジェクトに与える影響を、私はとてつもなく過小評価していた。良い意味でも、悪い意味でも。

プライベートベータ:良かったこと

まず、なぜプライベートベータにしたのか。最大の理由は、自分自身のキャパシティを管理するためだった。プロジェクトを公にし始めたのは、第一子が生まれる直前のことだった。ソフトウェアをローンチした経験から、そのストレスがどれほどのものかは分かっていた。そのストレスを避け、家族に集中したかった。関心を持ってくれた少人数のユーザーに絞ることで、問題の発生をコントロールし、自分が大丈夫だと思える範囲で徐々にユーザー数を増やせると考えた。

もう一つの理由は、重要度ははるかに低いが、ターミナルエミュレータは他の多くのソフトウェア以上に、動くか動かないかがはっきりしているという感覚があったからだ。Vimが必要とする機能の半分しかエミュレートできないターミナルを出すわけにはいかない。一定の機能水準を下回る状態から、段階的に改善していくこともできない。最初のパブリックリリースでその水準を満たしていることを確実にしたかった。公開直後から、みんなが実務で生産的に使えるものにしたかったのだ。

この2点において、プライベートベータは大成功だった(予想をはるかに超えて)。自分のキャパシティを管理し、家族に集中することができた。娘の生後1年間、毎朝起こし、起きている時間はいつも一緒に遊び、すべての健診に付き添い、すべての節目に立ち会うことができた1

そしてベータコミュニティは素晴らしかった。忍耐強く、理解があり、協力的だった。バグを見つけ、フィードバックをくれ、彼らがいなければGhosttyは今ほど良いものにはなっていなかった。感謝してもしきれない。

プライベートベータ:良くなかったこと

それ以外はすべて、プライベートベータがもたらした意図せぬ結果だった。盛り上がり、参加できなかった人たちのフラストレーション、一部の人にはエリート主義と映ったこと、などだ。

盛り上がりは予想していなかった。そう言うと嘘だと思う人もいるが、本当だ。プライベートベータや限定アクセスが原則として盛り上がりを生むことくらい、私も分かっているほど世間知らずではない。ただ、ターミナルエミュレータに興味を持つ人がそんなに大勢いるとは思っていなかったのだ。ニッチな層向けの地味なソフトウェアを作っているつもりだった。盛り上がるはずがない、と。

しかしそれは間違いで、結果は現実のものとなった。参加できないことにフラストレーションを感じる人、取り残されたと感じる人、盛り上がりを作るためにわざとやっていると感じる人もいた。ウェイトリストは、私が受け入れられると感じられる人数を大きく上回って膨らんでいった(先に述べた優先事項を考えると)。

そのことについては申し訳なく思っている。言えるのは、そうなるつもりはなかったということだけだ。自分が許容できると思える範囲で、できれば少し無理をしてでも、できるだけ多くの人を招待しようとベータへの招待を増やしていった。ベータ終了時には、Discordの参加者が当時28,000人いる中で、ベータユーザーは約5,000人になっていた。望んでいたアクセス率には届かなかったが、私にとっては手に負える限界を超える数だった。

良いニュースは、Ghosttyがついにパブリックになり、誰でも使えるようになったことだ。プライベートベータのネガティブな側面は過去のものとして、これからは未来に目を向けていければと思う。

盛り上がりがもたらしたもう一つのネガティブな側面は、Ghosttyに革命的なものを期待されてしまうことだ。革命的でもあり、そうでもない。Ghosttyは他のターミナルとは異なるゴールとトレードオフを持っている。それらを求めている人にとって、Ghosttyは新鮮な風であり、他のどのターミナルにもできないことをやってのける。だが他の人にとっては、ただのターミナルだ。そしてそれでいい。自分に合ったターミナルを見つけてほしいし、Ghosttyがすべてのターミナルの決定版だと言うつもりはない。

技術スタック

Ghosttyは型破りな技術スタックとアーキテクチャを採用している。Zigで書かれたコアと、プラットフォーム固有のコードで書かれたGUIだ。技術スタックの詳細については、Ghosttyについて語ったオリジナルのトークを参照してほしい。

2年経った今、この技術スタックとアーキテクチャにはとても満足している。このプロジェクトにとって正しい選択だったと思うし、それ以上に、このアーキテクチャは多くのプロジェクトにとっても正しい選択になり得ると思っている2

Zigでの開発は本当に楽しい。毎日Zigを書くのが楽しくて、その楽しさは2年間まったく衰えていない。ビルドシステムは素晴らしく、コミュニティは最高で、コアメンテナたちは天才的だ。私がどれだけ入れ込んでいるかはよく知られていると思うが、言葉だけでなくZig Software Foundationへのスポンサーという形でも支援している。

Zigで書かれた共有コアとプラットフォーム固有のGUIを分離した構成も成功だった。コードの90%以上を共有しながら、プラットフォームネイティブな体験をGhosttyに難なく統合できている。

ベータコミュニティも、プロジェクトへのコントリビュートにまったく問題を感じていなかった。これは、Zigが新しくニッチな言語でありながら、新しいコントリビューターにとっても取っつきやすく生産的であることを示していると思う。プロジェクトの将来にとって素晴らしいことだ。

思いがけないコミュニティ

Ghosttyの周りに形成されたコミュニティは、予想外で素晴らしいものだった。

具体的に言えば、プライベートベータのコミュニティのことだ。パブリックなコミュニティは、ソフトウェアにアクセスできないという構造上、ややワイルドウエストな状態にある。だがプライベートコミュニティには焦点と目的があり、その一員でいられたことは大きな喜びだった。

Ghosttyコミュニティは、(もちろん)ターミナルに情熱を持ちつつ、パフォーマンス、デザイン、ソフトウェアの品質、そして正しいことを正しい理由でやり遂げることに情熱を持つ人々の集まりだ。一緒にいて心地よく、コラボレーションするのが楽しい人たちだ。知り合えて本当に良かったと思える人たちで、これからも一緒に活動できることを楽しみにしている。

個人的にも、このコミュニティは意外なものだった。Ghosttyコミュニティのほとんどの人は、私のこれまでの仕事を知らないからだ。インフラ畑のバックグラウンドを持つ人が少なく、だから私の過去の仕事にも馴染みがない。新しいコミュニティを築くのは楽しく、初めてのオープンソースプロジェクトの周りにコミュニティを作っていたキャリア初期の頃をよく思い出させてくれる。

1.0のその先

Ghostty 1.0は公開されたが、私にとってプロジェクトはまだまだ終わりではない。1.0でさえ、理想よりは完成度が低いと感じている!しかしどこかで線を引かなければならず、結果として1.0は素晴らしい出来になったと思う。

短期的には、「既存のターミナルの中で最高」というゴールに引き続き注力したい。1.0に入らなかった機能を固め、残っているバグを修正したい。将来のイノベーションに向けて、Ghosttyの基盤が確かなものになるようにしたい。

中期的に、といっても遠くない将来(2025年以内)に、他のプロジェクトが独自のターミナルエミュレータのフロントエンドを構築するために使える、安定したスタンドアロンのlibghosttyをリリースすることに焦点を移したい。libghosttyは、Ghosttyがテックコミュニティに長期的に与えうるインパクトの中で、最も有望な部分だと思っている。

ただ、どんなゴールがあったとしても、Ghosttyは私にとって何よりもまずパッションプロジェクトであり続ける。このプロジェクトに取り組むのは楽しいからであり、コミュニティと私自身がそのことを見失わないようにしたいと思っている。

感謝

この世で何事も一人では成し遂げられないと信じている。Ghosttyは一人で始めたかもしれないが、一人で完成させたわけではなく、道すがら感謝したい人がたくさんいる。

Ghosttyベータコミュニティの影響は強調してもしきれない。この記事の中ですでに述べたが、Ghosttyがこれほど機能豊富で洗練されたものになっているのは、ベータコミュニティの細部へのこだわりとフィードバックのおかげだ。ベータに参加し、今日のGhosttyを作り上げてくれたすべての人に心から感謝している。

Discordのモデレーターたちには特別に感謝を伝えたい。彼らは懸命に働き、平和を保ち、コミュニティが正しいことに集中できるようにしてくれた。私が集中でき、ベータコミュニティが活発でいられる環境を作ろうとする彼らの努力を、毎日目にしていた。30,000人に対してモデレーターは10人にも満たない中で、状況を考えれば驚くべき仕事をしてくれた3

そして最後に、最も大切なこととして、妻に感謝したい。私たちは初めての子育て中で、新生児を抱えながら、時間を見つけて取り組みたいサイドプロジェクトを両立させるのは並大抵のことではなかった(プライベートベータという形をとってもなお)。彼女はGhosttyに取り組む時間を作れるよう支えてくれ、フォントレンダリングについての私のとりとめのない話に辛抱強く耳を傾けてくれた(寝落ちしながら)。

Ghostty 1.0を楽しみ、そこに込められた愛情とこだわりを感じてもらえたら嬉しい。ここからどこへ向かうのか、楽しみにしている!

脚注

  1. 最初の1年の間に2週間ほど離れなければならなかったので、不在の日もあったが、できる限りそばにいた。

  2. 自分が発明したと言いたいわけではない!ただ、あまり見かけない構成だということだ。

  3. モデレーターたちと私はBANハンマーをかなり気前よく振るっていたことは認めざるを得ない。良い人たちも追い出してしまったと思う。だがDiscordの規模を考えると、問題を起こす人に割く余裕はほとんどなかった。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント