Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

Ghosttyを使う

日常的にはWezTermを使用しているのですが、Ghosttyがリリースされたのでセットアップしてみました。という記録です。

Ghostty

GhosttyはTerraformやVagrant、Packerなどを提供するHashiCorpという会社を作ったMitchell Hashimoto氏によって開発が進められるターミナルエミュレータです。Zig製です。

ghostty.org

興味深いポイントは、Zero Configuration Philosophyを掲げている点でしょうか。要するに設定ファイルをガチャガチャ書かずとも、必要な機能が揃っていて起動さえすればあとはいい感じに利用できるというものです。設定をせずにとりあえず試してみて欲しいという趣旨の話がドキュメントを見ると記載されています。

実際のところはこれからお見せしますが、設定ファイルの行数は本当に減りました。WezTermとの比較をすると、WezTermはLuaで記述する関係で行数がどうしても膨らみがちというのはあります。しかしやはり、(私にとって)デフォルトで設定されている項目がそれなりに心地よく、変更の必要を感じなかったのが大きかったかと思います。

当初はmacOSが第一ターゲットとして開発されていたような印象を持っています。それもあってかMacのウィンドウのエッジ部分のディティールがちゃんと反映されているなど、細かいデザインはGhosttyの方がよくできていると思いました。

設定してみる

Zero Configurationを掲げているターミナルエミュレータにさっそく設定を加えていくのもどうかと思いましたが、テーマやパディング周りは自分好みに変えたくなったのでそこだけ調整しました。

あらかじめお断りですが、普段からtmuxを使っている上に引き続きtmuxを使用している関係で、ペーンの分割など細かい部分はまだ手出ししていません。一旦外観の設定のみです。

WezTermとまったく似たような設定をしても面白みがないとは思うんですが、WezTerm側とほとんど同じ外観になるように設定してみます。要するに、

  • フォントはJetBrains Mono Nerd Fontを採用する。
  • テーマはCatppuccin Mochaを採用する。
  • 透明度は0.85くらい。
  • 背景はちょっとぼかす。

あとはせっかくなので、下記の設定も一部含んでおきます。

  • タイトルバーは出しておく。けど、透過させる。
  • ウィンドウのパディングを好みに調整する。

完成後のイメージとしては下記のようになります。

設定完了後の外観

完成した設定は下記です。短い。

theme = catppuccin-mocha
window-padding-x = 20
window-padding-y = 5
window-padding-balance = true
window-theme = ghostty
background-opacity = 0.85
background-blur-radius = 20
macos-titlebar-style = transparent

まずビルトインの設定がちょうど私の利用状況にフィットして、設定がまずまず削れています。フォントのデフォルトはJetBrains Monoである関係で、まったく指定を変更する必要がありませんでした。NerdFontも入ってるようで最初から動いてくれます。また、テーマもいろいろプリインストールされており、自分でテーマファイルを作って設定してという手間が省かれました。

プリインストールされているフォントは下記のコマンドで確認でき、

$ ghostty +list-fonts

プリインストールされているテーマは下記のコマンドで確認できます。

$ ghostty +list-themes

テーマの一覧の閲覧はすごくて、とても画面がわかりやすいですね。

テーマの選択画面

参考程度に、ほぼ同等のことをやるためのWezTerm側の設定です。こちらも長くはないはずですが、微妙に色の部分でバグってる箇所があって、それを手直しするなどしている形跡が見受けられます。今だともう直ってるのかな?

local wezterm = require("wezterm")

-- 略

local config = {}

if wezterm.config_builder then
    config = wezterm.config_builder()
end

config.color_scheme = "Catppuccin Mocha"
-- To reset the colour scheme since Catppuccin Mocha sets too bright orange to indexed 16.
-- This makes me difficult to see operations, for instance, renaming in Neovim.
config.colors = {
    indexed = { [16] = "#1e1e1e" },
}

config.window_background_opacity = 0.8
config.macos_window_background_blur = 20
config.window_decorations = "RESIZE"
config.hide_tab_bar_if_only_one_tab = true

config.font = wezterm.font_with_fallback({
    { family = "JetBrainsMono NF" },
    { family = "JetBrainsMono NerdFont" },
    { family = "JetBrainsMono" },
    { family = "YuGothic" },
})
config.font_size = 13.0

return config

速さ

WezTermを使っている時と体感あまり変わらない気がしました。いろいろ検証してみた限りだと、WezTermの方が少しだけ速いようには見えました。Discordを見ていると、リソースの使われ方はWezTermより優れていると言っている人もいました。詳しい検証はこれから上がってくると思うので、どっちがどうなんだろうなというのは気になりポイントです。

知人のkurochanもTerminal.appとの比較をあげていました。これと比較すると少しGhosttyの方が描画が安定してるかもしれません。

日本語入力

日本語入力の方ですが、Google日本語入力を利用しつつしばらくNeovimで開発するなどしてみたもののとくに問題を感じていません。フォントもちゃんと日本語のものが使われているようで、字体も日本語です。よくサポートされていると言って差し支えなさそうです。

WezTermとの比較

WezTermから移行したい理由はあんまりないですね。細かいUIの綺麗さはGhosttyのほうが上には感じますが、提供されている機能(というかそもそもtmuxでほとんど済ませているのであまり関係ない)や速度なんかもほとんどWezTermを使っていた頃と差を感じないです。WezTermはカスタマイズできる項目が多いので、それらをカリカリにカスタマイズして使っている方には多分物足りないでしょう。あるいは、Warpのような高機能めのツールを使っている方からすると、あんまり移行理由はないかもですね。私は細かいUIの綺麗さが気になるタイプなので、Ghosttyを試してみています。WezTermもそこまで激しくカスタマイズしてなかった、というのもあります。

まとめ

新しいツールを試すときって本当に楽しいですよね☺️ よさそうなのでしばらく使ってみます。