ワークフロー

実務で役に立つtmuxのワークフロー例を紹介します。

開発環境セットアップスクリプト

基本的なセットアップ

#!/bin/bash
# setup-dev-session.sh

SESSION="dev"
PROJECT_DIR="$HOME/projects/myapp"

# セッション作成
tmux new-session -d -s $SESSION -c $PROJECT_DIR

# ウィンドウ作成
tmux new-window -t $SESSION -n "editor"
tmux new-window -t $SESSION -n "server"
tmux new-window -t $SESSION -n "logs"

# editor ウィンドウでvimを起動
tmux send-keys -t $SESSION:editor "vim ." Enter

# server ウィンドウでサーバーを起動
tmux send-keys -t $SESSION:server "npm start" Enter

# logs ウィンドウでログを監視
tmux send-keys -t $SESSION:logs "tail -f logs/app.log" Enter

# セッションに接続
tmux attach -t $SESSION

複数プロジェクト対応版

#!/bin/bash
# setup-project.sh <project-name>

if [ -z "$1" ]; then
    echo "使用方法: $0 <project-name>"
    exit 1
fi

SESSION=$1
PROJECT_DIR="$HOME/projects/$SESSION"

if [ ! -d "$PROJECT_DIR" ]; then
    echo "エラー: $PROJECT_DIR が見つかりません"
    exit 1
fi

# 既存セッションを確認
if tmux has-session -t $SESSION 2>/dev/null; then
    echo "既存セッション '$SESSION' に接続"
    tmux attach -t $SESSION
    exit 0
fi

# 新規セッション作成
tmux new-session -d -s $SESSION -c $PROJECT_DIR

# ウィンドウ設定
tmux new-window -t $SESSION -n "edit" -c $PROJECT_DIR
tmux new-window -t $SESSION -n "run" -c $PROJECT_DIR
tmux new-window -t $SESSION -n "test" -c $PROJECT_DIR

# 初期コマンド実行
tmux send-keys -t $SESSION:edit "vim" Enter
tmux send-keys -t $SESSION:run "npm start" Enter

# セッションに接続
tmux attach -t $SESSION

ペイン分割ワークフロー

フロントエンド開発環境

#!/bin/bash

SESSION="frontend"
PROJECT="$HOME/projects/react-app"

tmux new-session -d -s $SESSION -c $PROJECT

# 左側にエディタ、右側にターミナル
tmux split-window -h -t $SESSION

# 右側をさらに分割(上:実行、下:ツール)
tmux split-window -v -t $SESSION:0.1

# 各ペインでコマンド実行
tmux send-keys -t $SESSION:0.0 "vim src/" Enter           # エディタ
tmux send-keys -t $SESSION:0.1 "npm start" Enter          # 開発サーバー
tmux send-keys -t $SESSION:0.2 "npm test -- --watch" Enter # テスト

tmux attach -t $SESSION

結果:

┌────────────────────┬──────────────────┐
│   エディタ        │   実行サーバー    │
│                   ├──────────────────┤
│                   │  テスト(watch)  │
└────────────────────┴──────────────────┘

リモートサーバー管理

複数サーバーのセッション

#!/bin/bash

SESSION="servers"

tmux new-session -d -s $SESSION

# 各サーバーに接続
tmux new-window -t $SESSION -n "prod" -c ~
tmux send-keys -t $SESSION:prod "ssh user@prod.example.com" Enter

tmux new-window -t $SESSION -n "staging" -c ~
tmux send-keys -t $SESSION:staging "ssh user@staging.example.com" Enter

tmux new-window -t $SESSION -n "dev" -c ~
tmux send-keys -t $SESSION:dev "ssh user@dev.example.com" Enter

tmux attach -t $SESSION

作業の切り替え

複数プロジェクトを管理

# 複数のセッションを同時に管理
tmux new-session -d -s project-a -c ~/projects/a
tmux new-session -d -s project-b -c ~/projects/b
tmux new-session -d -s project-c -c ~/projects/c

# セッション一覧
tmux ls

# プロジェクト切り替え(Ctrl+b s で表示される選択画面から選択)
tmux attach -t project-a

セッション内では Ctrl+b s でセッション選択画面を表示できます。

デバッグセッション

テスト・デバッグ環境

#!/bin/bash

SESSION="debug"
PROJECT="$HOME/projects/app"

tmux new-session -d -s $SESSION -c $PROJECT

# ウィンドウ1:テスト実行
tmux send-keys -t $SESSION "npm test" Enter

# ウィンドウ2:ログ監視
tmux new-window -t $SESSION -n "logs"
tmux send-keys -t $SESSION:logs "tail -f logs/*.log" Enter

# ウィンドウ3:デバッガー
tmux new-window -t $SESSION -n "debug"
tmux send-keys -t $SESSION:debug "node --inspect-brk dist/index.js" Enter

# ウィンドウ4:コマンドラインツール
tmux new-window -t $SESSION -n "cli"

tmux attach -t $SESSION

定期的なモニタリング

ログ監視・リソース確認

#!/bin/bash

SESSION="monitor"

tmux new-session -d -s $SESSION

# リソース監視
tmux split-window -h -t $SESSION
tmux send-keys -t $SESSION:0.0 "watch -n 1 'ps aux'" Enter
tmux send-keys -t $SESSION:0.1 "watch -n 1 'df -h'" Enter

# ウィンドウ1:ログ監視
tmux new-window -t $SESSION -n "logs"
tmux split-window -h -t $SESSION:1
tmux send-keys -t $SESSION:1.0 "tail -f /var/log/app.log" Enter
tmux send-keys -t $SESSION:1.1 "tail -f /var/log/error.log" Enter

tmux attach -t $SESSION

シェル関数で快速アクセス

.bashrc または .zshrc に追加:

# プロジェクトに素早くアクセス
work() {
    local project=$1
    if [ -z "$project" ]; then
        echo "セッション一覧:"
        tmux ls
    else
        tmux attach -t "$project" || tmux new-session -s "$project" -c "$HOME/projects/$project"
    fi
}

# 使用例
# work
# work myproject

.tmux.confでクイックセッション

# ~/.tmux.conf

# セッション作成クイーコマンド
bind C-n new-session -s dev -d -c ~/projects/current \; attach -t dev

# セッション一覧ジャンプ
bind s choose-session

ベストプラクティス

  1. プロジェクトごとのセッション: 異なるプロジェクトは異なるセッションで管理
  2. セッション名の規約: 短くわかりやすい名前(proj-a より a など)
  3. スクリプト化: 繰り返しの作業はスクリプト化
  4. .tmux.conf の活用: よく使うキーバインドをカスタマイズ
  5. ウィンドウ名の統一: チーム内で命名規則を統一

参考リンク