サーバー接続時にいきなり切断されて作業中断されてやる気が激減していたが、tmuxを入れてみたらやる気が下がりにくくなったからtmuxを紹介してみる

[NIJIBOX Advent Calendar 2016](http://qiita.com/advent-calendar/2016/nijibox) の16日目の記事です。

# 目次
- はじめに
- サーバー入って作業してるときこんなことありません？
- tmuxって？
- tmuxでできること
- tmuxの構成
- インストールしてみようか
- 触ってみようか
- 雰囲気だけでもわからないかなーと思い画像をだらだらと。
- 終わり

# はじめに

「概念を学び使ってみる」ではなく、「とりあえず使ってみて体で覚える」自分にとってアウトプットなんて。。。って感じだったのですが、弊社の方から「Qiitaに投稿したら褒美をやろう。」などと言い出したので、餌に釣られる系になってみました。

ちなみに tmux は てぃーまっくす と読むそうです。

# サーバー入って作業してるときこんなことありません？
**いきなりネット切断される**とか、**PC固まって接続切れた**とか、**MTGのために有線から無線に変更するとどうしても切断**等が起こりますよね。ねっ！
（自分は古いPC使っているので、固まって死ぬとかよくあります。。。MACに乗り換えたい）
こういう時に
*開発中だったのに切断された！またファイル開き直しだよ！どうしてくれるんだ！今日はもうやらん！*
なんてことが無いようにサーバー側で作業内容を保持してくれるような環境を作りましょう。

# tmuxって？
- 端末仮想化ソフトウェア
- マルチプレクサ
- 仮想端末マネージャ

らしい。

まあ難しい単語は置いておいて、ざっくりと中身書くと、
MACのiterm2や、WindowsのRLogin等にあるタブ切り替えができるもので、更に作業内容(各セッションの内容)をサーバーで保持してくれるものです。

# tmuxでできること
とりあえず以下ができます

- サーバー上で開いているファイルやその他作業内容を保持
- タブ(のような)機能有り
- 画面分割可能 ( pane )
- サーバーの方で保持しているので、会社から自宅に移っての作業もそのまま可能
    + 同じユーザーであれば、同じ作業状況のまま保存できる。
- いきなり切断切れても大丈夫！←**ここ重要**
- tmuxのネストが可能 ( tmuxの上でtmuxってことも可能 )
    + 踏み台サーバーでtmux起動して、サーバーAにssh接続後にtmuxで作業。な感じが可能
- 同じようなソフトウェアの screen よりもいいらしい ( screen使ったことないですはい。)
- tmuxセッションの保持をしているので、ある作業の時は 0番セッション。ある作業の時は 1番セッション。のように切り替えられる。

# tmuxの構成
    tmux(server)
    ↓
    session, session, session, ...
    ↓
    tab, tab, tab, ...
こんな構成になっています。
実際使用するとsessionの中でタブ切り替えつつ作業している感じになります。

# インストールしてみようか
CentOS ならepelリポジトリにあるので、yumで一発

    $ rpm -i http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
    $ yum -y install tmux

Mac ならHomebrewにあるのでこちらもサクッと。

# 触ってみようか

    # インストール時にサンプルが入っているので設定ファイルの参考に。
    /usr/share/doc/tmux-{$version}/examples/以下いろいろファイルがある

    # 設定ファイル
    ~/.tmux.conf

    # 設定ファイルに記述するキーバインド ( 初期のprefixはCtrl+b。自分はCtrl+jを設定してる )
    set-option -g prefix C-j

以下tmuxコマンド例。他にもいろいろあります。

    # tmuxセッション立ち上げ
    tmux
    # 最後に起動したセッションにアタッチ
    tmux a
    # セッション番号指定してアタッチ
    tmux a -t {$id}
    # セッション一覧
    tmux ls
    # セッション削除 ( 番号ないと、最後のセッション削除 )
    tmux kill-session -t {$id}

tmux session 内でtmux周りに命令出したいときには基本的に prefix が必要です。

    # 主に使用しているコマンド
    prefix + p ( タブID-1 タブ番号 1 の場合は一番大きい番号へ )
    prefix + n ( タブID+1 一番大きい番号では タブ番号 1 へ )
    prefix + c ( 新規でタブ作成。1,2,3があって 2を消した後に作成すると 2 を作成する )
    [Ctrl + d] や [$ exit] 等のセッション切断で、現在のタブ削除
    prefix + d ( セッションのデタッチ。tmux セッションから切断。セッション自体は残る )
    prefix + % ( 現在のタブを縦分割する。ペインと呼ばれる )
    prefix + " ( 現在のタブを横分割する。ペイント呼ばれる )


# 雰囲気だけでもわからないかなーと思い画像をだらだらと。
![tmux_new.png](https://qiita-image-store.s3.amazonaws.com/0/116667/00d38ac3-690e-bd5b-0631-99283fe64b43.png)
tmux と打つと上記画像のように初期設定では画面下側に帯が出ます。

![tmux_tab.png](https://qiita-image-store.s3.amazonaws.com/0/116667/1271baa1-afb1-ceb5-f5cf-c8e3b8bbff6c.png)
タブを増やした状態

![tmux_v_pane.png](https://qiita-image-store.s3.amazonaws.com/0/116667/936071e2-8b6d-9881-b6fc-17eee8f700dc.png)
ペイン分割 その1
![tmux_h_pane.png](https://qiita-image-store.s3.amazonaws.com/0/116667/a77b6138-a0cc-b18e-653d-bedf4cac684c.png)
ペイン分割 その2

![tmux_ls.png](https://qiita-image-store.s3.amazonaws.com/0/116667/da55bef1-71c0-aab2-a895-50f78ff67a7a.png)
tmux session一覧

![tmux_on_tmux.png](https://qiita-image-store.s3.amazonaws.com/0/116667/afede8a5-5c15-d3c6-01c8-89879129e6f2.png)
tmux 上で tmux を行ってみるとこんな感じ。
親tmuxと子tmuxでprefix変えられるので、prefixの競合が起きようなことはないのでご安心を。(設定は各自ググってね)

# ちなみに
tmuxは常駐アプリケーションなので、tmuxを動かしている(tmux serverが立ち上がっている)環境を再起動してしまうと、tmux server が削除されてしまいますので、「1日1回サーバー再起動する」とか「Macでtmux使用しているが、PC使用後は必ずシャットダウンしている」などのケースではtmux serverが削除されてしまうので、作業保持のメリットがなくなってしまいます。。
とは言ってもわざわざ新しくssh接続を増やすようなことをしなくて良いので、上記のようなケースで作業内容が保持できなくても作業効率のUPには繋がるかと。

# 終わり
画像の部分雰囲気掴めなかったらごめんちゃい

Qiitaにも他のブログでもtmuxを深く取り扱っている記事がたくさんありますので、使ってみようと思ってみた方は変態(褒め言葉)な使い方をしているものを探してみてはいかがでしょうか。