tmuxの使い方:複数のターミナル管理とSSH切断時のセッション保持

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

問題:10個のターミナルタブを開いていても、SSH切断で全部消える

Linuxサーバーを使い始めたころ、ログの監視、コマンドの実行、ファイルの編集と、作業ごとに何十ものターミナルタブを開く癖があった。一見「かっこいい」ように見えて、実際はひどく散らかっていた。そしてある日、VPSにSSHでデプロイ作業中にネットワークが落ちた。接続が切れ、ビルドプロセスも死んで、最初からやり直し。本当に辛かった。

そのビルドには20分かかっていた。2回目の再実行では環境が中途半端に壊れていて別のエラーが出た。その一件で高い授業料を払って学んだ——それ以来、tmuxは新しいサーバーに最初にインストールするものになった。

通常のターミナル:致命的な2つの弱点

通常のターミナル(または素のSSH)では解決できない本質的な問題が2つある:

  • セッションの非永続性:SSH接続が切れると(ネットワーク障害、ラップトップのスリープ、タイムアウト)、実行中のプロセスはすべて即座にkillされる。
  • 複数ウィンドウの管理ができない:複数のSSHタブを開くということは複数の独立した接続を意味し、全体を俯瞰したりタスク間をすばやく切り替えたりする手段がない。

初心者はよくnohup&をバックグラウンド実行に使う——1〜2個の単純なコマンドなら十分だ。しかしプロジェクトが複雑になると(ログ監視、サーバー起動、config編集を同時に行う)、nohupではほとんど役に立たない。

各選択肢の比較

方法1:nohupまたはscreenを使う

nohupはログアウト後もプロセスを継続させるが、後から操作するインターフェースがない。screenはより優れており——永続的なセッションの作成、アタッチ/デタッチが可能——しかし画面が古く、キーバインドが覚えにくく、tmuxのように画面分割ができない。

方法2:複数のSSH接続を並列で開く

使えなくはないが、リソースを浪費する。ネットワークが不安定なら全部同時に失う。根本的な問題の解決にはならない。

方法3:tmuxを使う

tmux(ターミナルマルチプレクサ)では以下が可能:

  • SSH接続とは独立して存在するセッションを作成できる
  • 1つのターミナルウィンドウを複数の小さなペインに分割できる
  • ウィンドウとセッション間をすばやく切り替えられる
  • いつでも、どのマシンからでもデタッチ・アタッチできる

tmuxをステップごとにマスターする

ステップ1:tmuxのインストール

ほとんんどのLinuxディストリビューションでは、パッケージマネージャーからtmuxをインストールできる:

# Ubuntu / Debian
sudo apt update && sudo apt install tmux -y

# CentOS / RHEL / Fedora
sudo dnf install tmux -y

# Arch Linux
sudo pacman -S tmux

# バージョン確認
tmux -V

tmux 3.x以降はマウスをサポートし、多くの改善が加えられている。tmux -Vを実行してtmux 3.2a以上が表示されれば問題ない。

ステップ2:tmuxの3層構造を理解する

コマンドを打つ前に、この3つの概念を把握しておこう:

  • Session:最大のコンテナ。1つのセッションに複数のウィンドウを含められる。デタッチしてもセッションは存在し続ける。
  • Window:ターミナルのタブに相当。各ウィンドウは画面全体を占有する。
  • Pane:ウィンドウを複数の小さなペインに分割でき、各ペインは独立したターミナルとなる。

イメージとしては:Sessionはオフィスビル、Windowは各作業室、Paneはその部屋の各デスクに相当する。

ステップ3:ターミナル外からの基本コマンド

# 新しいセッションを作成(名前なし)
tmux

# 特定の名前でセッションを作成(推奨)
tmux new-session -s deploy
tmux new -s monitoring   # 省略形

# 実行中のセッションを一覧表示
tmux ls

# 名前でセッションにアタッチ
tmux attach -t deploy
tmux a -t deploy         # 省略形

# 最新のセッションにアタッチ
tmux a

# セッションを削除
tmux kill-session -t deploy

ステップ4:tmux内のキーバインド

tmuxのすべてのコマンドはプレフィックスキーから始まる——デフォルトはCtrl + bだ。プレフィックスを押して離してから、次のコマンドキーを押す。3つを同時に押すわけではない。

例えば、新しいウィンドウを作成するにはCtrl+bを押して離し、cを押す。

セッション管理:

Ctrl+b d        # セッションからデタッチ(セッションはバックグラウンドで継続)
Ctrl+b $        # 現在のセッションの名前を変更
Ctrl+b s        # セッション一覧を表示(選択してスイッチ可能)

ウィンドウ管理:

Ctrl+b c        # 新しいウィンドウを作成
Ctrl+b ,        # 現在のウィンドウの名前を変更
Ctrl+b n        # 次のウィンドウに移動
Ctrl+b p        # 前のウィンドウに移動
Ctrl+b 0-9      # ウィンドウ番号0、1、2...に直接ジャンプ
Ctrl+b w        # ウィンドウ一覧を表示して選択
Ctrl+b &        # 現在のウィンドウを閉じる(確認あり)

ペイン管理:

Ctrl+b %        # 画面を縦に分割
Ctrl+b "        # 画面を横に分割
Ctrl+b 矢印キー  # ペイン間を移動
Ctrl+b z        # 現在のペインをズーム(拡大/縮小)
Ctrl+b x        # 現在のペインを閉じる(確認あり)
Ctrl+b q        # ペインの番号を表示
Ctrl+b {        # ペインを左に移動
Ctrl+b }        # ペインを右に移動

ステップ5:デプロイ時の実践シナリオ

Node.jsアプリをVPSにデプロイするときによく使う手順:

# サーバーにSSH接続
ssh user@vps-ip

# 'deploy'という名前のセッションを作成
tmux new -s deploy

# ペインを分割:左でデプロイコマンド実行、右でログ確認
Ctrl+b %

# 左ペイン:デプロイスクリプトを実行
git pull origin main && npm install && pm2 restart app

# 右ペインに移動(Ctrl+b →)
# 右ペイン:リアルタイムでログを確認
pm2 logs app --lines 50

# 接続が切れた場合、SSH再接続して古いセッションにアタッチ
tmux a -t deploy
# すべてそのまま残っている!

以前、ビルドパイプラインに15分かかるアプリをデプロイしていた。途中でネットワークが落ちてSSH再接続し、セッションにアタッチしたら——ビルドはまだ動いていて、ログも完全に残っていて、何も失っていなかった。

ステップ6:設定ファイルでtmuxをカスタマイズ

設定ファイルは~/.tmux.confにある。以下の最小限のconfigが良いスタート地点となる:

# プレフィックスをCtrl+bからCtrl+aに変更(GNU screenユーザーに慣れ親しんだ設定)
# set-option -g prefix C-a
# unbind C-b
# bind C-a send-prefix

# マウスを有効化 — スクロールやクリックでペインを選択可能
set -g mouse on

# ウィンドウの番号を0ではなく1から開始(キーボード操作が自然になる)
set -g base-index 1
setw -g pane-base-index 1

# スクロールバックバッファを5000行に増加(デフォルトは2000)
set -g history-limit 5000

# ステータスバーにホスト名と時刻を表示
set -g status-right '%Y-%m-%d %H:%M'
set -g status-right-length 30

# tmuxを終了せずにconfigをリロード
bind r source-file ~/.tmux.conf \; display "設定をリロードしました!"

編集後、以下でconfigをリロードする:

# tmux内で押す:
Ctrl+b r

# または外部から:
tmux source-file ~/.tmux.conf

ステップ7:複数プロジェクトのマルチセッションワークフロー

プロジェクトやサーバーごとに独立したセッションを持つべきだ——こうするとCtrl+b sでセッション選択メニューが表示されてとても便利:

# プロジェクト/サーバーごとに個別のセッション
tmux new -s itfromzero    # メインブログ
tmux new -s monitoring    # サーバー監視
tmux new -s staging       # ステージング環境

# 全セッションの概要を確認
tmux ls
# itfromzero: 3 windows (created Fri Feb 28 09:00:00 2026)
# monitoring: 1 windows (created Fri Feb 28 08:30:00 2026)
# staging: 2 windows (created Fri Feb 28 10:15:00 2026)

# tmux内からセッションを切り替え
Ctrl+b s   # セッション選択メニューを表示

まとめ

約10個のキーバインドで日常作業の80%は十分こなせる。すべてを一度に覚える必要はない。

おすすめの学習ロードマップ:

  1. tmuxをインストールし、名前付きセッションを作成する
  2. デタッチ(Ctrl+b d)と再アタッチ(tmux a -t 名前)を練習する
  3. ペイン分割(Ctrl+b %Ctrl+b ")を習得する
  4. ~/.tmux.confset -g mouse onを追加してマウスを使えるようにする
  5. 必要に応じて徐々に機能を探索していく

最も効果的な学習方法は、実際の作業でtmuxをすぐに使い始めることだ——サーバーにSSH接続するときは最初からtmuxを開く。数週間もすれば、チートシートを見なくてもキーバインドが自然と指に染み込む。

Share: