【tmux入門】実践ガイド|SSH×tmuxでリモート開発を劇的に快適にする
この記事は「モバイルSSH完全ガイド」のクラスター記事です。モバイルSSHの全体像はガイドをご覧ください。
はじめに
SSH でリモートサーバーに接続して作業中、ネットワークが切れた瞬間にすべてが吹き飛んだ——そんな経験はありませんか?
長時間かかるビルドやテスト、AI コーディングツールの実行中に接続が途切れると、最初からやり直し。これは SSH を使ったリモート開発における最大の悩みのひとつです。
tmux を使えば、この問題を根本から解決できます。
本記事では、tmux の基本操作から SSH と組み合わせた実践的なワークフローまで、リモート開発を快適にするための知識を体系的に解説します。
tmux とは?
tmux(Terminal MUltipleXer)は、ひとつのターミナル内で複数のセッションを管理できるツールです。
tmux を使うと、以下のことが可能になります。
- セッションの永続化: ターミナルを閉じてもプロセスが動き続ける
- 画面分割: ひとつの画面を複数のペインに分割して同時作業
- セッションの切り替え: 複数の作業環境を瞬時に切り替え
- デタッチ&アタッチ: セッションを切断して、後から再接続
特に SSH 接続と組み合わせた場合、tmux は「なくてはならない存在」になります。
tmux がない世界 vs ある世界
| シナリオ | tmux なし | tmux あり |
|---|---|---|
| SSH 接続が切れた | プロセス終了。作業やり直し | セッション継続。再接続するだけ |
| 長時間タスクを実行中 | PC の前に張り付く必要あり | デタッチして放置 OK |
| ログを見ながらコード編集 | ターミナルを複数開く | 画面分割で 1 画面に収まる |
| 複数プロジェクトを同時進行 | ウィンドウが大量に散らかる | 名前付きセッションで整理 |
tmux のインストール
Linux
# Ubuntu / Debian
sudo apt install tmux
# Fedora / RHEL
sudo dnf install tmux
# Arch Linux
sudo pacman -S tmux
macOS
brew install tmux
Windows(WSL 経由)
Windows で tmux を使うには WSL(Windows Subsystem for Linux)を経由します。
# WSL 内で
sudo apt install tmux
インストールできたら、バージョンを確認しておきましょう。
tmux -V
# tmux 3.x
tmux の基本概念 — セッション・ウィンドウ・ペイン
tmux を使いこなすには、3 つの階層構造を理解することが重要です。
セッション(Session)
├── ウィンドウ(Window)
│ ├── ペイン(Pane)
│ └── ペイン(Pane)
└── ウィンドウ(Window)
└── ペイン(Pane)
| 概念 | 説明 | イメージ |
|---|---|---|
| セッション | tmux の最上位単位。作業の「プロジェクト」 | ブラウザのウィンドウ |
| ウィンドウ | セッション内のタブ。画面全体を使う | ブラウザのタブ |
| ペイン | ウィンドウ内の分割領域 | 画面の分割表示 |
基本操作:まずはこれだけ覚えよう
プレフィックスキー
tmux の操作は、まずプレフィックスキーを押してからコマンドキーを押す、という 2 段階方式です。
デフォルトのプレフィックスキーは Ctrl+B です。
以下、Ctrl+B → D のような表記は「Ctrl+B を押してから離し、その後 D を押す」という意味です。
セッション操作
# 新しいセッションを作成
tmux
# 名前を付けてセッション作成(おすすめ!)
tmux new -s 作業名
# セッションをデタッチ(切断。プロセスは動き続ける)
# Ctrl+B → D
# セッション一覧を表示
tmux ls
# セッションにアタッチ(再接続)
tmux attach -t 作業名
# セッションを終了
tmux kill-session -t 作業名
ポイント: セッションには必ず名前を付けましょう。tmux new -s dev のように名前を付けておけば、後から tmux attach -t dev で迷わず再接続できます。
ウィンドウ操作
| キー | 操作 |
|---|---|
Ctrl+B → C | 新しいウィンドウを作成 |
Ctrl+B → N | 次のウィンドウに移動 |
Ctrl+B → P | 前のウィンドウに移動 |
Ctrl+B → 数字 | 指定番号のウィンドウに移動 |
Ctrl+B → , | 現在のウィンドウをリネーム |
Ctrl+B → & | 現在のウィンドウを閉じる |
ペイン操作(画面分割)
| キー | 操作 |
|---|---|
Ctrl+B → % | 画面を縦に分割(左右) |
Ctrl+B → " | 画面を横に分割(上下) |
Ctrl+B → 矢印キー | ペイン間を移動 |
Ctrl+B → X | 現在のペインを閉じる |
Ctrl+B → Z | 現在のペインを全画面表示/解除 |
Ctrl+B → Space | ペインのレイアウトを切り替え |
実践:SSH × tmux のワークフロー
ここからが本題です。tmux の真価は SSH と組み合わせたときに発揮されます。
基本パターン:デタッチ&アタッチ
# 1. SSH でリモートサーバーに接続
ssh myserver
# 2. tmux セッションを開始
tmux new -s work
# 3. 作業を行う(ビルド、テスト、AI ツール実行など)
npm run build
# 4. セッションをデタッチ(Ctrl+B → D)
# → SSH を切断しても、ビルドは裏で動き続ける
# 5. 後から再接続
ssh myserver
tmux attach -t work
# → ビルド結果がそのまま表示される!
これが tmux の最も基本的かつ強力な使い方です。ネットワークが切れても、PCを閉じても、プロセスは生き続けます。
実践パターン:画面分割で効率アップ
リモートサーバーでの作業では、ログを見ながらコマンドを打つ場面が頻繁にあります。
# tmux セッションを開始
tmux new -s dev
# 画面を横に 2 分割
# Ctrl+B → "
# 上のペイン: ログを流す
tail -f /var/log/app.log
# 下のペインに移動(Ctrl+B → ↓)して作業
vim app.py
3 分割にしてさらに効率を上げることもできます。
# 画面を 3 分割する例
# Ctrl+B → " ← 横分割
# Ctrl+B → % ← 下半分を縦分割
# 上: アプリのログ
# 左下: コード編集
# 右下: git 操作やテスト実行
実践パターン:複数セッションの並行管理
大規模な開発では、フロントエンド・バックエンド・データベースなど複数の作業を並行して進めることがあります。
# フロントエンド用セッション
tmux new -s frontend
cd ~/project/frontend
npm run dev
# Ctrl+B → D
# バックエンド用セッション
tmux new -s backend
cd ~/project/backend
python manage.py runserver
# Ctrl+B → D
# セッション一覧を確認
tmux ls
# backend: 1 windows (created ...)
# frontend: 1 windows (created ...)
# バックエンドの様子を見たい
tmux attach -t backend
セッション間の切り替えも簡単です。
| キー | 操作 |
|---|---|
Ctrl+B → S | セッション一覧を表示して選択(おすすめ) |
Ctrl+B → L | 直前のセッションに戻る |
Ctrl+B → ) | 次のセッションに移動 |
Ctrl+B → ( | 前のセッションに移動 |
特に Ctrl+B → S はセッション一覧がツリー表示され、各セッションの内容をプレビューしながら選べるので非常に便利です。
AI コーディングツール × tmux — 寝ている間も開発が進む
tmux が最も威力を発揮するユースケースのひとつが、AI コーディングツールとの組み合わせです。
Claude Code などのエージェント型 AI ツールは、指示を出すと自律的にコードを書き続けます。しかし SSH 接続が切れるとプロセスごと終了してしまう——tmux があれば、この問題は完全に解消されます。
基本:tmux + Claude Code
# SSH でリモートマシンに接続
ssh mypc
# Claude Code 用のセッションを作成
tmux new -s claude
# Claude Code を起動
cd ~/my-project
claude
# タスクを投げる
> プロジェクト全体のテストカバレッジを80%以上にしてください
# セッションをデタッチ(Ctrl+B → D)
# → Claude Code はバックグラウンドで動き続ける!
翌朝、再接続して結果を確認するだけ。
ssh mypc
tmux attach -t claude
# → テストが書き上がっている!
応用:複数の AI を同時に走らせる
# リファクタリング担当
tmux new -s refactor
claude
> src/ ディレクトリのリファクタリングをしてください
# Ctrl+B → D
# テスト生成担当
tmux new -s tests
claude
> テストカバレッジを80%以上にしてください
# Ctrl+B → D
# ドキュメント生成担当
tmux new -s docs
claude
> API ドキュメントを自動生成してください
# Ctrl+B → D
# 進捗確認
tmux ls
# docs: 1 windows (created ...)
# refactor: 1 windows (created ...)
# tests: 1 windows (created ...)
# Ctrl+B → S でセッション一覧から切り替えて確認
3 つの AI が並行して作業を進め、自分は結果を確認するだけ。この開発スタイルは tmux なしでは実現できません。
Tips:tmux のペイン分割で AI を監視
tmux new -s monitor
# 画面を 3 分割(Ctrl+B → " → Ctrl+B → %)
# 上のペイン: Claude Code が動いている
# 左下: git log --oneline でコミット状況を監視
# 右下: htop でシステムリソースを監視
AI がリソースを使いすぎていないか、どのファイルが変更されたかをリアルタイムで把握できます。
tmux をカスタマイズする
デフォルトの tmux でも十分使えますが、設定ファイル ~/.tmux.conf をカスタマイズすると格段に快適になります。
おすすめの基本設定
# ~/.tmux.conf
# プレフィックスキーを Ctrl+A に変更(お好みで)
# set -g prefix C-a
# unbind C-b
# bind C-a send-prefix
# マウス操作を有効化
set -g mouse on
# ペイン分割のキーバインドをわかりやすく
bind | split-window -h # | で縦分割
bind - split-window -v # - で横分割
# ペイン移動を vim 風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# ウィンドウ番号を 1 から始める
set -g base-index 1
setw -g pane-base-index 1
# 256 色対応
set -g default-terminal "screen-256color"
# ステータスバーのカスタマイズ
set -g status-style 'bg=#333333 fg=#ffffff'
set -g status-left '[#S] '
set -g status-right '%Y-%m-%d %H:%M'
# 履歴のバッファサイズを増やす
set -g history-limit 10000
設定ファイルを変更したら、tmux 内で以下を実行して反映します。
tmux source-file ~/.tmux.conf
マウス操作を有効にする理由
set -g mouse on を設定すると、以下の操作がマウスで可能になります。
- ペインのクリックで移動
- ペインの境界をドラッグしてリサイズ
- スクロールでログを遡る
特にスクロールは、長いログを確認する際に重宝します。
tmux のよく使うコマンド早見表
セッション
| コマンド / キー | 操作 |
|---|---|
tmux new -s 名前 | 名前付きセッション作成 |
Ctrl+B → D | デタッチ |
tmux ls | セッション一覧 |
tmux attach -t 名前 | アタッチ |
tmux kill-session -t 名前 | セッション終了 |
Ctrl+B → S | セッション切り替え(一覧) |
Ctrl+B → $ | セッションをリネーム |
ウィンドウ
| コマンド / キー | 操作 |
|---|---|
Ctrl+B → C | 新規ウィンドウ |
Ctrl+B → N / P | 次 / 前のウィンドウ |
Ctrl+B → 数字 | 番号でジャンプ |
Ctrl+B → , | リネーム |
Ctrl+B → W | ウィンドウ一覧(選択) |
ペイン
| コマンド / キー | 操作 |
|---|---|
Ctrl+B → " | 横分割 |
Ctrl+B → % | 縦分割 |
Ctrl+B → 矢印 | ペイン移動 |
Ctrl+B → Z | 全画面表示 / 解除 |
Ctrl+B → X | ペインを閉じる |
Ctrl+B → { / } | ペイン位置を入れ替え |
コピーモード
tmux にはターミナルの出力をスクロールして確認・コピーするコピーモードがあります。
| コマンド / キー | 操作 |
|---|---|
Ctrl+B → [ | コピーモードに入る |
↑ / ↓ / PgUp / PgDn | スクロール |
Q | コピーモードを抜ける |
ログが流れていってしまった内容を確認したいときに便利です。
トラブルシューティング
「セッションが見つからない」と言われる
$ tmux attach -t work
no session: work
tmux ls でセッション名を確認しましょう。サーバーが再起動されると tmux セッションも消えるので注意。
ネストした tmux が起動できない
SSH 先で tmux を起動しようとして「sessions should be nested with care」と言われる場合、既にローカルで tmux を使っているかもしれません。
# ローカルの tmux 内から SSH 先の tmux を操作する場合
# プレフィックスキーを 2 回押す(Ctrl+B → Ctrl+B)でリモート側に送信
画面が崩れる
ターミナルのリサイズ後に表示が崩れることがあります。
# ウィンドウサイズを再調整
# Ctrl+B → :
# resize-window -A
スマホから tmux を使うなら — SSH Term
開示: 筆者はSSH Termの開発者です。tmuxをスマホから操作する際の課題(特殊キー入力、日本語入力)を解決するために開発しました。
ここまで読んで「tmux 便利そう! スマホからも使いたい」と思った方もいるのではないでしょうか。
実は、スマホからの tmux 操作にはいくつかの壁があります。
Ctrl+Bが打てない: ソフトウェアキーボードには Ctrl キーがない- 日本語入力ができない: ほとんどの SSH アプリはターミナル内で IME が効かない
- 接続が切れやすい: アプリを切り替えただけで SSH が切断されることも
これらの課題を解決するために作ったのが、モバイル SSH クライアントアプリ SSH Term です。
SSH Term の特徴
- アシストバー:
Ctrl+B、Ctrl+C、Tab、Escなどの特殊キーを画面下部のバーからワンタップで入力。tmux のプレフィックスキーも楽々 - IME モード: スマホの日本語キーボードがそのまま使える。Claude Code に日本語で指示を出すのも快適
- バックグラウンド接続維持: 他のアプリに切り替えても SSH 接続を維持。tmux のデタッチ忘れも安心
- SFTP ファイルブラウザ内蔵: AI が生成したファイルをその場で確認可能
- ワンタップ鍵生成: Ed25519 鍵ペアの生成から公開鍵コピーまでアプリ内で完結
通勤中にスマホから SSH で自宅 PC に接続し、tmux セッションにアタッチして Claude Code の進捗を確認する——そんなワークフローが SSH Term なら快適に実現できます。
Android の SSH クライアント選びについては、こちらの記事で詳しく比較しています。
まとめ
| 項目 | ポイント |
|---|---|
| tmux とは | ターミナルのセッション管理ツール |
| 最大の強み | SSH 接続が切れてもプロセスが生き続ける |
| 基本操作 | tmux new -s 名前 → 作業 → Ctrl+B → D → tmux attach -t 名前 |
| 画面分割 | Ctrl+B → " で横分割、% で縦分割 |
| AI ツール連携 | tmux + Claude Code で寝ている間も AI が開発を進める |
| カスタマイズ | ~/.tmux.conf でキーバインドや見た目を調整 |
| スマホから | SSH Term なら特殊キーも日本語入力も快適 |
tmux は一度覚えてしまえば、SSH を使ったリモート開発の生産性が劇的に向上するツールです。特に AI コーディングツールと組み合わせた「タスクを投げてデタッチ、後から確認」のワークフローは、tmux なしでは実現できません。
まずは tmux new -s test でセッションを作って、Ctrl+B → D でデタッチ、tmux attach -t test で再接続——この 3 ステップを試してみてください。tmux の便利さが体感できるはずです。