📕
【tmux】smugを利用したワークフロー管理及び自動化
- 普段tmuxを利用して複数端末を起動した状態で作業することが多い。
- 非常に便利だが、以下の点を解消するべく調査。
- 定型作業の自動化
- 同様のサーバー接続や複数画面分割等の定型的なtmuxワークフローの手間。
- プロジェクトや作業単位での管理
- 日々行なっている複数作業の内容の把握が難航。
- 定型作業の自動化
- 調査の結果、複数の類似プロジェクトがあるが比較的導入が容易であろうsmugというツールがあったため、今回は利用方法を記録する。
概要
- Go製のtmuxワークフロー管理ツール
- ウィンドウやペイン分割数、起動コマンド等の単一のファイル(yaml)で管理可能。
- 同様のツールにRuby製のtmuxinatorがある。
- Github
結果
- 以下のように単一の構成ファイルを作成して、単一のコマンドでペインの分割や起動時のコマンドを管理することが可能。
環境
- Mac OS X 10.15.6
- tmux 3.2
手順
インストール
Mac
mkdir -p /tmp/work; cd $_
# GithubのReleaseから任意のバージョンを選択。wgetがなければcurlで代替。
wget https://github.com/ivaaaan/smug/releases/download/v0.2/smug_0.2_Darwin_x86_64.tar.gz
tar -xzf smug_0.2_Darwin_x86_64.tar.gz
mv smug /usr/local/bin
rm -rf /tmp/work; cd /tmp
その他
- その他のインストールはこちらを参照。
ワークフローの定義
-
普段の作業を要件として定義する必要があるため、今回利用する簡単な例は以下。
- Dockerを開発環境とするsampleプロジェクトが対象
- 4画面に分割。
- 1画面 : コンテナ接続画面。接続している状態である。
- 2画面 : ソースファイル編集画面
- 3画面 : ローカルの通常ターミナル
- 4画面 : Dockerfile編集画面
- 起動時にプロセス起動、終了時に終了
-
※対象プロジェクトではDockerを利用しているため、先に
docker-compose build
を済ましておく。
構成ファイルの作成
- ワークフロー定義後、それに従い以下の構成ファイルに記述。
-
~/.config/smug
ディレクトがない場合は新たに作成- ※このディレクト内に作成することで、実行時は
smug start session名
だけで良い。
- ※このディレクト内に作成することで、実行時は
- ※configディレクトリの作成が難しい場合、単一のyamlファイルを作成して実行時に
smug start -f ***.yml
として直接パスを指定すれば良い。
-
~/.config/smug/sample.yml
# セッション名
session: sample
# 対象ルートパス
root: ~/work/sample
# 起動前のコマンド指定
before_start:
- docker-compose up -d
# 終了時のコマンド指定
stop:
- docker-compose down
# ウィンドウ情報
windows:
- name: sample
layout: tiled # レイアウト情報(https://github.com/tmux/tmux/blob/2.7/layout-set.c)
commands: # 起動時のコマンド指定
- docker-compose exec sample bash
panes: # ペイン情報
- type: tiled # レイアウト情報
commands:
- vim Dockerfile
- type: tiled
commands:
- vim README.md
- type: tiled
commands:
- vim bin/ncname
実行
- 構成ファイル作成後、以下で開始。
smug start sample
- 停止するには以下のコマンドで実行
smug stop sample
結果
- 以下のようになっていれば完了。
まとめ
- 日々利用している定型作業を管理及び自動化できたため安心。
- こうしたわずかな地味な効率化が重要と実感。
- ただ日の浅いツールのため、様子を見ながらの利用を継続。
Discussion