明けましておめでとうございます、永井です。
本年も「カルテットコミュニケーションズ技術ブログ」共々宜しくお願い致します。

弊社開発部では電源を落とす代わりに、退社時に「スリープ状態」にしてから退社する人がほとんどです。
翌日出社して作業を始める時は、「スリープ状態」から復旧するだけなので、画面上に前日の作業状態がそのまま残っており、とてもスムーズに作業に入れることができるので、個人的にもとても気に入っています。

しかし、OSのアップデートやマシンの調子が悪くなった時など、電源を落としたり再起動したい場面は度々あります。
またラップトップを使用している場合などは、移動時に電源を落とすことが多いのではないでしょうか。 (私は落とします)

私の場合、普段立ち上げているアプリケーションは、多くないのでもう一度立ち上げ直すのはあまり苦ではありません。
しかし、ターミナル上で動かしているtmuxで開いたWindowやPaneをもう一度セッティングするのは、少しばかり入り組んでいてとても面倒に感じます。
そもそも全てのWindowがどんな状態だったかなんて、覚えていませんし・・・。

そこでtmux-resurrecttmux-continuumの出番です。

tmux-resurrectとtmux-continuum

tmux-resurrectとは、tmux環境の保存&復旧を行うtmuxのプラグインです。
具体的には、特定のコマンドを実行することでtmuxのセッション情報を保存&復旧してくれます。

tmux-continuumとは、tmux-resurrectを自動的に操作するtmuxのプラグインです。
設定することで、tmux-resurrectを手動で操作することなく、tmux環境の保存や復旧を行うことができるようになります。

この2つを使うことで、電源を落としても以前の状態に簡単に復旧することが可能になります。

tpm (Tmux Plugin Manager)を使ってインストール

tmux-resurrectとtmux-continuumをインストールする手順には、Tmux Plugin Manager(tpm)の利用が推奨されています。

tpmとは、tmux向けのパッケージ管理ツールです。
他のパッケージ管理ツールと同様で、設定ファイル(.tmux.conf)に必要なパッケージを記入すれば、コマンド一発でパッケージのダウンロード&インストールを行ってくれます。

.tmux.confファイルは下記のように修正します。

+ # List of plugins
+ set -g @plugin 'tmux-plugins/tpm'
+ set -g @plugin 'tmux-plugins/tmux-sensible'
+
+ # Other examples:
+ # set -g @plugin 'github_username/plugin_name'
+ # set -g @plugin 'git@github.com/user/plugin'
+ # set -g @plugin 'git@bitbucket.com/user/plugin'
+
+ # Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
+ run '~/.tmux/plugins/tpm/tpm'

そして、プラグインのインストールは以下のtmuxコマンドです。

(prefix) + I

ちなみにアップデートは

(prefix) + U

となります。

tmuxプラグイン

2016年1月現在、25個前後あります。
tmux-plugins

中には便利なプラグインがたくさんありますので、良かったら一度チェックしてみてはどうでしょうか。
tmux-yankなどは個人的にオススメです。

設定例

自分はこんな感じで設定しています。

# continuum
set -g @continuum-restore 'on'

# resurrect
set -g @resurrect-strategy-vim 'session'
set -g @resurrect-processes 'mysql ssh php'

@continuum-restore 'on'で、tmuxというコマンドを実行すれば、自動的にリストアしてくれます。
@resurrect-strategy-vim 'session'で、vimのセッションを保存&復旧してくれます。
@resurrect-processesで、特定のプログラムの保存&復旧してくれます。

この例だとmysql ssh php のプロセスが保存&復元対象になります。
具体的には

  • 保存時に立ち上げていたmysqlクライアントが立ち上がる
  • 保存時に立ち上げていたPHPのビルトインサーバが、同じアプリケーションを対象に立ち上がる
  • sshで接続していたら、同じ接続先に接続された状態で復旧する

みたいなことがおきます。

もちろん保存時のプロセスがそのまま復旧するという訳ではなく、プロセスを起動する為に実行したコマンドを保存しているという感じです。

なので

Mysqlクライアントの中で実行中だったSQLの処理が、停止時点の続きから実行される

様なことは当たり前ですが出来ません。

その他の機能

他にも

  • 自動保存する間隔のカスタマイズ
  • マシン起動時に、自動的にターミナルを起動する
  • Vimの代わりにNeovimのセッションを保存&復旧する

などが出来ます。

まとめ

「スリープ状態からの復旧」の様なことは出来ませんが、ある程度は復旧してくれるので、一からセッティングし直すのと比較するとかなり楽になるかと思います。

また、tmuxに関しては、tmux.confで見た目を少しカスタマイズする程度であまり弄ってきませんでしたが、プラグインが思った以上に充実しているのを知ってびっくりしました。
まだまだ使ったことのないプラグインがたくさんあるので、いろいろ試してtmuxをどんどん便利に使えたらと思います。

今回紹介したプラグインを利用しなくても、「tpm」を利用して.tmux.confを整理するだけでも、すっきりしてオススメです。