Ghostty:1.0到達を振り返って
これはリリース告知ではありません。Ghostty 1.0はリリースされました。ダウンロードしたり、詳しい情報を読んだりするには、Ghosttyのウェブサイトをご覧ください。ここでは、このプロジェクトについて個人的に振り返ります。
Ghostty 1.0がリリースされました。
2年前の私に、ターミナルエミュレーターをリリースすることになると言っても、信じてもらえなかったでしょう。私はずっとターミナルが好きでしたし、これまでのキャリアはターミナルファーストのソフトウェアを世に送り出すことを軸に築いてきました。でも、ターミナルはもう解決済みの問題ですよね? 当時はそう思っていました。
2022年、私はZigで遊び、グラフィックスプログラミングを試し、ターミナルへの理解を深めるための手段として、プロジェクトを始めました。リリースするつもりはまったくありませんでした。イノベーションの余地があるとも思っていませんでした。数か月で多くを学び、次へ進むつもりでした。
しかし取り組むうちに、ほかのターミナルの見え方が変わっていきました。気に入らないトレードオフが見えてきました。欲しい機能が見えてきました。改善できるパフォーマンスが見えてきました。停滞も見えました。世の中には素晴らしいターミナルがたくさんありますし、それで困っていないなら、ぜひ使うべきです。でも私は何か違うものが欲しくなり、同じように考える人もいるのではないかと思いました。
こうしてGhosttyが生まれました。完璧ではありません。完成もしていません。万人向けでもありません。でも、これは私のものです。ターミナルはこうあってほしいという、私の価値観とビジョンを映したものです。
Ghosttyがほかのターミナルとどう違うのか、そしてこのプロジェクトについての私のビジョンを知りたい方は、Ghostty 1.0がやってくるという記事をお読みください。
プライベートベータ
Ghosttyで最も物議を醸したのは、プライベートベータでした。いや、本当にプライベートベータです。これがプロジェクトに及ぼす影響を、良い面でも悪い面でも、私は大幅に見誤っていました。
プライベートベータ:良かったこと
まず、なぜプライベートベータにしたのか。最大の理由は、自分自身の時間と余力を管理するためでした。初めてプロジェクトを公に共有し始めたのは、第一子が生まれる少し前です。ソフトウェアの立ち上げは経験していましたし、それに伴うストレスも知っていました。そのストレスを避け、家族に集中したかったのです。関心を持ってくれるユーザーを少人数に絞り、問題の流入を抑えながら、自分が無理なく対応できると感じた範囲でユーザー数を増やしていけると思いました。
次に挙げられる理由は、重要度としてはずっと低いのですが、ターミナルエミュレーターはほかの多くのソフトウェア以上に、動くか動かないかがはっきりしていると感じていたことです。Vimが必要とする機能の半分しかエミュレートできないターミナルエミュレーターを出荷することはできません。一定の機能水準を下回るターミナルエミュレーターを、少しずつ改善していくこともできません。最初の一般公開版がその水準を満たしていることを確実にしたかったのです。最初から生産的かつプロフェッショナルに使えるものにしたいと思っていました。
この2つの点に関して、プライベートベータは大成功でした(私の予想をはるかに超える成功です)。自分の時間と余力を管理し、家族に集中することができました。娘が生まれてから最初の1年間、毎朝娘を起こし、起きている時間はいつも一緒に遊び、すべての通院に付き添い、娘の成長の節目には必ず立ち会いました1。
そして、ベータのコミュニティは素晴らしいものでした。忍耐強く、理解があり、協力的でした。バグを見つけ、フィードバックを寄せ、Ghosttyを、彼らがいなかった場合よりもはるかに良いものにしてくれました。どれだけ感謝しても足りません。
プライベートベータ:悪かったこと
それ以外はすべて、プライベートベータが意図せず引き起こした結果でした。過熱した期待、参加できなかった人たちの苛立ち、一部の人が感じたエリート主義的な印象などです。
あれほどの盛り上がりは予想していませんでした。私が嘘をついていると思う人もいるようですが、本当です。プライベートベータや限定アクセスが、原理的には盛り上がりを生むことを知らないほど世間知らずではありません。ただ、ターミナルエミュレーターに関心を持つ人がこれほど多いとは思っていませんでした。ニッチな層向けの、退屈なソフトウェアを作っているつもりでした。盛り上がるはずがない、と。
しかし、私は間違っていました。その結果は現実のものになりました。参加できず、苛立つ人がいました。疎外されたと感じる人がいました。私が盛り上がりを生むためにわざとこんなことをしている、偽善的だと感じる人もいました。ウェイティングリストは、私が(それまでに述べていた優先事項を踏まえて)受け入れてもよいと思える規模を超えて膨れ上がりました。
そのことについては、申し訳なく思っています。私に言えるのは、こんな結果になるつもりはなかったということだけです。自分が無理なく対応できると思える範囲で、できるだけ多くの人を受け入れようとベータ招待を増やしました(実際には、その範囲を少し超えていました)。ベータを終了した時点で、Discordの参加者は2万8,000人、そのうちベータユーザーはおよそ5,000人でした。参加を望んでいた人たちにとって十分な割合ではなかったかもしれませんが、私が対応できる限界を超えていました。
良い知らせは、Ghosttyが一般公開され、誰でも使えるようになったことです。プライベートベータの負の側面は過去のものにして、これからに集中できればと思っています。
盛り上がりがもたらした、もう1つの負の側面は、Ghosttyが革命的なものであるという期待です。革命的でもあり、そうでもありません。Ghosttyには、ほかのターミナルとは異なる目標とトレードオフがあります。そうした特性を求める人にとって、Ghosttyは新鮮な風を吹き込むものであり、ほかのどのターミナルにもできないことを実現します。しかし、ほかの人にとっては、ただのターミナルです。それで構いません。皆さんにとって使いやすいターミナルが見つかることを願っています。Ghosttyがターミナルの決定版だなどと主張するつもりはありません。
技術スタック
Ghosttyは、一般的とは言えない技術スタックとアーキテクチャを採用しています。コアにはZigを使い、GUIにはプラットフォーム固有のコードを使っています。技術スタックについて詳しくは、Ghosttyについて私が行った最初の講演をご覧ください。
2年が経った今、私はこの技術スタックとアーキテクチャに非常に満足しています。プロジェクトにとって正しい選択だったと思います。それだけでなく、このアーキテクチャは多くのプロジェクトにとって正しい選択になり得ると思っています2。
Zigを使った開発は、本当に楽しいものでした。毎日楽しみながらZigを書いていますし、その楽しさは2年経っても少しも薄れていません。ビルドシステムは素晴らしく、コミュニティは最高で、コアメンテナーたちは非常に優秀です。私がZigに熱中していることはよく知られていますし、言葉だけでなく、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のリリースへと重点を移したいと考えています。Ghosttyがテックコミュニティに長期的な影響を与えるうえで、libghosttyはこのプロジェクトで最も有望な部分だと思っています。
ただ、どんな目標を掲げていても、Ghosttyは私にとって何よりもまず情熱を注ぐプロジェクトです。楽しいからこのプロジェクトに取り組んでいます。そのことを、コミュニティにも私自身にも見失ってほしくありません。
謝辞
この世の中で、何かを一人で成し遂げることはないと思っています。Ghosttyを始めたのは私一人だったかもしれませんが、完成させたのは私一人ではありません。ここに至るまでに、感謝を伝えたい人が本当にたくさんいます。
Ghosttyのベータコミュニティが与えた影響は、どれだけ強調してもしすぎることはありません。この記事ですでに述べましたが、Ghosttyがこれほど多機能で洗練されたものになったのは、ベータコミュニティが細部に目を配り、フィードバックを寄せてくれたおかげです。ベータに参加し、今日のGhosttyを作る手助けをしてくれたすべての人に、心から感謝しています。
Discordのモデレーターには、特別に感謝を伝えたいと思います。平穏を保ち、コミュニティが正しいことに集中できるよう、彼らは懸命に働いてくれました。私が集中でき、ベータコミュニティが成長できる環境を作ろうと、日々努力してくれていたことが分かりました。3万人の参加者に対してモデレーターは10人未満でしたが、その状況を考えれば、素晴らしい仕事をしてくれました3。
そして最後に、何よりも妻に感謝したいと思います。私たちは初めて子育てをする親であり、新生児の世話をしながら、取り組みたいと思っていたサイドプロジェクトの時間を見つけるのは(プライベートベータだったことを考慮しても)簡単ではありませんでした。妻はGhosttyに取り組む時間を作れるよう支えてくれましたし、フォントレンダリングについての私のとりとめのない話を、辛抱強く聞いてくれました(そして寝落ちしていました)。
Ghostty 1.0を楽しんでいただき、そこに込められた愛情と配慮を感じてもらえれば幸いです。ここから私たちがどこへ向かうのか、楽しみでなりません。
脚注
記事をランダムに読む