開発部

GNU screen から tmux に乗り換えてみる

tmux_image

開発部の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