3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Claude Codeの複数セッション、「どのターミナルだっけ」問題を解決した

3
Posted at

Claude Code を複数プロジェクトで並行して動かしていると、「今どのプロジェクトがどんな状態か」が分からなくなります。この悩みを解決するために、状態を横断的に見渡せる CLI ダッシュボード Monomi を先日公開しました。

ただ、実際に使い始めてすぐ次の壁にぶつかりました。ダッシュボードで「承認待ち」のプロジェクトを見つけても、そのセッションがどのターミナルタブで動いているのか分からないんです。結局開いているタブを1つずつ確認する羽目になり、「状態は見えるようになったのに、たどり着けない」という新しい面倒が生まれました。

今回は、この「で、どこ?」を解決するために追加した Terminal Focus 機能について書きます。

fキーを押すだけで切り替わる

まず動いているところを見てください。

右側がMonomi画面で、f キーを押すと、選択中のセッションが動いているターミナルウィンドウが切り替わります。

Monomi terminal focus

これだけです。今まで自分でタブを探していたのが、1キーで済むようになりました。

ターミナルタブ、何個開いてますか

Claude Code を複数プロジェクトで並行運用していると、こんな状況によくなります。

  • 手元のマシンだけでもターミナルのタブが5個以上開いている
  • tmux のセッションもいくつか裏で動いている
  • さらに、常時稼働の別マシン(Mac mini など)でも別のプロジェクトが動いている

Monomi のダッシュボードを開けば、「このプロジェクトが承認待ち」というのはすぐ分かります。

でも、いざ承認しようとして気づきます。

「これ、どのタブだっけ」

手元のマシンだけでも、開いているタブを1つずつ切り替えて確認していく。tmux のセッションなら tmux attach して Ctrl+b, w でウィンドウ一覧を見る。そのプロジェクトが別マシン側で動いている場合は、そもそもタブを探す以前に、今どちらのマシンの前に座るべきかから考える必要がある。

状態が見えるようになったのに、そこにたどり着くまでのコストは変わっていませんでした。

f を押すだけで、そのターミナルに切り替わる

Monomi の一覧または詳細画面でセッションを選択した状態で f を押すと、そのセッションが動いているターミナルウィンドウが前面に来ます。

  • j / k または / でセッションを選択
  • f で該当ターミナルにフォーカス

これだけです。今のマシンで動いているセッションなら、Monomi のダッシュボード上で選んで f を押すだけで、そのウィンドウにたどり着けます。

ただし、フォーカスできるのは同じマシン上で動いているセッションだけです。別マシンのセッションを選んで f を押した場合は、その旨のメッセージが表示され、何も起きません(状態の確認自体はマシンをまたいでできますが、そこから直接ジャンプすることはできない、という制約です)。

対応しているターミナルは Terminal.app、Ghostty、tmux、WezTerm です。動作確認環境は基本的に macOS ですが、WezTerm だけは Windows(WSL2)側でも動作します。

ターミナルごとに、フォーカスのやり方が全然違った

f を押すだけ、と書きましたが、実装の中身はターミナルアプリごとにバラバラです。

Terminal.app / Ghostty

ウィンドウ・タブの制御に近い形でフォーカスできます。ただし Ghostty は、動的なターミナルタイトルを利用してセッションを識別する仕組み上、~/.claude/settings.json に環境変数を1行追加してもらう必要があります。これは自動設定にしませんでした。タイトル操作をグローバルに無効化する設定のため、他のセッションにも影響が及ぶ可能性があり、勝手に書き換えるべきではないと判断したためです。

tmux

セッション名からペインを特定してアタッチする形です。ただし tmux がデタッチされていると、そもそもフォーカスしようがないので、その場合は「セッションが到達できません」というメッセージを出すだけにしています。

WezTerm

macOS では WezTerm 公式の CLI(wezterm cli activate-pane)でペイン単位のフォーカスができます。ただ、ペインを前面に持ってくるところまでは CLI で完結せず、そのあとアプリ自体をアクティブにする一手間が別途必要でした。

面白かったのは WSL2 対応です。WezTerm は Windows 側で $WEZTERM_PANE という環境変数をセットするのですが、WSL2 の interop 層はこの変数を自動では Linux 側に渡してくれません。WSLENV という別の環境変数に明示的に列挙しないと、WSL2 側の Claude Code セッションから自分がどのペインにいるかを知る手段がない、という制約に途中で気づきました。

さらに、Monomi 自身と対象セッションの両方が WezTerm のペインとして開かれていないと、wezterm.exe cli activate-pane が WezTerm の mux ソケットに接続できず失敗するケースがあることも分かりました(WezTerm 側の既知の制限です)。この場合は Windows Terminal を前面に出すフォールバック動作にしていますが、そもそも Windows Terminal を使っていない場合は何も起きません。

「同じ機能」でも、ターミナルごとにここまでアプローチが違うとは思っていませんでした。

おわりに

状態を横断で見られるだけでは足りなくて、そこから実際のアクションに繋がって初めて「使えるツール」になるんだな、というのが今回の学びでした。

Monomi は現在 v0.4 です。
まだ荒削りなところもありますが、Claude Code を複数プロジェクト・複数端末で並行運用している人に向いているツールになったかと思います。

試してもらえたら、うれしいです。

不具合や要望は GitHub Issues で、ちょっとした感想やフィードバックは Google Form でも受け付けています。

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?