💻

特定のディレクトリに移動したらtmuxを自動的に起動する

2025/02/20に公開

コマンドラインと日々戯れているソフトウェアエンジニアの皆さんこんにちは!皆さんtmuxは使っていますか? とっても便利ですよね。

ただ使っているうちに、段々tmuxを起動するのがめんどくさくなってくる瞬間はありませんか? 例えば特定のプロジェクトでtmuxを使う時に、下記のように毎回同じセッション名を指定して起動するのってだるいですよね。

$ cd my-project

$ tmux new-session -t my-project

コマンドラインでそのディレクトリに移動したら、もう自動でtmuxを起動するようにすればいいんじゃないか?ってことでちょっとしたスクリプトを書いてみました。

.tmuxstartというファイルがあるディレクトリに移動したら自動的にtmuxを起動するようにしています。すでにtmuxのセッションにいる時にはそのディレクトリに移動しても何も起きません。また、同名のセッションがすでにtmuxで起動されている場合には、そのセッションに自動的にattachするようにしています。

# 自動的に起動したいディレクトリの.tmuxstartにセッション名を記述
$ echo 'my-project' > .tmuxstart
function check_tmuxstart --on-variable PWD
    # すでに tmux 内なら何もしない
    if set -q TMUX
        return
    end

    # .tmuxstart が存在するか確認
    if test -f .tmuxstart
        # セッション名を取得(エスケープ処理付き)
        set session_name (cat .tmuxstart | string trim | string escape)

        # .tmuxstart に何も書かれていなければ何もしない
        if test -z "$session_name"
            echo "Warning: .tmuxstart is empty."
            return
        end

        # セッション名が無効な場合(空白や特殊文字のみの場合)処理しない
        if not string match -rq '^[a-zA-Z0-9_-]+$' "$session_name"
            echo "Error: Invalid session name in .tmuxstart -> '$session_name'"
            return
        end

        # 既存の tmux セッションを確認
        if tmux has-session -t $session_name 2>/dev/null
            echo "Attaching to existing tmux session: $session_name"
            tmux attach-session -t $session_name
        else
            echo "Creating new tmux session: $session_name"
            tmux new-session -s $session_name
        end
    end
end

僕はfishシェルを使っているので、fishシェルスクリプトで記述しています。このスクリプトを ~/.config/fish/config.fishなどに記述して source コマンドで読み込んであげれば、準備完了です。

.tmuxstartがあるディレクトリに移動したら指定したセッション名でtmuxが自動的に起動するようになりました。これで日々の小さなストレスが一つ減ったので良かったです。そんじゃーね!

おまけ

ちなみに、上記のfishシェルスクリプトの大部分はChatGPTに書いてもらいました。シェルスクリプトを書きたい気分じゃないときでもAIに書かせられるのはとても便利ですね。

Discussion