僕は、以前からMacのターミナルエミュレータとして標準のTerminal.appを使用してきた。たんにデフォルトで入っているから使っていたというわけではなく、いろいろ試した結果自分なりのこだわりのもと使っていたのだが、Alacrittyに乗り換えてみようと思い立った次第だ。この記事では、乗り換えの際に僕がやったことや、つまづきどころの共有などをしようと思う。

Alacrittyに乗り換えようと思った経緯

Terminal.appはTrue Colorに対応していない

これまでTerminal.appで何の不満もなかったのだが、ちょっとしたことでTrue Colorに対応したターミナル環境を用意したくなった。True Colorに対応しているとは、RGB値をそれぞれ8bitで表現できるような表現能力を持っているということだ。逆に、対応していないターミナル環境では、色の表現能力が全体で8bitまでしかない。

自分の環境がTrue Colorに対応しているかどうかは以下のコマンドでスクリプトを実行すると確認できる。まず、ターミナルエミュレータが対応しているかを確認するために、tmuxなどのターミナルマルチプレクサは閉じて実行すると良い。ターミナルエミュレータ上でtmuxなどを使用する際は、tmux側でもTrue Color対応のための設定を行う必要がある(設定方法は後述)。

$ curl -s https://raw.githubusercontent.com/JohnMorales/dotfiles/master/colors/24-bit-color.sh | bash

True Colorに対応している場合は、以下の画像のように、出力が綺麗なグラデーションになるが、そうでなければガタガタのカラーバーが表示される。AlacrittyはTrue Colorに対応しているので綺麗に表示できる。

True Color確認用カラーバー
True Color確認用カラーバー

ということで、AlacrittyをTerminal.appを比べたときの利点は、True Colorに対応しているということだ。

Terminal.appと同程度に速い

冒頭でも述べたように、僕はTerminal.appを長いことメインのターミナルエミュレータとして使用してきた。これまでに、他には、iTerm2やHyper、Warpなどを使用してみたのだが、その都度結局Terminal.appに帰ってくることになった。その一番の理由は、他のターミナルエミュレータのレスポンス速度が体感できる程度に遅いと感じたからだ。キーを押してからそれがターミナルに表示されるまでの時間は、実際は他のものと比べても1秒の差もないわけだが、体感できる程度の違いではある。ターミナルは自分の手足のように身軽に使いたい僕としては、この差は許容できなかった。

Alacrittyを実際に使ってみたところ、体感の反応速度はTerminal.appと全く遜色ないと感じた。速度の感じ方は、普段使っているターミナルエミュレータが何かで感じ方は変わるはずだ。何にせよ、多くのターミナルエミュレータとAlacrittyを比べたときの利点は、十分に速いということだと言えそうだ。(個人的にパフォーマンスを測ったわけではないので、あくまで体感の話だが)

他の高速なターミナルエミュレータとしては、kittyやWezTermなどがよく知られている。これらもTrue Colorに対応しているので選択肢にはなったが、TOMLファイルで設定を保持できるという点と、プロジェクトがそれなりに成熟しているという点で、今回はAlacrittyを選ぶことにした。

MacにAlacrittyをインストールする

AlacrittyをMacにインストールするには、いくつかの方法があるが一番簡単なのはHomebrewを使用する方法だ。以下のコマンドでインストールできる。

$ brew install --cask alacritty

他にもRustの開発環境がある人は、Cargoでもインストールができるし、GitHubのReleasesページからdmgファイルをダウンロードしてきてインストールすることもできる。

基本的には、上記の方法のどれかでインストールすれば良いが、manual pageやshell completionsなどが必要ならソースからビルドする必要がある。詳細は、GitHubのInstall.mdで確認できる。

Alacrittyのアイコンを変える

Alacrittyのデフォルトのアイコンは横幅が長いので、Macで使用すると他のアプリケーションのアイコンとの統一感がなくなってしまう。これは完全に好みの問題だが、僕は、できたら統一感のあるものに変更したいと考えた。

デフォルトのAlacrittyのアイコン
デフォルトのAlacrittyのアイコン

どうやら、同じようなことを思っているユーザーも結構いるようだが(Issue#3926)、現メインコントリビューターの意向としてはMacのために新しいアイコンを提供することはしないとのことだ。

ということで、自分の環境だけでもアイコンを変えたいわけだが、ありがたいことに有志でmacOSのデザインに合うアイコンを公開してくれている人がいる。ここに直接ダウンロードリンクを貼ることは避けようと思うが、上述のissueのコメント欄でDropboxやGitHubのリンクを貼ってくれている人がいるのでそこからicnsファイルをもらうと良いだろう。

macOSでは以下の手順でアプリケーションのアイコンを好きなものに変更することができる。

  1. アプリケーションフォルダをFinderで開く
  2. 変更したいアプリケーション(今回はAlacritty)のアイコンを右クリック
  3. 「情報を見る」をクリック
  4. 開かれたwindowの左上に表示されている既存のアイコンの上に、新たに使用したいアイコンファイルをドラッグ&ドロップ

これで、横幅も他のアプリと統一されてかなり見栄えが良くなった。

変更後のAlacrittyのアイコン
変更後のAlacrittyのアイコン

Alacrittyの設定を変更する

Alacrittyは設定用の.alacritty.tomlというTOMLファイルをホームディレクトリに配置することで設定変更を行う。自動では作成されないので、自分でファイルを配置する必要がある。

$ touch ~/.alacritty.toml

以前はYAMLファイルを使って設定変更をしていたようだが、これは今では廃止されている。

どのような設定項目があるかは、Alacritty Configurationで確認できる。参考までに、現在僕が使用している設定の一部を以下に記載する。

live_config_reload = true

[window]
decorations = "Buttonless"
padding = { x = 8, y = 8 }
dynamic_padding = true

[font]
normal = { family = "SF Mono", style = "Regular" }
offset = { x = 1, y = 1 }

live_config_reloadは、アプリケーション自体を再起動をしなくても設定を反映してくれるオプションなので、いろいろいじって試してみるときには設定しておくと良い(一部の項目は依然再起動が必要)。たくさんwindowを開くと重くなる問題があるらしいので、一通り設定をいじり終わったらコメントアウトしておくと良いかもしれない。

window.decorationsはButtonlessというMacでのみ有効なオプションを使用している。これは、windowの左上のボタン(windowの削除・最小化用)とタイトルバーを取り除くというオプションだ。本当は、タイトルバーだけを消すTransparentというオプションを使用したかったのだが、paddingをうまく設定できない問題があるので断念した(詳細は下記)。

Transparent時のpadding問題

windows.decorationsにTransparentという値を設定すると、タイトルバーだけを消すことができる(こちらもMacだけ)。しかし、このオプションをそのまま使用すると、ボタン部分に文字が被ってしまうことになる。そのため、次はwindow.paddingというオプションで文字の描画位置をずらそうと考えるわけだが、x値とy値のみしか受け付けていないため、ボタンに被らないようにwindow上部に余白を作ると下部にも必要のない余白ができてしまう。これは、tmuxを普段使いしていたりすると結構気になる。window.paddingでtop, bottom, left, rightの値をそれぞれ設定できるようにするためのPRも過去に出ていたが、macOS固有の問題を解決するためだけに設定ファイルを複雑にするのは良くないという理由でmergeされずにcloseされたようだPR#1290

この問題については度々issueが立てられているようだが(e.g. Issue#7629)、結局のところ、windowを作成するためのRustライブラリであるwinitが抱えるこちらのIssue#2308に帰着するようだ。そのため、誰かがこのwinitのissueの解決方法を編み出すまではTransparentを使わないか、下部にできるpaddingを許容するしかない(自分でtop paddingを加えれるように修正したものを手元でビルドするという手もあるが...)。

TransparentはMacのみのオプションなんだから、指定された時だけ追加のpaddingを上部に追加するようにAlacrittyのソースコードに変更を加えれば良いのではと思ったりもするが、こちらのコメントによればどうやらうまくいかないらしい。

Alacrittyのカラーテーマを変更する

Alacrittyでは、設定ファイルでカラーの変更を行う。自分でひとつひとつ色を設定していっても良いが、公開されているカラーテーマがあるので、とりあえずはそこから気に入ったテーマを探すと良い。カラーテーマの一覧はalacritty-themeレポジトリで公開されている。僕は白系の色をターミナルに使用するのが好きなので、GitHub Lightというカラーテーマを使用している。

READMEのsourceというリンクを踏むとTOMLファイルではない設定へのリンクへ飛ばされたりするので、レポジトリのthemesディレクトリからTOMLファイルを探すと良い。レポジトリのREADMEに記載されているようにimportを使用してカラーテーマを適用しても良いが、個人的には.alacritty.tomlに直接色設定をコピペして使用する方が設定ファイルが分散しないので良いと思う。

tmux環境でもTrue Color対応させる

Alacritty上でtmuxを使用する場合、設定に気をつけないとTrue Color表示ができなくなってしまう。具体的には、.tmux.confに以下の内容を追加する。

set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*:RGB"

default-terminalをtmux-256colorにして使用するためには、自身の環境にterminfoエントリが必要だ。以下のコマンドで、tmux-256colorのエントリがあるかを確認できる。

$ find /usr/share/terminfo -name 'tmux-256color'

ファイルが見つからなかった場合は、macOS 14 (Sonoma)からは、デフォルトでtmux-256colorが入っているので、OSのアップデートをするのが手っ取り早いと思われる。何らかの理由でアップデートしたくない場合は、自身でterminfoに追加をする必要がある。検索をすると色々やり方は出てくるので、そちらを参照してもらいたい。例えば、こちらの記事が参考になりそうだ。

正しくTrue Color対応できたかを確認するためには、Alacritty上でtmuxを起動し、その上で先述のカラーバー表示をしてみると良い。正しく設定しているはずなのに、うまくいかない場合は$ tmux kill-serverでtmuxを確実に終了させてからもう一度起動し直してみるとよい。


ということで、これからしばらくはAlacrittyを使って開発をしていこうと思う。何か新たにわかったこと等あれば、この記事に追記するか新しく記事を書くつもりだ。