1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

tmux で Claude Code を複数起動したときの「どこで何してたっけ?」を解決する

1
Posted at

はじめに

tmux でペインを分割して Claude Code を複数起動していると、各ペインで何をやっているのかが分からなくなりがちです。

そんな時はペインタイトルを表示することで、作業状況を一目で把握できるようになります。

Step1: tmux のペインタイトルを表示する

まずは tmux のペインタイトルを表示できるようにします。

~/.tmux.conf に以下を追加します:

~/.tmux.conf
set -g pane-border-status bottom
set -g pane-border-format "#[fg=black,bg=blue] #P #{pane_title}"

設定を反映させます:

tmux source-file ~/.tmux.conf

これでペインタイトルが表示されるようになります。

2025-07-19 at 09.01.01.png

参考として、このタイトルは任意の文字列に変更できます:

tmux select-pane -T "ペインタイトルのテスト〜ここに表示されます〜"

2025-07-19 at 09.04.16.png

Step2: Claude Code のデフォルト表示を確認

ペインタイトルを表示した状態で Claude Code と対話を開始すると、自動的にコンテキストが表示されます。

2025-07-19 at 09.16.02.png

ただし、情報が圧縮されすぎて分かりづらいのが課題です。

Step3: 最新のプロンプトをペインタイトルに表示する

そこで、最新のプロンプトメッセージをタイトルに表示するカスタマイズを行います。

まずは、Claude Code のセッションファイルから最新のメッセージを取得するスクリプトを作成します。

配置場所は任意ですが、今回は ~/.tmux/bin/update-claude-tmux-status.sh とします。

~/.tmux/bin/update-claude-tmux-status.sh
#!/bin/bash

# Claude Codeの現在のセッションの最新プロンプトをtmuxペインタイトルに表示するスクリプト

# 定数定義
readonly MESSAGE_MAX_LENGTH=200
readonly TAIL_LINES=100

# 現在のディレクトリを取得
CURRENT_DIR=$(pwd)

# Claude Codeのセッションディレクトリを構築
# ディレクトリパスのスラッシュ、ピリオド、アンダースコアをハイフンに置換してエスケープ
# 先頭に-を追加(Claude Codeの仕様)
PROJECT_DIR_ESCAPED=$(echo "$CURRENT_DIR" | sed 's/[\/\._]/-/g')
CLAUDE_PROJECTS_DIR="$HOME/.claude/projects"
SESSION_DIR="${CLAUDE_PROJECTS_DIR}/${PROJECT_DIR_ESCAPED}"

# セッションディレクトリが存在しない場合は終了
[ ! -d "$SESSION_DIR" ] && exit 0

# 最新のセッションファイルを取得
LATEST_SESSION_FILE=$(ls -t "$SESSION_DIR"/*.jsonl 2>/dev/null | head -1)

# セッションファイルが存在しない場合は終了
[ -z "$LATEST_SESSION_FILE" ] && exit 0

# 最新のユーザーメッセージを取得(エラー時は空文字)
# tail -> grep -> jq -> head の順でパイプラインを最適化
# contentが文字列の場合とtool_result配列の場合の両方に対応
LAST_USER_MESSAGE=$(tail -n "$TAIL_LINES" "$LATEST_SESSION_FILE" | \
                    grep '"type":"user"' | \
                    grep -v '"type":"tool_result"' | \
                    tail -1 | \
                    jq -r 'if .message.content | type == "string" then .message.content else empty end' 2>/dev/null | \
                    head -c "$MESSAGE_MAX_LENGTH")

# tmuxペインタイトルを構築
if [ -n "$LAST_USER_MESSAGE" ]; then
    PANE_TITLE="💬${LAST_USER_MESSAGE}"
else
    PANE_TITLE="Active"
fi

# tmuxペインタイトルを更新
if [ -n "$TMUX" ]; then
    tmux select-pane -T "$PANE_TITLE"
fi

実行権限を付与することを忘れずに:

chmod +x ~/.tmux/bin/update-claude-tmux-status.sh

Hooks の設定

Claude Code で Hooks を設定し、Stop イベント時に先ほどのスクリプトが自動実行されるようにします。
~/.claude/settings.json は以下のイメージ:

~/.claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "matcher": "",
        "hooks": [
          {
            "type": "command",
            "command": "~/.tmux/bin/update-claude-tmux-status.sh"
          }
        ]
      }
    ]
  }
}

完成!

Claude Code を新たに起動すると、最新のプロンプトメッセージがペインタイトルに表示されます。

2025-07-19 at 09.12.59.png

これで複数のペインで異なる作業をしていても、一目で内容が分かるようになったと思います。

カスタマイズ

表示フォーマットの変更

スクリプト内の PANE_TITLE の値を変更することで、表示形式をカスタマイズできます。

例えば、プロジェクト名を追加したり、絵文字を変更したりできます。

表示タイミングについて

本来であればプロンプト入力直後に表示したいところですが、PreToolUseUserPromptSubmit イベントでは期待通りに動作しませんでした。

Hooks イベントの詳細は Hooks reference - Anthropic をご確認ください。

Claude Code のデフォルト表示を無効化

Claude Code による概要表示機能を無効にしたい場合は、以下の環境変数を設定して起動してください:

CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 claude

詳細は Claude Code settings - Anthropic を参照してください。CLAUDE_CODE_DISABLE_TERMINAL_TITLE については日本語ページには記載がありませんでした。

ドキュメントを確認していて気づいたのですが、デフォルトではターミナルのタイトルにも表示されるようです。

2025-07-19 at 10.13.54.png

まとめ

tmux と Claude Code を組み合わせる際の課題を解決する方法を紹介しました。

この設定により、複数のペインでの作業がより効率的になるはずです。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?