0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ghostty + tmuxでウィンドウごとにセッションを分ける方法

0
Last updated at Posted at 2026-02-10

はじめに

tmuxを使っている人だと、シェル起動時にtmuxへ自動で入る設定にしているケースは多いと思います。
これは便利なのですが、設定によってはウィンドウを複数開いたときに全ウィンドウが同じセッションへ接続され、表示や操作が同期してしまうことがあります。

方針

この記事では、macOS + zsh を前提に、以下の挙動になるように~/.zshrcを調整します。

  1. まず、残っている(detachedな)セッションがあれば最優先で再開する
  2. 残っていなければ、0からの連番(0,1,2...)で新規セッションを作る

作業の続きは拾いたいが、なければ新しい作業枠を自動で作りたいという挙動になっています。

前提環境

  • OS: macOS
  • Shell: zsh
  • Terminal: Ghostty
  • tmuxがインストール済み

~/.zshrc の設定

以下を~/.zshrcに追加(または既存のtmux自動起動ブロックを置き換え)します。

# tmux
if [[ -o interactive ]] && [[ -z "$TMUX" ]] && command -v tmux >/dev/null; then
  # (Ghosttyだけで発動させたいなら下を追加)
  # [[ -z "$GHOSTTY_RESOURCES_DIR" ]] && return

  # detachedな既存セッションがあれば最優先で再開する
  resume_session=$(
    tmux list-sessions -F '#{session_name} #{session_attached} #{session_activity}' 2>/dev/null \
      | awk '$2 == 0 { print $1, $3 }' \
      | sort -k2,2nr \
      | awk 'NR==1 { print $1 }'
  )
  if [[ -n "$resume_session" ]]; then
    tmux attach -t "$resume_session"
  else
    # 数値セッションがなければ 0 からの連番で新規作成する
    integer next=0
    typeset -A used
    for name in "${(@f)$(tmux list-sessions -F '#{session_name}' 2>/dev/null)}"; do
      if [[ "$name" == <-> ]]; then
        used[$name]=1
      fi
    done
    while [[ -n "${used[$next]}" ]]; do
      ((next++))
    done

    tmux new-session -s "$next"
  fi
fi

動作確認

Ghosttyを開いた時に、以下のように動作すれば反映完了です。

  • detachedセッションがある: そのセッションへ再接続
  • detachedセッションがない: 0から連番で新規作成
  • 例: 02が存在するなら次は1

この形にしておくと、既存作業の再開と新規作業の切り分けをどちらも自動化でき、Ghosttyの複数ウィンドウ運用がかなり安定します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?