Skip to content
Published on

Tmuxコマンド完全ガイド:ターミナルマルチプレクサで生産性を10倍にするすべてのコマンド

Authors
  • Name
    Twitter

1. Tmux入門

1.1 ターミナルマルチプレクサとは?

ターミナルマルチプレクサとは、1つのターミナル画面内で複数の仮想ターミナルセッションを作成・分割・切り替えできるツールです。物理モニターが1台しかなくても、数十のターミナルを同時に実行し、瞬時に切り替えたり、バックグラウンドで動作させ続けることができます。

Tmux(Terminal Multiplexer)は、BSDライセンスの下でオープンソースとして開発された、このカテゴリで最も広く使われている最新のツールです。

Tmuxが解決する核心的な問題は以下の通りです:

  • SSH切断時の作業喪失防止:セッションはサーバー上に保持されるため、再接続後に中断したところからすぐに再開できます
  • 画面分割:コード編集、サーバーログ、テスト実行を1つの画面で同時に表示
  • 作業コンテキストの切り替え:プロジェクトごとにセッションを分離し、即座に切り替え
  • ペアプログラミング:複数のユーザーが同じセッションに接続してコラボレーション

1.2 GNU Screen vs Tmux 比較

Tmux以前は、GNU Screenが代表的なターミナルマルチプレクサでした。以下は2つのツールの主な違いです。

機能GNU ScreenTmux
初回リリース1987年2007年
アーキテクチャシングルプロセスクライアント-サーバーモデル
画面分割デフォルトでは水平のみデフォルトで水平・垂直両対応
スクリプティング限定的強力なコマンドシステム
ステータスバーデフォルトなし、手動設定組み込み済み、高度にカスタマイズ可能
コピーモード基本モードVi/Emacsキーバインドオプション
プラグインエコシステムほぼなし活発なTPMベースのエコシステム
メンテナンス更新が遅い活発な開発
ライセンスGPLBSD

結論として、新規プロジェクトにはTmuxが圧倒的に優れた選択肢です。スクリプティング、プラグイン、コミュニティサポートのすべてにおいてTmuxがリードしています。

1.3 ユースケース

以下はTmuxが威力を発揮する最も代表的なシナリオです。

  1. SSHリモートサーバー作業:不安定なネットワーク環境でもセッションが保持される
  2. 開発環境構築:エディタ+サーバー+ログ+テストを1画面に配置
  3. サーバー監視:htop、ログtail、ネットワーク監視を同時に表示
  4. 長時間タスク:ビルドやデータ移行などをデタッチして退社
  5. ペアプログラミング:複数の開発者が同じセッションに接続してリアルタイムコラボレーション
  6. 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
概念説明例え
ServerTmuxプロセス。すべてのセッションを管理オペレーティングシステム
Session独立したワークスペース。複数のWindowを含むデスクトップ/ワークスペース
Windowセッション内のフルスクリーン。タブのように切り替え可能ブラウザタブ
Paneウィンドウを分割した個別のターミナル領域画面分割

2.3 プレフィックスキーの概念

Tmuxはすべてのキーバインドにプレフィックスキーを使用します。デフォルトはCtrl-bです。

動作の仕組み:

  1. Ctrl-bを押す(同時に押して離す)
  2. 目的のコマンドキーを押す

例えば、新しいウィンドウを作成するには:

  1. Ctrl-bを押す
  2. cを押す

このドキュメントでは、プレフィックスキーを<prefix>と表記します。つまり、<prefix> cCtrl-bを押してからcを押すことを意味します。

ヒントCtrl-bが押しにくいと感じる場合は、.tmux.confCtrl-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-b1ページ上にスクロール
Ctrl-f1ページ下にスクロール

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-fppFacebook PathPickerによる素早いファイルパスのオープン
catppuccin/tmuxCatppuccinテーマ
dracula/tmuxDraculaテーマ
wfxr/tmux-fzf-urlfzfによる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 比較

機能TmuxGNU ScreenZellij
リリース2007年1987年2021年
言語CCRust
アーキテクチャクライアント-サーバーシングルプロセスクライアント-サーバー(WebAssemblyプラグイン)
垂直分割組み込みパッチ必要(4.0+で組み込み)組み込み
マウスサポート設定が必要限定的デフォルトで有効
スクリプティング強力限定的WASMプラグイン
ステータスバー高度にカスタマイズ可能限定的組み込み、タブバースタイル
プラグインエコシステムTPM(活発)ほぼなしWASMプラグイン(成長中)
学習曲線中程度低い低い(直感的なUI)
サーバーデプロイほとんどにプリインストールほとんどにプリインストール別途インストールが必要

結論:

  • Tmux:最も汎用性が高く強力で、サーバー環境におけるデファクトスタンダード。習熟するにつれて生産性が最大化される。
  • Screen:レガシーサーバーに既にインストールされている場合にのみ推奨。新規プロジェクトで選ぶ理由はない。
  • Zellij:直感的なUIと組み込みレイアウトを備えたRustベースの最新代替手段。ただし、サーバー環境での普及はまだ限定的。

13. チートシート:最もよく使うコマンドトップ40

13.1 セッションコマンド

#コマンド / キーバインド説明
1tmux new -s name名前付き新規セッション作成
2tmux lsセッション一覧
3tmux a -t name特定のセッションにアタッチ
4tmux new -A -s nameあればアタッチ、なければ作成
5<prefix> d現在のセッションからデタッチ
6<prefix> $現在のセッション名を変更
7<prefix> sセッション一覧から選択して切り替え
8tmux kill-session -t name特定のセッションを終了
9tmux kill-serverTmuxサーバー全体を終了
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ウィンドウ名で検索
19tmux move-window -rウィンドウの番号を振り直す
20tmux 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> ~メッセージ履歴を表示
39tmux source ~/.tmux.conf設定ファイルをリロード
40tmux 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には最初の学習曲線がありますが、身につけば、ターミナル作業の生産性が劇的に向上します。段階的な学習のために以下のロードマップを推奨します。

レベル11日目)
+-- tmux new / attach / detach / ls / kill-session
+-- <prefix> c / n / p(ウィンドウの作成/切り替え)
+-- <prefix> % / "(ペイン分割)

レベル21週目)
+-- ペインナビゲーション(<prefix> 矢印キー)
+-- ペインズーム(<prefix> z)
+-- コピーモード(<prefix> [+-- 基本的な.tmux.confの設定

レベル32週目)
+-- カスタムキーバインド
+-- ステータスバーのカスタマイズ
+-- クリップボード連携
+-- マウス設定

レベル41ヶ月目)
+-- 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 ウィンドウ一覧の表示