Zellij:LinuxでRust製ターミナルマルチプレクサをインストール・活用する — tmuxの代替として

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

tmuxを何年も使い続けてきたが、画面を分割するたびに「tmux split pane horizontally」をGoogle検索していたのを今でも覚えている。デフォルトのキーバインドはCtrl+bに続いて%、そして"……初心者にはまったく優しくない。Zellijはまさにその痛みを解決するために生まれた。

従来のターミナルマルチプレクサが抱える現実的な問題

tmuxは優れたツールだが、習得コストが高い。使いこなすには専用のキーバインドを覚え、セッション・ウィンドウ・ペインの概念を理解し、まともなUIにするには~/.tmux.confをゼロから書く必要がある。Linuxサーバー管理を始めたばかりの人には不要なオーバーヘッドだ。

Zellijはアプローチが異なる。すべての操作は画面下部のステータスバーに直接表示される。今どのモードにいて、次に何ができるかが一目でわかる。覚える必要も、壁にチートシートを貼る必要もない。

技術的な面では、ZellijはRustで書かれているため、メモリフットプリントが小さく、時間が経ってもメモリリークが起きない。職場の古いCentOS 7サーバーでは、数か月連続稼働させるとscreenやtmuxのメモリ使用量がかなり膨らんでいた。Zellijにはその問題がない。

LinuxへのZellijインストール

Ubuntu / Debian

Zellijはaptのデフォルトリポジトリにはまだ含まれていない。最も手早い方法はバイナリリリースをダウンロードすることだ:

VERSION=$(curl -s https://api.github.com/repos/zellij-org/zellij/releases/latest \
  | grep '"tag_name"' | cut -d'"' -f4)
curl -L "https://github.com/zellij-org/zellij/releases/download/${VERSION}/zellij-x86_64-unknown-linux-musl.tar.gz" \
  -o /tmp/zellij.tar.gz
tar xf /tmp/zellij.tar.gz -C /tmp
sudo mv /tmp/zellij /usr/local/bin/
zellij --version

Arch Linux / Manjaro

sudo pacman -S zellij

Fedora / RHEL / CentOS

muslリンクのバイナリはglibcバージョンに依存しないためCentOS 7でも正常に動作する — これが職場のサーバーで使っている方法だ:

curl -L https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz \
  | tar xz -C /tmp
sudo mv /tmp/zellij /usr/local/bin/

またはRustツールチェーンがある場合:

cargo install zellij

インストール後の確認

which zellij
zellij --version
# 出力: zellij 0.41.x

Zellijの詳細設定

設定ファイル

Zellijは以下の優先順位で設定ファイルを探す:

  1. 環境変数$ZELLIJ_CONFIG_FILE
  2. ~/.config/zellij/config.kdl
  3. 組み込みデフォルト

デフォルト設定をファイルに書き出して編集する:

mkdir -p ~/.config/zellij
zellij setup --dump-config > ~/.config/zellij/config.kdl

設定にはKDL形式を使用 — JSON/YAMLのような括弧やインデントを気にせず読みやすい:

// ~/.config/zellij/config.kdl

theme "catppuccin-mocha"

// ターミナルエミュレータでテキストを選択したい場合はマウスモードを無効化
mouse_mode false

// スクロールバッファ
scroll_buffer_size 10000

// ペインの枠線と名前を表示
pane_frames true

// クリップボードへコピー(Linux X11)
copy_command "xclip -selection clipboard"
// Waylandの場合: "wl-copy"

レイアウト — 保存して再利用できる画面構成

これはtmuxと比べたZellijの最大の強みだ。レイアウトはKDLファイルで定義でき、必要なときにいつでも読み込める。手動セットアップは不要:

mkdir -p ~/.config/zellij/layouts
// ~/.config/zellij/layouts/dev.kdl
layout {
    pane size=1 borderless=true {
        plugin location="zellij:tab-bar"
    }
    pane split_direction="vertical" {
        pane split_direction="horizontal" {
            pane {
                name "editor"
                command "nvim"
            }
            pane {
                name "git"
                size "30%"
            }
        }
        pane {
            name "server"
            size "35%"
        }
    }
    pane size=2 borderless=true {
        plugin location="zellij:status-bar"
    }
}

レイアウトを指定して起動:

zellij --layout ~/.config/zellij/layouts/dev.kdl

キーバインドのカスタマイズ

デフォルトではZellijはPaneモードにCtrl+p、TabモードにCtrl+tを使用する。より素早く操作したい場合は上書きできる:

// config.kdlに追加
keybinds {
    normal {
        // Alt+nで新しいペインを素早く作成
        bind "Alt n" { NewPane; }
        // 現在のペインを閉じる
        bind "Alt w" { CloseFocus; }
        // フローティングペインを素早く表示
        bind "Alt f" { ToggleFloatingPanes; }
    }
}

テーマ

利用可能なテーマ一覧を表示:

zellij setup --dump-themes | grep -E "^[a-z]"

人気のテーマ:draculatokyo-night-darkcatppuccin-mochagruvbox-darknord。config.kdlで設定:

theme "tokyo-night-dark"

実践的な使い方と動作確認

日常的な基本操作

zellij                  # 新しいセッションを開く
zellij attach           # 実行中のセッションにアタッチ
zellij list-sessions    # 現在のセッション一覧を表示
zellij -s dev           # "dev"という名前のセッションを作成

セッション内の操作 — すべてステータスバーに表示されるので覚える必要はない:

  • ペインを縦分割: Ctrl+pd
  • ペインを横分割: Ctrl+pn
  • ペイン間を移動: Ctrl+p → 矢印キー
  • ペインのリサイズ: Ctrl+n → 矢印キー
  • 新しいタブ: Ctrl+tn
  • フローティングペイン: Ctrl+pw
  • セッションをデタッチ: Ctrl+od

フローティングペイン — tmuxにない機能

フローティングペインは最もよく使う機能だ。エディタ作業中に、コンテキストを失わずに素早くコマンドを実行したいときに使う:

# Ctrl+pを押してからwを押す
# 画面中央にフローティングペインが現れる — コマンドを実行
# もう一度Ctrl+p → wで非表示にして、エディタに戻る

タブを切り替える必要なく、作業中のペインのフォーカスを失わない。

セッション永続化の確認

SSH経由でリモートサーバーを操作する際の最重要ユースケースだ:

# サーバーにSSH接続してZellijを起動
zellij -s main

# 長時間実行するプロセスを開始
watch -n 2 df -h

# デタッチ: Ctrl+o → d
# ターミナルを閉じて、後でSSH再接続

# 再アタッチ — プロセスはまだ実行中
zellij attach main

SSH時の自動アタッチ

~/.bashrcまたは~/.zshrcに追加して、SSH接続のたびに自動でZellijに入るようにする:

# すでにZellijセッション内なら実行しない
if [[ -z "$ZELLIJ" ]]; then
    zellij attach -c main 2>/dev/null || zellij -s main
fi

$ZELLIJ変数はセッション内で自動的に設定されるため、このコードが無限ループになることはない。

リソース使用量の確認

# ZellijのRAM使用量を確認
ps aux | grep zellij | grep -v grep

# より詳細に確認
pidof zellij | xargs -I{} cat /proc/{}/status | grep -E 'VmRSS|VmSize'

職場のCentOS 7サーバーでは — 目標のパフォーマンスを達成するためにかなりの最適化を行った後 — screenからZellijに移行することで、同数のセッションを開いた状態でメモリフットプリントが約50MBから約18MBに削減された。RAM 2GBのサーバーで多くのサービスを稼働させている場合、この数値は実際に意味がある。

Zellijとtmuxのどちらをいつ使うか

  • ターミナルマルチプレクサ初心者: Zellij — 習得が速く、チートシート不要
  • tmuxに慣れていてワークフローが問題ない: 急いで移行する必要はない
  • フローティングペインが必要: Zellijが明確に優れている
  • 豊富なプラグインエコシステムが必要: 現時点ではtmuxの方が大きい
  • glibcバージョンが古いサーバー: ZellijのmuslバイナリならOK、tmuxはソースからビルドが必要な場合も

Zellijは急速に発展しており、リリースのたびに大幅な改善が加えられている。WebAssemblyを使用したプラグインシステムはまだ成熟していないが、長期的なポテンシャルは大きい。ゼロから作業環境を構築するなら、試してみる価値がある選択肢だ。

Share: