Zellij とは?
Zellij は Rust で書かれたモダンなターミナルワークスペース(terminal workspace)で、tmux や GNU Screen の次世代の代替品として位置づけられています。その核となる理念は「バッテリー同梱」(batteries included)——複雑な設定をしなくても、強力なターミナル多重化機能をすぐに使えることです。
なぜ Zellij が必要なのか?
もしあなたが開発、運用、またはシステム管理のためにターミナルを頻繁に使っているなら、以下のシナリオにきっと見覚えがあるはずです:
- 複数のサービス(フロントエンド、バックエンド、データベース)を同時に実行し、異なるウィンドウ間を切り替える必要がある
- リモートサーバーに SSH 接続した後、接続が切断されてすべてのプロセスが中断される
- 複雑な作業状態を保存して、次回すぐに再開したい
- チーム协作時にデバッグやコードレビューのためにターミナルセッションを共有する必要がある
従来の解決策は tmux や GNU Screen ですが、これらは学習曲線が急で、デフォルトの設定が簡素で、多くの高度な機能を手動で設定ファイルを書いて実現する必要があります。
Zellij の目標はこれらの痛点を解決することです:
| 特徴 | tmux | Zellij |
|---|---|---|
| 学習曲線 | 急で、多くのショートカットキーを暗記する必要がある | 緩やかで、内蔵のヘルプとデフォルトレイアウトがある |
| フローティングペイン | ❌ サポートなし | ✅ ネイティブサポート |
| スタックペイン | ❌ サポートなし | ✅ ネイティブサポート |
| Web クライアント | ❌ サードパーティ製ツールが必要 | ✅ 内蔵 |
| セッション復元 | ⚠️ プラグインが必要(tmux-resurrect) | ✅ ネイティブサポート |
| プラグインシステム | Shell スクリプト | WebAssembly(Rust/任意の言語) |
| レイアウト自動化 | shell スクリプトを書く必要がある | KDL 宣言的設定 |
| プログラミング言語 | C | Rust |
Zellij vs tmux:核心的な違い
- ユーザーフレンドリーさ:Zellij はデフォルトで直感的な UI(ステータスバー、タブバー)を提供しますが、tmux は似たような効果を見るために手動で設定する必要があります。
- フローティングペイン:Zellij ではペインを他のペインの上に「浮かせる」ことができ、モニタリングコマンド(
top、htopなど)を実行しながら他の作業を行うのに適しています。 - Web クライアント:Zellij には内蔵の Web サーバーがあり、追加のツールなしでブラウザからターミナルセッションにアクセスできます。
- セッション復活:Zellij を閉じて再び開くと、以前のパネル、コマンド、履歴をすべて復元でき、再起動後も有効です。
- プラグインエコシステム:Zellij のプラグインは WebAssembly ベースで、Rust、Go、C など WASM にコンパイルできる任意の言語で書け、セキュリティがより高いです。
Zellij のインストール
Zellij は Linux、macOS、Windows(WSL)をサポートしています。以下はいくつかの一般的なインストール方法です:
方法一:公式ワンクリックインストールスクリプト(推奨)
# Bash/Zsh
bash <(curl -L https://zellij.dev/launch)
# Fish
bash (curl -L https://zellij.dev/launch | psub)
# PowerShell
irm https://zellij.dev/launch.ps1 | iex
このスクリプトはあなたのオペレーティングシステムとアーキテクチャを自動検出し、最新バージョンの Zellij をダウンロードしてインストールします。
方法二:パッケージマネージャーでインストール
macOS (Homebrew):
brew install zellij
Linux (Ubuntu/Debian):
# APT リポジトリを追加
echo "deb [trusted=yes] https://dl.cloudsmith.io/public/zellij-org/releases/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/zellij.list
sudo apt update
sudo apt install zellij
Arch Linux:
sudo pacman -S zellij
Fedora:
sudo dnf install zellij
方法三:ソースからコンパイル
カスタムバージョンなど、ソースからコンパイルする必要がある場合:
# Rust ツールチェーンがインストールされていることを確認
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# リポジトリをクローン
git clone https://github.com/zellij-org/zellij.git
cd zellij
# コンパイルしてインストール
cargo install --path zellij
インストールの確認
zellij --version
zellij 0.42.0 のようなバージョン番号が表示されるはずです。
クイックスタート:最初の Zellij セッション
Zellij の起動
ターミナルで直接実行:
zellij
上部にタブバー、下部にステータスバーのある全新的なインターフェースが表示されます。デフォルトでは、Zellij は "main" という名前のタブページと一つのターミナルパネルを作成します。
基本操作
Zellij のすべてのショートカットキーは Ctrl + g をプレフィックスとして使用します(「モードキー」と呼ばれます)。以下はよく使う操作です:
| 操作 | ショートカット | 説明 |
|---|---|---|
| 新しいパネル | Ctrl+g → n |
現在のパネルを水平分割 |
| 新しい垂直パネル | Ctrl+g → h |
現在のパネルを垂直分割 |
| パネル切り替え | Ctrl+g → 矢印キー |
パネル間でフォーカスを移動 |
| パネルサイズ調整 | Ctrl+g → r → 矢印キー |
リサイズモードに入る |
| 新しいタブページ | Ctrl+g → t |
新しいタブページを作成 |
| タブページ切り替え | Ctrl+g → p / n |
前/次のタブページ |
| パネルを閉じる | Ctrl+g → x |
現在のパネルを閉じる |
| Zellij を終了 | Ctrl+g → q |
現在のセッションを終了 |
ヒント:
Ctrl+g→?を押すと、いつでも完全なショートカットキーリストを表示できます。
フローティングペイン
フローティングペインは Zellij の特色ある機能の一つです。これはパネルを他のパネルの上に「浮遊」させ、固定されたグリッド空間を占有しないようにします。
フローティングペインの有効化:
# ショートカット:Alt + f
またはコマンドモード経由:
Ctrl+g → : → toggle_floating_panes
典型的な使用シナリオ:
# フローティングパネルで htop を実行してシステムリソースを監視
htop
# もう一つのフローティングパネルでログ追跡を実行
tail -f /var/log/syslog
# メインパネルでコード作成や他のコマンドの実行を継続
フローティングペインはドラッグ、サイズ変更ができ、「ピン留め」(pin)して常に最前面に表示することもできます。
スタックペイン
スタックペインは複数のパネルを垂直に積み重ねることができ、水平スペースを節約します。
スタックペインの作成:
# まず2つの通常のパネルを作成し、その後:
Ctrl+g → : → toggle_stack
スタックペイン間の切り替え:
# 矢印キーで上下に切り替え
スタックペインは以下のシナリオに特に適しています: - 複数のエディタバッファへのアクセスを維持 - 多くのスクリーン空間を占有せずに複数のコマンド出力を監視 - タスクやコンテキストごとにワークスペースを整理
セッション管理:作業状態の保存と復元
セッションマネージャー
Zellij には強力なセッション管理機能が内蔵されており、複数の作業環境間を簡単に切り替えることができます。
セッションマネージャーを開く:
Ctrl+g → w
これにより視覚的なセッション選択インターフェースが表示され、以下のことができます: - 実行中のすべてのセッションを表示 - カスタム名付きで新しいセッションを作成 - バックグラウンドセッションに切り替え - 以前終了したセッションを復元
ウェルカムスクリーン
Zellij を初めて起動するときは、ウェルカムスクリーンを使ってすぐに開始できます:
zellij -l welcome
ウェルカムスクリーンは「スタートメニュー」のようなインターフェースを提供し、以下のことができます: - 視覚的にセッションを選択 - 新しいセッションを作成 - 以前終了したセッションを復元
セッション復活(Session Resurrection)
これは Zellij の最もユニークな機能の一つです:Zellij を閉じたりコンピュータを再起動したりしても、次回開いたときに以前の詳細な作業状態を完全に復元できます。これには以下が含まれます:
- すべてのパネルのレイアウトとサイズ
- 各パネルで実行されていたコマンド
- スクロール履歴
- 環境変数と作業ディレクトリ
復元方法:
# Zellij を正常に起動し、セッションマネージャー経由で復元するセッションを選択
zellij
Ctrl+g → w → 以前終了したセッションを選択
または起動時に直接指定:
zellij attach <session-name>
これは長時間実行されるタスク(コンパイル、テスト、データ処理など)に非常に役立ちます——予期せず接続が切断されたり再起動したりしても、シームレスに作業を続けることができます。
レイアウト自動化:開発環境の定義
Zellij のレイアウトシステムでは、KDL(人間が読める設定フォーマット)を使って開発環境全体を宣言的に定義できます。
レイアウトとは?
レイアウトは .kdl ファイルで、以下を記述します:
- いくつのタブページがあるか
- 各タブページにどのパネルがあるか
- 各パネルで何のコマンドを実行するか
- パネルのサイズと位置
- フローティングまたはスタックを使用するかどうか
簡単なレイアウト例
my-project.kdl という名前のファイルを作成:
layout {
tab name="Backend" {
pane split_direction="Vertical" {
pane command="cargo" args=["run"]
pane command="npm" args=["run", "dev"]
}
}
tab name="Database" {
pane command="psql" args=["-U", "postgres", "-d", "mydb"]
}
}
レイアウトの使用:
zellij --layout my-project.kdl
これにより自動的に:
1. "Backend" と "Database" の2つのタブページを作成
2. "Backend" タブページで、垂直に2つのパネルに分割し、それぞれ cargo run と npm run dev を実行
3. "Database" タブページで、PostgreSQL クライアントを実行
コマンドペイン(Command Panes)
コマンドペインは Zellij のユニークな機能で、コマンドを単なるターミナル出力ではなく「一等市民」として扱います。
特徴: - コマンドの終了コードを確認できる - Enter キーを押すだけでコマンドを再実行できる - 「一時停止」状態に設定でき、必要に応じて手動でトリガーできる - ビルドコマンド、テスト実行、開発サーバー起動に非常に適している
レイアウトでコマンドペインを使用:
layout {
tab name="Dev" {
pane command="cargo" args=["test"] start_suspended=true
pane command="cargo" args=["build"] start_suspended=true
}
}
start_suspended=true はコマンドが自動実行されず、手動で Enter キーを押してトリガーする必要があることを意味します。これはリソース集約型操作(完全コンパイルなど)に非常に役立ち、レイアウトを起動するたびに自動実行されるのを防ぎます。
エディタパネル
Zellij では、任意のパネルのスクロールバッファを直接 $EDITOR で開くことができます:
# 現在のパネルで以下を押す:
Ctrl+s → e
これにより、設定したエディタ(vim、neovim、emacs など)で現在のパネルの全出力が開き、以下のことができます: - ターミナル出力を検索、コピー、整理 - 出力をファイルとして保存 - チームメンバーと共有
Web クライアント:ブラウザでターミナルにアクセス
Zellij には内蔵の Web サーバーがあり、ブラウザから直接ターミナルセッションにアクセスできます。这意味着: - ターミナルのインストール不要:ブラウザがある任意のデバイスで Zellij セッションにアクセス - リモート协作:ペアプログラミングやデバッグのためにチームメンバーとセッションを共有 - シームレスな切り替え:ターミナルとブラウザ間を自由に切り替え、セッション状態は一貫して保持
Web クライアントの有効化
Zellij 起動時に Web サーバーを有効化:
zellij --server /tmp/zellij-server.sock
または設定ファイルで有効化:
// ~/.config/zellij/config.kdl
plugins {
path "/usr/lib/zellij/plugins"
}
keybinds {
shared {
bind "Alt w" { SwitchToMode "WebClient"; }
}
}
セッションへのアクセス
ブラウザで以下を開く:
http://localhost:8082
以下のことができます:
- 実行中のすべてのセッションを表示
- URL で直接特定のセッションにアクセス:http://localhost:8082/my-session
- 読み取り専用トークンを作成し、他人にセッションを表示させる(操作は不可)
リモートアクセス
Zellij は HTTPS 経由でのリモートセッションアクセスをサポート:
# 別のマシンからリモートセッションにアタッチ
zellij attach https://my-server:8082/my-session
SSH トンネルやサードパーティ製ツールは不要で、以下に非常に適しています: - リモートデバッグ - ペアプログラミング - テクニカルサポート
プラグインシステム:WebAssembly で機能を拡張
Zellij のインターフェース自体がプラグインで構成されており、以下を含みます: - タブバー(Tab Bar) - ステータスバー(Status Bar) - セッションマネージャー(Session Manager) - ウェルカムスクリーン(Welcome Screen) - ファイルセレクター(Strider)
独自のプラグインの開発
Zellij プラグインは WebAssembly(WASM)に基づいており、WASM にコンパイルできる任意の言語(Rust、Go、C など)で書けます。Rust には一流のサポートと専用の SDK があります。
シンプルな Rust プラグインの作成:
# Zellij プラグイン足場ツールをインストール
cargo install zellij-plugin-template
# 新しいプロジェクトを作成
zellij-plugin-template my-plugin
cd my-plugin
生成されるプロジェクト構造:
my-plugin/
├── Cargo.toml
├── src/
│ └── main.rs
└── plugin.yaml
サンプルプラグインコード(src/main.rs):
use zellij_sdk::{prelude::*, Command};
#[command(name = "my-plugin")]
fn main() {
// Zellij イベントを購読
subscribe(&[EventType::KeyPress(Key::Char('x'))]);
loop {
match std::io::stdin().read_line() {
Ok(line) => {
if line.contains("KeyPress") {
// キープレスイベントを処理
println!("Received key press!");
}
}
Err(_) => break,
}
}
}
コンパイルとインストール:
# WASM にコンパイル
cargo build --target wasm32-wasip1 --release
# Zellij プラグインディレクトリにコピー
cp target/wasm32-wasip1/release/my_plugin.wasm ~/.local/share/zellij/plugins/
設定でプラグインを読み込む:
// ~/.config/zellij/config.kdl
plugins {
path "~/.local/share/zellij/plugins"
}
pane_templates {
template name="my-plugin-pane" {
plugin location="file:~/.local/share/zellij/plugins/my_plugin.wasm"
}
}
人気のコミュニティプラグイン
- Strider:動的ファイルシステムナビゲーション、ファジー検索をサポート
- Configuration Screen:インタラクティブな設定管理
- Multiple Pane Select:複数のパネルを一括操作
Zellij プラグインリポジトリ でより多くのコミュニティプラグインを見つけることができます。
高度なスクリプト化:CLI 制御
Zellij は CLI コマンドを通じて完全な制御インターフェースを公開しており、shell スクリプトや外部ツールから複雑なターミナルワークフローを構築できます。
条件付きブロッキングパネル
# コマンドが正常に終了するまでブロック
zellij action new-pane --command "cargo test" --block-until-exit-success
# コマンドが失敗して終了するまでブロック
zellij action new-pane --command "npm run build" --block-until-exit-failure
# コマンドが終了するまでブロック(成功または失敗に関わらず)
zellij action new-pane --command "make" --block-until-exit
失敗したコマンドはインタラクティブに再試行でき、スクリプトが位置を見失うことはありません。
リアルタイムパネル出力ストリーム
# 任意のパネルの出力を stdout にリアルタイムでストリーミング
zellij subscribe pane-id-123
# 構造化処理のために JSON フォーマットを使用
zellij subscribe pane-id-123 --json
これはリモートサーバーのログを監視したり、自動化パイプラインを構築したりするのに非常に役立ちます。
構造化状態クエリ
# すべてのパネルをリスト(JSON フォーマット)
zellij list-panes --json
# すべてのタブページをリスト
zellij list-tabs --json
# 現在のセッション情報を取得
zellij session-info
これらのコマンドは CI/CD パイプライン、モニタリングスクリプト、またはカスタムダッシュボードに統合できます。
実践ケース:開発者ワークフローの構築
ケース一:フルスタック開発環境
レイアウトファイル fullstack-dev.kdl を作成:
layout {
tab name="Frontend" {
pane split_direction="Vertical" {
pane command="npm" args=["run", "dev"]
pane command="npm" args=["run", "storybook"]
}
}
tab name="Backend" {
pane split_direction="Horizontal" {
pane command="cargo" args=["run"]
pane command="cargo" args=["watch", "-x", "test"] start_suspended=true
}
}
tab name="Database" {
pane command="docker" args=["compose", "up"]
pane command="psql" args=["-U", "postgres", "-d", "myapp"]
}
tab name="Monitoring" {
pane floating=true command="htop"
pane floating=true command="tail" args=["-f", "/var/log/app.log"]
}
}
起動:
zellij --layout fullstack-dev.kdl
このレイアウトは自動的に: 1. フロントエンド、バックエンド、データベース、モニタリング用の4つのタブページを作成 2. フロントエンドタブページで、垂直分割して開発サーバーと Storybook を実行 3. バックエンドタブページで、水平分割してアプリケーションとテストウォッチャーを実行 4. データベースタブページで、Docker Compose と PostgreSQL クライアントを起動 5. モニタリングタブページで、htop とログ追跡をフローティング表示
ケース二:リモートサーバーデバッグ
リモートサーバーで問題をデバッグする必要があると仮定:
# リモートサーバーに SSH
ssh user@remote-server
# Zellij セッションを起動
zellij -s debugging-session
# 最初のパネルでログを表示
tail -f /var/log/app/error.log
# 新しいパネルを作成し、診断コマンドを実行
Ctrl+g → n
dmesg | tail -20
# 新しいフローティングパネルを作成し、システムリソースを監視
Ctrl+g → Alt+f
htop
# Web クライアントを有効化し、同僚がリモートで閲覧できるように
# (事前に Web サーバーを設定する必要あり)
その後、同僚に https://remote-server:8082/debugging-session にアクセスするよう伝えれば、彼らはあなたのターミナルセッションをリアルタイムで見ることができ、書き込み権限が付与されていれば操作を支援することもできます。
ケース三:データサイエンスワークフロー
データサイエンスプロジェクトのレイアウト data-science.kdl を作成:
layout {
tab name="Notebook" {
pane command="jupyter" args=["lab", "--no-browser"]
}
tab name="Data Processing" {
pane split_direction="Vertical" {
pane command="python" args=["process_data.py"]
pane command="watch" args=["-n", "5", "ls", "-lh", "output/"]
}
}
tab name="Visualization" {
pane command="python" args=["visualize.py"]
pane floating=true command="eog" args=["output/chart.png"]
}
}
よくある質問とトラブルシューティング
Q1: Zellij と tmux は同時に使用できますか?
A: はい、できますが、ネストして使用することは推奨しません。tmux 内で Zellij を実行することも、Zellij 内で tmux を実行することもできますが、これによりショートカットキーの競合やパフォーマンスの問題が発生します。主要なターミナルマルチプレクサとして一つを選ぶことをお勧めします。
Q2: tmux 設定を Zellij に移行するにはどうすればよいですか?
A: Zellij には直接的な tmux 設定コンバーターはありませんが、以下のことができます: 1. Zellij の デフォルト設定ファイル を参照 2. tmux のよく使う機能を Zellij の同等の機能にマッピング 3. Zellij のレイアウトシステムを使用して tmux のスクリプトを代替
Q3: Zellij のパフォーマンスはどうですか?
A: Zellij は Rust で書かれており、パフォーマンスは優れています。ほとんどのシナリオで、メモリ使用量と CPU 使用率は tmux と同等か、一部のベンチマークではさらに良い結果を示します。大規模なセッション(数十のパネル)でも、Zellij の応答速度はスムーズです。
Q4: Zellij でマウスを使用するにはどうすればよいですか?
A: Zellij はデフォルトでマウス操作をサポート: - パネルをクリックしてフォーカスを切り替え - パネルの境界をドラッグしてサイズ調整 - マウスホイールをスクロールして履歴を閲覧 - タブページをクリックして切り替え
マウスが動作しない場合は、ターミナルエミュレータでマウスサポートが有効になっているか確認し、Zellij 設定で確認:
// ~/.config/zellij/config.kdl
mouse_mode true
Q5: Zellij は Windows をサポートしていますか?
A: Zellij は Windows(WSL2 または PowerShell 経由)をネイティブにサポートしています。公式ワンクリックインストールスクリプトを使用して Windows にインストールできます:
irm https://zellij.dev/launch.ps1 | iex
まとめ
Zellij はモダンなターミナルワークスペースで、tmux の強力な機能を継承しつつ、よりフレンドリーなユーザーエクスペリエンスと革新的な機能を提供します:
核心的な利点: - ✅ すぐに使える:複雑な設定不要、デフォルトで直感的な UI を提供 - ✅ フローティング/スタックペイン:柔軟なパネル管理、マルチタスク作業に適している - ✅ セッション復活:再起動しても完全な作業状態を復元 - ✅ Web クライアント:ブラウザ経由でターミナルにアクセス、リモート协作をサポート - ✅ プラグインシステム:WebAssembly ベース、安全で拡張可能 - ✅ レイアウト自動化:KDL で宣言的に開発環境を定義 - ✅ CLI スクリプト化:完全な制御インターフェース、自動化ワークフローに適している
適した人群: - 開発者:複数のサービス、テスト、モニタリングツールを同時に実行する必要がある - 運用エンジニア:リモートサーバーと長時間実行タスクを管理する必要がある - データサイエンティスト:Jupyter Notebook、データ処理、可視化ワークフローを整理する必要がある - チーム协作:ペアプログラミングやデバッグのためにターミナルセッションを共有する必要がある
次のステップ: - Zellij 公式ドキュメント を読む - コミュニティプラグイン を探索 - Discord または Matrix コミュニティに参加
tmux のモダンな代替品を探しているなら、Zellij は間違いなく試す価値があります。学習曲線は緩やかで、機能は強力で、ターミナル作業効率を大幅に向上させることができます。