tmuxinatorで一瞬で開発環境を起動する

前回はdr6kaizさんのpow + rbenvで手軽なRack環境構築でした。

今回はtmuxinatorを使って、コマンド一発で開発環境を起動する話をします。

tmuxinator とは

tmuxinatorとは、tmuxで起動するセッションを予め定義しておき、コマンド一発でそのセッションを起動できるようにしたものです。ちなみに、screenで同じことをするscreeninatorというツールもあります。こちらが先に開発されたようです。

インストール

$ cd
$ gem install tmuxinator
$ echo "[[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator" >> .zshrc
$ source .zshrc
$ echo $EDITOR
/usr/bin/vi
$ echo $SHELL
/bin/zsh
  • tmuxinatorはgemで提供されているので、gem installします。
  • その後、補完スクリプトを.zshrc.bashrcに追加して読み込みます。
  • tmuxinatorは環境変数$EDITOR$SHELLを使うそうなので、確認しておきます。

設定

$ mux new cui-aboutme
  • tmuxinatorとそのaliasのmuxというコマンドが用意されています。
  • mux new [project name]でプロジェクトの設定ファイルを作成します。
  • このコマンドを実行すると、$EDITORで設定されたエディタで以下のような設定ファイルが開きます。
# ~/.tmuxinator/sample.yml
# you can make as many tabs as you wish...

project_name: Tmuxinator
project_root: ~/code/rails_project
socket_name: foo # Not needed.  Remove to use default socket
rvm: 1.9.2@rails_project
pre: sudo /etc/rc.d/mysqld start
tabs:
  - editor:
      layout: main-vertical
      panes:
        - vim
        - #empty, will just run plain bash
        - top
  - shell: git pull
  - database: rails db
  - server: rails s
  - logs: tail -f logs/development.log
  - console: rails c
  - capistrano:
  - server: ssh me@myhost
  • rvmで利用するrubyのバージョンを指定したり、preでセッション起動時に実行するコマンドを指定できたりします。
  • tabsでセッション内で起動するウィンドウを定義します。この初期設定だと、8つウィンドウを起動します。
  • tabs内では、editorshellといったキーがウィンドウ名を表し、値がそのウィンドウが起動したときに実行されるコマンドとなります。この初期設定だと、セッション起動と同時に8つのウィンドウが起動して、自動的にgit pullしたりrails sしたりsshしたりします。
  • layoutpanesで、そのウィンドウ内のペインとその配置を定義します。editorを例にとると、ウィンドウ内にvimのペインと何もしないペインとtopのペインがmain-verticalで表示されます。

起動

$ mux cui-aboutme
  • このコマンド一発で、上記で設定したセッションを起動します。
  • 起動と同時に設定されたコマンドも自動で実行されます。

カスタマイズ例

# ~/.tmuxinator/sample.yml
# you can make as many tabs as you wish...

project_name: cui-aboutme
project_root: ~/workspace/rails/cui-aboutme
tabs:
  - main:
      layout: tiled
      panes:
        - git fetch --prune && git status --short --branch
        - curl http://cui-about.me/users
        - tig
  - vim: vi
  - app:
      layout: even-horizontal
      panes:
        - rails c
        - powder log
  - test: guard
  • 僕の場合は「tigを中心としたgitの作業をするウィンドウ」「エディタのウィンドウ」「コンソールやログをみるウィンドウ」「自動テストを行うウィンドウ」の4つを一度に起動できるようにしてます。
  • あと、起動時にgit fetchでリポジトリの更新を確認したり、guardで自動テストを開始したりしてます。

tips

  • 一度に同時に起動するウィンドウを一度にすべて閉じるための設定
bind-keys C-b kill-session
  • 複数のプロジェクトに共通する設定は~/.tmuxinator/default.ymlで設定できます。

おまけ

  • テキストベースの自己紹介サービスcui-about.meやってます。よかったらどうぞ。