まったりするmatayu

ツイートにゴミがついた感じのブログ

tmuxどんな時に使うの

研究室のgrowiで入れておくと良いソフトウェアがいくつか紹介されていて,tmuxがぱっと見どういったものなのか分からなかったのでとりあえず使ってみようという感じで使ってみました.

growi.cr.ie.u-ryukyu.ac.jp

tmuxは1つのterminal windowで複数のterminalを立ち上げることができるソフトウェアです.それだけだとなんか複数のwindowを1つのwindowにまとめて管理できるというだけで自分的にはあまり魅力は感じないのですが,tmuxの強いところは「セッションを維持できる」というところにありました.

導入方法

自分はmacbookなので,brewで入れました.簡単!

brew install tmux

後の細かいconfigの設定とかはこの記事とかを参考にしました.

qiita.com

強みの実演

tmuxはtmuxと打つことで起動します.起動するとこんな感じで,terminal windowの中でterminal windowが開きます.ぱっと見,そのようには見えないですが開いています.

f:id:mattari_matayu:20210106104800p:plain
tmux
prefix + cで新しくwindowを作成することができるのでやってみます.(prefixはconfigで設定することができます.デフォルトはctrl+b. 打ち方はprefixを打った後にcを打つ感じです.)
f:id:mattari_matayu:20210106105000p:plain
new
画像上部を見ると2:zshとwindowが増えていることがわかります.この1:zsh2:zshprefix + 1とかprefix + 2とかで切り替えることができます. こんな感じで複数のwindowを1つのterminal window内で管理することができます.

大事なのはここからです.まず適当にtmux上のwindowで作業をしてみます.今回はrustcのbuildをしてみます.

f:id:mattari_matayu:20210106110609p:plain
build
ここで一度terminalを左上のxボタンで終了してみます.そうするとtmuxを使わない場合であればこの作業は中断してしまうことになりますが,もう一度terminalを開いて確かめてみます. tmuxと打って,prefix + sでセッションの一覧を表示します.
f:id:mattari_matayu:20210106111041p:plain
一覧
ここで前回閉じたwindowで使っていた0番のセッションを選択すると,このようにbuildが継続されていることがわかります(十字キー押しちゃったのでちょっと乱れていますが).
f:id:mattari_matayu:20210106111126p:plain
continue
これはwindowを閉じてもセッションが維持されていて,裏で作業が続けられていることを意味します.

自分は作業ログを取りながら作業することがよくありますが,後から見返すと足りない部分があって作業していたterminalを見返したい時があります. tmuxを使えば維持されるセッションに作業内容を丸ごと残すことができるので,間違えてterminal windowを閉じてしまった場合でも見返すことができます.

さらなる強み

これだけでも自分的には嬉しいですが,growiにも書いてある通りtmuxはssh先で使うとさらに強いです. ssh先のサーバーで何かbuildなどの時間のかかる処理をしたい時,通常はその間sshコネクションを維持しなければなりません.万が一build中などにネットワーク障害などでsshが切断された時,buildは失敗してしまいます. しかしtmuxを使うと,維持されるセッションに作業を任せることができるので,途中でsshコネクションを切っても,作業は続行されます.またsshしてtmuxコマンドを打ってセッションを選択してあげればbuild中のwindowに戻ることができます. とても便利です.

あとがき

tmuxはとても便利だと思うので使っていきたいと思います. しかしながら,セッションを維持させるソフトウェアとしてscreenというのもあって(こっちの方がメジャー?),そっちをあんまり使ったことがないのでどちらの方が使いやすいか見極めたいですね. 多分自分の環境ではtmux, そのほかではscreenを使う形になるのかな.自分の環境でどちらを使うかの選択があるかも.どちらにせよ端末多重化の技を覚えることができました.やった.

追記

記事を公開した後に先輩に以下の設定や機能の存在を教えてもらいました.

ステータスバーをカスタム

先ほどまでも,ステータスバーの日付の表示をいじったり,バーの位置を下から上に持ってきたりと少しカスタムされていました. f:id:mattari_matayu:20210106104800p:plain ここからさらに,tmuxのプラグインを利用することでバッテリー残量を表示したり,CPU稼働率を表示したりできるようになります. プラグインTPM(Tmux Plugin Manager)を使用して管理することができます.使用方法は下記リンクを参考にしてください.

github.com

こんな感じになる.シェルスクリプトを自作するか変更すればもっと思い通りのものにできるはず.

f:id:mattari_matayu:20210106144433p:plain
custom

ちなみに設定はこんな感じです.

set-option -g status-right '#{battery_status_bg}Batt: #{battery_icon} #{battery_percentage}#{battery_remain} | Online: #{online_status} | #{cpu_bg_color}CPU:#{cpu_icon}#{cpu_percentage}'

コピーモード

prefix + [でコピーモードに入ることができます.configでsetw -g mode-keys viを設定していれば,コピーモードがviのようになります. 例えばhjklキーでカーソル移動できたり,vでビジュアルモードに入って範囲を選択して,yでヤンクできたりします.

あとがき(再)

ここまでカスタムできると,ただの端末多重化ソフトウェアではなくなってきます. 他のマシンにtmuxをダウンロードして,configを持ってくれば自分の使い慣れた見た目のterminal環境を簡単に持ってくることができるのでiterm2側でステータスバーを作成するよりtmuxで作成した方が良いかも?