ブログ

ターミナルの「再接続」を当たり前に。tmux で開発フローを整理する方法

エンジニアとして長年キャリアを積んでいても、身近なツールの真価に気づかないことは意外とあるものです。今回は、The Linux Command I Ignored for 10 Years Just Saved Me 3 Hours a Day という記事を読み、改めてターミナルマルチプレクサである「tmux」がもたらす効率化について、私なりに整理してみました。

tmux 便利なんだけど、ネストさせると使いにくいのはぼくだけかなぁ。とは言えよく使うのだけど。

なぜターミナルの管理で時間をロスしてしまうのか

開発中、気づくとターミナルのタブが大量に並んでいた、という経験はないでしょうか。 「ログ監視用のタブ」「サーバー起動用のタブ」「テスト実行用のタブ」……。これらが名前のないタブとして並んでいると、いざトラブルが起きた際にどのタブで作業していたか分からなくなり、誤って必要なプロセスを終了させてしまうといったミスにも繋がりかねません。

また、不意に接続が切れたり、PCを再起動したりするたびに、すべてのタブを開き直し、ディレクトリを移動して、コマンドを打ち直す。この「復旧作業」に毎日数分から数十分を費やしているとしたら、長期的にはかなりの時間を損失していることになります。

こうした課題を解決してくれるのが、今回ご紹介する tmux です。

tmux の仕組みを理解する

tmux は「ターミナルマルチプレクサ(Terminal Multiplexer)」と呼ばれるツールです。 一言で言えば、一つのターミナルウィンドウの中で、複数の独立したワークスペースを管理できる仕組みです。

大きな特徴は、その構造にあります。tmux はバックグラウンドでサーバーとして動作するため、ターミナルを閉じても作業状態が維持されます。

tmux の階層構造

tmux の管理構造を視覚化すると、以下のようなイメージになります。

graph TD
  A[tmux サーバー] --> B[セッション: プロジェクト A]
  A --> C[セッション: プロジェクト B]
  B --> D[ウィンドウ: 開発用]
  B --> E[ウィンドウ: ログ確認用]
  D --> F[ペイン 1: エディタ]
  D --> G[ペイン 2: コンパイル]
  E --> H[ペイン 1: 実行ログ]
  E --> I[ペイン 2: DB監視]

各階層の役割は以下の通りです。

  • セッション (Session): 最上位の単位です。プロジェクトごとにセッションを分けると管理しやすくなります。
  • ウィンドウ (Window): ブラウザのタブのようなものです。一つのセッション内に複数のウィンドウを持てます。
  • ペイン (Pane): 一つの画面を垂直や水平に分割した各領域のことです。

従来の手法との比較

従来のターミナル標準のタブ機能と tmux を比較すると、以下のような違いがあります。

機能 標準のターミナル(タブ) tmux
永続性 ウィンドウを閉じると終了する バックグラウンドで維持される
再接続 基本的には不可 別の場所からも再接続(アタッチ)可能
画面分割 OSやアプリの機能に依存 コマンドで自在に分割・レイアウト
整理のしやすさ タブが増えると見失いやすい セッション名で目的別に管理可能

このように、作業状態を「セッション」として保存しておける点が、tmux を使う最大のメリットかと思います。

まずはこれだけ。基本の 6 操作

tmux には非常に多くの機能がありますが、まずは以下の 6 つの操作を覚えるだけで、日常の作業がかなりスムーズになるはずです。 ※ tmux の操作は、デフォルトでは Ctrl + b(プレフィックスキー)を先に押してから、各キーを入力します。

  1. 名前付きセッションを開始する 作業内容に合わせた名前を付けることで、後で戻りやすくなります。 bash tmux new -s work

  2. 画面を垂直に分割する エディタの横でコマンドを打ちたいときなどに便利です。 Ctrl + b を押した後に %

  3. 画面を水平に分割する Ctrl + b を押した後に "

  4. ペイン間を移動する 分割した画面間を移動します。 Ctrl + b を押した後に 矢印キー

  5. デタッチ(一時離脱)する 作業状態を維持したまま、バックグラウンドに送ります。 Ctrl + b を押した後に d

  6. アタッチ(作業再開)する 中断していた作業画面に戻ります。 bash tmux attach -t work

実際に導入してみて感じる変化

実際に tmux を導入してみると、朝の仕事の始め方が変わります。 前日に Ctrl + b -> d でデタッチして帰宅していれば、翌朝は tmux attach と打つだけで、前日の作業の続きがそのまま目の前に現れます。

以前なら、 1. ターミナルを立ち上げる 2. 3つのタブを開く 3. それぞれのディレクトリに移動する 4. エディタを開き、サーバーを起動し、ログを tail する

……といった手順が必要でしたが、これらがすべて不要になります。 これだけでも、精神的なコストと時間の節約につながっていると感じます。

慣れてくると、設定ファイル(.tmux.conf)を自分好みにカスタマイズして、さらに使いやすくすることも可能です。たとえば、プレフィックスキーを押しやすいものに変えたり、マウス操作を有効にしたりといった調整ですね。

まずは「画面を分割してみる」「セッションを維持してみる」といった辺りから始めてみるのが、無理なく定着させるコツかもしれません。

参照記事