tmuxのセッション管理を簡単にする「tmuxist」の紹介

こんにちは、K@zuki.です。

tmuxを使った開発環境の構築は便利ですが、毎回手動でウィンドウやペインを設定するのは面倒です。 実は約7年前から自分用に開発・使用している設定ファイルからtmuxセッションを自動生成できるtmuxistというツールがあります。

github.com

Claude Codeでtmuxを使う人が増えてきているので、改めて簡単に紹介できたらなと思っています。

tmuxistとは

tmuxistは、YAMLまたはTOMLの設定ファイルからtmuxセッションを自動的に作成・管理するツールです。
元々は2017年頃から自分の開発環境を効率化するために作り始めたツールで、長年使い続けながら改良を重ねてきました。

特徴としては、

  • 単一バイナリで配布可能、Ruby/Pythonのランタイム不要
  • 必要十分な機能に絞り、使いやすさを重視
  • 7年間の実使用で洗練された機能セット

といった形です。
tmuxinatorやtmuxpなどと比べると圧倒的に機能は劣りますが、必要最小限の機能で構成されていて、単一バイナリで動作させられるのでサーバで作業する場合でも便利です。
start というセッションを管理するコマンドがありますが、すでに起動しているセッションがあれば、簡単にセッションにアタッチもできるので、急にエディタが終了した場合にも重宝します。

インストール

Homebrew(macOS/Linux

brew tap corrupt952/tmuxist
brew install tmuxist

手動インストール

Releasesから各OS向けのバイナリをダウンロードしてください。単一バイナリなので、パスを通すだけで使えます。

機能

何度も紹介してるので詳細はGitHubを見てもらったらいいですが、簡単に説明します。

  • tmuxist init ... 設定ファイルの雛形を生成(YAML/TOML形式を選択可能)
  • tmuxist start ... 設定ファイルを読み込んでtmuxセッションを起動・もしくは起動済みのセッションへのアタッチ
  • tmuxist kill ... 設定ファイルで定義されたセッションを終了

特に重宝するのはtmuxist startでして、何度も説明しますがセッションへのアタッチが比較的容易であるのが便利です。

Claude Codeを利用する場合にここ数ヶ月私がどのプロジェクトにも入れているテンプレ設定ファイルは👇になるので、参考にしてみてください。 github.com

Grid記法によるレイアウト設定

さっき実装してきたんですが、従来のtmuxレイアウト設定はmain-verticaltiledなど、名前から実際の配置をイメージしづらいものでした。
tmuxist v1.2.0から、直感的なGrid記法が使えるようになりました。

name: development
windows:
  # 2x2のグリッドレイアウト
  - layout: "2x2"
    panes:
      - command: htop
      - command: docker stats
      - command: tail -f app.log
      - command: watch date

これは以下のようなレイアウトになります。

┌────────┬────────┐
│ htop   │ docker │
├────────┼────────┤
│ tail   │ watch  │
└────────┴────────┘

対応しているGrid記法は他にも以下のようなものがあります。

  • "2x2" - 2列×2行(4ペイン)
  • "3x2" - 3列×2行(6ペイン)
  • "4x1" - 4列×1行(横に4分割)
  • "1x4" - 1列×4行(縦に4分割)

また割合指定なども対応しているので、詳細はGitHubのREAMDEを見てみてください。

github.com

実際の使用例

基本的な設定(.tmuxist.yaml

name: my-project
root: ~/projects/myapp
windows:
  # エディタとサーバー
  - layout: main-vertical
    panes:
      - command: nvim
      - command: npm run dev
        size: "25%"

  # モニタリング
  - layout: "2x2"
    panes:
      - command: htop
      - command: docker stats
      - command: tail -f logs/app.log
      - command: watch -n 1 'netstat -tuln'

セッションの起動

# プロジェクトディレクトリで
tmuxist start

# カスタム設定ファイルを指定
tmuxist start -f custom-config.yaml

なぜ自作しているのか

7年前、既存のツール(tmuxinator等)を試しましたが、自作することに決めました。
理由はとても単純で

  • Ruby/Pythonの依存関係が煩わしい ... サーバー環境やCIでの利用時に問題になることが多かった

だけですね。
概ねどの環境でもRuby/Pythonが入ってるケースもあるんですが、コンテナ環境やCI、一部のminimalなサーバではツールのためだけにインストールするのが癪だったのでこのような形でやっています。

結果として、Go言語で必要最小限の機能に絞ったツールを作ることで、これらの問題を解決できいます。

競合ツールとの比較

tmuxistの最大の利点は、依存関係なしで動作することです。
CIパイプラインやDockerコンテナでも、バイナリを配置するだけで使えます。
逆にいえばそれ以外で秀でている点は皆無なので、人にtmux周りで聞かれた時は別のツールをおすすめすることが多いですね。

ツール 言語 依存関係 特徴
tmuxist Go なし シンプル
tmuxinator Ruby Ruby必須 最も人気
tmuxp Python Python必須 高機能

おわりに

tmuxistは「シンプルで高速、でも必要な機能は押さえている」をコンセプトに、7年間の実使用を通じて自分のために磨き上げてきたツールです。
特にGrid記法による直感的なレイアウト設定は、tmux初心者の方でも簡単にペインのレイアウトを組みやすくなっているかなと思います。
また、今後も時間があればアップデートしていくと思います。

自分用に作ったツールですが、同じような悩みを持つ方の役に立てば幸いです。
もしtmuxでの開発環境構築を効率化したい方は、ぜひ試してみてください。

GitHubでのフィードバック、コントリビューションもお待ちしています!