tmux + tmuxinator が便利
最近ローカルの開発環境を Ubuntu 12.10 に上げていろいろ弄っていたのですが、遅ればせながらやっと導入してみた tmux + tmuxinator がかなり便利だったのでご紹介。
tmux は GNU screen などと同様のターミナルマルチプレクサと呼ばれるソフトウェアです。
tmuxinator はその tmux のセッション(いろいろな作業用ウインドウの組合せ)を予め定義しておき、一回のコマンド入力で定義したセッションを起動できるようにしてくれるツールです。
サーバマシンであれば滅多にシャットダウンや再起動はしないと思うので、基本的にはアタッチ、デタッチしか使わないため、あまりメリットが感じられないかも知れません。
とはいえ、ローカル環境では Linux といえどもシャットダウンや再起動したくなる事も多いので、tmuxinator を使っているのと使っていないのとでは開発環境の復元(起動)の手間が天と地ほどと言っても過言ではないと思います。
ちなみに今まではずっと GNU screen を使っていたんですが、screen にも同様の screeninator というツールがあるんですね。
jondruse/screeninator
https://github.com/jondruse/screeninator
もっと早く知っておけば良かった・・・。
tmuxinator についてはこちらの記事の通りに設定しました。
tmuxinatorで一瞬で開発環境を起動する #Ruby #開発環境 #AdventCalendar #tmux - Qiita
http://qiita.com/items/869b00fdde27c2225989
やったことはこのままなんですが、一応自分がやった時の手順を記しておきます。
環境は Ubuntu 12.10 になります。
また、tmuxinator は gem で提供されているので、Ruby がインストールされている必要があります。
tmux のインストール
まずは tmux 本体をインストールします。
% sudo apt-get install tmux
screen に慣れているので、キーバインドを screen 風に変更しました。
以下のファイルをコピーすれば screen と同じキーバインドになります。
% cp /usr/share/doc/tmux/examples/screen-keys.conf ~/.tmux.conf
マウスホイールによるスクロールバックなどを行えるようにするため、コピーした設定ファイルを編集します。
% vi ~/.tmux.conf
以下を追記しました。
# kill session bind C-b kill-session # copy mode set-window-option -g mode-keys vi # mouse setting set-window-option -g mode-mouse on set-option -g mouse-select-window on set-option -g mouse-select-pane on set-option -g mouse-resize-pane on
これで tmux については完了です。
tmuxinator
gem からインストールします。
% gem install tmuxinator
インストールが完了したら、インストール後に表示される指示に従って初期設定を行います。
% echo "[[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator" >> ~/.zshrc % source ~/.zshrc
tmuxinator は環境変数 $EDITOR と $SHELL を使用しているそうです。
確認したところ、手元の環境では $EDITOR のみ設定されていなかったので .zshenv に以下の行を追加しました。
% echo 'export EDITOR=/usr/bin/vi' >> ~/.zshenv
追加したら忘れずに再読込みしておきます。
% source ~/.zshenv
設定されているかを確認します。
% echo $EDITOR $SHELL /usr/bin/vi /usr/bin/zsh
両方とも値が表示されているので問題なさそうです。
これでインストールは完了しました。
tmuxinator のプロジェクトを作成
早速 tmuxinator のプロジェクトを作成してみます。
プロジェクトの作成には [mux new プロジェクト名] というコマンドを実行します。
ここではとりあえず devel というプロジェクト名にしました。
% mux new devel
実行すると $EDITOR に設定したエディタで ~/.tmuxinator ディレクトリ以下に作成された yml ファイルが開きます。
# ~/.tmuxinator/devel.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
これらの値を適当に自分好みにカスタマイズしていきます。
tabs が tmux のウインドウ定義、panes が tmux のペイン定義です。
tabs の下の - に続く文字(:の前まで)はウインドウの名前として使用されます。
その後に続くのはそのウインドウで起動時に実行しておくコマンドになります。
panes の方は名前が付けられない点が異なるだけで、同じく実行しておくコマンドを記述しておきます。
ここでは以下のような感じで変更してみました。
# ~/.tmuxinator/devel.yml # you can make as many tabs as you wish... project_name: devel project_root: ~/ tabs: - editor: layout: main-vertical panes: - vim - #empty, will just run plain bash - top - shell: cd ~/src/ruby/ - database: mysql -uroot -p
設定が完了したら保存してエディタを終了し、[mux プロジェクト名] コマンドを実行して tmux を起動します。
% mux devel
これで以下のように予め定義した設定通りに tmux のセッションが起動されます。
一度行った定義を後から変更したくなった場合は、一旦 tmux のセッションを終了(デタッチではなく終了)し、先ほどの設定ファイルを再度開いて変更すれば OK です。
実際にはプロジェクト毎や開発言語毎に予め設定を複数作成しておくといい感じです。
すごく便利なので、ぜひ一度使用してみることをお勧めします。