📕

【tmux】smugを利用したワークフロー管理及び自動化

2021/07/15に公開
  • 普段tmuxを利用して複数端末を起動した状態で作業することが多い。
  • 非常に便利だが、以下の点を解消するべく調査。
    • 定型作業の自動化
      • 同様のサーバー接続や複数画面分割等の定型的なtmuxワークフローの手間。
    • プロジェクトや作業単位での管理
      • 日々行なっている複数作業の内容の把握が難航。
  • 調査の結果、複数の類似プロジェクトがあるが比較的導入が容易であろうsmugというツールがあったため、今回は利用方法を記録する。

概要

  • Go製のtmuxワークフロー管理ツール
  • ウィンドウやペイン分割数、起動コマンド等の単一のファイル(yaml)で管理可能。
  • 同様のツールにRuby製のtmuxinatorがある。
  • Github

結果

  • 以下のように単一の構成ファイルを作成して、単一のコマンドでペインの分割や起動時のコマンドを管理することが可能。

sample.png

test.png

環境

  • 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

その他

  • その他のインストールはこちらを参照。

ワークフローの定義

  • 普段の作業を要件として定義する必要があるため、今回利用する簡単な例は以下。

    1. Dockerを開発環境とするsampleプロジェクトが対象
    2. 4画面に分割。
      • 1画面 : コンテナ接続画面。接続している状態である。
      • 2画面 : ソースファイル編集画面
      • 3画面 : ローカルの通常ターミナル
      • 4画面 : Dockerfile編集画面
    3. 起動時にプロセス起動、終了時に終了
  • ※対象プロジェクトでは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

結果

  • 以下のようになっていれば完了。

test.png

まとめ

  • 日々利用している定型作業を管理及び自動化できたため安心。
  • こうしたわずかな地味な効率化が重要と実感。
  • ただ日の浅いツールのため、様子を見ながらの利用を継続。

参考

Discussion