🐸

【zellij/tmux】端末を閉じても作業を止めない「セッション」の仕組みと使い分け

に公開

zellijtmux などのターミナルマルチプレクサを使うことで、端末(ウィンドウ)を閉じても セッション内の作業(プロセス)を止めずに維持できます。

作業が途切れてやり直しになる場面を減らすことができ、次のようなケースで便利です。

  • Claude Code を並列実行したい
    複数ペインで Claude Code を同時に起動し、設計相談用・実装用など役割を分けて作業できます。セッションとしてまとめて管理できるため、端末を閉じても並列作業の構成を保ったまま再開できます。
  • 長時間ビルド/テスト中に離席したい
    端末を閉じても処理は継続し、戻ったら attach して結果だけ確認できます。
  • ログ監視を流しっぱなしにしたい
    tail -f や監視ツールをセッションに置いておけば、別作業をしても監視が途切れません。
  • SSH 作業で接続が切れがち(移動・VPN・スリープ)
    接続が切れてもサーバ側の tmux/zellij セッションは生きているので、再接続して続きができます。
  • 作業の“配置”ごと残したい(ペイン・ディレクトリ・コマンド)
    「どの窓で何を見ていたか」をセッションとして保持でき、探し直しや再配置の手間が減ります。

例えば、"Claude Code を左ペイン"、"フロントエンド開発サーバーのコンソールを右上ペイン"、"バックエンドサーバーのコンソールを右下ペイン" に固定しておくとします。端末を閉じても attach すれば同じ作業場を復元し再開できます。

ターミナルマルチプレクサの使用には、セッションの理解が大事です。
この記事では、次を整理します。

  • 端末を閉じても作業が続く仕組み
  • Attach と Resurrect の違い(混同しやすい点)
  • 切り替え(attach 失敗 → resurrect)の考え方
  • PC を軽くしたいときの正しい手順(detach と kill の違い)

図解

Zellij セッションの仕組みと使い分け

まず前提:ターミナルは「3層」で理解すると混乱しない

ターミナル作業は、次の3つに分けて考えると理解しやすくなります。

1. 端末(Terminal / iTerm2 / Alacritty など)

表示と入力の「窓」です。閉じると表示が消えます。

2. シェル(zsh / bash など)

コマンドを解釈して実行する入口です。

3. マルチプレクサ(zellij / tmux)

セッション(作業場)を保持し、複数のペインやタブを管理します。
端末が閉じても、マルチプレクサが生きていれば作業は継続できます。

端末は「窓」、zellij/tmux は「作業場の本体」と考えると、理解しやすいでしょう。

端末を閉じても作業が続くのはなぜ?

次の仕組みを理解しておくことが重要です。

  • 端末を閉じる = 表示が消えるだけ
  • 端末を閉じても zellij/tmux は生きており、セッション配下のプロセスは動き続けている

プロセスは、例えば、Node/Python の dev server、watch(ファイル監視)、ログ監視、DB や常駐ツール など。

Attach / Detach:生きているセッションに「戻る」「離れる」

ここからが混乱しやすいポイントです。
Attach と Resurrect は似て見えますが、役割が違います。

Attach とは(再接続)

生きているセッションに戻る操作です。端末を閉じてもセッションが生きていれば、Attach で同じ作業場に復帰できます。

Detach とは(切断)

セッションは生かしたまま、表示の接続だけ外す操作です。離席や一時的な切断に向いていますが、プロセスは動き続けます。zellij/tmux の中にいる状態でウィンドウを閉じると自動で detach されることが多いですが、確実にセッションを残したままにしたいなら、明示的に detach しましょう。

Resurrect とは (復元)

死んだセッションを保存情報から復元する操作です。Attach と違って「セッションが死んだ後」のためのものです。

Resurrect で戻せるものの例

  • ペイン/タブのレイアウト
  • 作業ディレクトリ
  • 起動コマンド(対応範囲はツール次第)

Resurrect で戻せないものの例

  • 実行中プロセスの「途中状態」(進行中の処理、REPLの途中など)
  • インメモリの状態

Attachは「完全に同じ状態に戻す」、Resurrect は「作業環境を素早く再現する」と理解すると良いでしょう。

継続必須でないセッションは detach ではなく kill する

前述のように、detach は表示を外すだけなので、セッション内のプロセスは動き続けます。なので、"不要なのに負荷(メモリ/CPU)のあるセッションが裏で動いたまま" といった状況は避けましょう。

Zellij のセッション操作

  • タブで復元したいセッションを選び Enter で Resurrect
    = zellij attach <session-name>
  • fn + Del:セッションを削除(※復元不可)
    = zellij delete-session <session-name>
  • Ctrl d:稼働中のセッションを kill (復元可)
    = zellij kill-session <session-name>

まとめ

  • 端末は「窓」、zellij/tmux は「作業場の本体」
  • Attach は「生きているセッションに戻る」
  • Resurrect は「死んだセッションを復元する操作」
  • 軽くしたいなら detach ではなく kill
GitHubで編集を提案

Discussion