Skip to content

Tmux チュートリアル: Linux 用ターミナルマルチプレクサー

Tmux(Terminal Multiplexer)は、1つのウィンドウ内で複数のターミナルセッションを管理できる強力なツールです。長時間実行されるプロセスの管理、ワークフローの整理、サーバーから切断した後も持続するセッションの維持に特に役立ちます。

Tmuxとは?

Tmuxはターミナルマルチプレクサーであり、1つのターミナルウィンドウ内で複数のターミナルセッションを実行できるようにします。ターミナル用のウィンドウマネージャーと考えてください - 複数のウィンドウとペインを持つ複数のターミナルセッションを作成、アクセス、制御することができます。

Tmuxの背後にある中核的な概念は、ターミナル(gnome-terminal、iTerm2などのターミナルエミュレータ)とその中で実行されているセッションの分離です。この分離により、標準的なターミナルでは不可能な強力な機能が提供されます。

Tmuxの仕組み

Tmuxはクライアント-サーバーアーキテクチャで動作します:

  1. サーバー:最初にtmuxコマンドを実行すると、バックグラウンドでtmuxサーバープロセスが起動します。このサーバーはすべてのセッション、ウィンドウ、ペインを管理します。

  2. セッション:セッションは複数のウィンドウを含むことができるtmuxのインスタンスです。各セッションは独立しており、ターミナルクライアントにアタッチまたはデタッチすることができます。

  3. クライアント:tmuxコマンドを実行すると、実際にはtmuxサーバーへのクライアント接続を作成しています。これらのクライアントはセッションで何が起きているかを表示します。

このアーキテクチャがtmuxに強力な永続性機能を与えています。すべてのクライアントが切断されても、サーバーは実行を続け、セッションを維持します。

なぜTmuxを使うのか?

Tmuxはターミナルベースの作業に不可欠ないくつかの主要な利点を提供します:

永続的なセッション

Tmuxの最も強力な機能の1つはセッションの永続性です。ターミナルから切断しても、セッションは実行し続けます。これは特に以下の場合に価値があります:

  • SSHを介してリモートサーバーで作業する場合
  • 完了まで何時間もかかる長いプロセスを実行する場合
  • ターミナルセッションから予期せず切断された場合

ウィンドウとペインの管理

Tmuxを使用すると、ターミナル作業を効率的に整理できます:

  • 単一のセッション内に複数のウィンドウを作成(ブラウザのタブのように)
  • マルチタスク用にウィンドウを複数のペインに分割
  • ニーズに応じてペインのサイズ変更と再配置
  • 構造化されたレイアウトで複数のコマンドを同時に実行

生産性の向上

Tmuxはターミナルワークフローを大幅に改善します:

  • 複数のターミナルウィンドウを開かずに異なるプロジェクトやタスク間を切り替え
  • ターミナルセッション間で一貫した作業環境を維持
  • キーボードショートカットを使用してウィンドウとペイン間をすばやく移動
  • ペインとセッション間でテキストをコピー&ペースト

Tmuxのインストール

Tmuxを使用する前に、インストールする必要があります:

Ubuntu/Debian:

sh
sudo apt update
sudo apt install tmux

CentOS/RHEL/Fedora:

sh
# CentOS/RHEL
sudo yum install tmux

# Fedora
sudo dnf install tmux

macOS:

sh
# Homebrewを使用
brew install tmux

Tmuxの基本概念

Tmuxの階層構造を理解することは、効果的に使用するための鍵です:

  • セッション:複数のウィンドウを含むことができる最上位のコンテナです。セッションはアタッチおよびデタッチするものです。各セッションには一意の名前があり、プロジェクトワークスペースと考えることができます。

  • ウィンドウ:ブラウザのタブに似ており、セッション内に存在し、1つ以上のペインを含むことができます。各ウィンドウには独自のペインセットがあり、異なるプログラムを独立して実行できます。

  • ペイン:ウィンドウ内の別々のターミナルビューです。ペインを使用すると、同じウィンドウ内で複数のプログラムを並行して実行できます。ウィンドウを水平または垂直に分割してペインを作成できます。

この3レベルの階層(セッション → ウィンドウ → ペイン)は、ターミナル作業のための強力な組織システムを提供します。例えば、Webの開発プロジェクト用のセッションを持ち、複数のウィンドウ(コード用、ログ用、データベース用)があり、それぞれに複数のペイン(エディタ、ターミナル、出力)があるかもしれません。

Tmuxの起動

ニーズに応じて、tmuxを起動するいくつかの方法があります:

新しいセッションの作成

名前のない新しいtmuxセッションを開始するには:

sh
tmux

これにより、下部にセッション情報を表示するステータスバーがある新しいtmuxセッションが開きます。

名前付きセッションの作成

特に複数のプロジェクトで作業する場合、より良い整理のために名前付きセッションを作成します:

sh
tmux new -s セッション名

名前付きセッションにより、複数のセッションを識別および管理しやすくなります。

既存のセッションへのアタッチ

既存のセッションにアタッチするには:

sh
tmux attach -t セッション名

セッションが1つしかない場合は、単に以下を使用できます:

sh
tmux attach

ステータスバーの理解

tmuxを起動すると、ターミナルの下部にステータスバーが表示されます。このバーは重要な情報を提供します:

  • 現在のセッション名
  • アクティブなウィンドウがハイライトされたウィンドウリスト
  • 時間や日付などのシステム情報
  • ホスト名

ステータスバーはtmuxで何が起きているかを示す主要な視覚的インジケータであり、追加情報を表示するようにカスタマイズできます。

Tmuxのキーバインディング

すべてのtmuxコマンドはプレフィックスキーから始まります。デフォルトでは、これはCtrl+bです。プレフィックスキーを押した後、別のキーを押してコマンドを実行できます。

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

プレフィックスキーメカニズムの理解

プレフィックスキーメカニズムはtmuxの動作の中心です。tmuxはターミナル内で実行されるため、以下を区別する方法が必要です:

  1. tmux内で実行されているプログラムに送信したいコマンド
  2. tmux自体に送信したいコマンド

tmuxコマンドの前にプレフィックスキーを要求することで、tmuxはそれらのコマンドを傍受しながら、他のすべてのキーストロークをプログラムに渡すことができます。これが、tmux内でvim、emacs、または他のターミナルベースのプログラムを通常通り使用できる理由です - tmuxはプレフィックスで始まる特定のキーの組み合わせのみをキャプチャします。

なぜCtrl+b?

デフォルトのプレフィックスキーCtrl+bは、他のプログラムではほとんど使用されないため選ばれました。ただし、多くのユーザーはこれをCtrl+a(GNU Screenに似ている)に変更します。片手で押しやすいためです。

コマンドモード

プレフィックスキーを押した後、tmuxは短時間(設定可能)コマンドモードに入り、その間コマンドを待ちます。間違ったキーを押した場合や考えを変えた場合は、Escを押すか、タイムアウトを待って通常の操作に戻ることができます。

基本的なTmuxコマンド

セッション管理

  • tmux new -s セッション名 - 特定の名前で新しいセッションを作成
  • tmux ls - すべてのセッションをリスト表示
  • tmux attach -t セッション名 - 既存のセッションにアタッチ
  • tmux kill-session -t セッション名 - 特定のセッションを終了

Tmuxセッション内

  • Ctrl+b d - 現在のセッションからデタッチ
  • Ctrl+b $ - 現在のセッションの名前を変更
  • Ctrl+b s - すべてのセッションをリスト表示し、切り替え

ウィンドウ管理

  • Ctrl+b c - 新しいウィンドウを作成
  • Ctrl+b n - 次のウィンドウに切り替え
  • Ctrl+b p - 前のウィンドウに切り替え
  • Ctrl+b w - すべてのウィンドウをリスト表示して選択
  • Ctrl+b , - 現在のウィンドウの名前を変更
  • Ctrl+b & - 現在のウィンドウを閉じる

ペイン管理

  • Ctrl+b % - 現在のペインを垂直に分割
  • Ctrl+b " - 現在のペインを水平に分割
  • Ctrl+b o - ペイン間を切り替え
  • Ctrl+b ; - 最後にアクティブだったペインに切り替え
  • Ctrl+b x - 現在のペインを閉じる
  • Ctrl+b z - ペインのズームを切り替え(最大化/最小化)
  • Ctrl+b { - 現在のペインを左に移動
  • Ctrl+b } - 現在のペインを右に移動

コピーモード

  • Ctrl+b [ - コピーモードに入る
  • 矢印キーまたはvimスタイルのナビゲーション(h,j,k,l)で移動
  • Space - 選択開始
  • Enter - 選択をコピー
  • Ctrl+b ] - コピーしたテキストを貼り付け

実践例

例1:長時間実行プロセスの実行

tmuxの最も一般的な使用例の1つは、ターミナルから切断しても継続する必要がある長時間実行プロセスの実行です。

  1. 新しい名前付きtmuxセッションを開始:

    sh
    tmux new -s long_process

    名前付きセッションを作成すると、後で識別しやすくなります。

  2. 長時間実行プロセス(例:バックアップ)を実行:

    sh
    tar -czf backup.tar.gz /home/user/data

    このプロセスはtmuxセッション内で実行されます。

  3. 切断する必要がある場合: Ctrl+bを押してからdを押してセッションからデタッチします。

    デタッチしてもプロセスは停止せず、バックグラウンドで実行し続けます。これが永続性を可能にする重要なメカニズムです。

  4. 後でプロセスを確認するために再アタッチ:

    sh
    tmux attach -t long_process

    再アタッチすると、離れた時と同じ状態でプロセスの現在の状態が表示されます。

例2:開発作業の整理

Tmuxは複数の関連タスクを持つ複雑なワークフローの整理に優れています。

  1. プロジェクト用の新しいセッションを開始:

    sh
    tmux new -s project

    これによりプロジェクト専用のワークスペースが作成されます。

  2. 異なるタスク用のウィンドウを作成:

    • Ctrl+b cを押してコーディング用のウィンドウを作成
    • 再度Ctrl+b cを押してログ用のウィンドウを作成
    • さらにCtrl+b cを押してドキュメント用のウィンドウを作成

    各ウィンドウはタブのようなもので、作業の異なる側面を分離します。

  3. ウィンドウ内でマルチタスク用にペインを分割:

    • Ctrl+b %を押してエディタとターミナル用に垂直に分割
    • Ctrl+b "を押して出力用に水平に分割

    ペインを使用すると、複数の関連ビューを同時に表示できます。

  4. 整理されたワークスペース間を移動:

    • Ctrl+b nCtrl+b pを使用してウィンドウ間を切り替え
    • Ctrl+b oを使用して現在のウィンドウ内のペイン間を循環
    • Ctrl+b wを使用してすべてのウィンドウの視覚的なリストを表示

この組織化により、各プロジェクトの一貫した作業環境を維持できます。「project」セッションに戻ると、すべてが離れた時と同じ状態になっています。

例3:コラボレーションセッション

複数のユーザーが同じtmuxセッションにアタッチでき、共同作業が可能になります:

  1. ユーザー1がセッションを作成:

    sh
    tmux new -s collaboration
  2. ユーザー2(同じシステムにログイン)が同じセッションにアタッチ:

    sh
    tmux attach -t collaboration

両方のユーザーは同じターミナルを見ることができ、一方のユーザーのアクションはもう一方のユーザーにも表示されます。これはtmuxのクライアント-サーバーアーキテクチャにより、複数のクライアントが同じセッションに接続できるため可能です。

Tmuxのカスタマイズ

Tmuxは設定ファイル~/.tmux.confを通じて高度にカスタマイズ可能です。このファイルはtmuxの起動時に読み込まれ、キーバインディング、外観、動作などを変更できます。

tmux設定の理解

tmux設定ファイルは、各行がコマンドである単純な構文を使用します。コメントは#で始まります。以下は説明付きの基本的な例です:

bash
# プレフィックスキーをCtrl+aに設定(screenのように)
# これは片手で押しやすいため、よく好まれます
unbind C-b          # デフォルトのプレフィックスキーバインディングを削除
set -g prefix C-a   # Ctrl+aを新しいプレフィックスキーとして設定
bind C-a send-prefix # Ctrl+a Ctrl+aをプログラムに渡すことを許可

# マウスサポートを有効化
# これを有効にすると、クリックでペインを選択、サイズ変更、スクロールできます
set -g mouse on

# ステータスバーのスタイルを設定
# 下部のステータスバーの外観をカスタマイズ
set -g status-style bg=black,fg=white

# 256色サポートを有効化
# これにより、tmux内のプログラムが色を正しく表示できます
set -g default-terminal "screen-256color"

# スクロールバックバッファを増やす
# これにより、上にスクロールして各ペインでより多くの履歴を見ることができます
set -g history-limit 10000

# ペイン切り替えをvimスタイルのキーに再バインド
# これによりvimユーザーにとってナビゲーションがより直感的になります
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

設定変更の適用

~/.tmux.confを作成または変更した後、2つのオプションがあります:

  1. tmuxを再起動する(セッションが終了します)
  2. 既存のtmuxセッションで設定を再読み込みする:
    sh
    tmux source-file ~/.tmux.conf

2番目のオプションが推奨されます。作業を中断せずに変更が適用されるためです。これを自動的に行うキーをバインドすることもできます:

bash
# prefix + rで設定を再読み込み
bind r source-file ~/.tmux.conf

設定のスコープ

多くの設定コマンドで-gフラグに注目してください。これは「グローバル」を意味し、設定がすべてのセッション、ウィンドウ、ペインに適用されることを意味します。-gがなければ、設定は現在のセッションにのみ適用されます。

設定オプションは異なるレベルで設定できます:

  • グローバル(-g付き):どこでも適用
  • セッション:1つのセッションに適用
  • ウィンドウ:1つのウィンドウに適用
  • ペイン:1つのペインに適用

まとめ

Tmuxは、クライアント-サーバーアーキテクチャで動作し、セッションの永続性、ウィンドウ管理、ペイン編成を提供するターミナルセッションを管理するための非常に強力なツールです。

主要なメカニズム

  1. クライアント-サーバーアーキテクチャ:Tmuxはセッションをターミナルクライアントから独立して管理するサーバープロセスとして実行され、切断後も持続するセッションを可能にします。

  2. 階層的な組織:3レベル構造(セッション → ウィンドウ → ペイン)は、複雑なワークフローのための強力な組織を提供します。

  3. プレフィックスキーシステム:プレフィックスキーメカニズムにより、tmuxはコマンドを傍受しながら、他のすべてのキーストロークを内部で実行されているプログラムに渡すことができます。

  4. デタッチとリアタッチ:プロセスを停止せずにセッションからデタッチする能力は、リモート作業や長時間実行タスクにtmuxが不可欠である理由です。

利点

  • 永続性:ネットワークの問題やターミナルの閉鎖によって作業を失うことがない
  • 組織化:ウィンドウとペインで複雑なワークフローを構造化
  • コラボレーション:複数のユーザーが同じセッションを表示して操作できる
  • リソース効率:1つのターミナルウィンドウ内で複数のターミナルを実行
  • 生産性:キーボードショートカットでタスク間をすばやく移動

練習を重ねることで、tmuxはターミナル環境での作業時の生産性を大幅に向上させることができます。最初の学習曲線は、複雑なターミナルワークフローを簡単に管理できる効率性の向上によってすぐに報われます。