tmuxのwindow, pane設定を一発で再現できるtmuxinatorが便利

tmuxinator

まだPHPのIDEを使ったことが無くて開発にはターミナルでtmuxとVimを使っています。tmuxのwindowやpaneの設定を毎回手動で設定してましたがtmuxinatorを使えばこれをコマンド一発でやってくれます。

開発のときに習慣的に毎回やっていること

  1. tmux起動
  2. tmuxのwindowとpaneを好みの設定にする
  3. git pull
  4. 開発環境(VM)のvagrant up
  5. 開発環境(VM)にvagrant ssh
  6. 本番環境(EC2)にvagrant ssh
  7. 本番環境(EC2)のサーバ状態チェック
  8. アクセスログ,エラーログチェック

など意外に開発に取りかかるまでに毎回習慣的にやっていることがたくさんあります。これをコマンド一発で解決してくれるツールがtmuxinatorです。前々から興味あったんですが今更ながら試してみました。

tmuxinatorインストール

tmuxのバージョンは1.8推薦

$ tmux -V
tmux 1.8

gemでインストールするので確認

$ gem -v
2.0.0

インストール

$ gem install tmuxinator
Fetching: tmuxinator-0.6.6.gem (100%)

    __________________________________________________________
    ..........................................................

    Thank you for installing tmuxinator.

    Make sure that you've set these variables in your ENV:

      $EDITOR, $SHELL

    You can run `tmuxinator doctor` to make sure everything is set.
    Happy tmuxing with tmuxinator!

    ..........................................................
    __________________________________________________________
  
Successfully installed tmuxinator-0.6.6
Fetching: tzinfo-0.3.38.gem (100%)
Successfully installed tzinfo-0.3.38
Fetching: atomic-1.1.14.gem (100%)
Building native extensions.  This could take a while...
Successfully installed atomic-1.1.14
Fetching: thread_safe-0.1.3.gem (100%)
Successfully installed thread_safe-0.1.3
Parsing documentation for tmuxinator-0.6.6
Installing ri documentation for tmuxinator-0.6.6
Parsing documentation for tzinfo-0.3.38
Installing ri documentation for tzinfo-0.3.38
Parsing documentation for atomic-1.1.14
unable to convert "\xCF" from ASCII-8BIT to UTF-8 for lib/atomic_reference.bundle, skipping
Installing ri documentation for atomic-1.1.14
Parsing documentation for thread_safe-0.1.3
Installing ri documentation for thread_safe-0.1.3
Done installing documentation for tmuxinator, tzinfo, atomic, thread_safe (2 sec).
4 gems installed

環境変数EDITORとSHELLを使うので設定

export EDITOR='vim'
export SHELL='zsh'

SHELLごとに用意されたtmuxinator設定ファイルをコピー。bashの場合はtmuxinator.bash

wget https://raw.github.com/aziz/tmuxinator/master/completion/tmuxinator.zsh
mv tmuxinator.zsh ~/.tmuxinator
echo 'source ~/.tmuxinator/tmuxinator.zsh' >> ~/.zshrc

すべてYESになっていればインストール完了

$ mux doctor                                                                  
Checking if tmux is installed ==> Yes
Checking if $EDITOR is set ==> Yes
Checking if $SHELL is set ==> Yes

よく使うコマンド

プロジェクト作成

mux new [project]

プロジェクト起動

mux [project]

プロジェクト設定ファイル編集

mux open [project]

プロジェクト削除

mux delete [project]

サンプル

mux new sample

以下のような設定にしてみます。

# ~/.tmuxinator/sample.yml

name: sample
root: ~/

windows:
  - window1:
      layout: tiled
      panes:
        - pane1:
          - cd ~
          - echo "it's pane1" > pane1
          - vim pane1
        - pane2:
          - cd ~
          - echo "it's pane2" > pane2
          - emacs pane2
  - window2:

プロジェクト実行

mux sample

こんな感じになります。

設定のとおりにwindowが生成されて、paneごとのコマンドもしっかり実行されています。

layoutはtmuxのデフォルトの

  • main-horizon
  • even-horizon
  • main-vertical
  • even-vertical
  • tiled

から選ぶか、例えばもし仮に以下の様な複雑なレイアウトにしたい場合は

以下のコマンドを入力して

$ tmux list-window
0: window1* (7 panes) [111x36] [layout be07,111x36,0,0[111x17,0,0{55x17,0,0,26,55x17,56,0[55x8,56,0,29,55x8,56,9,30]},111x18,0,18{55x18,0,18[55x9,0,18,28,55x8,0,28,32],27x18,56,18,31,27x18,84,18,33}]] @11 (active)

layout部分をコピペして設定ファイルを書き換えます。

# ~/.tmuxinator/sample.yml

name: sample
root: ~/

windows:
  - window1:
      layout: be07,111x36,0,0[111x17,0,0{55x17,0,0,26,55x17,56,0[55x8,56,0,29,55x8,56,9,30]},111x18,0,18{55x18,0,18[55x9,0,18,28,55x8,0,28,32],27x18,56,18,31,27x18,84,18,33}]
      panes:
        - pane0:
          - vim
        - pane1:
          - vim
        - pane2:
          - vim
        - pane3:
          - vim
        - pane4:
          - vim
        - pane5:
          - vim
        - pane6:
          - vim

再度mux sampleすると

ちゃんと再現されています。これはすごいぞ!

このブログ関係で何かやる時のtmuxinator設定はこんな感じになりました。

# ~/.tmuxinator/tactosh.yml

name: tactosh
root: ~/tactosh.com

pre:
  - cd ~/dotfiles
  - git pull origin master
  - cd ~/tactosh.com/vagrant
  - git pull origin master
  - cd ~/tactosh.com/vagrant/vb
  - vagrant up
  - cd ~/tactosh.com

windows:
  - WordPress:
      layout: 720a,204x51,0,0{102x51,0,0,44,101x51,103,0,46}
      panes:
        - Vim:
          - cd wp-content/themes/tactosh
          - vim -c VimFiler
        - Git:
          - git status
  - VirtuelBox:
      layout: 2f05,204x51,0,0{107x51,0,0,4,96x51,108,0[96x25,108,0,9,96x25,108,26,47]}
      panes:
        - Vim:
          - cd vagrant/vb
          - vim Vagrantfile
        - SSH:
          - cd vagrant/vb
          - vagrant ssh
        - Zsh:
          - cd vagrant/vb
  - AwsEC2:
      layout: 2f05,204x51,0,0{107x51,0,0,4,96x51,108,0[96x25,108,0,9,96x25,108,26,47]}
      panes:
        - Vim:
          - cd vagrant/aws
          - vim Vagrantfile
        - SSH:
          - cd vagrant/aws
          - vagrant ssh
        - Zsh:
          - cd vagrant/aws
  - Log:
      layout: d070,204x51,0,0{82x51,0,0,16,121x51,83,0[121x25,83,0,59,121x12,83,26,60,121x12,83,39,63]}
      panes:
        - Top:
          - cd vagrant/aws
          - vagrant ssh
          - top
        - FrontAccessLog:
          - cd vagrant/aws
          - vagrant ssh
          - tail -f /var/log/nginx/front_access.log
        - FrontErrorLog:
          - cd vagrant/aws
          - vagrant ssh
          - tail -f /var/log/nginx/front_error.log
        - FastCGIErrorLog:
          - cd vagrant/aws
          - vagrant ssh
          - tail -f /var/log/nginx/fastcgi_error.log

pre:には最初に実行しておきたいコマンドをつらつら書いておきます。
サーバにssh接続してからサーバ上で実行したいコマンドも続けて書けるので非常に便利。

  • zx1986

    mux seems not work in v0.8.1