開発部のSSです。
今回はターミナルマルチプレクサのGNU screenとtmuxについてです。
ターミナルマルチプレクサとは?
screen や tmux は、1つのターミナル上で複数の仮想端末(セッション)を管理できるツールです。
SSH接続中の作業を中断・再開したり、複数のウィンドウを同時に開いて作業するのに便利です。
ターミナルマルチプレクサのメリット
- セッションの再接続が可能
- SSHが切断されても、作業中のプロセスは生きていて screen -r や tmux attach で再接続できます。
- 長時間の処理(ビルド、DBバックアップなど)にも安心。
- 複数ウィンドウ・ペインの分割
- 一つの画面内で縦横に分割して、複数の作業を並行して進められます(特にtmuxが高機能)。
- 例:左にログ、右にエディタ、下に対話シェルなど。
- セッション共有
- 複数人で同じtmuxセッションに参加すれば、遠隔ペアプロ・教育などにも使える。
- ログを取りやすい
- 長い処理の結果確認やトラブルシュートに便利。
- 軽量・CUIのみで完結
- GUI不要、SSH接続だけでOK。どんなLinuxサーバにも導入しやすい。
screen から tmux に切り替えを検討している理由
今後も伝統的なGNU screen を使っていこうと考えていたのですが、
最近話題のClaude Codeを試してみたところ、ターミナルの表示が大きく崩れてしまうことが分かりました。
screen のバージョンはMacOS版の
Screen version 5.0.1 (build on 2025-05-15 15:05:07)
で、新しいと思うのですが、 .screenrc をカスタマイズも何もしない状態で Claude Codeのレイアウトが大きく崩れてしまっていました。
そこで、代わりに tmux を試してみたところ、特に問題もなく正常に表示され、快適に使うことができました。
この経験から、今後は tmux への移行も視野に入れようと考えています。
screen使いが tmux に切り替えての感想
長年 GNU screen を使い込んできたこともあり、tmux のキーバインドには最初少し戸惑いました。
現在も別の環境では screen を使っているため、tmux でも可能な範囲で screen の操作感に近づけるよう、必要最小限の設定だけ加えてみました。
ここでは、その中でいくつか変更したポイントをご紹介します。
まだ使い始めて数日ですが、取り急ぎの .tmux.conf は以下のようになりました。
Emacs風のキーバインドに変更
# prefix キーを Ctrl-z に変更(Ctrl-b を無効化)
unbind C-b
set-option -g prefix C-z
bind C-z send-prefix
tmux のデフォルトのバインドキーは Ctrl-b ですが、自分は Emacs ユーザーなので Ctrl-b は「1文字戻る」キーとして使いたい派です。そのため、プレフィックスキーは Ctrl-z に変更しました。
参考までに、Emacs の主なカーソル移動用キーバインドは以下の通りです:
Ctrl-f : 1文字右
Ctrl-b : 1文字左
Ctrl-p : 1行上
Ctrl-n : 1行下
Ctrl-a : 行の先頭
Ctrl-e : 行の末尾
この設定によって、tmux 上でも普段の Emacs と同様の操作感が保てるようになりました。
screen風のコピーモードに変更
大量のログを追うときなどに便利な「コピーモード」ですが、tmux では screen とは操作方法がやや異なります。
特に以下の操作を screen 風にしたかったので、設定を追加しました:
# コピーモードの Emacs ライクなキー設定
bind -T copy-mode C-u send-keys -X halfpage-up
bind -T copy-mode C-d send-keys -X halfpage-down
これにより、
Ctrl-u : 半画面上に移動
Ctrl-d : 半画面下に移動
という動作が可能になり、screen と近い感覚で使えるようになっています。
今のところ触って数日ですが、必要な部分から少しずつカスタマイズしていくことで、tmux にもだんだんと慣れてきました。
今後も使いながら、さらに自分好みに調整していきたいと考えています。
それでは。
文:開発部SS