重い腰を上げてweztermを一通り設定する

September 15, 2024Updated on September 19, 2024

つい先日「生産性向上」をテーマにした社内のLT会で、ターミナルの環境を取り扱った発表がありました。日頃からターミナルからなるべく出たくない出不精の私としては見逃すわけにはいかず興味深く聞いていました。Neovimの紹介やezaやripgrepといったOxidationされたツール類の紹介もありましたが、その中でWezTermが絶賛されていました。WezTermにはずっと興味はあったのですが、なかなか設定をする気になれずAlacrittyを使い続けていました。そろそろWezTermも触っておくべきかなという気分になったので、えいやで一通り設定をしてみました。

WezTermとは

rust製のターミナルエミュレータで、今最も勢いのあるものではないでしょうか。設定をluaで記述できるのが特徴で、Neovimを使っている方からの人気が高いように感じます。

(余談)Alacrittyとは

Alacrittyもrust製のターミナルエミュレータです。シンプルで軽量な作りになっており、レンタリングにOpenGLを使うため描画が速いことが特徴です。一時期マルチバイト文字の挙動が怪しくiTermと行ったり来たりを繰り返していましたが、いつからか私が使う範囲では問題なくなっていたので、それ以来ずっと使い続けていました。最初期は単体ではタブ機能もないシンプルな作りになっていました。最近のアップデートでMacOS限定ではあるもののタブ機能も追加されていますが、個人的にはタブやペイン分割はtmuxで賄っていたので使うことはありませんでした。

セットアップ

私がターミナルエミュレータに最低限求めているのは以下くらいのもので、比較的シンプルに使いたい方ではあると思います。

  • 起動時にtmuxセッションにattachする
  • Nerd font系のフォントを設定する
  • リガチャーをオフにする
  • 逆に以下のような機能は必要ないと考えているので、この記事では取り扱いません。

  • 背景の透過
  • ターミナルエミュレータの機能を使ったタブやペイン分割
  • エミュレータ起動時にtmuxセッションにattachする

    ターミナル起動時に実行するプログラムはdefault_progというオプションで指定できます。意図せずターミナルを閉じてしまってよく作業内容を消し飛ばしていたので、ターミナルエミュレータを開くと同時にtmuxセッションにアタッチするようにしています。

    local config = {} config.default_prog = { "zsh", "-l", "-c", "tmux a -t default || tmux new -s default" } return config

    Nerd font系のフォントを設定し、リガチャーをオフにする

    使用するフォントの設定です。ターミナルから出ない生活を日常的に送っているエンジニアとしてはこだわりたいポイントでしょう。tmuxやNeovimでNerd fontに含まれているアイコン系の文字を多用しているので、できれば入れておきたいです。Nerd fontに対応したコマンドで豆腐を量産するのも避けたいですしね。設定自体は簡単で、対応する項目に値を設定してあげるだけです。

    WezTermには使用できるフォントの一覧を表示してくれる機能があります。コマンドラインで以下のコマンドを実行することで、WezTermの設定に記載する形式でフォントの一覧が出力されるので、お目当てのフォントがあればそれをコピペするだけで設定完了です。

    wezterm ls-fonts --list-system

    また、指定したフォントが読み込めなかった場合に使用したいフォントがある場合はfont_with_fallbackを使って指定します。リガチャーに関してはまさにぴったりな内容が公式ドキュメントに記載されているので、それに倣って設定します。このあたりは公式のドキュメントが充実しているので、ぜひ参照してみるといいと思います。

    local config = {} config.font_size = 14 config.font = wt.font_with_fallback({ { family = "FiraCode Nerd Font", weight = "Medium", style = "Normal" }, -- ... }) config.harfbuzz_features = { "calt=0", "clig=0", "liga=0" } return config

    その他あったらいいな系

    配色系

    config.color_scheme = "Hybrid (Gogh)"

    私はHybridというテーマが好きで愛用しています。ありがたいことにWezTermではプリセットで用意されていたので設定しておきます。WezTermには1000を超えるテーマがプリセットで用意されているので、決まったものをお気に入りで使っている人はきっと見つかると思います。

    フルスクリーンモードとショートカット

    MacOSでは、システムの機能としてCmd+Ctrl+fでフルスクリーンモードに切り替えられるのですが、WezTermではうまく動かないようでした。幸いにしてWezTerm自身の機能でフルスクリーンモードを擬似的に再現しているものがあったので、それを同じショートカットキーで呼び出せるように設定しておきます。

    config.keys = { { key = "f", mods = "CTRL|CMD", action = wt.action.ToggleFullScreen }, }

    さいごに

    一通りの設定をしてみましたが、個人的にはAlacrittyから乗り換えなくてもいいかなと感じました。日常的に使う分には問題ない可能性はありますが、WezTermはカーソルを素早く動かすと若干引っかかる感覚があり、Alacrittyのほうがスムーズに感じました。また、フォントのレンダリングエンジンの違いからか、全体的に文字が細く薄い見た目になっていました。

    BoldとNormalの違いも分かりづらく、一部の出力は内部でBoldかつBrightになっているようですが、カスタマイズしているプロンプトや各種TUIツールでの見た目の差が気になってしまいました。デフォルトのフォントを相対的に細く設定することで解決できたのかもしれないですが、好みの見た目に近づけることができず断念しました。

    luaで設定を書くことができるメリットは大きいですが、Alacrittyは設定可能な項目もそこまで多くなくシンプルなため、tomlでも十分に表現できる範囲かなと感じています。