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 で次のように探すと色んな方が設定ファイルを公開しています。

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