WezTermに乗り換えなかった人間がGhostty使ってみた
はじめに
ターミナルから出ない開発生活を送っている私ですが、普段はAlacrittyを使っています。過去にWezTermに乗り換えようか迷った時には結局移行しなかったのですが、最近急速に注目を集めているGhosttyというターミナルエミュレーターが気になったので触ってみました。
Ghosttyとは
HashiCorpの創業者の一人であるMitchell Hashimoto氏が個人プロジェクトとして開発を進めていたZig製のターミナルエミュレータです。特徴として、高速であること・機能が豊富であること、プラットフォームネイティブなUIであることの3つを挙げており、mac版はSwiftUI/UIKitを使ってUIを実現しています。少し前から Private betaという形で使用することができていましたが、2024年12月27日にv1.0.0のリリースがされると同時にオープンソース化され、注目を浴びています。
使ってみた
最近よく見る”Zero Configuration Philosophy”を掲げていました。以前WezTermを設定してみた記事にも書いたのですが個人的にターミナルエミュレータに求めるものは多くなく、シンプルに使いたい方です。ということで起動してみたのですが、想像以上に自分のニーズは満たされていました。
GhosttyではデフォルトのフォントとしてJetBrains Monoが使用されているため、アイコンの表示に対応しているコマンドで豆腐を量産することはありません。また、ネイティブのUIが用いられているため見た目も良く、ここまで設定変更の必要性をそもそも感じなかったのは久しぶりでした。
とはいえ作者の思う「いい感じ」と自分の思う「いい感じ」が全てにおいて共通しているかというとそんなことはなく、設定したい箇所が出てきたので記録していこうと思います。
リガチャをオフにする
個人的にはリガチャーが苦手なのでオフにします。”as separate repetitive entries in your config”とのことで以下の3行を追加します。
font-feature = -calt
font-feature = -liga
font-feature = -dlig
フォントを変える
これはGhosttyというよりフォントの問題なのですが、JetBrains Monoは文字(小文字)の高さが増している分、相対的に小さいフォントサイズで十分になるため、全体の見た目が縦長になっている印象を受けてしまいます。JetBrains Mono以外のフォントを使い続けていたので見慣れないだけでしょうけど、見慣れたフォントに変えておきます。
font-family = FiraCode Nerd Font Ret
参考までに、2つのフォントの比較です。これは本当に個人の好みの問題だと思っていますし、見慣れないものへの違和感を強く感じているだけだと思います。
テーマを設定する
Hybridというテーマが好きで愛用しているので設定します。Ghosttyにもプリセットで多くのテーマが用意されており、その中から選ぶことができます。ghostty +list-theme
というコマンドで一覧を確認することができます。このコマンドはそれぞれのテーマのプレビューも兼ねているため便利です。
起動時にtmuxセッションにアタッチする
Ghosttyでは起動時に実行されるコマンドはcommand
オプションで設定できるのでお決まりのおまじないを設定します。ここまでくると根本的に使い方を間違っているような気もしますが、気にせず設定します。使い慣れたtmuxでタブ・ペインの分割が行えればそれで事足りるため、Ghosttyで提供されているタブ機能などに関してはキーバインディングも含めて設定は行いません。
command = "/opt/homebrew/bin/zsh -l -c /opt/homebrew/bin/tmux a -t default || /opt/homebrew/bin/tmux new -s default"
最終的な設定ファイル
command = "/opt/homebrew/bin/zsh -l -c /opt/homebrew/bin/tmux a -t sub || /opt/homebrew/bin/tmux new -s sub"
theme = Hybrid
font-thicken = false
font-family = FiraCode Nerd Font Ret
font-feature = -calt
font-feature = -liga
font-feature = -dlig
font-feature = -zero
タブやペイン分割などほとんどの機能をtmuxで済ませているというのもあり、設定項目はかなり少ないです。とはいえ設定の内容的には他のターミナルエミュレータと大きくは変わらないような気もしており、個人的にGhosttyの良さはネイティブUIを使用していることによる細かな見た目のクオリティに尽きるかなと思いました。表示速度などもにも大きな違いは感じませんでした。
(余談)Ghosttyと関係のないところ
太字・アイコンをいい感じにする
WezTermを設定した時にも感じたのですが、フォントのレンダリングエンジンの違いからか、全体的に文字が細く薄い見た目になっていました。他にもstarshipを使って表示しているアイコンがAlacrittyでは物によって2バイト分の幅になるのですが、Ghosttyでは(WezTermでも)全て1バイト分に揃えられていました。
おそらく長短どちらの辺をベースにしているかの違いなのかなとも想像しましたが、ここまでくるとAlacrittyのレンダリングエンジンが独特だったのだと思ったので、心機一転見た目を整え直します。主にアイコン周りのスペースを無理やり微調整していたので、それを元に戻します。太さに関してはもう慣れるしかないのかもしれません。フォントの設定を微調整することで無理やり解決できるかもしれないので気が向いた時にやってみてもいいかもしれませんが、(Ghosttyだと特に)あまり行数が増えるような設定を入れることに積極的になれないですね。
おわりに
軽くしか使っていませんが、カーソルが引っかかるような感覚もなく快適に使えています。ネイティブのUIで組み立てられているということで見た目は綺麗です。日本語変換中の表示も他のターミナルに比べると自然に感じますし、ネイティブのUIを使っているという点で細かな見た目のクオリティが高いのは高ポイントです。
一方で、WezTermの時と同様に全体的にAlacrittyと比べてフォントが細く見えることに対して違和感が強いです。ただ、これに関してはAlacrittyの方が特殊なんじゃないかという感覚が芽生えてきたため、一旦良しとします。
しばらくはGhosttyを使ってみようと思っていますが、使っていくうちにどうしても気になるようであればAlacrittyに戻りたいと思います。使っていくうちにどんどんカスタマイズしたくなるのがエンジニアという生き物なので(偏見)、半年もすれば目も当てられないような行数になっているかもしれません。