- Authors
- Name
- 1. Tmux入門
- 2. インストールと基本概念
- 3. セッション管理
- 4. ウィンドウ管理
- 5. ペイン管理
- 6. コピーモード
- 7. キーバインドのカスタマイズ
- 8. .tmux.conf 設定ガイド
- 9. プラグイン
- 10. 高度な機能
- 11. 実践的な使用シナリオ
- 12. Tmux vs Screen vs Zellij 比較
- 13. チートシート:最もよく使うコマンドトップ40
- 14. トラブルシューティング
- 15. まとめ:Tmux学習ロードマップ
- クイズ
1. Tmux入門
1.1 ターミナルマルチプレクサとは?
ターミナルマルチプレクサとは、1つのターミナル画面内で複数の仮想ターミナルセッションを作成・分割・切り替えできるツールです。物理モニターが1台しかなくても、数十のターミナルを同時に実行し、瞬時に切り替えたり、バックグラウンドで動作させ続けることができます。
Tmux(Terminal Multiplexer)は、BSDライセンスの下でオープンソースとして開発された、このカテゴリで最も広く使われている最新のツールです。
Tmuxが解決する核心的な問題は以下の通りです:
- SSH切断時の作業喪失防止:セッションはサーバー上に保持されるため、再接続後に中断したところからすぐに再開できます
- 画面分割:コード編集、サーバーログ、テスト実行を1つの画面で同時に表示
- 作業コンテキストの切り替え:プロジェクトごとにセッションを分離し、即座に切り替え
- ペアプログラミング:複数のユーザーが同じセッションに接続してコラボレーション
1.2 GNU Screen vs Tmux 比較
Tmux以前は、GNU Screenが代表的なターミナルマルチプレクサでした。以下は2つのツールの主な違いです。
| 機能 | GNU Screen | Tmux |
|---|---|---|
| 初回リリース | 1987年 | 2007年 |
| アーキテクチャ | シングルプロセス | クライアント-サーバーモデル |
| 画面分割 | デフォルトでは水平のみ | デフォルトで水平・垂直両対応 |
| スクリプティング | 限定的 | 強力なコマンドシステム |
| ステータスバー | デフォルトなし、手動設定 | 組み込み済み、高度にカスタマイズ可能 |
| コピーモード | 基本モード | Vi/Emacsキーバインドオプション |
| プラグインエコシステム | ほぼなし | 活発なTPMベースのエコシステム |
| メンテナンス | 更新が遅い | 活発な開発 |
| ライセンス | GPL | BSD |
結論として、新規プロジェクトにはTmuxが圧倒的に優れた選択肢です。スクリプティング、プラグイン、コミュニティサポートのすべてにおいてTmuxがリードしています。
1.3 ユースケース
以下はTmuxが威力を発揮する最も代表的なシナリオです。
- SSHリモートサーバー作業:不安定なネットワーク環境でもセッションが保持される
- 開発環境構築:エディタ+サーバー+ログ+テストを1画面に配置
- サーバー監視:htop、ログtail、ネットワーク監視を同時に表示
- 長時間タスク:ビルドやデータ移行などをデタッチして退社
- ペアプログラミング:複数の開発者が同じセッションに接続してリアルタイムコラボレーション
- CI/CDデバッグ:各パイプラインステージを個別のペインで監視
2. インストールと基本概念
2.1 インストール
OS別のインストール方法:
# Ubuntu / Debian
sudo apt update && sudo apt install -y tmux
# CentOS / RHEL / Rocky Linux
sudo yum install -y tmux
# または
sudo dnf install -y tmux
# macOS (Homebrew)
brew install tmux
# Arch Linux
sudo pacman -S tmux
# ソースからビルド(最新バージョンが必要な場合)
git clone https://github.com/tmux/tmux.git
cd tmux
sh autogen.sh
./configure && make
sudo make install
インストールの確認:
tmux -V
# tmux 3.5a
2.2 コア階層:セッション > ウィンドウ > ペイン
Tmuxのアーキテクチャを理解するには、3つのレイヤーを把握する必要があります。
Tmux Server(バックグラウンドプロセス)
└── Session(論理的な作業単位)
├── Window 0(タブに似たもの)
│ ├── Pane 0(分割領域)
│ ├── Pane 1
│ └── Pane 2
├── Window 1
│ ├── Pane 0
│ └── Pane 1
└── Window 2
└── Pane 0
| 概念 | 説明 | 例え |
|---|---|---|
| Server | Tmuxプロセス。すべてのセッションを管理 | オペレーティングシステム |
| Session | 独立したワークスペース。複数のWindowを含む | デスクトップ/ワークスペース |
| Window | セッション内のフルスクリーン。タブのように切り替え可能 | ブラウザタブ |
| Pane | ウィンドウを分割した個別のターミナル領域 | 画面分割 |
2.3 プレフィックスキーの概念
Tmuxはすべてのキーバインドにプレフィックスキーを使用します。デフォルトはCtrl-bです。
動作の仕組み:
Ctrl-bを押す(同時に押して離す)- 目的のコマンドキーを押す
例えば、新しいウィンドウを作成するには:
Ctrl-bを押すcを押す
このドキュメントでは、プレフィックスキーを<prefix>と表記します。つまり、<prefix> cはCtrl-bを押してからcを押すことを意味します。
ヒント:
Ctrl-bが押しにくいと感じる場合は、.tmux.confでCtrl-a(Screenスタイル)やCtrl-Spaceに変更できます。これはセクション7で説明します。
3. セッション管理
セッションはTmuxの最上位の作業単位です。プロジェクトや目的ごとにセッションを分けて作業コンテキストを管理します。
3.1 セッションの作成
# デフォルトセッションの作成(自動命名:0, 1, 2, ...)
tmux
# 名前付きセッションの作成
tmux new -s dev
# 名前を付けて特定のディレクトリで開始
tmux new -s project -c ~/workspace/my-project
# セッションを作成して即座にコマンドを実行
tmux new -s monitoring 'htop'
# アタッチせずにセッションを作成(バックグラウンド)
tmux new -s background -d
# ウィンドウ名を指定して作成
tmux new -s dev -n editor
3.2 セッション一覧の表示
# セッション一覧
tmux ls
# または
tmux list-sessions
# 出力例:
# dev: 3 windows (created Mon Mar 1 10:00:00 2026)
# monitoring: 1 windows (created Mon Mar 1 10:05:00 2026)
# background: 2 windows (created Mon Mar 1 10:10:00 2026) (attached)
Tmux内からもセッション一覧を表示できます。
<prefix> s # セッション一覧をインタラクティブに表示
3.3 セッションへのアタッチ
# 最後に使用したセッションにアタッチ
tmux attach
# または
tmux a
# 特定のセッションにアタッチ
tmux attach -t dev
# または
tmux a -t dev
# 他のクライアントが接続中でも強制アタッチ(既存クライアントをデタッチ)
tmux attach -dt dev
3.4 セッションからのデタッチ
セッションからデタッチすると、セッションはバックグラウンドで動作し続けます。
<prefix> d # 現在のセッションからデタッチ
# 特定のクライアントをデタッチ(外部から)
tmux detach-client -t dev
3.5 セッション名の変更
<prefix> $ # 現在のセッション名を変更(プロンプトが表示される)
# 外部からセッション名を変更
tmux rename-session -t old_name new_name
3.6 セッションの切り替え
<prefix> s # セッション一覧から選択して切り替え
<prefix> ( # 前のセッションに切り替え
<prefix> ) # 次のセッションに切り替え
# 外部から特定のセッションに切り替え(既にアタッチ中の場合)
tmux switch-client -t monitoring
3.7 セッションの終了
# 特定のセッションを終了
tmux kill-session -t dev
# 現在のセッション以外をすべて終了
tmux kill-session -a
# 特定のセッション以外をすべて終了
tmux kill-session -a -t dev
# Tmuxサーバー全体を終了(すべてのセッションを終了)
tmux kill-server
セッション内から終了する場合:
# 最後のウィンドウ/ペインでexitまたはCtrl-dでセッションを閉じる
exit
3.8 実用的なセッション管理パターン
# パターン:セッションがあればアタッチ、なければ作成
tmux new -A -s dev
# これは以下と同等:
# tmux has-session -t dev 2>/dev/null && tmux attach -t dev || tmux new -s dev
4. ウィンドウ管理
ウィンドウはセッション内のタブのように機能します。ウィンドウ一覧は下部のステータスバーに表示されます。
4.1 ウィンドウの作成
<prefix> c # 新しいウィンドウを作成
# コマンドラインからウィンドウを作成
tmux new-window
# 名前付きウィンドウを作成
tmux new-window -n logs
# 特定のディレクトリでウィンドウを作成
tmux new-window -c ~/workspace/logs -n logs
# 特定の位置(インデックス)にウィンドウを作成
tmux new-window -t 3
4.2 ウィンドウ名の変更
<prefix> , # 現在のウィンドウ名を変更(プロンプトが表示される)
# コマンドラインからウィンドウ名を変更
tmux rename-window -t 0 editor
ヒント:シェル実行時にウィンドウ名が自動的に変わるのを防ぐには、
.tmux.confに以下を追加します。
set-option -g allow-rename off
4.3 ウィンドウの切り替え
<prefix> 0~9 # ウィンドウ番号に直接ジャンプ(0-9)
<prefix> n # 次のウィンドウに移動
<prefix> p # 前のウィンドウに移動
<prefix> l # 最後に使用したウィンドウに切り替え
<prefix> w # ウィンドウ一覧からインタラクティブに選択
<prefix> ' # ウィンドウインデックスを入力してジャンプ(10以上で便利)
<prefix> f # ウィンドウ名で検索してジャンプ
4.4 ウィンドウの移動と並び替え
# ウィンドウの順序を変更(現在のウィンドウを位置3に移動)
tmux move-window -t 3
# ウィンドウを別のセッションに移動
tmux move-window -t other_session:
# 別のセッションの特定位置にウィンドウを移動
tmux move-window -t other_session:2
# 現在のウィンドウと特定のウィンドウを入れ替え
tmux swap-window -t 0
# ウィンドウの番号を振り直す(欠番を詰める)
tmux move-window -r
4.5 ウィンドウを閉じる
<prefix> & # 現在のウィンドウを閉じる(確認プロンプトが表示される)
# コマンドラインから特定のウィンドウを閉じる
tmux kill-window -t 2
# 現在のウィンドウ以外をすべて閉じる
tmux kill-window -a
4.6 ウィンドウ一覧の表示
# 全セッションのウィンドウを一覧表示
tmux list-windows -a
# 特定セッションのウィンドウを一覧表示
tmux list-windows -t dev
5. ペイン管理
ペインはウィンドウを分割して、1つの画面に複数のターミナルを配置します。Tmuxの最も強力で頻繁に使われる機能です。
5.1 ペインの分割
<prefix> % # 垂直分割(左右)
<prefix> " # 水平分割(上下)
# コマンドラインからペインを分割
tmux split-window # 水平分割
tmux split-window -h # 垂直分割
# 特定のディレクトリで分割
tmux split-window -h -c ~/workspace
# 特定のサイズで分割(全体の30%)
tmux split-window -p 30
tmux split-window -h -p 40
# 特定の行数/列数で分割
tmux split-window -l 10 # 高さ10行
tmux split-window -h -l 40 # 幅40列
# コマンドを実行しながら分割
tmux split-window 'tail -f /var/log/syslog'
5.2 ペイン間の移動
<prefix> 矢印キー(上/下/左/右) # 矢印キーでペイン間を移動
<prefix> o # 次のペインに順番に移動
<prefix> ; # 最後にアクティブだったペインに切り替え
<prefix> q # ペイン番号を表示(番号を押すとそのペインにジャンプ)
ヒント:Vi風のナビゲーションを好む場合は、
.tmux.confに以下を追加します。bind h select-pane -L # 左のペイン bind j select-pane -D # 下のペイン bind k select-pane -U # 上のペイン bind l select-pane -R # 右のペイン
5.3 ペインのリサイズ
<prefix> Ctrl-矢印 # 1セル単位でリサイズ
<prefix> Alt-矢印 # 5セル単位でリサイズ
# コマンドラインからリサイズ
tmux resize-pane -D 5 # 下に5拡大
tmux resize-pane -U 5 # 上に5拡大
tmux resize-pane -L 10 # 左に10拡大
tmux resize-pane -R 10 # 右に10拡大
ヒント:Vi風のリサイズバインドを追加すると便利です。
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
-rフラグはリピートを意味します — プレフィックスなしで連続してキーを押すことで、繰り返し実行できます。
5.4 ペインのズーム
特定のペインをフルスクリーンに拡大、または元のサイズに戻します。
<prefix> z # 現在のペインのズームを切り替え(フルスクリーン ⇔ 元のサイズ)
ズーム中は、ステータスバーのウィンドウ名の横にZが表示されます。ログを詳しく確認したり、集中してコードを編集したりする際に非常に便利です。
5.5 ペインの移動と入れ替え
<prefix> { # 現在のペインを前の位置に移動
<prefix> } # 現在のペインを次の位置に移動
<prefix> Ctrl-o # すべてのペインを反時計回りに回転
<prefix> Alt-o # すべてのペインを時計回りに回転
# 特定のペインを入れ替え
tmux swap-pane -s 0 -t 1
# ペインを別のウィンドウに移動(結合)
tmux join-pane -t :1 # 現在のペインをウィンドウ1に移動
tmux join-pane -s :2 -t :1 # ウィンドウ2のペインをウィンドウ1に移動
# ペインを独立したウィンドウに分離
<prefix> ! # 現在のペインを新しいウィンドウに分離
# コマンドラインからペインを新しいウィンドウに分離
tmux break-pane
tmux break-pane -t 1 # ペイン1を新しいウィンドウに分離
5.6 レイアウト
Tmuxには5つの組み込みレイアウトがあります。
<prefix> Space # 次のレイアウトに切り替え
<prefix> Alt-1 # even-horizontal(すべてのペインを均等に水平配置)
<prefix> Alt-2 # even-vertical(すべてのペインを均等に垂直配置)
<prefix> Alt-3 # main-horizontal(メインペインが上、残りが下)
<prefix> Alt-4 # main-vertical(メインペインが左、残りが右)
<prefix> Alt-5 # tiled(均等にタイル配置)
各レイアウトの視覚的表現:
even-horizontal even-vertical
+------+------+------+ +------------------+
| | | | | Pane 0 |
| P0 | P1 | P2 | +------------------+
| | | | | Pane 1 |
| | | | +------------------+
+------+------+------+ | Pane 2 |
+------------------+
main-horizontal main-vertical
+------------------+ +----------+-------+
| Pane 0 | | | P1 |
| (main) | | Pane 0 +-------+
+--------+---------+ | (main) | P2 |
| P1 | P2 | | +-------+
+--------+---------+ | | P3 |
+----------+-------+
tiled
+---------+---------+
| P0 | P1 |
+---------+---------+
| P2 | P3 |
+---------+---------+
5.7 ペインを閉じる
<prefix> x # 現在のペインを閉じる(確認プロンプトが表示される)
# コマンドラインからペインを閉じる
tmux kill-pane
tmux kill-pane -t 2 # ペイン2を閉じる
# 現在のペイン以外をすべて閉じる
tmux kill-pane -a
またはペインでexitと入力するか、Ctrl-dを押して閉じることもできます。
5.8 ペインのマーク/マーク解除
# ペインをマーク(トグル)
<prefix> m # 現在のペインのマークを切り替え
# マークしたペインと現在のペインを入れ替え
tmux swap-pane
6. コピーモード
コピーモードでは、ターミナル出力の内容をスクロール、検索、コピーできます。Tmuxの隠れた強力な機能の1つです。
6.1 コピーモードの開始と終了
<prefix> [ # コピーモードに入る
q # コピーモードを終了(またはEsc)
6.2 Vi vs Emacsキーバインド
Tmuxのコピーモードは、Vi式またはEmacs式のキーバインドに対応しています。
# .tmux.confでViモードを設定(強く推奨)
setw -g mode-keys vi
Viモードでの主なナビゲーションキー:
| キー | アクション |
|---|---|
h, j, k, l | 左、下、上、右 |
w | 次の単語に移動 |
b | 前の単語に移動 |
0 | 行頭に移動 |
$ | 行末に移動 |
g | バッファの先頭に移動 |
G | バッファの末尾に移動 |
Ctrl-u | 半ページ上にスクロール |
Ctrl-d | 半ページ下にスクロール |
Ctrl-b | 1ページ上にスクロール |
Ctrl-f | 1ページ下にスクロール |
6.3 検索
コピーモード内でテキストを検索できます。
/検索語 # 下方向に検索(Viモード)
?検索語 # 上方向に検索(Viモード)
n # 次の検索結果に移動
N # 前の検索結果に移動
Emacsモードの場合:
Ctrl-s # インクリメンタル検索(下方向)
Ctrl-r # インクリメンタル検索(上方向)
6.4 テキスト選択とコピー
Viモードでのコピーフロー:
1. <prefix> [ # コピーモードに入る
2. 移動キーで開始位置に移動
3. Space # 選択を開始
4. 移動キーで終了位置に移動
5. Enter # 選択範囲をコピー(tmuxバッファに保存)
# Vi風のコピー/ペーストバインドを追加(.tmux.conf)
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 r send-keys -X rectangle-toggle
上記の設定を適用した後:
| キー | アクション |
|---|---|
v | テキスト選択を開始(ビジュアルモード) |
V | 行単位の選択を開始 |
r | 矩形(ブロック)選択の切り替え |
y | 選択範囲をコピー |
6.5 ペースト
<prefix> ] # tmuxバッファの内容をペースト
# バッファ一覧を表示
tmux list-buffers
# 特定のバッファの内容を表示
tmux show-buffer -b 0
# バッファをファイルに保存
tmux save-buffer -b 0 ~/buffer.txt
# ファイルの内容をバッファに読み込み
tmux load-buffer ~/content.txt
# バッファを削除
tmux delete-buffer -b 0
6.6 スクロールバックバッファの設定
デフォルトのスクロールバックサイズは2000行です。より多くの履歴が必要な場合は増やせます。
# .tmux.conf
set -g history-limit 50000
注意:スクロールバックバッファを非常に大きくするとメモリ使用量が増加します。50000行が実用的な上限です。
7. キーバインドのカスタマイズ
7.1 プレフィックスキーの変更
Ctrl-bが押しにくい場合は、別のキーに変更できます。
# .tmux.conf - Ctrl-a に変更(GNU Screenスタイル)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Ctrl-Space に変更(推奨)
unbind C-b
set -g prefix C-Space
bind C-Space send-prefix
ヒント:
Ctrl-aに変更すると、行頭に移動するデフォルトのシェルショートカットと競合します。この場合、Ctrl-aを2回押すと元のCtrl-aが送信されます。
7.2 キーバインドの追加(bind-key)
# 基本構文
bind-key [オプション] キー コマンド
# 短縮形
bind キー コマンド
# プレフィックスなしでバインド(-n フラグ)
bind -n M-Left select-pane -L # Alt-左で左のペインに移動
bind -n M-Right select-pane -R # Alt-右で右のペインに移動
bind -n M-Up select-pane -U # Alt-上で上のペインに移動
bind -n M-Down select-pane -D # Alt-下で下のペインに移動
# リピート可能なバインド(-r フラグ)
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
# 分割時に現在のパスを保持
bind '"' split-window -v -c "#{pane_current_path}"
bind '%' split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
7.3 キーバインドの解除(unbind-key)
# 特定のキーのバインドを解除
unbind-key C-b
# 短縮形
unbind C-b
# すべてのキーバインドを解除(注意して使用)
unbind -a
7.4 現在のキーバインドの確認
<prefix> ? # すべてのキーバインド一覧を表示
# コマンドラインから確認
tmux list-keys
tmux list-keys | grep split # 特定のコマンドをフィルタリング
7.5 便利なカスタムバインドの例
# 設定ファイルを即座にリロード
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}"
# ウィンドウの番号を振り直す
bind R move-window -r \; display-message "Windows renumbered!"
# 同期モードの切り替え(すべてのペインに同時入力)
bind S setw synchronize-panes \; display-message "Sync #{?synchronize-panes,ON,OFF}"
# セッション選択ショートカット
bind C-s choose-session
# lazygitをポップアップウィンドウで実行(tmux 3.2+)
bind g display-popup -E -w 80% -h 80% "lazygit"
# htopをポップアップウィンドウで実行
bind t display-popup -E -w 80% -h 80% "htop"
8. .tmux.conf 設定ガイド
~/.tmux.confファイルは、Tmux起動時に自動的に読み込まれる設定ファイルです。このファイルを通じて、Tmuxのほぼすべての動作をカスタマイズできます。
8.1 推奨基本設定
# ~/.tmux.conf
# -------------------------------------------------
# 基本設定
# -------------------------------------------------
# プレフィックスをCtrl-aに変更
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# インデックスを1から開始(0キーはキーボードの右端にあり不便)
set -g base-index 1
setw -g pane-base-index 1
# ウィンドウを閉じたときに番号を振り直す
set -g renumber-windows on
# 履歴サイズ
set -g history-limit 50000
# エスケープ時間を短縮(Vimユーザー向け)
set -sg escape-time 0
# リピートキー入力の待機時間
set -g repeat-time 600
# フォーカスイベントを有効化(Vim/Neovimとの連携用)
set -g focus-events on
# 設定のリロード
bind r source-file ~/.tmux.conf \; display-message "Config reloaded!"
8.2 マウスサポート
# マウスサポートを有効化(tmux 2.1+)
set -g mouse on
# マウスでできること:
# - ペインをクリックしてフォーカスを切り替え
# - ペインの境界をドラッグしてリサイズ
# - スクロールホイールで履歴をブラウズ
# - テキストをドラッグしてコピーモードに入り選択
ヒント:マウスを有効にすると、Tmuxがターミナルのネイティブテキスト選択をインターセプトすることがあります。システムクリップボードに直接コピーするには、
Shiftを押しながらマウスで選択します。
8.3 Viモードの設定
# コピーモードでViキーバインドを使用
setw -g mode-keys vi
# Vi風のコピー
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi V send-keys -X select-line
bind -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind -T copy-mode-vi r send-keys -X rectangle-toggle
bind -T copy-mode-vi Escape send-keys -X cancel
# ステータスラインコマンドにViモード
set -g status-keys vi
8.4 ステータスバーのカスタマイズ
# -------------------------------------------------
# ステータスバーの設定
# -------------------------------------------------
# ステータスバーの位置(topまたはbottom)
set -g status-position bottom
# ステータスバーのリフレッシュ間隔(秒)
set -g status-interval 5
# ステータスバーの色
set -g status-style 'bg=#1e1e2e,fg=#cdd6f4'
# 左ステータスバー
set -g status-left-length 50
set -g status-left '#[fg=#1e1e2e,bg=#89b4fa,bold] #S #[fg=#89b4fa,bg=#1e1e2e] '
# 右ステータスバー
set -g status-right-length 100
set -g status-right '#[fg=#585b70]| #[fg=#cdd6f4]%Y-%m-%d #[fg=#585b70]| #[fg=#cdd6f4]%H:%M #[fg=#89b4fa,bg=#1e1e2e]#[fg=#1e1e2e,bg=#89b4fa,bold] #H '
# 現在のウィンドウのスタイル
setw -g window-status-current-format '#[fg=#1e1e2e,bg=#a6e3a1,bold] #I:#W#{?window_zoomed_flag, Z,} '
# 非アクティブウィンドウのスタイル
setw -g window-status-format '#[fg=#585b70] #I:#W '
# ウィンドウ一覧の配置
set -g status-justify left
8.5 カラー設定(256色、True Color)
# 256色サポート
set -g default-terminal "screen-256color"
# True Color(24ビット)サポート
set -ga terminal-overrides ",xterm-256color:Tc"
# alacrittyの場合
set -ga terminal-overrides ",alacritty:Tc"
# ペイン境界線の色
set -g pane-border-style 'fg=#585b70'
set -g pane-active-border-style 'fg=#89b4fa'
# メッセージスタイル
set -g message-style 'fg=#cdd6f4,bg=#1e1e2e,bold'
# コピーモードのハイライト色
setw -g mode-style 'fg=#1e1e2e,bg=#f5c2e7,bold'
8.6 クリップボード連携
Tmux内でコピーしたテキストをシステムクリップボードと同期する設定。
# macOS(pbcopy/pbpaste)
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "pbcopy"
# Linux(xclip)
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
bind -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
# Linux(xsel)
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xsel --clipboard --input"
# Linux(wl-copy, Wayland)
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "wl-copy"
# クロスプラットフォーム自動検出
if-shell "uname | grep -q Darwin" {
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
} {
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"
}
8.7 完全な.tmux.confの例
すべての推奨設定を統合した完全な設定。
# ===============================================================
# ~/.tmux.conf - 本番環境に最適化された設定
# ===============================================================
# --- プレフィックス -------------------------------------------------------
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# --- 基本設定 -----------------------------------------------
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
set -g history-limit 50000
set -sg escape-time 0
set -g repeat-time 600
set -g focus-events on
set -g mouse on
setw -g mode-keys vi
set -g status-keys vi
# --- カラー -------------------------------------------------------
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",xterm-256color:Tc"
# --- キーバインド -------------------------------------------------
# 設定のリロード
bind r source-file ~/.tmux.conf \; display "Reloaded!"
# 直感的な分割(現在のパスを保持)
bind | split-window -h -c "#{pane_current_path}"
bind - split-window -v -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
unbind '"'
unbind %
# Vi風のペインナビゲーション
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# ペインのリサイズ
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
# Alt + 矢印でプレフィックスなしのペインナビゲーション
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D
# Shift + 矢印でウィンドウ切り替え
bind -n S-Left previous-window
bind -n S-Right next-window
# 同期切り替え
bind S setw synchronize-panes \; display "Sync #{?synchronize-panes,ON,OFF}"
# --- コピーモード ----------------------------------------------------
bind -T copy-mode-vi v send-keys -X begin-selection
bind -T copy-mode-vi V send-keys -X select-line
bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "pbcopy"
bind -T copy-mode-vi r send-keys -X rectangle-toggle
# --- ステータスバー ---------------------------------------------------
set -g status-position bottom
set -g status-interval 5
set -g status-style 'bg=#1e1e2e,fg=#cdd6f4'
set -g status-left-length 50
set -g status-left '#[fg=#1e1e2e,bg=#89b4fa,bold] #S #[default] '
set -g status-right '#[fg=#cdd6f4]%Y-%m-%d %H:%M #[fg=#1e1e2e,bg=#89b4fa,bold] #H '
setw -g window-status-current-format '#[fg=#1e1e2e,bg=#a6e3a1,bold] #I:#W#{?window_zoomed_flag, Z,} '
setw -g window-status-format '#[fg=#585b70] #I:#W '
# --- ペイン境界線 -------------------------------------------------
set -g pane-border-style 'fg=#585b70'
set -g pane-active-border-style 'fg=#89b4fa'
9. プラグイン
9.1 TPM(Tmux Plugin Manager)
TPMはTmuxプラグインを管理する標準ツールです。
インストール:
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
.tmux.confに追加:
# プラグイン一覧
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'tmux-plugins/tmux-yank'
# TPMの初期化(.tmux.confの最後に配置する必要あり)
run '~/.tmux/plugins/tpm/tpm'
プラグイン管理キー:
<prefix> I # プラグインのインストール
<prefix> U # プラグインの更新
<prefix> Alt-u # 未使用プラグインの削除(アンインストール)
9.2 tmux-sensible
合理的なデフォルト設定を行うプラグイン。汎用的に便利な設定を一括で適用します。
set -g @plugin 'tmux-plugins/tmux-sensible'
9.3 tmux-resurrect
Tmuxセッションをファイルシステムに保存・復元できるプラグイン。システム再起動後でもセッション構造を完璧に復元します。
set -g @plugin 'tmux-plugins/tmux-resurrect'
# Vimセッションの復元(オプション)
set -g @resurrect-strategy-vim 'session'
# Neovimセッションの復元(オプション)
set -g @resurrect-strategy-nvim 'session'
# ペインの内容を復元
set -g @resurrect-capture-pane-contents 'on'
使い方:
<prefix> Ctrl-s # セッションを保存
<prefix> Ctrl-r # セッションを復元
9.4 tmux-continuum
tmux-resurrectの保存/復元を自動化するプラグイン。
set -g @plugin 'tmux-plugins/tmux-continuum'
# 15分ごとに自動保存
set -g @continuum-save-interval '15'
# Tmuxサーバー起動時に自動復元
set -g @continuum-restore 'on'
# システム起動時にTmuxを自動起動(macOS)
set -g @continuum-boot 'on'
set -g @continuum-boot-options 'iterm'
9.5 tmux-yank
システムクリップボードとの連携を自動的に処理するプラグイン。
set -g @plugin 'tmux-plugins/tmux-yank'
# コピー後もコピーモードを維持(デフォルトでは終了する)
set -g @yank_action 'copy-pipe'
9.6 その他のおすすめプラグイン
| プラグイン | 説明 |
|---|---|
tmux-plugins/tmux-prefix-highlight | プレフィックスキー押下時にステータスバーをハイライト |
tmux-plugins/tmux-pain-control | ペイン管理バインドの一貫性を向上 |
tmux-plugins/tmux-sessionist | セッション管理コマンドの拡張 |
tmux-plugins/tmux-open | コピーモードからURLやファイルパスを開く |
tmux-plugins/tmux-fpp | Facebook PathPickerによる素早いファイルパスのオープン |
catppuccin/tmux | Catppuccinテーマ |
dracula/tmux | Draculaテーマ |
wfxr/tmux-fzf-url | fzfによるURL選択とオープン |
10. 高度な機能
10.1 send-keys:ペインにコマンドを送信
send-keysは、特定のペインにプログラム的にキー入力を送信する強力な機能です。
# 現在のペインにコマンドを送信
tmux send-keys "ls -la" Enter
# 特定のセッション、ウィンドウ、ペインに送信
tmux send-keys -t dev:1.0 "npm start" Enter
# Ctrl-cを送信(実行中のプロセスを中断)
tmux send-keys -t dev:1.0 C-c
# 複数のキーを順番に送信
tmux send-keys -t dev:1.0 "cd ~/project" Enter "git status" Enter
ターゲット指定の構文:
session:window.pane
dev:1.0 # devセッション、ウィンドウ1、ペイン0
:2.1 # 現在のセッション、ウィンドウ2、ペイン1
monitoring: # monitoringセッション、現在のウィンドウ
10.2 Tmuxスクリプティング
すべてのTmuxコマンドはシェルスクリプトで使用でき、複雑な開発環境を一度にセットアップできます。
#!/bin/bash
# dev-env.sh - 開発環境自動セットアップスクリプト
SESSION="dev"
PROJECT_DIR="$HOME/workspace/my-project"
# 既存のセッションがあれば終了
tmux kill-session -t $SESSION 2>/dev/null
# 新しいセッションを作成(デタッチモード、最初のウィンドウ名:editor)
tmux new-session -d -s $SESSION -n editor -c $PROJECT_DIR
# editorウィンドウでNeovimを実行
tmux send-keys -t $SESSION:editor "nvim ." Enter
# serverウィンドウを作成
tmux new-window -t $SESSION -n server -c $PROJECT_DIR
tmux send-keys -t $SESSION:server "npm run dev" Enter
# logsウィンドウを作成(水平分割)
tmux new-window -t $SESSION -n logs -c $PROJECT_DIR
tmux send-keys -t $SESSION:logs "tail -f logs/app.log" Enter
tmux split-window -v -t $SESSION:logs -c $PROJECT_DIR
tmux send-keys -t $SESSION:logs.1 "tail -f logs/error.log" Enter
# testウィンドウを作成
tmux new-window -t $SESSION -n test -c $PROJECT_DIR
tmux send-keys -t $SESSION:test "npm test -- --watch" Enter
# gitウィンドウを作成
tmux new-window -t $SESSION -n git -c $PROJECT_DIR
tmux send-keys -t $SESSION:git "git status" Enter
# 最初のウィンドウに移動
tmux select-window -t $SESSION:editor
# セッションにアタッチ
tmux attach -t $SESSION
10.3 tmuxinator:YAMLベースのセッション自動化
tmuxinatorはTmuxセッションのレイアウトをYAMLファイルで定義し、一括で作成するツールです。
インストール:
# Ruby gemでインストール
gem install tmuxinator
# macOS
brew install tmuxinator
使い方:
# プロジェクトを開始
tmuxinator start my-project
# 短縮形
mux my-project
# プロジェクトを停止
tmuxinator stop my-project
10.4 display-popup(Tmux 3.2+)
ポップアップウィンドウにより、フローティングウィンドウで一時的な作業を行えます。
# デフォルトポップアップ(終了時に自動的に閉じる)
tmux display-popup
# サイズと位置を指定
tmux display-popup -w 80% -h 60% -x C -y C
# コマンド実行ポップアップ
tmux display-popup -E "htop"
tmux display-popup -E -w 90% -h 90% "lazygit"
# ポップアップをキーバインドに登録
bind g display-popup -E -w 80% -h 80% "lazygit"
bind f display-popup -E -w 60% -h 60% "fzf --preview 'cat {}' | xargs nvim"
11. 実践的な使用シナリオ
11.1 SSHリモートワーク中のセッション保持
これはTmuxの最も基本的なユースケースです。SSH接続が切断されてもセッションはサーバー上に保持されます。
# 1. リモートサーバーに接続
ssh user@remote-server
# 2. Tmuxセッションを開始
tmux new -s work
# 3. 作業を実行(ビルド、デプロイ、監視など)
make build && make deploy
# 4. SSH接続が切断されるか、意図的にデタッチ
# <prefix> d またはネットワーク切断
# 5. 再接続してセッションを再開
ssh user@remote-server
tmux attach -t work
# すべての作業が中断した時点のまま保持されている!
11.2 ペアプログラミング
Tmuxのクライアント-サーバーアーキテクチャにより、複数のユーザーが同じセッションに接続して同じ画面をリアルタイムで共有できます。
方法1:共有ユーザーアカウント
# 開発者A:セッションを作成
tmux new -s pair
# 開発者B:同じサーバーにSSHでアタッチ
tmux attach -t pair
# 両方の開発者がリアルタイムで同じ画面を共有
方法3:tmate(Tmuxベースのリモート共有)
# tmateのインストール
brew install tmate # macOS
sudo apt install tmate # Ubuntu
# tmateセッションを開始
tmate
# 接続URLが表示される
# SSH: ssh xxxxx@lon1.tmate.io
# Web: https://tmate.io/t/xxxxx
11.3 ペイン同期モード
複数のサーバーで同じコマンドを同時に実行する必要がある場合に便利です。
# 同期モードの有効化/無効化
<prefix> :setw synchronize-panes on
<prefix> :setw synchronize-panes off
12. Tmux vs Screen vs Zellij 比較
| 機能 | Tmux | GNU Screen | Zellij |
|---|---|---|---|
| リリース | 2007年 | 1987年 | 2021年 |
| 言語 | C | C | Rust |
| アーキテクチャ | クライアント-サーバー | シングルプロセス | クライアント-サーバー(WebAssemblyプラグイン) |
| 垂直分割 | 組み込み | パッチ必要(4.0+で組み込み) | 組み込み |
| マウスサポート | 設定が必要 | 限定的 | デフォルトで有効 |
| スクリプティング | 強力 | 限定的 | WASMプラグイン |
| ステータスバー | 高度にカスタマイズ可能 | 限定的 | 組み込み、タブバースタイル |
| プラグインエコシステム | TPM(活発) | ほぼなし | WASMプラグイン(成長中) |
| 学習曲線 | 中程度 | 低い | 低い(直感的なUI) |
| サーバーデプロイ | ほとんどにプリインストール | ほとんどにプリインストール | 別途インストールが必要 |
結論:
- Tmux:最も汎用性が高く強力で、サーバー環境におけるデファクトスタンダード。習熟するにつれて生産性が最大化される。
- Screen:レガシーサーバーに既にインストールされている場合にのみ推奨。新規プロジェクトで選ぶ理由はない。
- Zellij:直感的なUIと組み込みレイアウトを備えたRustベースの最新代替手段。ただし、サーバー環境での普及はまだ限定的。
13. チートシート:最もよく使うコマンドトップ40
13.1 セッションコマンド
| # | コマンド / キーバインド | 説明 |
|---|---|---|
| 1 | tmux new -s name | 名前付き新規セッション作成 |
| 2 | tmux ls | セッション一覧 |
| 3 | tmux a -t name | 特定のセッションにアタッチ |
| 4 | tmux new -A -s name | あればアタッチ、なければ作成 |
| 5 | <prefix> d | 現在のセッションからデタッチ |
| 6 | <prefix> $ | 現在のセッション名を変更 |
| 7 | <prefix> s | セッション一覧から選択して切り替え |
| 8 | tmux kill-session -t name | 特定のセッションを終了 |
| 9 | tmux kill-server | Tmuxサーバー全体を終了 |
| 10 | <prefix> ( / <prefix> ) | 前/次のセッションに切り替え |
13.2 ウィンドウコマンド
| # | コマンド / キーバインド | 説明 |
|---|---|---|
| 11 | <prefix> c | 新しいウィンドウを作成 |
| 12 | <prefix> , | 現在のウィンドウ名を変更 |
| 13 | <prefix> n / <prefix> p | 次/前のウィンドウに移動 |
| 14 | <prefix> 0-9 | ウィンドウ番号に直接ジャンプ |
| 15 | <prefix> w | インタラクティブなウィンドウ選択 |
| 16 | <prefix> l | 最後に使用したウィンドウに切り替え |
| 17 | <prefix> & | 現在のウィンドウを閉じる |
| 18 | <prefix> f | ウィンドウ名で検索 |
| 19 | tmux move-window -r | ウィンドウの番号を振り直す |
| 20 | tmux swap-window -t N | 現在のウィンドウとウィンドウNを入れ替え |
13.3 ペインコマンド
| # | コマンド / キーバインド | 説明 |
|---|---|---|
| 21 | <prefix> % | 垂直分割(左右) |
| 22 | <prefix> " | 水平分割(上下) |
| 23 | <prefix> 矢印キー | 矢印キーでペイン間を移動 |
| 24 | <prefix> o | 次のペインに順番に移動 |
| 25 | <prefix> z | ペインのズームを切り替え(フルスクリーン) |
| 26 | <prefix> x | 現在のペインを閉じる |
| 27 | <prefix> ! | 現在のペインを新しいウィンドウに分離 |
| 28 | <prefix> q | ペイン番号を表示 |
| 29 | <prefix> { / <prefix> } | ペインを前/次の位置に移動 |
| 30 | <prefix> Space | レイアウトを順に切り替え |
| 31 | <prefix> Ctrl-矢印 | ペインを1セル単位でリサイズ |
| 32 | <prefix> Alt-矢印 | ペインを5セル単位でリサイズ |
13.4 コピーモードとその他のコマンド
| # | コマンド / キーバインド | 説明 |
|---|---|---|
| 33 | <prefix> [ | コピーモードに入る |
| 34 | <prefix> ] | バッファの内容をペースト |
| 35 | <prefix> ? | キーバインド一覧を表示 |
| 36 | <prefix> : | コマンドプロンプトを開く |
| 37 | <prefix> t | 現在時刻を表示 |
| 38 | <prefix> ~ | メッセージ履歴を表示 |
| 39 | tmux source ~/.tmux.conf | 設定ファイルをリロード |
| 40 | tmux display-popup -E "cmd" | ポップアップウィンドウでコマンドを実行 |
14. トラブルシューティング
14.1 色が正しく表示されない
# 問題:Tmux内でVim/Neovimの色が崩れる
# 解決策:.tmux.confに追加
set -g default-terminal "screen-256color"
set -ga terminal-overrides ",*256col*:Tc"
14.2 NeovimでESCが遅延する
# 問題:Tmux内でNeovimのESC応答が遅い
# 解決策:.tmux.confに追加
set -sg escape-time 0
14.3 マウスのスクロールが動作しない
# 解決策:マウスサポートを有効にする
set -g mouse on
14.4 日本語/CJK入力が正しく表示されない
# 解決策:UTF-8設定を確認する
# ターミナルのロケール設定を確認
locale
# LANG=ja_JP.UTF-8 または en_US.UTF-8 と表示されるべき
# .bashrc または .zshrc に追加
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
15. まとめ:Tmux学習ロードマップ
Tmuxには最初の学習曲線がありますが、身につけば、ターミナル作業の生産性が劇的に向上します。段階的な学習のために以下のロードマップを推奨します。
レベル1(1日目)
+-- tmux new / attach / detach / ls / kill-session
+-- <prefix> c / n / p(ウィンドウの作成/切り替え)
+-- <prefix> % / "(ペイン分割)
レベル2(1週目)
+-- ペインナビゲーション(<prefix> 矢印キー)
+-- ペインズーム(<prefix> z)
+-- コピーモード(<prefix> [)
+-- 基本的な.tmux.confの設定
レベル3(2週目)
+-- カスタムキーバインド
+-- ステータスバーのカスタマイズ
+-- クリップボード連携
+-- マウス設定
レベル4(1ヶ月目)
+-- TPMプラグインシステム
+-- tmux-resurrect / continuum
+-- send-keysスクリプティング
+-- tmuxinator / tmuxpセッション自動化
レベル5(継続的な改善)
+-- display-popupの活用
+-- ペイン同期モード
+-- ネストされたTmuxの操作
+-- ペアプログラミングセッション共有
Tmuxは単なるターミナルツールではなく、サーバー管理、開発ワークフロー、リモートコラボレーションの基盤となるインフラツールです。このガイドで取り上げたコマンドを1つずつ練習し、独自の.tmux.confを構築することで、ターミナルで過ごすすべての時間がより効率的になるでしょう。
クイズ
Q1: 「Tmuxコマンド完全ガイド:ターミナルマルチプレクサで生産性を10倍にするすべてのコマンド」の主なトピックは何ですか?
Tmuxのセッション・ウィンドウ・ペインの概念からキーバインド、コピーモード、プラグイン、カスタム設定(.tmux.conf)、ペアプログラミング、SSHリモートワークまで — 実践的な例を交えたTmux全コマンドの完全ガイド。
Q2: Tmux入門とは何ですか?
1.1 ターミナルマルチプレクサとは? ターミナルマルチプレクサとは、1つのターミナル画面内で複数の仮想ターミナルセッションを作成・分割・切り替えできるツールです。物理モニターが1台しかなくても、数十のターミナルを同時に実行し、瞬時に切り替えたり、バックグラウンドで動作させ続けることができます。 Tmux(Terminal Multiplexer)は、BSDライセンスの下でオープンソースとして開発された、このカテゴリで最も広く使われている最新のツールです。
Q3: インストールと基本概念の主な手順は何ですか?
2.1 インストール OS別のインストール方法: インストールの確認: 2.2 コア階層:セッション > ウィンドウ > ペイン Tmuxのアーキテクチャを理解するには、3つのレイヤーを把握する必要があります。 2.3 プレフィックスキーの概念 Tmuxはすべてのキーバインドにプレフィックスキーを使用します。デフォルトはCtrl-bです。
Q4: セッション管理の主な特徴は何ですか?
セッションはTmuxの最上位の作業単位です。プロジェクトや目的ごとにセッションを分けて作業コンテキストを管理します。 3.1 セッションの作成 3.2 セッション一覧の表示 Tmux内からもセッション一覧を表示できます。 3.3 セッションへのアタッチ 3.4 セッションからのデタッチ セッションからデタッチすると、セッションはバックグラウンドで動作し続けます。 3.5 セッション名の変更 3.6 セッションの切り替え 3.7 セッションの終了 セッション内から終了する場合: 3.8 実用的なセッション管理パターン
Q5: ウィンドウ管理はどのように機能しますか?
ウィンドウはセッション内のタブのように機能します。ウィンドウ一覧は下部のステータスバーに表示されます。 4.1 ウィンドウの作成 4.2 ウィンドウ名の変更 4.3 ウィンドウの切り替え 4.4 ウィンドウの移動と並び替え 4.5 ウィンドウを閉じる 4.6 ウィンドウ一覧の表示