← 記事

キーひとつで tmux を IDE に。便利なプラグインも十一個

· 19 分で読めます
tmux tmux plugin 開発環境 AI Agent オープンソース
半年分の tmux カスタマイズ

キーひとつで tmux を IDE に、

便利なプラグインも十一個

プロジェクトを開くたびに、私は手動で三、四回 split します。ファイルツリーに一つ、編集に一つ、git に一つ、AI に一つ。毎回分割するのが面倒になり、この半年で tmux の設定に積み重ねたカスタマイズを一つずつ独立したプラグインに切り出したら、十二個になりました。この記事ではプラグインを順に並べるのではなく、困りごとに沿って紹介します。思い当たる場面のところを読んでください。

十二個の tmux プラグインを導入する前後の画面比較
十二個を導入する前と後の比較

全部入れる必要はありません。どれも TPM で導入でき、書き方はこうです。

# ~/.tmux.conf、TPM の run 行の「上」に置く set -g @plugin 'operonlab/tmux-workdesk' # 保存後に prefix + I(大文字)を押して TPM にダウンロードさせる

差し替えるのは @plugin の後ろにある文字列です。ほかのプラグインもすべて github.com/operonlab にあり、リポジトリ名がプラグイン名です。(そのページには tmux-webuiも載っていますが、これは pane をブラウザーに持ち込むサービスで、TPM プラグインではないので、この記事では扱いません。)

プロジェクトを開いたら、あの四つのペインを:tmux-workdesk

prefix + i を押すと、tmux が一秒で IDE 風のレイアウトになる
押すのは prefix + i。一秒で IDE 風のレイアウトになります

どのプロジェクトのディレクトリでも、カーソルを置いて prefix + iを押せば、画面が一秒で IDE 風に並びます。左に yazi のファイルツリー、中央に入力する場所、下に lazygit、右に claude。もう一度押すと同じ window に戻り、二つ目は開きません。各ペインで何を動かすか、幅をどれだけ取るかも変えられ、@workdesk-main-cmd 'nvim' のように一行で設定できます。あるペインを空文字列にすれば、そのペインは作りません。

prefix + g は別の並べ方です。現在のウィンドウを 2×2 のグリッドにし、縦列や横列などにも好みのキーを割り当てられます。これらのレイアウトはペインを増やすだけで削除しません。切り替えても、元のペインがその場で並び直されます。

デフォルトの prefix + i は tmux 標準のウィンドウ情報表示キーを上書きします。気になるなら @workdesk-ide-bind で変更できます。

ウィンドウが 80×24 のまま:tmux-autosize

接続、サイズ変更、ウィンドウの切り替えや作成のタイミングで、tmux-autosize はサイズが固定されたウィンドウをクライアントの実際の幅と高さに合わせます。ステータスバーに何も表示せず、場所も取りません。この一つだけを行います。

それでも、ウィンドウ全体が 80x24しかないものが時々あります。中を同じように三、四つのペインに分けると、各ペインは二十列ほどになり、何も読めません。どうしても大きくならないのです。たいていはスクリプトやエージェントがバックグラウンドで開いたウィンドウで、クライアントが一度も表示していないため、生まれたときから tmux のデフォルトサイズのままです。

80x24 のままになったウィンドウが自動で正しいサイズに調整される
固定されたウィンドウがクライアントの実際の幅と高さに調整される

私は 27 インチの 2K モニターで tmux を使い、Dock は左側に置いています。一つの window は 356 列幅で、四つに分けても各ペインに 88 列あります。これが正常な状態です。

役割は正直に説明しておきます。tmux のデフォルトの window-size latestを使っているなら、これはバックグラウンドのウィンドウや早すぎる attach など、端のケースを補う保険にすぎません。 window-size manual に変えて初めて主役になります。また、履歴をスクロールしている間はサイズ変更を遅らせます。サイズを変えると tmux がスクロールバック全体を再配置するため、履歴が長いと負荷が大きいのです(上流にも同種のフリーズ報告があります)。

mac mini が夜中に固まり、AI が全員会話を忘れた:tmux-agent-resume

レイアウトは tmux-resurrect で戻せても、会話は戻せません。tmux-agent-resume が埋めるのはこの部分です。保存前に各ペインでどの AI が動いていて、その会話にどう再接続するかを記録します。復元後に再接続コマンドを入力し、AI がゼロからではなく続きから再開できるようにします。現在対応するのは八つの CLI(Claude Code、Codex、Antigravity、Copilot、OpenCode、Kimi、Hermes、Qwen)です。各社は会話 ID をそれぞれ違う場所に保存しています。

再起動した tmux の各ペインで AI の会話が続きから再開される
復元後に各ペインへ再接続コマンドを入力し、AI が続きから再開する

この機能を作ったのは、散々な夜があったからです。書斎で常時稼働している mac mini が夜中にフリーズし、バックグラウンドの監視プログラムが設計どおりターミナルを強制再起動しました。レイアウトは tmux-resurrect で戻りましたが、中の AI アシスタントはみんな会話を忘れ、直前にどこまで話したか分からなくなりました。ペインは空のまま戻るか、CLI がまっさらな新しい session として起動したのです。

正直に言うと、tmux-agent-resume は実際にあなたのペインへコマンドを入力し、Enter を押します。そのため、各コマンドをまず許可リストで検査し、形式が違えば捨てます。操作するのは空のプロンプトで待っているペインだけです。何を入力するか先に見たければ @agent-resume-dry-run 1を有効にできます。代償は、八つの外部ツールのインターフェースに依存することです。相手が変われば私も直さなければなりません。現在は macOS のみ対応しています。

残りは、用途ごとに手短に紹介します

ここまでの workdesk、autosize、agent-resume の三つが、私には特に効きました。残る九つもそれぞれ具体的な面倒を解決します。右クリックメニュー、浮動ターミナル、入れ子の tmux によるキーの取り合い、ステータスバーの数値などです。

1

マウスに慣れていて、ショートカットを覚えられない

分割、拡大、終了、名前の変更を tmux-context-menu がマウスの右クリックに移します。メニューはクリックした場所に出ます(マウスを使いたくなければ Alt+qを押します)。先行する jaclu/tmux-menus とは別の道です。あちらはキーボードで階層をたどるメニューツリー。こちらは意図的に機能を絞り、「クリックした場所にメニューを出す」ことに集中しています。

2

手軽に使える一時ターミナルが欲しい

tmux-floatpane では prefix + t を押すと画面の中央に小さなターミナルが浮かびます。もう一度押すと閉じ、残した内容は次に開いてもそのままです。これは omerxx/tmux-floax の改良版フォークです。元の設計と実装は Omer Hamerman の功績で、私は使っていて気になった小さな不具合をきちんと直したかっただけです。GPL-3.0 の作品を改変したので、このフォークも GPL-3.0 です。

3

よく ssh でリモートに入り、その先でも tmux を開く

二重になった tmux は Ctrl-bを取り合います。tmux-passthrough には「譲る」キー(デフォルトは F12)があります。一度押すと外側がキー入力を受け取らなくなり、すべて内側に届きます。ステータスバーは暖かい桃色になり、今どちらの層にいるかを知らせます。先行する tmux-suspend より一段の誤操作防止があります。F12 が働くのは、そのペインが本当にリモート接続中の場合だけです。ローカルで誤って押しても何も起きません。

4

システムの数値をステータスバーに置きたい

CPU、メモリ、ディスク、通信速度の四つの #{...} プレースホルダーを tmux-sysmon が提供します。出力はプレーンテキストだけなので、自分のテーマに合わせられます(macOS ではディスクのパスを /System/Volumes/Data に指定しないと正確に測れません)。こうした環境情報のために一行丸ごと増やしたいなら、tmux-pillbar が一行目の下にもう一行を追加し、左・中央・右の三つに分けます。これはテーマではなく枠組みなので、色も内容も自分で用意します。

クリックした位置に tmux の右クリックメニューが表示される
右クリックメニューはクリックした位置に表示される

まず、ターミナルで複数の AI CLI を同時に動かす人向けの二つです。そうでなければ読み飛ばしてください。tmux-agent-status は、稼働中、承認待ち、待機中の AI がそれぞれ何個あるかをステータスバーに表示します。一つも動いていなければ表示は消えます。tmux-llm-usage は、あなたが接続した使用量と上限を表示します。数値は取得せず、JSON の仕様と、動作が重くならない表示だけを提供します。

この二つの表示と、先ほどの agent-resume は、私が作った中でも特に参考になる先例が見つからなかった三つです。ほかのプラグインは誰の成果を参考にしたか挙げられますが、この三つは当時、既製品を見つけられず自分で作りました。後になって同じ領域に取り組む人がいると知りました。tmuxwatch は観測専用の TUI、harness-terminal は「エージェントがあなたを待っている」ことを検知するネイティブターミナルです。切り口は違いますが、扱う問題は共通しています。見つからなかったからといって、存在しないとは限りません。当時の私が見つけられなかっただけです。

代償もこの三つが一番大きいです。八つの外部 AI ツールのインターフェースを追いかける必要があり、相手が変わるたびに対応しなければなりません。

一つは履歴を探し、一つは現在を見る:tmux-agent-history / tmux-agent-dock

ステータスバーの agent-status と llm-usage で分かるのは「いくつ動いていて、いくつ止まっているか」までです。その次の「では、どれを開くか」を補うのがこの二つです。どちらもステータスバーは使わず、一つのキーで全高のリストを開きます。一つは過去を探し、もう一つは現在を見守ります。

各 AI CLI の過去の会話を一つのリストにまとめ、行を選ぶと隣にその会話のプレビューが表示される
各 CLI の過去の会話を一つのリストにまとめ、選ぶとプレビューできます

各 CLI は会話をディスクに保存しますが、場所も形式もばらばらです。Claude Code はある形式の JSONL、Codex は別の形式、Gemini は別のフォルダーに保存します。tmux-agent-history は九つ(Claude Code、Codex、Gemini、Copilot、OpenCode、Kimi、Hermes、agy、Qwen)を一つのリストに集め、行を選ぶとその会話を隣にプレビューします。先週の途中になった議論を探すために、CLI を一つずつ起動する必要はありません。ファイルを読むだけで、稼働中のエージェントには触れません。

現在のウィンドウ右端にサイドバーを開き、稼働中のエージェントをリアルタイムで一覧表示する。選んだエージェントの画面が上にプレビューされ、Enter でそこへ移動できる
右端のサイドバーに稼働中のエージェントを一覧表示。選ぶとプレビューし、⏎ で移動できます

現在のウィンドウ右端に tmux-agent-dock がサイドバーを開き、この server で稼働中のエージェントをリアルタイムで一覧表示します。承認待ちのものが先頭に来ます。カーソルを動かすと、上半分には選んだエージェントの画面が表示され、⏎ でそこへ移動し、⌃x で終了できます。状態判定は agent-status の表示と共通です。別のバックグラウンドプログラムを動かさず、何も保存しません。

この二つにも、先ほどの agent-status、llm-usage、agent-resume と同じ負担があります。各 CLI が履歴をどう保存し、画面がどう見えるかを把握する必要があり、対応先が増えるたびにルールも増えます。現時点では macOS でしか検証していません。

十二個のプラグイン機能比較

プラグイン概要最低 tmux バージョンライセンス
tmux-workdeskワンキーで現在のプロジェクトを IDE 風に配置。グリッドや縦列などのレイアウトもあります2.4MIT
tmux-autosizeバックグラウンドで 80×24 などの誤ったサイズのままになったウィンドウを正しいサイズに調整します3.0MIT
tmux-context-menu右クリックで tmux の操作メニューをマウスのそばに表示します3.3aMIT
tmux-floatpaneいつでも呼び出せる浮動 scratch ターミナル。内容も保持します3.3GPL-3.0
tmux-passthroughワンキーでリモート側の tmux に操作を譲り、キーの取り合いを防ぎます2.4MIT
tmux-sysmonステータスバーに CPU/メモリ/ディスク/通信速度の四つの値を表示します1.8MIT
tmux-pillbarステータスバーをもう一行増やし、左・中央・右の三つに好きな情報を置けます2.9MIT
tmux-agent-statusステータスバーに稼働中/承認待ち/待機中の AI の数を表示します2.1MIT
tmux-llm-usage自分で接続した AI の使用量/上限をステータスバーに表示します1.8MIT
tmux-agent-resume再起動後、各ペインの AI の会話を続きから再開します(tmux-resurrect が必要)1.9MIT
tmux-agent-history各 AI CLI がディスクに保存した過去の会話を一つのリストで探し、選ぶとプレビューできます1.9MIT
tmux-agent-dock右端のサイドバーに稼働中のエージェントをリアルタイムで表示。⏎ で移動、⌃x で終了できます1.9MIT

選ぶのが面倒なら、毎日プロジェクトを開く人も、複数ペインを一度に見たい人も workdesk(prefix + i で IDE 風に、prefix + g でグリッドに配置)です。サイズの問題が多いなら autosize、複数の AI を動かすなら最後の五つ。習慣を変えずに一つだけ入れたいなら、autosize が最も手軽です。

ツール

.tmux.conf を貼って、どれを導入できるか確認する

上の表には十二個の最低バージョンがあります。一つずつ確認するのは面倒です。ここに tmux -V の出力行と、あなたの ~/.tmux.conf を貼れば、同じ表でバージョンを判定し、この記事で挙げた五つのキー(prefix + i、prefix + g、prefix + t、Alt+q、F12)が既存のキーバインドと衝突しないか調べ、conf にそのまま貼れる TPM の設定ブロックを生成します。処理はすべてあなたのブラウザー内で完結し、貼り付けた内容はどこにも送信されません。conf に token、パスワード、見せたくないパスが含まれていたら、貼る前に削除してください。

定数の出典はすべてこの記事にあります。十二個の最低 tmux バージョンとライセンスは〈十二個のプラグイン機能比較〉の表から各欄を写しました。調べる五つのキーは「この部分を持ち帰る」の prompt の第 2 項に私が列挙したものと@workdesk-ide-bind、TPM の設定ブロックを run 行の上に置くこと、保存後に prefix + Iを押すことも、この記事に書いたとおりです。プラットフォームの制限について、この記事が述べるのは三つだけです。agent-resume と agent-dock は「macOS のみ対応」、agent-history は「macOS でのみ検証済み」。残る九つが Linux/WSL でどう動くかは触れていません。このツールが読むのは、貼り付けた文字列です。あなたのマシン自体ではありません——実際に tmux -Vを実行せず、TPM が入っているかも確認せず、 source-file をたどって別のファイルを調べることもありません。そのため「検出されない」と出ても、衝突が別のファイルにあるかもしれません。キーバインドはインストール済みの別のプラグインから来ている可能性もあり、その行が conf にない場合はここでは分かりません。衝突時にこの記事が示せるキー変更のオプション名は workdesk のものだけです。floatpane、passthrough、context-menu の変更方法は各 repo を確認してください。上の「この部分を持ち帰る」の prompt は、エージェントにあなたのマシンで実際に tmux -Vを実行させ、conf も読ませるので、こちらより正確です。このツールは、手元にエージェントがいないときにすぐ答えを得て、衝突した行を特定するためのものです。

この部分を持ち帰る

まずは設定ファイルで間に合わせ、同じことで三度困って初めてプラグインに切り出す価値があります——この十二個に、最初からプラグインを作ろうと決めて着手したものは一つもありません。ほとんどは設定ファイルの数行が目障りになってから切り出しました。夜中の再起動のように、実際のトラブルに迫られて作ったものも少しあります。逆に、一度しか困っていないなら設定ファイルに書くだけで十分です。

自分でどれが役立つか分からないなら、以下を AI に貼り付けて、あなたの実際の環境に照らして判断させてください。

# あなたの AI Agent にコピー 私は〈ワンクリックで tmux を IDE に。便利なプラグインも十一個〉という記事を読んでいます (https://blog.joneshong.com/zh/blog/tmux-plugin-family)。 著者はこの半年の tmux カスタマイズを十二個のプラグインに切り出しました。どれが私に合うか判断してください。全部入れる必要はありません。 一覧(プラグイン → 解決すること → 最低 tmux バージョン): - tmux-workdesk → ワンキーでプロジェクトを IDE 風に配置。グリッドや縦列などのレイアウトもあります → 2.4 - tmux-autosize → バックグラウンドのウィンドウが 80x24 などの誤ったサイズのままになったら自動で調整します → 3.0 - tmux-context-menu → 右クリックした位置に操作メニューを表示します → 3.3a - tmux-floatpane → 浮動する一時ターミナル。閉じて開き直しても内容が残ります → 3.3(GPL-3.0) - tmux-passthrough → tmux を入れ子にしたとき、ワンキーで内側にキー入力を譲ります → 2.4 - tmux-sysmon → ステータスバーに CPU/メモリ/ディスク/通信速度を表示します → 1.8 - tmux-pillbar → ステータスバーを一行追加し、左・中央・右の三つに分けます → 2.9 - tmux-agent-status → ステータスバーに稼働中/承認待ち/待機中の AI の数を表示します → 2.1 - tmux-llm-usage → ステータスバーに AI の使用量と上限を表示します(枠組みだけで、数値は取得しません)→ 1.8 - tmux-agent-resume → 再起動後に各ペインの AI の会話を続きから再開します(tmux-resurrect が必要、macOS のみ対応)→ 1.9 - tmux-agent-history → 各 AI CLI がディスクに保存した過去の会話を一つのリストで探し、選ぶとプレビューできます → 1.9 - tmux-agent-dock → 右端のサイドバーに稼働中のエージェントをリアルタイムで表示。⏎ で移動、⌃x で終了(macOS のみ対応)→ 1.9 一般論で答えず、まず私の実際の環境を確認してください。 1. `tmux -V` を実行してバージョンを調べ、必要なバージョンに満たないものは除外する 2. ~/.tmux.conf を読み、私がすでに自分で解決しているものは導入しない。 あわせて prefix + i、prefix + g、prefix + t、Alt+q、F12 が 既存のキーバインドと衝突しないか調べる 3. 私が普段、ターミナルで複数の AI CLI を同時に動かすか調べる。動かさないなら最後の五つはすべて除外する その上で、本当に導入する価値があるもの、その理由、それぞれの代償を教えてください。 一つも合わないなら、合わないとはっきり言ってください。答えを出すために無理に選ばないでください。

関連リンク

六つのリンクのうち、三つは参考にした先行例(tmux-floax、tmux-suspend、tmux-menus)です。残りは tmux-resurrect、実際に遭遇した issue、同種の先行例です。

リソース重要な理由
omerxx/tmux-floaxこれは tmux-floatpane の上流です。浮動 scratch ターミナルの元の設計はここから来ていて、私のフォークでは使っていて困ったいくつかの不具合だけを直しました
MunifTanjim/tmux-suspend「prefix 一式を別の層に譲る」という道を開いてくれました。そのおかげで、passthrough に必要なのは「リモートのペインでだけ動作する」ための誤操作防止だと分かりました
jaclu/tmux-menuscontext-menu の役割を絞るべきだと気づかせてくれました。あちらはキーボードでたどるメニューツリー、こちらはマウスで右クリックした場所に表示します。異なる操作習慣に応える二つの方法です
tmux-resurrectレイアウトを戻す既製の手段です。レイアウトは戻せても会話は戻せないからこそ、agent-resume が必要になりました。保存と復元の処理に直接つないでいます
tmux/tmux#4814サイズ変更によってスクロールバック全体が再配置される、tmux 上流の同種のフリーズです。autosize がスクロール中のサイズ変更を遅らせるのは、この負荷を慎重に避けるためです
tmux-plugins/tmux-cpu「status 内のプレースホルダー token を書き換える」方法は agent-status と sysmon の両方が使っています。sysmon が同じ分野の先行例として率直に挙げているものでもあります
✦ プロンプトをコピー