alacrittyを使い始めた話

普段私はiTerm2の上でNeovimを動かしコードを書き、C-zでVimをバックグラウンドジョブにしてrspecを実行しあとは別のタブで開発用サーバーを動かして、Gitもターミナルから操作していくといったフローで開発している。まぁその辺に転がっているエンジニアでよくありがちな開発スタイルである。が諸処いろいろ問題があったため、iTerm2を卒業することにした。

卒業の決定打になったのは単純にiTerm2の描画速度が遅かったためだ。
私の環境のNeovimで100行のファイルを開いてスクロールするだけでスクロールが引っかかる。これがスクロールだけだったらまだしもひどい時は文字入力ですらひっかかるのでとてもストレスが溜まる仕様になっていた。以下には取ったアプローチを書いていこうと思う

Nyaovim(+NeovimのTerminalEmulator)を試す

Electron製のGUINeovimClientである所のhttps://github.com/rhysd/NyaoVim をためした。
描画速度はiTerm2よりは早く中身は普通のNeovimなので操作に困ることなく快適だったのだが、以下の問題に遭遇して使用をやめた。

マルチモニタ環境でMonitor1からMonitor2へウィンドウを移動してリサイズすると表示が壊れる
UI stretching with multiple monitors #101 のIssueで報告されているのだがこの通りに壊れる。▽なお直すためにはElectronアプリをリロードするしかないのだが、直前まで起動していたVimごと吹っ飛んでしまうので運用がつらかった。

標準出力の流速が高いと最悪落ちる
データベースにたくさんデータ入ったアプリケーションでN+1クエリを走らせて設定ミスで標準出力にたくさんログが流れるとC-cすら受けつけなくなって落ちるみたいなのを日に二回くらいやった。いやまぁアプリケーションのコードを直せよっていう指摘は正しいし実際やるんですけど、まぁそれでも不意の事故でTerminalEmulatorごとVimが落ちるのはちょっとつらいにゃあといった気持ちだった。

Neovim-dot-app(+NeovimのTerminalEmulator)を試す

次にObjC + Cocoa実装のGUINeovimClientを試した。rogual/neovim-dot-app
IMEの入力が効かなかったが僕はtyru/eskk.vimのユーザーなのであんまり問題ではなかった。(TerminalModeで日本語入力が効かないのはちょっとつらいんだけど、そもそもターミナル上で日本語打つ機会ってgrepするときだけだと思うし、日本語でgrepするのも稀な機会だよね)
まぁTerminl使わなくても頻繁に落ちてしまったのでやめた

そんなこんなでalacritty

描画早くて神で最高といった感じ。IMEが使えないが日本語も表示できるしぼくはNeovimに籠っているのでこれでいいかなといった感覚
DPIが違うマルチモニタでウィンドウを移動するとフォントサイズが壊れるみたいな問題があるけど修正PRがあったのでそのうち直りそう。

iTerm2高機能で便利だけど描画遅いので皆さんもGPUレンダリングを信じてalacrittyを使いましょうまる