概要
https://nealle-dev.hatenablog.com/entry/2025/12/25/122620
詳細内容
## Claude Codeのフック機能を活用し、Mac通知から対象のtmuxペインへ即座に移動する
https://nealle-dev.hatenablog.com/entry/2025/12/25/122620
Claude Codeのhooks設定とシェルスクリプトを組み合わせ、処理完了通知のクリックから作業中のtmuxペインへ自動フォーカスする仕組みを構築する。
**Content Type**: ⚙️ Tools
**Language**: ja
**Scores**: Signal:5/5 | Depth:4/5 | Unique:4/5 | Practical:5/5 | Anti-Hype:4/5
**Main Journal**: 89/100 | **Annex Potential**: 87/100 | **Overall**: 88/100
**Topics**: [[Claude Code, tmux, 開発効率化, シェルスクリプト, 自動化]]
Claude CodeをCLI環境、特にtmuxと併用して高度に活用するエンジニアにとって、AIの処理完了や入力を待つ時間は「別の作業」への切り替えが発生しやすいタイミングである。しかし、複数のセッションやペインを使い分けていると、どの画面でAIが応答を待っているのかを見失い、結果として開発のテンポが損なわれるという課題が生じる。筆者はこの課題を解決するため、Claude Codeの`hooks`機能を駆使してmacOSのデスクトップ通知を表示し、さらにその通知をクリックすることで「AIが待機中のtmuxペイン」へ一瞬でフォーカスを移動させる自動化スクリプトを公開した。
技術的な実装の柱は、Claude Codeの設定ファイルにおける`hooks`セクションの活用である。`idle_prompt`(待機状態)、`permission_prompt`(権限確認)、`user_question_prompt`(ユーザーへの質問)といった主要なステータス変化をトリガーとして、通知用のシェルスクリプトを実行する。通知自体はmacOSで定番の`terminal-notifier`を使用しており、`-execute`オプションを介してクリック時のアクションを定義している。
筆者は、この仕組みを安定させるために克服した3つのハードルを詳解している。
1. **パスの問題**: `terminal-notifier`経由で実行されるスクリプトは通常のシェル環境とは異なるため、冒頭で明示的に`/opt/homebrew/bin`等のパスを通す必要がある。
2. **tmuxソケットの特定**: 複数のtmuxセッションが走る環境では、接続先のソケットを誤ると操作が効かない。そのため、フック発火時の`$TMUX`環境変数からソケットパスを動的に抽出し、`tmux -S`オプションで明示的に指定する工夫がなされている。
3. **複数クライアントへの対応**: 同一セッションに複数のクライアントが接続している場合、単一の`switch-client`では意図した画面が切り替わらないことがある。これに対し、`list-clients`で全クライアントのTTYを取得し、ループ処理で全てのクライアントを強制的に対象セッション・ペインへ誘導するという、実用性を重視した堅牢な解決策を採用している。
このハックは、AIコーディングツールを「単なるチャット」ではなく「開発ワークフローの一部」として深く組み込む際の好例である。特にtmuxヘビーユーザーにとっては、コンテキストスイッチの摩擦を最小限に抑え、開発に集中するための非常に具体的かつ即効性のあるテクニックと言えるだろう。