miive プロダクトブログ

miiveのプロダクトチームのブログです。

WezTermでいい感じの開発環境を一発で起動する

こんにちは。

miiveの基盤チームでエンジニアをしている akito です。

みなさん、気持ちよく開発できていますでしょうか?

わたしはWezTermのおかげで気持ちよく開発できています。

コーディングエージェントが登場してから、Neovimを開きつつClaude Code(たまにCodexも)を開くことがデフォルトになっています。 そうなると毎回ペインを複数分割し、Claude Code, Codexを起動させるのが面倒になります。

はい、改善しましょう。

tmux使ってみるか〜と思いはしたものの、WezTermだけでできるんじゃね?と思い調べたところ簡単にできたのでご紹介します。

WezTermとは

wezterm.org

WezTerm is a powerful cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust

wezさんが開発しているRust製のターミナルエミュレータです。 以前はiTerm2を使用していたのですが、動作がもっさりしているのが気になりWezTermに移行しました。(多分わたしの使い方が悪い) なぜWezTermにしたのか。「ターミナル 軽い」などでググり、上位に出てきたからです。理由なんてあとから付いてくるものです。

いい感じの開発環境を一発で起動させる

では本題です。

私の環境でWezTermを起動したときはこんな感じです。

WezTermを起動

タブが4つ開きます。(見づらいですが左下にタブが並んでいます)

タブはそれぞれ左から

  • タブ①
    • docker compose up, yarn dev などをペイン分割して実行し
      ローカルサーバー、各種エミュレータを起動させる
  • タブ①②③
    • タブを分割し Neovim, Claude Code を起動

されています。

ターミナルを起動するだけで準備されるのはとても気持ちがいいです。やる気が漲ります。

設定ファイルはこんな感じです(一部抜粋)

local wezterm = require("wezterm")
local mux = wezterm.mux
local config = wezterm.config_builder()

wezterm.on('gui-startup', function(cmd)
  local home = wezterm.home_dir

  -- ===== tab1: 開発サーバー =====
  local tab, server_pane, window = mux.spawn_window {
    cwd = home .. '/server',
  }
  server_pane:send_text 'docker compose up\n'

  local app_pane = server_pane:split {
    direction = 'Right',
    size = 0.66,
    cwd = home .. '/app',
  }
  app_pane:send_text 'yarn dev\n'

  local admin_pane = app_pane:split {
    direction = 'Bottom',
    size = 0.5,
    cwd = home .. '/admin',
  }
  admin_pane:send_text 'yarn dev\n'

  window:gui_window():maximize()

  -- ===== tab2(各プロジェクト別タブ + claude) =====
  local editor_tab1, editor_server_pane = window:spawn_tab {
    cwd = home .. '/server',
  }
  editor_tab1:set_title 'server'
  local claude = editor_server_pane:split {
    direction = 'Right',
    size = 0.33,
    cwd = home .. '/server',
  }
  wezterm.sleep_ms(500)
  editor_server_pane:send_text 'nvim\n'
  claude:send_text 'claude\n'

-- 以降もtab2, tab3の設定を追記していく

end)


return config

細かく説明していきます。

まずはtab1から

-- まずはウィンドウ、ペインを作成 
 local tab, server_pane, window = mux.spawn_window {
    cwd = home .. '/server',
  }
-- 実行したいコマンド
  server_pane:send_text 'docker compose up\n'

-- ペインを分割
  local app_pane = server_pane:split {
    direction = 'Right',
    size = 0.66,
    cwd = home .. '/app',
  }
  app_pane:send_text 'yarn dev\n'

-- さらにペインを分割
  local admin_pane = app_pane:split {
    direction = 'Bottom',
    size = 0.5,
    cwd = home .. '/admin',
  }
  admin_pane:send_text 'yarn dev\n'

つぎはtab2について(ほぼ同じですが)

-- タブを作成
  local editor_tab1, editor_server_pane = window:spawn_tab {
    cwd = home .. '/server',
  }

-- タブタイトルを設定
  editor_tab1:set_title 'server'

-- ペインを分割
  local claude = editor_server_pane:split {
    direction = 'Right',
    size = 0.33,
    cwd = home .. '/server',
  }
-- Neovim, Claude Code をそれぞれ起動 
 wezterm.sleep_ms(500)
  editor_server_pane:send_text 'nvim\n'
  claude:send_text 'claude\n'

設定ファイルを軽く書くだけでこんな事ができます。すばら。

ぜひ皆さんもお試しください。

おまけ

WezTerm には Copy Mode なるものがあります。

その名から想像がつくように、テキストをコピーするためのModeです。 キーボードから手を動かしたくない自分のような人間からすると神機能です。 vimライクにカーソル操作が可能なので例えば

こんな文字列があるとします

Ctrl + Shift + X で Copy Mode を起動し、vFTy と入力するだけで「This is a pen.」がクリップボードに入ります。

Copy Modeで文字列を選択した状態

最高です。

We're Hiring!!!

miiveでは一緒に福利厚生の未来を作ってくれる仲間を募集しています。ちょっとでも興味のある方は一度ぜひお話しましょう!

hrmos.co

また、定期的にお酒と軽食を楽しみつつ、カードゲームやボードゲームで遊びながら、miiveメンバーと気軽に仕事や働き方の話ができる「miive bar🍷」を開催しています。

「いきなりカジュアル面談はちょっとハードルが高い…」という方はぜひ、miive barにご参加ください! miive.notion.site