tmuxとzshのススメ

tl;dr

  • Terminal.appSSH のようなCUIで作業するときはtmux使うと便利
  • tmux 使うときはシェルを zsh にすると便利

サーバーサイド開発をやってる人には今更な話ですけど最近何度かオススメする機会があったので記事を書くことにしました。
以下、私の使い方を説明しているだけで特に目新しい話はありません。

tmuxとは

tmuxは「ターミナルマルチプレクサ」と呼ばれる類のソフトウェアです。
動作するレイヤーを図にするとこのようになり、ログインシェルの上でtmuxを起動し、さらにそのtmuxの上でログインシェルを起動することができます。
(ログインシェルとは異なるシェルを起動することもできます)

ターミナル(CUI)上で起動することで主に以下ができます。

セッションの保持/復元

tmuxを使うと「SSH経由で時間のかかるコマンドを実行しているが、電車で移動しなければならなくなった。でも今このコマンドを止めたくない。」というようなシチュエーションで便利です。

SSHでログインした後まずtmuxを起動し、tmux上で任意のコマンドを実行するようにすれば、ネットワークが切断されても再接続した後でコマンド実行中のコンソールに再接続することができます。
もちろん手元のPCを再起動しても、SSHログインしていた先のサーバーとtmuxが起動したままであれば再接続できます。

ターミナル画面の分割

1つのターミナル画面でいくつもの window を作ったり、 pane に分割することができます。
見た方がわかりやすいので動画にまとめました。

もちろん windowpane もtmux上の機能なので、一回切断して再接続してもそのままの状態で残っています。
接続元の画面サイズが変わるとレイアウトずれたりはします。

tmux 便利そうじゃないですか??

なぜzshか

一言で言うと「複数のzshプロセス間で履歴が共有できるから」に尽きます。
zshの場合、設定ファイルに setopt share_history の1行を書くだけで各zshプロセスの履歴がシェアされます。

もちろん「Bashでも履歴共有できる」とか、
(参考: Preserve bash history in multiple terminal windows - Unix & Linux Stack Exchange)
fishの方が簡単」とか色々あると思うのでお好みで。

インストール/設定方法

macOSの場合だけご紹介すると、 zsh は最初から入っています。
tmuxHomebrewを使って brew install tmux を実行するだけで入ります。

Ubuntuの場合はきっと sudo apt install zsh tmux とかで入るでしょうし、Gentooなら sudo emerge zsh tmux するだけです。

zshの設定ファイルは ~/.zshrc
tmuxの設定ファイルは ~/.tmux.conf です。

私の設定ファイルは ⬇️ ですが、この記事を書いた後に色々と手を加えたので見た目がかなり変わりました。

GitHubで次のように探すと色んな方が設定ファイルを公開しています。

皆さま良いシェルライフを!