Linuxでの開発作業やサーバー管理において、複数のターミナルを同時に操作する場面は日常的です。ターミナルを何枚も開いてウィンドウを切り替えるのは非効率的ですし、SSH接続が切断されると作業中のプロセスが終了してしまうリスクもあります。

この記事では、ターミナルマルチプレクサ「tmux」の基本から実践的なカスタマイズまでを体系的に解説します。tmuxをマスターすれば、1つのターミナル内で複数の作業を効率的に並行管理でき、セッションの永続化によりSSH切断時も安心して作業を続けられます。

前提条件と実行環境

項目 条件
OS Linux(Ubuntu、Debian、CentOS、RHEL等)、macOS、WSL2
tmuxバージョン 3.0以上(本記事は3.6aで動作確認)
シェル bash、zsh等
事前知識 基本的なLinuxコマンド操作

tmuxとは何か

tmux(terminal multiplexer)は、1つのターミナル内で複数の仮想端末を管理するためのツールです。GNU screenの後継として開発され、より柔軟な設定とモダンな機能を備えています。

tmuxを使う3つのメリット

1. セッションの永続化

tmuxで実行中のプロセスは、tmuxサーバー上で動作します。SSH接続が切断されても、tmuxセッションにデタッチ(離脱)しておけば、後から再アタッチ(再接続)して作業を継続できます。

2. 画面分割による並行作業

1つのターミナルを複数のペインに分割し、エディタ、ログ監視、コマンド実行などを同時に表示できます。ウィンドウを切り替える手間がなくなります。

3. リモートワークでのペアプログラミング

同じtmuxセッションに複数のユーザーがアタッチすれば、リアルタイムで画面を共有しながら作業できます。

tmuxのアーキテクチャを理解する

tmuxを効果的に使うには、セッション、ウィンドウ、ペインという3つの概念を理解することが重要です。

graph TB
    subgraph Server["tmuxサーバー"]
        subgraph Session1["セッション: development"]
            subgraph Window1["ウィンドウ0: editor"]
                P1["ペイン0<br>vim"]
                P2["ペイン1<br>terminal"]
            end
            subgraph Window2["ウィンドウ1: logs"]
                P3["ペイン0<br>tail -f"]
            end
        end
        subgraph Session2["セッション: monitoring"]
            subgraph Window3["ウィンドウ0: htop"]
                P4["ペイン0<br>htop"]
            end
        end
    end
    
    Client1["クライアント1"] -.->|attach| Session1
    Client2["クライアント2"] -.->|attach| Session2
    
    style Server fill:#e3f2fd,stroke:#1976d2
    style Session1 fill:#fff3e0,stroke:#f57c00
    style Session2 fill:#fff3e0,stroke:#f57c00
    style Window1 fill:#e8f5e9,stroke:#388e3c
    style Window2 fill:#e8f5e9,stroke:#388e3c
    style Window3 fill:#e8f5e9,stroke:#388e3c

セッション(Session)

セッションはtmuxの最上位の単位です。プロジェクトや作業内容ごとにセッションを分けて管理できます。1つのtmuxサーバーで複数のセッションを同時に実行でき、セッション間を自由に切り替えられます。

ウィンドウ(Window)

ウィンドウはセッション内のタブのような存在です。1つのセッションに複数のウィンドウを作成でき、ステータスバーに一覧表示されます。用途別にウィンドウを分けることで、作業を整理できます。

ペイン(Pane)

ペインはウィンドウ内の分割された領域です。1つのウィンドウを水平・垂直に分割して、複数のペインを同時に表示できます。エディタとターミナルを左右に並べるといった使い方が一般的です。

tmuxのインストール

Ubuntu / Debian

1
2
sudo apt update
sudo apt install tmux

CentOS / RHEL / Fedora

1
2
3
4
5
# CentOS 8以降 / Fedora
sudo dnf install tmux

# CentOS 7
sudo yum install tmux

macOS

1
2
# Homebrewを使用
brew install tmux

バージョン確認

1
2
tmux -V
# 出力例: tmux 3.6a

tmuxの基本操作

セッションの作成と管理

1
2
3
4
5
6
7
8
# 新しいセッションを作成して開始
tmux

# 名前を付けてセッションを作成
tmux new-session -s dev

# 短縮形
tmux new -s dev

セッションに名前を付けることで、複数のセッションを管理しやすくなります。

1
2
3
4
5
6
7
8
9
# セッション一覧を表示
tmux list-sessions

# 短縮形
tmux ls

# 出力例:
# dev: 2 windows (created Thu Jan  8 10:00:00 2026)
# monitoring: 1 windows (created Thu Jan  8 09:30:00 2026)

デタッチとアタッチ

tmuxの真価は、セッションからのデタッチ(離脱)とアタッチ(再接続)にあります。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# セッション内でデタッチ(キーバインドを使用)
# Ctrl+b d

# 特定のセッションにアタッチ
tmux attach-session -t dev

# 短縮形
tmux attach -t dev
tmux a -t dev

# 最後にデタッチしたセッションにアタッチ
tmux attach

セッションの終了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# セッション内で終了
exit

# または、すべてのウィンドウを閉じる

# 外部からセッションを終了
tmux kill-session -t dev

# すべてのセッションを終了
tmux kill-server

プレフィックスキーとキーバインド

tmuxのコマンドは、プレフィックスキーに続けて入力します。デフォルトのプレフィックスキーはCtrl+bです。

Ctrl+b [キー]

たとえば、セッションをデタッチするにはCtrl+bを押してからdを押します。

基本的なキーバインド一覧

セッション操作

キーバインド 説明
Ctrl+b d セッションをデタッチ
Ctrl+b s セッション一覧を表示(選択可能)
Ctrl+b $ 現在のセッション名を変更
Ctrl+b ( 前のセッションに切り替え
Ctrl+b ) 次のセッションに切り替え

ウィンドウ操作

キーバインド 説明
Ctrl+b c 新しいウィンドウを作成
Ctrl+b n 次のウィンドウに切り替え
Ctrl+b p 前のウィンドウに切り替え
Ctrl+b 0-9 指定番号のウィンドウに切り替え
Ctrl+b w ウィンドウ一覧を表示(選択可能)
Ctrl+b , 現在のウィンドウ名を変更
Ctrl+b & 現在のウィンドウを終了(確認あり)
Ctrl+b l 最後に使用したウィンドウに切り替え

ペイン操作

キーバインド 説明
Ctrl+b % 垂直分割(左右に分割)
Ctrl+b " 水平分割(上下に分割)
Ctrl+b 矢印キー ペイン間を移動
Ctrl+b o 次のペインに移動
Ctrl+b ; 直前のペインに移動
Ctrl+b z 現在のペインを最大化/元に戻す(ズームトグル)
Ctrl+b x 現在のペインを終了(確認あり)
Ctrl+b { ペインを前(左/上)に移動
Ctrl+b } ペインを後(右/下)に移動
Ctrl+b Ctrl+矢印 ペインのサイズを調整
Ctrl+b Space ペインのレイアウトを切り替え
Ctrl+b q ペイン番号を表示

その他の操作

キーバインド 説明
Ctrl+b ? キーバインド一覧を表示
Ctrl+b : コマンドモードに入る
Ctrl+b [ コピーモードに入る
Ctrl+b t 時計を表示

ペイン分割とレイアウト

tmuxの強力な機能の1つが、ウィンドウを複数のペインに分割できることです。

基本的なペイン分割

graph LR
    subgraph Before["分割前"]
        A["ペイン"]
    end
    
    subgraph VerticalSplit["垂直分割 Ctrl+b %"]
        B1["ペイン<br>左"]
        B2["ペイン<br>右"]
    end
    
    subgraph HorizontalSplit["水平分割 Ctrl+b quote"]
        C1["ペイン 上"]
        C2["ペイン 下"]
    end
    
    Before --> VerticalSplit
    Before --> HorizontalSplit
    
    style A fill:#e3f2fd,stroke:#1976d2
    style B1 fill:#e8f5e9,stroke:#388e3c
    style B2 fill:#e8f5e9,stroke:#388e3c
    style C1 fill:#fff3e0,stroke:#f57c00
    style C2 fill:#fff3e0,stroke:#f57c00

プリセットレイアウト

Ctrl+b Spaceを押すたびに、以下のプリセットレイアウトが順に切り替わります。

レイアウト名 説明
even-horizontal ペインを水平に均等配置
even-vertical ペインを垂直に均等配置
main-horizontal メインペインを上に、残りを下に横並び
main-vertical メインペインを左に、残りを右に縦並び
tiled タイル状に配置

コマンドラインからのペイン操作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 垂直分割
tmux split-window -h

# 水平分割
tmux split-window -v

# 特定のディレクトリで分割
tmux split-window -h -c ~/projects

# コマンドを実行しながら分割
tmux split-window -h "htop"

ペインのリサイズ

Ctrl+bに続けてCtrl+矢印キーでペインのサイズを調整できます。コマンドモードからも調整可能です。

1
2
3
4
5
# コマンドモード(Ctrl+b :)で実行
resize-pane -D 10  # 下に10行拡大
resize-pane -U 10  # 上に10行拡大
resize-pane -R 10  # 右に10列拡大
resize-pane -L 10  # 左に10列拡大

コピーモードとスクロール

tmuxではデフォルトでターミナルのスクロールが効かないことがあります。コピーモードを使用することで、過去の出力をスクロールしたり、テキストをコピーしたりできます。

コピーモードの基本操作

  1. Ctrl+b [でコピーモードに入る
  2. 矢印キーまたはvi風キーバインド(h/j/k/l)でカーソル移動
  3. Spaceで選択開始(viモードの場合)
  4. Enterで選択範囲をコピー
  5. Ctrl+b ]でペースト
  6. qまたはEscapeでコピーモードを終了

コピーモードのキーバインド(viモード)

キー 説明
h/j/k/l 左/下/上/右に移動
w/b 単語単位で前進/後退
Ctrl+f/Ctrl+b ページダウン/アップ
g/G 先頭/末尾に移動
/ 前方検索
? 後方検索
n/N 次/前の検索結果
Space 選択開始
Enter 選択をコピーして終了

.tmux.confによるカスタマイズ

tmuxの設定は~/.tmux.confファイルで行います。設定ファイルがない場合は新規作成してください。

基本的な設定例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# ~/.tmux.conf

# プレフィックスキーをCtrl+aに変更(screenと同じ)
set -g prefix C-a
unbind C-b
bind C-a send-prefix

# 設定ファイルの再読み込みをrキーにバインド
bind r source-file ~/.tmux.conf \; display "Config reloaded!"

# ウィンドウとペインのインデックスを1から開始
set -g base-index 1
setw -g pane-base-index 1

# マウス操作を有効化
set -g mouse on

# 256色対応
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"

# ステータスバーの更新間隔(秒)
set -g status-interval 1

# ヒストリ上限を増やす
set -g history-limit 50000

# Escapeキーの遅延をなくす
set -s escape-time 0

# ウィンドウを閉じたときに番号を詰める
set -g renumber-windows on

直感的なペイン分割キーバインド

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# ~/.tmux.conf(続き)

# ペイン分割を直感的なキーに変更
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
unbind '"'
unbind %

# ペイン間の移動をvim風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# ペインのリサイズをvim風に
bind -r H resize-pane -L 5
bind -r J resize-pane -D 5
bind -r K resize-pane -U 5
bind -r L resize-pane -R 5

viモードの設定

1
2
3
4
5
6
7
8
9
# ~/.tmux.conf(続き)

# コピーモードでviキーバインドを使用
setw -g mode-keys vi

# viスタイルのコピー操作
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind -T copy-mode-vi Escape send-keys -X cancel

ステータスバーのカスタマイズ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ~/.tmux.conf(続き)

# ステータスバーの位置(top/bottom)
set -g status-position bottom

# ステータスバーの色設定
set -g status-style bg=colour235,fg=colour136

# 左側の表示内容
set -g status-left-length 40
set -g status-left "#[fg=colour154][#S] "

# 右側の表示内容
set -g status-right-length 60
set -g status-right "#[fg=colour250]%Y-%m-%d %H:%M:%S"

# ウィンドウリストの表示
setw -g window-status-format "#I:#W "
setw -g window-status-current-format "#[fg=colour166,bold]#I:#W*"

# アクティブペインの境界線の色
set -g pane-active-border-style fg=colour166

設定の反映

設定ファイルを変更した後、tmux内で以下のコマンドを実行して反映します。

1
2
3
4
# コマンドモード(Ctrl+b :)で実行
source-file ~/.tmux.conf

# または、上記の設定をしていればCtrl+b rで再読み込み

実践的なtmux活用例

開発作業用のセッション構成

開発時に便利なセッション構成の例を紹介します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/bash
# ~/scripts/dev-session.sh

SESSION="dev"
PROJECT_DIR="$HOME/projects/myapp"

# セッションが存在する場合はアタッチ
tmux has-session -t $SESSION 2>/dev/null

if [ $? != 0 ]; then
    # 新しいセッションを作成
    tmux new-session -d -s $SESSION -c $PROJECT_DIR
    
    # ウィンドウ0: エディタ
    tmux rename-window -t $SESSION:0 'editor'
    tmux send-keys -t $SESSION:0 'vim .' Enter
    
    # ウィンドウ1: サーバー
    tmux new-window -t $SESSION -n 'server' -c $PROJECT_DIR
    tmux send-keys -t $SESSION:1 'npm run dev' Enter
    
    # ウィンドウ2: ログ監視(ペイン分割)
    tmux new-window -t $SESSION -n 'logs' -c $PROJECT_DIR
    tmux split-window -h -t $SESSION:2 -c $PROJECT_DIR
    tmux send-keys -t $SESSION:2.0 'tail -f logs/app.log' Enter
    tmux send-keys -t $SESSION:2.1 'tail -f logs/error.log' Enter
    
    # ウィンドウ3: ターミナル
    tmux new-window -t $SESSION -n 'terminal' -c $PROJECT_DIR
    
    # 最初のウィンドウを選択
    tmux select-window -t $SESSION:0
fi

tmux attach-session -t $SESSION

サーバー監視用のセッション構成

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
# ~/scripts/monitor-session.sh

SESSION="monitor"

tmux has-session -t $SESSION 2>/dev/null

if [ $? != 0 ]; then
    tmux new-session -d -s $SESSION
    
    # ウィンドウ0: システム監視
    tmux rename-window -t $SESSION:0 'system'
    tmux send-keys -t $SESSION:0 'htop' Enter
    
    # 縦分割してdstatを表示
    tmux split-window -v -t $SESSION:0
    tmux send-keys -t $SESSION:0.1 'dstat -cdngy' Enter
    
    # ウィンドウ1: ログ監視
    tmux new-window -t $SESSION -n 'logs'
    tmux send-keys -t $SESSION:1 'journalctl -f' Enter
    
    # ウィンドウ2: ネットワーク
    tmux new-window -t $SESSION -n 'network'
    tmux send-keys -t $SESSION:2 'watch -n 1 "ss -tuln"' Enter
    
    tmux select-window -t $SESSION:0
fi

tmux attach-session -t $SESSION

tmuxとsshの連携

リモートサーバーでの作業時、SSH接続が切断されてもtmuxセッションは維持されます。

1
2
3
4
5
# リモートサーバーに接続してtmuxセッションを開始
ssh user@server -t "tmux new-session -A -s main"

# -A: セッションが存在すればアタッチ、なければ作成
# -s main: セッション名を指定

トラブルシューティング

よくある問題と解決方法

問題: 色がおかしい / 256色が表示されない

1
2
3
# ~/.tmux.confに追加
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"

また、ターミナルエミュレータの設定でTERMがxterm-256colorになっているか確認してください。

問題: マウスでスクロールできない

1
2
# ~/.tmux.confに追加
set -g mouse on

問題: Escapeキーの反応が遅い(特にvim使用時)

1
2
# ~/.tmux.confに追加
set -s escape-time 0

問題: クリップボードにコピーできない(Linux)

1
2
3
4
5
# xclipをインストール
sudo apt install xclip

# ~/.tmux.confに追加
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -selection clipboard"

問題: セッションが残っていてtmuxが起動しない

1
2
3
4
5
# tmuxサーバーを完全に終了
tmux kill-server

# ソケットファイルを確認
ls /tmp/tmux-$(id -u)/

まとめ

tmuxは、ターミナルでの作業効率を大幅に向上させる強力なツールです。この記事で解説した内容を振り返ります。

概念 説明
セッション tmuxの最上位単位。プロジェクトごとに管理
ウィンドウ セッション内のタブ。用途別に分類
ペイン ウィンドウ内の分割領域。並行作業に活用
デタッチ/アタッチ セッションの離脱と再接続。SSH切断時も安心
.tmux.conf カスタマイズ設定ファイル

tmuxを使いこなすことで、次のようなメリットが得られます。

  • SSH接続が切れても作業を継続できる
  • 複数の作業を1つのターミナルで効率的に管理できる
  • カスタマイズにより自分好みの作業環境を構築できる
  • スクリプトで定型的なセッション構成を自動化できる

まずは基本的なセッション操作とペイン分割から始めて、徐々にカスタマイズを加えていくのがおすすめです。慣れてきたら、開発作業やサーバー管理用のセッション起動スクリプトを作成し、さらなる効率化を目指しましょう。

参考リンク