tmux(ティーマックス)は、1つのターミナル画面上で複数の仮想端末を立ち上げ、画面分割やタブ切り替えを可能にする「ターミナルマルチプレクサ(Terminal Multiplexer)」です。
リモートサーバーでの作業中にSSH接続が不意に切断されても、バックグラウンドで実行中のプロセスや画面状態をそのまま保持(永続化)できるため、インフラ運用や日々の開発現場において必須のツールとなっています。
本記事では、tmux の基本概念からプレフィックスキー操作、セッション管理(デタッチ/アタッチ)、画面分割(ペイン操作)、タブ管理(ウィンドウ操作)、viコピーモード、実務で即役立つ ~/.tmux.conf の完成版設定、SSH自動アタッチ連携まで、実務目線で網羅的に解説します。
- 【最速早見表】実務でよく使う tmux コマンド&ショートカット一覧
- tmux の基本概念|セッション・ウィンドウ・ペインの3層構造
- tmux のインストールと基本ライフサイクル(起動・終了)
- セッション管理の実践|名前付きセッション・デタッチ・アタッチ
- 画面分割(ペイン操作)の極意|左右・上下分割からリサイズ・同期まで
- ウィンドウ(タブ)の活用|複数タスクの並行処理と切り替え
- スクロールとコピーモード|過去ログ確認とviキーバインド操作
- 実務が劇的に快適になる ~/.tmux.conf のおすすめ完成版設定
- SSH接続切断対策&リモート作業でのベストプラクティス
- よくあるトラブルと現場での対処法(FAQ)
- 関連コマンド・ツールとの違いと使い分け(screen / nohup / mosh)
- 関連記事
【最速早見表】実務でよく使う tmux コマンド&ショートカット一覧
実務で頻出する tmux の基本操作を「シェルのCLIコマンド」と「tmux内のショートカットキー(デフォルト: Ctrl+b)」に分けて整理しました。
1. CLIコマンド早見表(シェルから実行)
| 実行コマンド | 機能・用途 | 備考・省略形 |
|---|---|---|
tmux | 名前なしで新規セッションを作成・起動 | 番号(0, 1…)が自動採番 |
tmux new -s <名前> | 名前を指定して新規セッションを作成・起動 | tmux new-session -s <名前> |
tmux ls | 稼働中のセッション一覧を表示 | tmux list-sessions |
tmux a -t <名前> | 指定したセッションに再接続(アタッチ) | tmux attach -t <名前> |
tmux a | 直前に使用していたセッションにアタッチ | 最も手軽な再接続 |
tmux kill-session -t <名前> | 指定したセッションを完全終了 | バックグラウンド処理も停止 |
tmux kill-server | すべての tmux セッションを一括終了 | 全セッション破棄(注意) |
tmux source-file ~/.tmux.conf | 設定ファイルを即座に再読み込み | 設定変更の反映 |
2. キーバインド早見表(tmux起動中に実行)
tmux 内での操作は、プレフィックスキー Ctrl+b を押して指を離した後に、各機能キーを入力します。
| 分類 | キー操作(Ctrl+b の後) | 機能・動作 |
|---|---|---|
| セッション | d | デタッチ(セッションを維持したまま元のシェルへ戻る) |
$ | 現在のセッション名を変更(リネーム) | |
| 画面分割 (ペイン) | % | 画面を左右(横方向)に分割 |
" | 画面を上下(縦方向)に分割 | |
矢印キー (↑↓←→) | 指定方向のペインへカーソル・フォーカスを移動 | |
o | 次のペインへ順繰りにフォーカスを移動 | |
z | 現在のペインを一時的に最大化 / 元のサイズに復元(Zoom) | |
x | 現在のペインを閉じる(確認プロンプト y/n) | |
Space | ペインのレイアウト配置をプリセット順に切り替え | |
| タブ管理 (ウィンドウ) | c | 新しいウィンドウ(タブ)を作成(Create) |
n / p | 次のウィンドウ(Next) / 前のウィンドウ(Previous)へ移動 | |
0 〜 9 | 指定した番号のウィンドウへ直接ジャンプ | |
w | ウィンドウ・セッションの一覧をツリー表示して選択 | |
, | 現在のウィンドウ名を変更(リネーム) | |
| スクロール コピー | [ | コピーモード(スクロールモード)に入る(終了は q) |
] | tmux バッファにコピーしたテキストを貼り付け |
tmux の基本概念|セッション・ウィンドウ・ペインの3層構造
tmux を自在に使いこなすためには、tmux が管理する「3つの階層構造」を把握しておくことが重要です。
【tmux の階層構造】
[ Session: 作業全体の単位(例: "web-dev") ] ── バックグラウンドで永続保持可能
│
├── [ Window 1: タブに相当(例: "editor") ]
│ ├── [ Pane 1: 上部(ソースコード編集 / Vim) ]
│ └── [ Pane 2: 下部(テスト実行・ビルド) ]
│
└── [ Window 2: タブに相当(例: "logs") ]
├── [ Pane 1: 左側(アクセスログ監視: tail -f) ]
└── [ Pane 2: 右側(リソース監視: htop) ]
- セッション(Session): tmux が管理する最上位の作業環境です。サーバー上で独立したバックグラウンドプロセスとして動作するため、作業者がログアウトしてもセッション内部のプログラムは稼働し続けます。
- ウィンドウ(Window): セッション内に作成できる「仮想タブ」です。画面下部のステータスバーに
0:bash*1:logsのように一覧表示され、ワンキーで瞬時に切り替えられます。 - ペイン(Pane): 1つのウィンドウ画面を上下左右に分割した最小の表示領域です。ログを監視しながら隣のペインでコマンドを実行するなど、マルチタスクを1画面で完結できます。
tmux のインストールと基本ライフサイクル(起動・終了)
主要な Linux ディストリビューションおよび macOS では、標準パッケージマネージャーから簡単にインストールできます。
# Ubuntu / Debian
sudo apt update && sudo apt install -y tmux
# RHEL / AlmaLinux / Rocky Linux / CentOS
sudo dnf install -y tmux
# macOS (Homebrew)
brew install tmux
# バージョン確認
tmux -V
# 出力例: tmux 3.4
最もシンプルな起動と終了
ターミナルで単に tmux と実行すると、新しいセッションが開始され、画面下部に緑色のステータスバーが表示されます。
# tmux の起動
tmux
# tmux セッションの終了(内部のシェルから抜ける)
exit
# または Ctrl+d
ペインやウィンドウが1つだけの状態で exit を実行すると、tmux セッションそのものが完全に破棄されて元のシェルへ戻ります。
セッション管理の実践|名前付きセッション・デタッチ・アタッチ
実務で tmux を使う最大の利点は、作業状態を維持したまま一時離脱(デタッチ)し、後からいつでも元の状態に再接続(アタッチ)できることです。
1. 名前付きセッションを作成する
セッションにプロジェクト名や作業内容の名前(例: deploy, log-monitor)を付けておくと、複数の作業を並行して進める際に迷わず管理できます。
# 名前 "infra-work" でセッションを作成して開始
tmux new -s infra-work
2. セッションから離脱(デタッチ)する
作業中のプログラム(時間のかかるバックアップ処理やビルドなど)を実行したまま tmux を抜けるには、以下のキーを入力します。
# tmux 起動中にキー入力
Ctrl+b を押した後に d キーを押す
画面に [detached (from session infra-work)] と表示され、元のシェルのプロンプトに戻ります。このとき、tmux 内で動いているプロセスは一切停止せず、バックグラウンドで動作し続けます。
3. 稼働中のセッション一覧を確認する
# 稼働中のセッション一覧を表示
tmux ls
# 出力例:
# infra-work: 2 windows (created Wed Oct 14 16:20:00)
# dev-api: 1 windows (created Wed Oct 14 15:10:12) (attached)
末尾に (attached) と付いているものは、現在いずれかのターミナルで接続中のセッションです。
4. セッションに再接続(アタッチ)する
# セッション名を指定してアタッチ
tmux a -t infra-work
# セッションが1つだけ、または直前のセッションに戻る場合
tmux a
5. 不要になったセッションを破棄・削除する
作業が完全に終了したセッションは、メモリやプロセスリソースを解放するために削除します。
# 特定のセッションを破棄
tmux kill-session -t infra-work
# 起動中の全セッション・tmuxサーバーを一括停止
tmux kill-server
画面分割(ペイン操作)の極意|左右・上下分割からリサイズ・同期まで
1つのウィンドウを複数に分割して作業領域を作る「ペイン(Pane)」の操作は、tmux の醍醐味です。
1. 画面を左右・上下に分割する
- 画面を左右(横)に分割:
Ctrl+bを押した後に%(Shift + 5) - 画面を上下(縦)に分割:
Ctrl+bを押した後に"(Shift + 2 または Shift + ‘)
分割を繰り返すことで、画面を4分割(田の字)や3分割など自由自在なレイアウトにカスタマイズできます。
2. ペイン間のフォーカス移動
- 方向キーで移動:
Ctrl+b$\to$↑/↓/←/→(直感的に隣のペインへ移動) - 順番に切り替え:
Ctrl+b$\to$o(次のペインへ順繰りフォーカス) - ペイン番号で移動:
Ctrl+b$\to$qを押すと各ペインに大きく番号が表示されるので、消える前に該当の数字キーを押す
3. ペインの一時最大化と復元(Zoom機能)
画面を細かく分割しているときに、「ログの一部を広い画面で確認したい」「長いコードを行折り返しなしで見たい」という場合に必須の機能が Zoom(最大化) です。
# 現在フォーカスしているペインを画面全体に最大化
Ctrl+b を押した後に z
# もう一度同じキーを押すと、元の分割状態に瞬時に復元
最大化中はステータスバーのウィンドウ名末尾に *Z(例: 0:bash*Z)と表示され、最大化中であることが一目で分かります。
4. ペインのリサイズ(サイズ変更)
デフォルトでは、Ctrl+b を押した状態で Ctrl キーを押しながら矢印キー(Ctrl+↑, Ctrl+↓ など)を押すことで、境界線を1セル単位で調整できます。
5. 【実務の裏技】複数ペインへの一括コマンド送信(同期入力)
複数台のサーバーに同時にSSH接続して同じ設定ファイルを確認したり、複数のログを同時に tail -f したい場合に役立つのが synchronize-panes(ペイン同期) です。
# ペイン同期を有効化(1つのペインに入力した文字が全ペインに同時送信される)
Ctrl+b を押した後に :setw synchronize-panes on と入力して Enter
# 同期を解除する
Ctrl+b を押した後に :setw synchronize-panes off と入力して Enter
ウィンドウ(タブ)の活用|複数タスクの並行処理と切り替え
画面分割だけでなく、ブラウザのタブのように画面全体を切り替える「ウィンドウ(Window)」を活用すると、役割ごとに作業環境をすっきりと分離できます。
1. 新規ウィンドウの作成と移動
- 新規作成:
Ctrl+b$\to$c(新しいタブが開く) - 次のウィンドウへ移動:
Ctrl+b$\to$n(Next) - 前のウィンドウへ移動:
Ctrl+b$\to$p(Previous) - 直前のウィンドウへ戻る:
Ctrl+b$\to$l(Last) - 番号で直接ジャンプ:
Ctrl+b$\to$0〜9
2. ウィンドウ一覧から選択(ツリービュー)
ウィンドウが多くなった場合は、一覧表示からプレビューを見ながら選択できます。
Ctrl+b を押した後に w
全セッションおよび全ウィンドウがツリー形式で一覧表示され、上下キーで選択して Enter を押すだけで目的のウィンドウへジャンプできます。
3. ウィンドウ名のリネーム
デフォルトでは実行中のコマンド名(bash, vim など)が自動設定されますが、自分で分かりやすい名前を付けておくと管理が容易になります。
Ctrl+b を押した後に ,(カンマ)
# 画面左下に名前入力プロンプトが出るので、新しい名前を入力して Enter
スクロールとコピーモード|過去ログ確認とviキーバインド操作
tmux の内部では、通常のターミナルのマウススクロールやトラックパッドスクロールがそのままでは効かない場合があります。過去の出力ログを確認したり、テキストをコピーするには コピーモード を使用します。
1. コピーモードの基本操作
| 操作 | キー入力 | 説明 |
|---|---|---|
| コピーモードに入る | Ctrl+b $\to$ [ | 画面右上に [0/100] のように行数が表示される |
| カーソル移動・スクロール | ↑ / ↓ / PageUp / PageDown | 過去の出力を自由にスクロール |
| コピーモードを終了 | q または Esc | 通常のコマンド入力モードへ復帰 |
| 貼り付け(ペースト) | Ctrl+b $\to$ ] | コピーしたテキストを現在のシェルに貼り付け |
2. vi キーバインドでのテキスト選択とコピー
設定ファイルで vi モードを有効化しておくと、Vim と全く同じキーバインドで高速に文字列を選択・コピーできます。
h/j/k/l: カーソル移動(左/下/上/右)Ctrl+u/Ctrl+d: 半画面スクロール(上/下)/ <キーワード>: 下方向へ文字列検索(nで次候補、Nで前候補)? <キーワード>: 上方向へ文字列検索Spaceまたはv: 選択開始(ビジュアルモード)Enterまたはy: 選択範囲を tmux バッファにコピー(コピーと同時にモード終了)
実務が劇的に快適になる ~/.tmux.conf のおすすめ完成版設定
tmux は設定ファイル ~/.tmux.conf を作成・編集することで、マウス操作の有効化、キーバインドの改善、配色の最適化など、自分好みの快適な環境へカスタマイズできます。
以下は、現場のエンジニアが実務でそのままコピー&ペーストして使える「鉄板の完成版設定」です。
# ====================================================================
# ~/.tmux.conf - 実務用おすすめ完成版設定
# ====================================================================
# --------------------------------------------------------------------
# 1. 基本設定 & プレフィックスキー
# --------------------------------------------------------------------
# プレフィックスキーを Ctrl+a に変更したい場合は以下のコメントを解除
# unbind C-b
# set -g prefix C-a
# bind C-a send-prefix
# キーストロークの応答速度を向上(Vim/Neovim の Esc 遅延解消)
set -s escape-time 0
# ウィンドウ・ペインのインデックスを 1 から開始(0キーが遠いため)
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on # ウィンドウを閉じたら番号を詰める
# --------------------------------------------------------------------
# 2. マウス操作の有効化
# --------------------------------------------------------------------
# マウスでのスクロール、ペイン選択、ペインリサイズを有効化
set -g mouse on
# --------------------------------------------------------------------
# 3. 外観 & カラー設定
# --------------------------------------------------------------------
# 256色および TrueColor に対応
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"
# ステータスバーのデザイン
set -g status-style bg="#2c323c",fg="#abb2bf"
set -g status-left "#[bg=#98c379,fg=#282c34,bold] #S #[default] "
set -g status-right "#[fg=#61afef]%Y-%m-%d %H:%M #[default]"
set -g status-left-length 30
set -g status-right-length 50
# アクティブなウィンドウ・ペインの強調表示
setw -g window-status-current-style bg="#61afef",fg="#282c34",bold
set -g pane-active-border-style fg="#61afef"
# --------------------------------------------------------------------
# 4. 直感的なキーバインド
# --------------------------------------------------------------------
# 設定ファイルの即時リロード(Prefix + r)
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"
# 直感的な画面分割(| で左右分割、- で上下分割、カレントディレクトリを引き継ぐ)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
# vi キーバインドでペイン間を移動(Prefix + h/j/k/l)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# --------------------------------------------------------------------
# 5. コピーモードの vi バインド設定
# --------------------------------------------------------------------
setw -g mode-keys vi
bind -T copy-mode-vi v send -X begin-selection
bind -T copy-mode-vi y send -X copy-pipe-and-cancel "pbcopy" # macOS の場合(Linux は xclip / wl-copy)
設定の反映手順
設定ファイルを保存した後、以下のいずれかの方法で即座に反映できます。
# シェルから反映コマンドを実行
tmux source-file ~/.tmux.conf
# または tmux 内で上記設定のショートカットを実行
Ctrl+b を押した後に r
SSH接続切断対策&リモート作業でのベストプラクティス
リモートサーバーの管理において、SSH接続がネットワーク障害やWi-Fi切断によって突然落ちてしまうトラブルは日常茶飯事です。tmux を適切に運用することで、作業の中断リスクをゼロに抑えることができます。
なぜ SSH 切断でもプロセスが停止しないのか?
通常のSSH接続では、接続が切断されるとカーネルから子プロセスへ SIGHUP(ハングアップシグナル)が送信され、実行中のプログラムが強制終了します。
しかし tmux では、クライアント端末と tmux サーバープロセスが分離して動作しています。SSH接続が切れた場合、終了するのは「画面を描画していたクライアント」だけであり、バックグラウンドの「tmux サーバー」およびその配下で動くプロセス群は一切影響を受けずに稼働し続けます。
SSH ログイン時に自動で tmux へ接続するベストプラクティス
リモートサーバーの ~/.bash_profile や ~/.bashrc に以下のコードを記述しておくと、SSHログイン時に自動的に tmux セッションへアタッチ(存在しなければ新規作成)されます。
# ~/.bash_profile または ~/.bashrc に追記
# SSH ログイン時かつ tmux が未起動の場合のみ自動接続
if [ -n "$SSH_CONNECTION" ] && [ -z "$TMUX" ]; then
# 既存の "main" セッションにアタッチ、無ければ新規作成
tmux attach-session -t main 2>/dev/null || tmux new-session -s main
fi
手元からワンライナーで自動復帰接続する
ローカル端末からSSH接続する際に、直接リモートの tmux セッションを開くことも可能です。
# リモート接続と同時に main セッションを開く(無ければ作成)
ssh -t user@server.example.com 'tmux a -t main 2>/dev/null || tmux new -s main'
よくあるトラブルと現場での対処法(FAQ)
Q1. プレフィックスキー(Ctrl+b)が反応しない
原因と対処法:
- キーの同時押し問題:
Ctrl+bは「同時押し」ではなく、「Ctrlを押しながらbを押し、両方を一度離してから次のキー(例:%やd)を押す」仕様です。 - OS・ターミナル側のショートカット重複: Windows Terminal や macOS の設定で
Ctrl+bが別機能(カーソル左移動等)に奪われている場合があります。押しやすいCtrl+aやCtrl+tへの変更を検討してください。
Q2. マウスで選択したテキストがクリップボードにコピーされない
原因と対処法:
set -g mouse on を有効にすると、マウスドラッグによる文字列選択は tmux 内部のコピーモードとして処理されます。ターミナルエミュレータ本来のクリップボード(OSのコピー機能)を使いたい場合は、Shift キー(macOS の場合は Option キー)を押しながらマウスドラッグしてコピーしてください。
Q3. Vim / Neovim で Esc キーを押したときにもたつく(遅延)
原因と対処法:
tmux はエスケープシーケンス判定のためにデフォルトで 500ms の待機時間を設けています。~/.tmux.conf に set -s escape-time 0 を追記してリロードすることで、Vim のノーマルモード移行が遅延なく瞬時に行えるようになります。
関連コマンド・ツールとの違いと使い分け(screen / nohup / mosh)
ターミナル環境でセッション維持やバックグラウンド実行を行うツールにはいくつかの選択肢があります。用途に応じた使い分けを把握しておきましょう。
| ツール名 | 主な用途・特徴 | 使い分けの基準 |
|---|---|---|
| tmux | 高機能ターミナル多重化、画面分割、セッション保持 | 対話的な開発・運用、画面分割作業の第一選択 |
| screen | 元祖ターミナルマルチプレクサ(老舗) | 古い環境や tmux が導入できない制約のあるサーバー |
| nohup | 単一コマンドをログアウト後もバックグラウンド継続 | 対話操作が不要なバッチ処理やスクリプト実行 |
| mosh | UDPベースのローミング対応リモートシェル | 回線が極めて不安定な環境(tmux と併用で真価を発揮) |
- 画面分割や対話的なマルチタスクを行いたい場合は tmux を使用する。
- 単純なスクリプトを放置してバックグラウンド実行したいだけの場合は nohup コマンドの使い方 を活用する。
- tmux がインストールできない環境では screen コマンド で代用する。

コメント