ITエンジニアのための勉強会・イベントレポート情報メディア

それゆけ!ターミナル部 第10回tmuxでターミナル管理の基本を身につけよう!
skill

それゆけ!ターミナル部 第10回
tmuxでターミナル管理の基本を身につけよう!

2017.02.23

 
  • このエントリーをはてなブックマークに追加

みなさんこんにちは!ターミナル部部長のタナカトモフミです。

本連載では意外と見落としがちな基本的な事柄からちょっとマニアックなテクニックまで、ターミナルを使いこなすための方法を若手エンジニアのタミ夫くんとシェルスキー先生と一緒に学んでいきます。

今回と次回は2回連続でtmuxというツールを紹介します。tmux はターミナルマルチプレクサと呼ばれるソフトウェアで、複数のターミナルを簡単に使いやすく管理できるようにしてくれるツールです。tmuxを使えば、ログをtailしながらコマンドを実行したい時や、エディタでコードを編集ながらコマンドを実行したい場合などの並行作業や、サーバーにログインして作業した後に、ちょっと休憩してまた再開する場合などの復帰が簡単にできるようになります。

タナカトモフミ

タミ夫くんがSSHでサーバーに接続して作業しているようです。いままで覚えたターミナルテクニックを生かして効率的に作業を行っているかと思いきや、何か問題が起きたようです。

げげげ!これはひどい!

何事じゃ?

サーバーにSSHでログインして作業してたんスけど、ちょっと目を離してたらスリープしちゃって接続切れちゃって・・・

3つぐらい並行で接続してたんで、全部ログインからやり直しで鬼ツライっスわー

なるほどな。ここはtmuxの出番かのう。

よっ!待ってました!早く言ってくださいよー!

お、おう(最近なんかうまいこと誘導されてるような気がするんじゃが…)

(困ってたら悩み解決していくこのシステムめっちゃ便利だわー)

tmuxのインストール

まずはいつものようにHomebrewを使ってtmuxをインストールしましょう。

$ brew install tmux
==> Downloading https://homebrew.bintray.com/bottles/
tmux-2.3_2.el_capitan.bottle.tar.gz
Already downloaded: /Users/tanacasino/Library/Caches/
Homebrew/tmux-2.3_2.el_capitan.bottle.tar.gz
==> Pouring tmux-2.3_2.el_capitan.bottle.tar.gz
==> Caveats
Example configuration has been installed to:
 /usr/local/opt/tmux/share/tmux

Bash completion has been installed to:
 /usr/local/etc/bash_completion.d
==> Summary
/usr/local/Cellar/tmux/2.3_2: 10 files, 652.0K

これでtmuxコマンドが使えるようになりました。早速使ってみましょう!

$ tmux
図 1: tmuxの起動

緑色の文字が下部に表示されていれば成功です。tmuxを起動すると、tmuxの中でシェルが実行されるようになります。このためtmuxを終了しない限り、シェルは実行されたままになる点を理解しておきましょう。

もう少しtmuxを体感するために、ウィンドウとペインを作ってみます。今はウィンドウって?ペインって?で大丈夫です。まずは動かしてみましょう。

tmuxを起動した状態で、まずは「echo 0」コマンドを実行しておきます。続いて、「C-b」(Controlキーを押しながらbキーを押す)を押して一度キーを離し、「c」を押しましょう。すると緑色のバーに「1: bash*」という表示が増えます。

ここで 「echo 1」を実行しておきます。その後「C-b」を押して一度キーを離して、「p」を押しましょう。画面の表示が切り替わり、先ほどの「echo 0」を実行した画面に戻ってきました。これをウィンドウの作成と移動と呼びます。

さらに、この状態で「C-b」を押して一度キーを離し、「%」を押しましょう。すると、画面が左右に分割されます。しかもそれぞれの画面で別のコマンドが実行できます。これをペインと呼びます。ペインの移動は「C-b」の後に「o」でできます。

このように複数のターミナルを簡単に増やしたり、横に並べたりして管理できるのがtmuxです。

図 2: ペインの分割

tmuxの基本用語を覚えておこう!

tmuxは基本的に以下の3つの概念を操作するものです。

 1.ウィンドウ (window)
 2.ペイン (pane)
 3.セッション (session)

先ほど、「C-b」を押した後に「c」を押すとできたのがウィンドウです。

ウィンドウは、Webブラウザでいうタブのようなものです。作成、削除、ウィンドウ間の移動の他、名前をつけることもできます。ウィンドウは作成した時点で1つの表示領域(ターミナル)を持っていますが、これを分割して増やすことができます。この表示領域のことをペイン(pane)と呼びます。ウィンドウは1つ以上の複数のペインを管理する単位であると捉えましょう。

ウィンドウがペインを管理する単位であるように、セッションはウィンドウを管理する単位です。セッションも作成、削除、移動、名前をつけるといったことが可能です。

どのように使い分けるかは自由ですが、例えばプロジェクトAの作業はセッションAで、プロジェクトBの作業はセッションBで管理するようにしておいて、プロジェクトAのプログラムごとにウィンドウを分けるなどしておくと良いでしょう。ただし、管理するウィンドウの数が多くない場合は、ウィンドウの単位でプロジェクトにして管理した方が良いでしょう。自分が管理したいターミナルの数に合わせて適切な単位に切り分けしましょう。

続いてtmuxの基本操作について解説します。

tmuxでは、ウィンドウやペインの管理をする際に、キーボードショートカットキーを使って操作することができます。このショートカットキーを入力する際に毎回まず打つキーのことを「プレフィックスキー(prefix key)」と呼びます。デフォルトでは「C-b」に割り当てられています。そのため、先ほどの例で「C-b」を押した後に「c」を押すという説明は、プレフィックスキーを押した後に、「c」を押すショートカットということになります。

これ以降ショートカットを紹介する際にはプレフィックスキーを省略しますので注意してください。

ウィンドウ管理を覚えよう!

まずはウィンドウ管理を覚えましょう。

ウィンドウ管理で大事なのは、数が増えたらちゃんと名前をつけるということです。名前をつけていないとどこで何をしているのかわからなくなります。移動したい時にすぐにどこに行けば良いか?わかるように名前をつけるようにしましょう。また、現在のウィンドウには「*」の記号が、直前のウィンドウには「-」の記号が、ステータスバーと呼ばれる緑色のバーに表示されます。どのウィンドウに今いるのか?は記号で判断しましょう。

以下にウィンドウの操作方法を紹介します。ショートカットキーはプレフィックスキーを押した後に押すキーのみを記述していますので注意してください。

操作ショートカット説明
ウィンドウの作成 c 現在のセッションに新しいウィンドウを作成します
ウィンドウの移動
(一覧から選択)
w ウィンドウの一覧を表示します。現在のウィンドウに選択がありますが、ここで「C-n、C-p」で候補を選択して移動することができます。また各ウィンドウの先頭に表示されている数値・アルファベットを押すことでも移動することが可能です
ウィンドウの移動
(次へ)
n 次(next)のウィンドウへ移動します
ウィンドウの移動
(前へ)
p 前(previous)のウィンドウへ移動します
ウィンドウの移動
(検索)
f ウィンドウを検索(find)します。名前の一部を入力して移動できますが、候補が複数あった場合は、「w」のウィンドウの一覧表示へと飛ばされます。しかし候補が絞られた状態の一覧なので見やすく便利です
ウィンドウの移動
(番号)
0-9 の数字を押す 各ウィンドウに自動的に付与される番号を使って移動します
ウィンドウに名前をつける(リネームする) , ウィンドウの名前を変更します。数が増える前にわかりやすい名前を付けてあげましょう
ウィンドウを閉じる
(kill)
& 現在のウィンドウを閉じます。[y/n]のプロンプトが出ますので「y」を答えれば削除されます。tmuxでは削除をkillと表現していますので、man等を読む場合はkillで探しましょう

一通りのウィンドウ操作を行う例のGIF画像を用意しました。イメージが湧かない場合は以下を見てどのような機能かチェックして見てください。

図 3: ウィンドウ操作の例

ペイン操作!画面分割をマスターしよう!

続いてはペインの管理です。ペインは画面分割(split)により増やしていきます。

画面分割は、上下にウィンドウを分割する水平分割(horizontal split)と、左右にウィンドウを分割する垂直分割(vertical split)の2種類があります。また、ズーム(zoom)という面白い機能もあります。ペインが増えるとどうしても表示領域が小さくなってしまいますが、ズームを使うことで一時的にそのペインのみを表示することができます。

操作ショートカット説明
ペインの分割
(垂直: vertical)
% 現在のペインを左右に分割します
ペインの分割
(水平: horizontal)
" 現在のペインを上下に分割します
ペインの移動
(次のペインへ)
o 次のペインに移動します
ペインの移動
(番号)
q ペインに一意に割り当てられる番号(もしくはアルファベット)を使って表示します。表示された番号を押すことでそのペインに移動することができます。素早く入力しないと移動できないことがありますので注意してください
ペインの削除 x 現在のペインを削除します
ペインのズームのOn/Off切り替え
(toggle zoom)
z 現在のペインをズーム表示(そのペインのみの表示にする)します。再度実行することでズーム表示を解除できます
図 4: ペイン操作の例

スクロールに注意!

tmuxを使っていると過去に画面に表示されたテキストなどをスクロールして見ようとすると、正しく見えないことがあります。これは、tmuxが画面の描画をいつもと違う方法に変えているためです。tmuxを使っている場合、スクロールはtmuxの機能を使って実施する必要があります。

テキストのスクロールをするモードをコピーモード(Copy Mode)と呼びます。名前がコピーモードですので、スクロールしてテキストをコピーすることもできます。さらに、コピーしたテキストを別のウィンドウやペインに貼り付けて共有することも出来ます。ただし、コピーモードでコピーしたテキストはtmux内に保持されますが、OSのクリップボードと共有されるわけではない点に注意してください。

コピーモードを開始する場合は、プレフィックスキーのあとに「[」キーを押します。コピーモードでは、カーソルの移動はカーソルキーを使用することができます。デフォルトではEmacsというエディタの同じショートカットが使えますが、Mac OS XのSpotlightのデフォルトショートカットとコピーモードの終了が被るため、注意してください。ここでは、コピーモードに入る前に「tmux setw -g mode-keys vi」コマンドを実行してviモードに変更し、コピーモードに入った場合のショートカットを紹介します。

操作ショートカット
移動(次のページ) C-f
移動(前のページ) C-b
移動 (1行上) k
移動 (1行下) j
選択の開始 SPACE
選択の終了 ENTER
コピーモードの終了 q

コピーモード時に選択してコピーしたテキストは、コピーモード終了後に、プレフィクスキーと「」」を押すことで、貼り付けることができます。

図 5: コピーモードの使い方

セッションの管理

セッションの管理では、デタッチとアタッチを覚えておきましょう。

これはサーバーにSSHでログイン後、サーバー側でtmuxを起動して作業をしておくことで途中でネットワークが切れてしまっても、作業中の状態はtmuxが管理しているので、すぐに作業に戻れると言う優れものです。サーバーにログインして作業することがある人は、まずはこの機能から試して覚えおくと良いでしょう。

tmuxコマンドを実行すると、自動的にセッションが作成されますが、それと同時にtmuxプロセスがバックグラウンドで起動されます。このバックグラウンドで起動されるプロセスはサーバーと呼ばれ、セッションやウィンドウを管理しているtmuxのプロセスになります。このサーバーを利用するクライアントもtmuxとなっています。つまり何も考えずにtmuxコマンドを実行するとサーバーが起動してクライアントが接続しているのです。

この時クライアント側だけを終了することをデタッチと呼びます。逆に、サーバーに接続することをアタッチと呼びます。デタッチは、プレフィックスキーを押した後に、「d」を押すことで実行できます。

アタッチする場合は、「tmux attach」コマンドでアタッチできます。アタッチ可能なセッションがあるかは「tmux ls」コマンドで一覧を確認することができます。セッションの名前を指定してアタッチすることもできます。「tmux attach -t セッション名」

操作ショートカット説明
セッションのリスト表示と移動 s セッションの一覧を表示し、選択されたセッションに移動します。ウィンドウの「w」と同様のキー操作で候補のカーソル移動ができます
セッションの名前を変更 $ セッションの名前を変更します
図 6: セッションの使い方

まとめ

これこれ!これっすわー。まさにこれ。こういうやつって他にもなんか聞いたことがあるんスけどなんでしたっけ?

tmux以外にもGNU Screenが有名じゃな。あとtmuxとGNU Screenをラップして初めから使いやすいようにカスタムしてくれてる Byobu (http://byobu.co/)と言うソフトウェアもあるんじゃよ。

名前がオシャンティっスねー。

おう、なんかよくわからなんけどそうじゃな。

てかカスタムできるってことは、もっと便利にできるってことっスよね?

いい質問じゃ。では次はtmuxをカスタマイズして、より便利にする方法を教えてやるわい。

今回は2回連続tmux特集の前編ということでtmuxの基本的な使い方を紹介しましたが、次回はtmuxをより活用するためのカスタマイズについて紹介します。tmuxを活用してより快適なターミナルライフを送りましょう!

原稿: 株式会社ビズリーチ ターミナル部部長 タナカトモフミ

株式会社ビズリーチ所属。ScalaコードをVimで書く日々をおくる。たまにうっかりIntellij IDEAに浮気してしまう。社内のVim部とEmacs部を和解させ、ターミナル部に統合することに成功したが、社内はEclipse, Intellij IDEA, Sublime Text, Atomが主流のため、戦いは続く。

https://twitter.com/tanacasino

それゆけ!ターミナル部 第10回tmuxでターミナル管理の基本を身につけよう!

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW