以下の内容はhttps://khasegawa.hatenablog.com/entry/2024/09/05/070000より取得しました。


tmuxistを見直してv1リリースした話

個人でTmuxのセッション管理を行うためのツールとしてtmuxistというのを6年前から細々と開発・使用しています。

github.com

今回はそのtmuxistを区切りとしてv1リリースした話です。

TL;DR

  • 設定ファイルの位置を変更
    • $HOME/.config/tmuxist/{PROFILE}.toml -> $PWD/tmuxist.toml
    • Profile制の廃止
  • コマンド体系の整理
    • Profile制のためのedit, delete, list, printを廃止
    • start,attachをstartのみに統合
    • init, start, killの3種類のみ変更
  • これらを反映したものをv1としてリリースした

tmuxistとは

冒頭でも紹介しましたが、簡単に言うとTmuxinatorのようなツールになります。
2017年まではこちらを利用していたんですが、Rubyがインストールされていない環境で作業することが個人的には多くシングルバイナリで動作するようなものを探しており、当時はあまりなかったので自作していました。

github.com

実際にはTmuxinatorのような豊富な機能はなく、個人的にあれば十分な機能としては以下のようなものになります。

  • 指定した設定通りにウィンドウ・ペインが一括で起動
  • 各ペインでは指定したコマンドが自動実行

tmuxistはこれらを目指すために最小限で開発していたツールになります。

# v1では主なコマンドはこの3種類のみ

# 設定ファイルの作成
tmuxist init

# tmuxの起動・既存sessionへのアタッチ 
tmuxist start

# tmux sessionの停止
tmuxist kill

ユースケース

複数台のサーバー同時操作

最近はほぼ全ての環境がコンテナなので仕事でのユースケースとしては減りましたが、 自宅鯖は同じ構成が複数台でクラスタを組んでいます。
そういった構成の時に全く同じ操作を各サーバで利用したい場合に設定ファイルを要してtmuxist経由で起動して行うことが容易です。

# tmuxist.toml
[[windows]]
layout = "tiled"
sync = true
[[windows.panes]]
command="""
ssh server1
"""
[[windows.panes]]
command="""
ssh server2
"""
[[windows.panes]]
command="""
ssh server3
"""
[[windows.panes]]
command="""
ssh server4
"""

この例では

  1. 4つのペインをタイル表示
  2. ペインごとに各サーバへSSH接続
  3. 最後にペインの入力同期を有効

ということをしています。
こうすることで、複数台のサーバへの接続が容易でかつ同じ操作を行うことが容易にできます。

開発環境の起動

こちらのユースケースとしては、Foremanが近いかもしれません。
Foremanでは、Procfileに書かれた通りのコマンドを実行してプロセスを管理してくれます。
これと似たようなことをtmuxistでやろうということになります。

例えば、何らかのアプリを開発する場合、私はいつも

  • Window1 ... アプリケーション起動用
  • Window2 ... シェル操作用

といったWindowに分けて操作することが多いです。
これをtmuxistでは、

# tmuxist.toml
# Window1
[[windows]]
[[windows.panes]]
command="""
bundle install;
yarn install;
bin/dev
"""

# Window2
[[windows]]
[[windows.panes]]

のように定義することで簡単に起動することができます。

v0.0 -> v1.0までの変更内容

設定ファイル

元々のv0.0系では、$HOME/.config/tmuxist配下に{PROFILE_NAME}.tomlというファイルを管理する方式でした。
ですが、環境によってはユーザー名も違うこともあり、dotfilesでの同期がやや難しく、また別の人間が同じ構成を復元したい場合でも気軽にやりたいといったケースがでてきました。

そのため、v0.1系でコマンド実行時のカレントディレクトリにあるtmuxist.tomlを参照するように変更しました。
こうすることで同じレポであれば同じ設定で誰でも気軽に復元できるようになりました。

もちろん、これはメリデメありますが、マイクロサービスでの開発を行う場合にまとめて起動しやすくなるメリットを優先しての実装です。

そのうち任意のパスを指定して読み込めるようにするかもしれません。
tmuxist start -f $(closest tmuxist.toml)のような 形で。

コマンド体系

設定ファイルで説明したように元々$HOME/.config/tmuxistにProfileごとに設定ファイルを配置していた都合で、
設定ファイルの編集・削除・表示や、Profile一覧といったコマンドを実装していました。
しかし、v0.1系に伴って不要になったので削除しました。

また、v0.0系では起動のstartと、既存セッションへのattachが別々のコマンドとして存在しており、やや操作が煩雑になってしまたっため、これらを統合してstartのみにしました。
こうすることで自分を含めたユーザーが覚えるコマンドが少なくなるのでメリットになりますね。

まとめ

Tmuxを利用していて、いつも起動するパターンがある場合は、Tmuxinatorやこのtmuxistを使ってみてください。
自分が使う用のツールとして開発していることがメインで、特にIssueもないので自分が必要な時に必要な変更を行っていくと思いますが、
もし意見・要望があれば気軽に日本語で問題ないのでIssueをあげてください。




以上の内容はhttps://khasegawa.hatenablog.com/entry/2024/09/05/070000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14