🎃

雰囲気で理解した Git Worktree × ターミナルマルチプレクサ を使って並列開発をやってみよう

に公開

https://qiita.com/advent-calendar/2025/miraito-inc

https://zenn.dev/suzuki_hoge/articles/2025-12-all-d9e85889513fdc

昨日はほげさんの記事は、基礎能力の高い技術者となっていくためにとーっても大切な考えだと思いました!

牛尾さんの「世界一流エンジニアの思考法」に優秀なエンジニアは理解に時間を使ってるって書いてましたね。一見難しそうなことに見えても、わかる単位まで分解していけば案外単純なものだったりするんだろうなと最近わかってきました。

もちろんその作業は時間はかかるけど、結局その積み重ねが今後の力になるんだろうなと気づけてきた今日このごろです。

はじめに

2日目と5日目の記事では、Git Worktree と tmux(ターミナルマルチプレクサ)の基本をざっくり紹介しました。

https://zenn.dev/t_kitamura/articles/7f33fd72feb278
https://zenn.dev/t_kitamura/articles/631cb17bd481bd

どちらも並列開発を支えるための重要な仕組みですが、実際の現場で使い始めるとなると tmuxは高機能である反面、設定や使いこなしが難しく学習コストが高そうに感じました。
※ 本音を言うとそこまで頑張る気もないw

自分は特にカスタマイズしたいモチベーションもなく、並列開発を効率的にしたいだけだったので、ハードルを下げるために今回は Zellij というツールを使うことにしました。

https://zellij.dev/

Zellij とは

Zellij は tmux や GNU Screen と同じ「ターミナルマルチプレクサ」そのものです。

一言で言うと、tmux の代替となる新世代のターミナルマルチプレクサです。

tmux や GNU Screen が C 言語で実装された伝統的なツールであるのに対し、Zellij は Rust で実装され、最初から「使いやすさ」を重視して設計されています。

  • 設定なしですぐ使える
  • キーバインドが分かりやすい
  • レイアウトや状態が視覚的に把握しやすい

といった感じでターミナルマルチプレクサに入門するのに良さそうだったので採用しました。

Git Worktree と組み合わせることで、複数のブランチ作業を整理しながら進める開発イメージが掴みやすくなるので、今回の記事ではその使い方を中心に解説していきます。

Zellij をインストールする

https://github.com/zellij-org/zellij/blob/main/docs/THIRD_PARTY_INSTALL.md

自分はMacなのでbrewでインストールしました

brew install zellij

Zellij を起動する

zellij と実行するだけ

zellij

画面下に各コマンドについて表示されているのが見えるかと思います。
どのコマンドを使えば良いのかが一目でわかります。
tmux はコマンドを覚えるのが大変だと聞いてたので下に出ているのはすごく助かりますね。

嬉しいことにコマンドを実行すると、そのコマンドが実行している最中だということもわかるようになってます!

補足

前回の記事でターミナルマルチプレクサについて解説した概念の中にあったウインドウですが Zellij ではタブと呼びます。

tmux server
 └─ セッション
     ├─ ウィンドウ
     │   ├─ ペイン
     │   └─ ペイン
     └─ ウィンドウ
         ├─ ペイン
         └─ ペイン
zellij server
 └─ セッション
     ├─ タブ
     │   ├─ ペイン
     │   └─ ペイン
     └─ タブ
         ├─ ペイン
         └─ ペイン

実際に触ってみる

よりイメージが出来るように適当にお題を作ったので、その流れに沿って使ってみます。

ルーレットのアプリがあるとします。今は誰でもこのルーレットで遊ぶことができます。

このルーレットに新しい機能を追加しましょう。

例えばGoogleアカウントでログインしている人だけが使えるようにしたいので認証機能が必要です。

今から認証機能を作るとします。

認証機能開発用の作業環境を作る

今回は「認証機能の実装」という 1つの作業単位を扱うので、まずは セッションを作ります。

zellij -s feature-auth


feature-authという作業環境が出来る


今のイメージ

実装用と確認用でタブを分ける

次に、「実装」と「動作確認」で画面を分けたいのでそれぞれのタブを作ってみましょう。

タブモードに入る

Ctrl + t

新しいタブを作る

n

こんな感じでタブが出来ます。

名前をつけたい場合はタブモードにしてから r を入れると設定できます

Ctrl + t
r

実装タブを設定する

最初のタブ(実装用)では、同時に見ておきたいものが複数あります。

  • コード編集
  • 開発サーバ
  • ログ

それぞれをペインで分割してみましょう。

ペインを分割する

Ctrl + p

右に分割

n

下に分割

d

これで1つのタブの中に複数のペインができました!
黒い画面が複数並んで凄腕のプログラマっぽくなりましたね!

同期モードというのがありまして見ての通り、全てのペインに対して同じ操作を行うことが出来ます。

あるコマンドを複数のサーバに対して実行したい時とかに使うのかな?

Ctrl + t
s

動作確認タブを設定する

次に、確認用のタブに切り替えてこちらも設定していきます。

  • APIの動作確認
  • ログの確認

ちなみにペインも名前を設定することができました。タブは r なのにこっちはなぜか c
でした。

Ctrl + p
c

こんな感じで作業用の画面構成を作ることが出来ました。

実際の作業まではやらないですがターミナルマルチプレクサを使ったイメージはなんとなく沸いてきましたかね?

ちなみに僕はコマンドを打つのに疲れてきましたw
ただ Zellij のUIがわかりやすくてコマンドをいちいち調べ直さなくて良いので体験は良いですねー

ここまでの構成をおさらいすると以下のようになってます。

Session: auth(認証機能の作業)
 ├─ Tab: 実装
 │   ├─ Pane: エディタ
 │   ├─ Pane: 開発サーバ
 │   └─ Pane: テスト
 └─ Tab: 確認
     ├─ Pane: appログ
     └─ Pane: authログ

そしてエディタって例に出しましたが自分はvim使いではないのでペインにエディタを設定することはないけど例に出していたことに今さら気づきました

作業を再開できるかを試す

ターミナルマルチプレクサを使ってることですし、せっかくなのでターミナルから離脱した時にちゃんと裏で動いてるのか確認しましょう。

1秒ごとにカウントアップした数値を出力するコマンドを実行してからセッションを離脱して、再度セッションに入ってコマンドが動いているのかを確認してみます。

セッションから離脱する(detach)

Ctrl + s 
d

再度セッションに入る

zellij attach feature-auth

コマンドに慣れてなくて手こずってしまい、その間を飛ばしたので数値がいきなり増えてますがあまり気にしないでくださいw

結果の方はちゃんと裏で動いてましたね! これは良いですね!
ちゃんと使いこなせたらドヤ顔ができそうだ

認証機能を Worktree で切り出す

最後にWorktreeに切り出してみましょう。

以下のディレクトリがあるとします。

/projects/roulette

認証機能用の Worktree を作ります。

git worktree add ../roulette-auth feature/auth

ディレクトリ構成は次のようになります。

roulette/        (元の作業ディレクトリ)
roulette-auth/   (認証機能用の作業ディレクトリ)

先ほど作成した feature-auth セッションの中で roulette-auth ディレクトリ(Git Worktree)を使って作業することで、コードの状態は Worktree によって、実行中の状態は zellij のセッションによって分離された完全に独立した作業スペースを作ることができました!

CodexやClaudeCodeを使った並列開発をする準備が出来ましたね。
後は同じ要領で作業スペースをどんどん作っていけばOKです!

最後に

今回は、Git Worktree と Zellij を実際に触りながら

  • セッション
  • タブ
  • ペイン

これらの概念が、それぞれ どんな役割を持っているのかを確認してきました。

zellij を使うことで、

  • セッションで「作業そのもの」を分離し
  • タブで「作業内容・思考の切り替え」を整理し
  • ペインで「同時に動かすプロセス」を並べて管理できる

という構造を作れることが、なんとなくでもイメージできたのではないでしょうか。

正直なところ、今回紹介した操作だけでは Zellij を完璧に使えるようになったとは言えません。

というか自分も今回の記事に向けて初めてターミナルマルチプレクサというものに触れたのでまだなんとなく便利だなーくらいにしか思ってないというのが正直なところです。

ただ、ターミナルを閉じても作業が消えない、画面を分けて複数のプロセスを同時に扱える、作業単位を構造として管理できるという体験ができただけでも、ターミナルマルチプレクサがなぜ並列開発と相性が良いのかは十分に伝わったのではないかなと思います。

皆さんも是非一度触れてみて、業務に役立てて下さい。

明日はほげさんの記事になります。お楽しみに!

おまけ

ちなみに ClaudeCode だと ccmanager というCLIツールを使うともっと楽に出来そうでした。
https://zenn.dev/kbwok/articles/33fad69555d005

Codex は公式以外でなんか補助的に使えそうなツールがあまり見当たらないイメージです。
自分の調べ方が良くないのかなぁ

AIエージェントのタスク管理とかに Vibe Kanbanというのがあるみたいでこれも便利そうですね。
https://zenn.dev/erukiti/articles/2510-ai-coding

Discussion