初心者

Mac環境構築ターミナル編「WezTerm」と「Warp」を試してみた

菅野

こんにちは、開発部長の菅野です。セットアップマニュアルシリーズ第3弾。今回はターミナル編です。最近使ってみた「WezTerm」と「Warp」を紹介します。

みなさんターミナルは何を使っていますか?Mac標準ターミナルのまま?それともiTerm2?社内では意外と標準ターミナルの人がいたので、最近使い始めたターミナルを紹介します。

第1弾はこちら!
第2弾はこちら!

はじめに

ターミナルの重要度は人によって結構違うと思います。VSCodeでほぼ開発業務が完結しているフロントエンドエンジニアの場合、ターミナルを使う機会は少ないと思います。逆にインフラエンジニアとかはリモート接続しての業務が主になるのでターミナルはかなり重要になります。私は後者になるのでターミナルは結構重要です。Macは標準ターミナルがあるのですが、意外とこの標準ターミナルで十分だったりします。tmuxを入れれば画面分割もTrueColor対応もできるので、これで結構事足りちゃったりするんですよね。じゃあそれでいいじゃん、となるとこの記事はここで終わりになってしまうので、今回は最近私が試してみた2つのターミナルを紹介します。

ターミナルに求めるもの

大きな分岐点となるのは、普段の業務をGUIメインで行うのかCLIメイン(ターミナル)で行うのか、という点だと思います。私のように年配のインフラ、バックエンドエンジニアの場合、CLI操作の方を好む方が多いと思います。少なくとも私はそうです。例えばファイルの移動やコピー、テキストファイルの作成といった作業は、GUIでFinderやメモ帳を使うより、ターミナルでコマンドを打った方が早いです。これは個人的な話ですが、トラックパッド(Windowsならマウス)は極力使いたくないです。手がキーボードから動かなくて済む方が入力が早いからです。これは弊社CTOの考え方の影響をかなり受けています。CTOは「エンジニアは入力速度がそのまま業務速度に直結するから、入力を早くすることは非常に重要である」という考えです。もちろん「早ければ良い」という単純な話ではないですが、開発スキルが同じなら入力速度が早い方が早く仕事を終えられるのは道理です。

ということで、そもそも操作をターミナルメインで行うのかどうか、が大きな分岐点になると思います。この記事はあくまでターミナルをよく使う人向けですので、標準ターミナルで十分、という方は読み飛ばして下さい。かく言う私も去年まで標準ターミナルを使っていました。vim環境を刷新したタイミングでColorSchemeを変更したくなり、今更tmuxを入れるのが気分的に微妙だったので、最新のトレンドを調べてみよう、というのがきっかけでした。逆に言えばそれまで標準ターミナルで特に困ってなかった、ということです。

結論

いきなり結論から書きますが

  • 安定した機能性を求めるなら:iTerm2
  • 軽量高速な操作性とカスタマイズ性を求めるなら:WezTerm
  • 導入が手軽でAIのコマンド補完を求めるなら:Warp

となります。iTerm2は最もメジャーなターミナルですが、私は使ったことないです。気になる方は使ってみて下さい。メジャーなターミナルなので情報はたくさんあります。

私は今回WezTermとWarpを使ってみて、WezTermを使うことにしました。理由は以下です。もしWarpにWorkspace機能があったらWarpを使っていた可能性があります。

  • 設定がテキストファイルで、かつ、neovimと同じlua
  • Workspace機能が地味に便利(iTerm2やtmuxで言うところのセッション)でWarpには機能が無い
  • CTOがiTerm2なので、それ以外を試してみたい

Warp

まずは導入ハードルが低い方から試してみます。Homebrewがすでにインストールされていることを前提とします。

インストール

インストール方法は公式サイトからダウンロードするか、Homebrewを使用するかです。私はCLI派なのでHomebrewからインストールしました。

brew install --cask warp

起動するとSign upしろって言われますので、Googleで登録します。

styleはとりあえずDarkにして、promptはWarp promptにしました。あとで変えられます。

主要機能

AIコマンド検索

#の後に実行したい内容を入力するとAIが提案してくれます。コマンドを忘れた時とかに便利です。

コマンド入力補完

git-promptとかgit-completion要らずです。もちろんgit以外のコマンドも補完してくれます。この機能がWarp最大のセールスポイントだと思います。かなり便利です。

コマンド履歴

↑を押下するだけでhistoryが表示されます。あとスクロールジャンプが便利です。コマンド実行単位でまとまって選択されるので、遡って見たい時にかなり便利です。例えば何かをCLIでインストールした際、完了後に元のコマンドを確認しようとすると、標準ターミナルではスクロールが手間でした。しかし、Warpはコマンドの出力を一纏めにしてくれるため、遡って確認するのがかなり楽です。

感想

かなり便利です。一通りの機能がそろってますし、補完機能は特に便利です。GitHub Copilotをターミナルに適用した感覚ですね。また設定がGUIベースなので簡単です。テーマやフォントサイズといった基本的な設定はもちろん、キーバインドも簡単に変えられます。標準ターミナルの設定が変えられる人なら問題なく設定できると思います。他にもタブやペインでの画面分割ができますし、ホットキー対応もあり、基本的な機能は揃っています。UIも次世代っぽい感じ(?)がします。

唯一セッション機能が無いのが残念です。あと、懸念があるとしたら、今後Free版が無くなる可能性がゼロではない、という点でしょうか。

WezTerm

次はWezTermです。軽量高速を売りにしているターミナルです。WindowsとMac両方に対応しているのも特徴です。設定がテキストベースなのでコード管理できるのも魅力です。

インストール

WezTermもダウンロードするかHomebrewで入れるかのいずれかです。私はHomebrewでインストールしました。

brew install --cask wezterm

設定

次に設定です。vim同様、WezTermはテキストの設定ファイルを元に動作します。~/.config/wezterm/wezterm.luaに配置します。

内容は最低限カラースキームを設定すれば動きます。あとはフォントとフォントサイズ、背景透過くらいでしょうか。

キーバインド

キーバインドはデフォルトで良ければ特に設定は必要ありません。変更したい場合、公式サイトのDefault Key Assignmentsページを参考にしてください。私がデフォルト設定のままで良く使っているのは⌘ + tのタブ追加です。

キーバインドの設定記述方法ですが、SUPERはWindowsならWindowsキー、Macならcommand⌘キーで、ALTはWindowsならaltキーでMacならoption です。

私はタブ操作をGoogleChromeと同じ⌘ + shiftに変更して、ペイン操作をCtrl + shiftにしています。

  { key = '[', mods = 'CMD|OPT', action = act.ActivateTabRelative(-1) },
  { key = ']', mods = 'CMD|OPT', action = act.ActivateTabRelative(1) }, 
  { key = '1', mods = 'CMD|OPT', action = act.ActivateTab(0) },
  { key = '2', mods = 'CMD|OPT', action = act.ActivateTab(1) },
  { key = '3', mods = 'CMD|OPT', action = act.ActivateTab(2) },
  { key = '4', mods = 'CMD|OPT', action = act.ActivateTab(3) },
  { key = '5', mods = 'CMD|OPT', action = act.ActivateTab(4) },
  { key = '6', mods = 'CMD|OPT', action = act.ActivateTab(5) },
  { key = '7', mods = 'CMD|OPT', action = act.ActivateTab(6) },
  { key = '8', mods = 'CMD|OPT', action = act.ActivateTab(7) },
  { key = '9', mods = 'CMD|OPT', action = act.ActivateTab(-1) },
  { key = 's', mods = 'CTRL|SHIFT', action = act.SplitHorizontal { domain = "CurrentPaneDomain" } },
  { key = 'v', mods = 'CTRL|SHIFT', action = act.SplitVertical { domain = "CurrentPaneDomain" } },
  { key = 'w', mods = 'CTRL|SHIFT', action = act.CloseCurrentPane { confirm = true } },

もしGoogleChromeと同じように、左右キーを設定するなら以下のようになります。

  { key = 'LeftArrow', mods = 'CMD|OPT', action = act.ActivateTabRelative(-1) },
  { key = 'RightArrow', mods = 'CMD|OPT', action = act.ActivateTabRelative(1) }, 

Workspace

私がWezTermで気に入っているのがWorkspace機能です。iTerm2だとセッション機能になります。複数プロジェクトのファイルを開きたい時、プロジェクト単位でまとめたくなります。標準ターミナルとかだとタブで分けることになるのですが、プロジェクトが複数になると大量のタブが横に並ぶことになり、管理が大変でタブ間の移動も面倒です。そこで活躍するのがWorkspaceです。プロジェクト毎にWorkspaceを作れば管理し易いです。

ただ、Workspaceのキーバインドはデフォルトでは設定されておらず、前述のDefault Key Assignmentsページに記載されていません。

Workspace名を指定して作成

Workspaceの切り替えと作成方法は公式のこちらに記載されています。

私は⌘ + shift + cに変更しています。あと、サンプルでは色を変更したりしてますが、個人的に見にくいのでデフォルトの白のままにしています。

 {
    key = 'c',
    mods = 'CMD|SHIFT',
    action = act.PromptInputLine {
      description = wezterm.format {
        { Text = 'Enter name for new workspace' },
      },
      action = wezterm.action_callback(function(window, pane, line)
        if line then
          window:perform_action(
            act.SwitchToWorkspace {
              name = line,
            },
            pane
          )
        end
      end),
    },
  },

Workspace名のリネーム

次にリネームです。公式のこちらを参考にしています。私は⌘ + shift + rにしています。

  {
    key = 'r',
    mods = 'CMD|SHIFT',
    action = act.PromptInputLine {
      description = wezterm.format {
        { Text = 'Rename workspace' },
      },
      action = wezterm.action_callback(function(line)
        if line then
          wezterm.mux.rename_workspace(
            wezterm.mux.get_active_workspace(),
            line
          )
        end
      end),
    },
  },

Workspaceの切り替え

こちらも公式サイトを参考に、キーバインドを⌘ + shift + n または pとしています。

  { key = 'n', mods = 'CMD|SHIFT', action = act.SwitchWorkspaceRelative(1) },
  { key = 'p', mods = 'CMD|SHIFT', action = act.SwitchWorkspaceRelative(-1) },

Workspaceリスト表示

公式だとShowLauncherArgsを使った方法が紹介されていますが、この方法は切り替えるかランダムのWorkspace名での作成をする機能になります。これの何が不便かというと間違ってWorkspaceを作成しちゃうことがあるんですよね。

私はリスト表示させたいと思うことがあまりないので使っていません。Workspace数はせいぜい3つくらいなので切り替えで十分です。

リストを自作している猛者の方がいらっしゃったので、もし自作するのであれば参考にしてください。非常に分かりやすく説明されています。

感想

軽量高速というだけあって、かなりサクサク動いてくれます。設定もluaなので公式サイトをみればだいたい分かりますし。nvimを使っている人ならそれほどハードル高くないと思います。逆にnvimを使っていなくて手軽に始めたい方はWarpの方をオススメしますね。私はWorkspace機能が非常に気に入ったのでWezTermを使うことにしました。

最後に私のWezTermの設定を公開しておきますのでよかったら参考にしてください。

まとめ

如何でしたでしょうか?WezTermもWarpもそれぞれ特徴があり、どちらが優れているという訳ではないです。特にWarpは簡単に使い始められるので実際に触ってみるのが良いと思います。

最後に、以下比較表にまとめてみました。繰り返しになりますが私はiTerm2は使ったことがありません。あくまで調べた結果となります。

特徴/機能iTerm2WezTermWarp
開発言語Objective-CRustRust
主な特徴多機能、安定性、カスタマイズ性高速描画、軽量、テキスト設定コマンド補完、チームコラボレーション
環境のグルーピングセッション機能Workspace機能なし
Multiplexing機能なし(tmuxで対応可)ありなし(tmuxで対応可)
GPUアクセラレーションなしありなし
カスタマイズ性高い非常に高い中程度
カスタマイズ難易度低い(GUIで設定が可能)中程度(Luaスクリプトが必要)低い(設定はシンプル)
プラグイン/拡張機能豊富なしなし
UI/UXデザイン洗練されたマテリアルデザインシンプル、モダン直感的、開発者向け
コラボレーション機能なしなしあり
リリース年200720202022
公式サポートOSmacOSmacOS, Linux, WindowsmacOS
コミュニティ/サポート大規模中規模小規模、急速に成長中

-初心者
-,