iTerm2 に開きっぱなしの約70画面が Mac を温めていた。cmux に移ると、同じ画面数で CPU は約50分の1、メモリは半分以下に。原因の調べ方と、iTerm2 と同じ操作感にする設定をまとめます。
目次
3行まとめ
- iTerm2 は、画面が多いほど重くなる作りだった(前面にいる間、0.5秒ごとに全プロセスを見回る)
- 同じ約70画面で比べると、cmux は CPU が約50分の1、メモリが半分以下
- 少し設定すれば、iTerm2 とほぼ同じ操作感で使える(設定は下の一覧のとおり)
測った環境: MacBook Pro(M4 Max・メモリ64GB)、macOS 15、iTerm2 3.7.4、cmux 0.65.0(2026年10月時点)
この記事でやった設定の一覧
| やったこと | どこで | 何のため | |
|---|---|---|---|
| ✅ | iTerm2 の全タブを cmux に移す | cmux の CLI(--layout) | 73画面を手で作り直さない |
| ✅ | ⌥Space で cmux を出す・隠す | cmux の設定「グローバルホットキー」 | iTerm2 と同じ呼び出し方 |
| ✅ | iTerm2 の ⌥Space を外す | iTerm2 の設定 → Keys → Hotkey | キーの取り合いを防ぐ |
| ✅ | ⌘↩ で窓を広げる・戻す | Hammerspoon | iTerm2 の全画面の代わり |
| ✅ | cmux と Ghostty の ⌘↩ を外す | cmux.json と Ghostty の設定 | Hammerspoon とぶつけない |
| ✅ | 背景を20%透かす | Ghostty の設定 | iTerm2 と同じ見た目 |
| ✅ | 一覧の並べ替えを選ぶ | cmux の設定「通知時に並べ替え」 | 好みで「動く/動かない」を選ぶ |
| ✅ | 設定ファイルをリポジトリで管理 | 自分のセットアップ用リポジトリ | 新しい Mac でも同じにする |
1. なぜ乗り換えたか
要点: 「目印」として残した70画面が、Mac を温めていた。
- AI エージェント(Claude Code など)を何本も並べて使っている
- 「この画面を見れば前の作業を思い出せる」ので、空の画面も閉じない
- 気づけば iTerm2 に 22タブ・73画面
- 再起動したばかりの Mac が温かく、調べたら原因の一つが iTerm2 だった
2. 結論: CPU は約50分の1
要点: 同じ約70画面を前面に置いて2分間測ると、桁が違った。

| iTerm2(73画面) | cmux(72画面) | |
|---|---|---|
| CPU(アプリ本体) | 1コアの 157% | 3.3% |
| メモリ(アプリ本体) | 約 1.8GB | 約 0.8GB |
注意: iTerm2 の数字には、タブで動いていた Claude Code の画面を描く分も入っています。cmux は空のシェルだけです。条件が完全に同じではないので、「桁が違う」くらいに受け取ってください。
3. iTerm2 は何に CPU を使っていたのか
要点: 画面ごとの「今動いているコマンド」を調べるための見回り。

- 前面にいる間は 0.5秒ごと、裏にいる間は 5秒ごと に、Mac の全プロセスを見回る
- 見回りのたびに補助プログラム
pidinfoが起動して終わる(10秒に約20回) - 間隔はコードに直接書かれていて、設定では変えられない(ソース:
iTermProcessCache.m) - ステータスバーは無関係だった(外して測り直しても誤差の範囲)
ハマりどころ: 測っている自分を数えていた 測定スクリプトの引数にアプリのパスを書いていたため、スクリプト自身まで「アプリの負荷」として数えていました。最初は cmux が 17.9% と出て、自分を除くと 3.3% でした。プロセスを名前で絞り込んで測る時は、自分が引っかかっていないか確かめましょう。
4. なぜ cmux を選んだか
要点: 「大量の作業を並べて、どれが呼んでいるか分かる」作りだから。

- 左の一覧 に、作業場所ごとのブランチ・フォルダ・PR・最新の通知が出る
- Claude Code が入力を待つと、その作業場所に 未読の印 が付き、
⌘⇧Uで飛べる - 作業場所ごとに 1行メモ(
⌥⌘E)を書ける。「何をしていて次に何をするか」を残せる - 作業場所は、開いた時に初めてシェルを起動 する。並べておくだけなら軽い
- 中身は Ghostty の描画エンジン(libghostty)なので、表示も速い
一度は「自分で軽いターミナルを作るか」とも考えましたが、作る前に既存のものを探して cmux に決めました。
5. 73画面をそのまま移す
要点: iTerm2 の分割の形とフォルダを読んで、cmux の --layout で作り直す。
- iTerm2 の Python API で、タブごとの「分割の形・比率・フォルダ・タブ名」を読む
- cmux の
new-workspace --layoutに渡す
cmux new-workspace --name "📸 写真アプリ" --focus false --layout '{
"direction": "horizontal", "split": 0.5,
"children": [
{"pane": {"surfaces": [{"type": "terminal", "cwd": "/Users/you/workspace/app"}]}},
{"pane": {"surfaces": [{"type": "terminal", "cwd": "/Users/you/workspace/app"}]}}
]
}'
書き方のポイント
horizontalは左右、verticalは上下の分割- 1つの分割は 子がちょうど2つ。3分割以上は2分割の入れ子にする
splitは 0.1〜0.9 に丸められる- 作った結果は
cmux --json treeで読み出して、元と突き合わせられる
ハマりどころ
- cmux は既定で「cmux の中のプログラムからだけ」操作を受け付けます。外から一括で作るには一時的に許可を広げ、終わったら既定(
cmuxOnly)に戻しましょうnew-workspaceは選択中の作業場所の後ろに入るので、続けて作ると 逆順 になります。最後にcmux reorder-workspacesで並べ直します
6. iTerm2 と同じ操作感にする
⌥Space で窓を出す・隠す
要点: cmux の設定でオンにする。ただし iTerm2 側を先に外す。
- cmux: 設定(
⌘,)→「グローバルホットキー」→「システム全体のホットキーを有効にする」をオン → キーを⌥Spaceに - iTerm2: 設定 → Keys → Hotkey のチェックを外す
ハマりどころ: iTerm2 の API で設定値をオフにしても、動いている iTerm2 はキーを手放しませんでした。設定画面のチェックを 一度入れてから外す と解放されます。
⌘↩ で窓を広げる・戻す
要点: cmux だけではできないので、Hammerspoon で「拡大/縮小」を押す。

- cmux の全画面(
⌃⌘F)は、別のデスクトップに移る方式だけ - 代わりに macOS の「ウインドウ → 拡大/縮小」(同じデスクトップのまま広げ、もう一度で戻る)を使う
- ただしメニューにショートカットを付けても、cmux が端末への入力として送ってしまい効かない
- そこで Hammerspoon(無料)が、cmux が前面の時だけ
⌘↩を先に受け取る
-- ~/.hammerspoon/init.lua
hs.autoLaunch(true)
hs.dockIcon(false)
hs.menuIcon(false)
CMUX = "com.cmuxterm.app"
cmuxZoomKey = hs.hotkey.new({"cmd"}, "return", function()
local app = hs.application.frontmostApplication()
if app and app:bundleID() == CMUX then
app:selectMenuItem({"ウインドウ", "拡大/縮小"}) -- 英語の macOS なら {"Window", "Zoom"}
end
end)
local function update(app)
if app and app:bundleID() == CMUX then
cmuxZoomKey:enable()
else
cmuxZoomKey:disable()
end
end
cmuxWatcher = hs.application.watcher.new(function(_, event, app)
if event == hs.application.watcher.activated then update(app) end
end)
cmuxWatcher:start()
update(hs.application.frontmostApplication())
使う前にやること
- Hammerspoon に「アクセシビリティ」の許可を出す(システム設定 → プライバシーとセキュリティ)
- cmux のチェックリストの
⌘↩と、Ghostty 既定の⌘↩(全画面)を外す(下の設定)
~/.config/cmux/cmux.json:
{
"shortcuts": {
"bindings": {
"showHideAllWindows": "opt+space",
"toggleChecklistItemComplete": null
}
}
}
窓を半透明にする
要点: Ghostty の設定に1行。再起動はいらない。
~/.config/ghostty/config:
background-opacity = 0.8
keybind = super+enter=unbind
- cmux のメニュー「構成を再読み込み」で反映される
0.8は「20%透ける」。好みで数字を変える
一覧の並べ替えを選ぶ
要点: 設定 → アプリ →「通知時に並べ替え」。検索するなら「通知時」。
| 選ぶもの | 動き | 向いている人 |
|---|---|---|
| オフ | 並び順を変えない | iTerm2 のように場所で覚えたい |
| 通知(既定) | 通知が来た作業場所を上に移す | 呼ばれたものだけ上に来てほしい |
| エージェントのアクティビティ | 依頼を送った・返答が終わった時なども上に移す | 動いているものを上にまとめたい |
7. 移行で気をつけたいこと
- Claude Code の
⇧↩(改行)と通知はそのまま使える: cmux は Ghostty を名乗る(TERM_PROGRAM=ghostty)ので、Claude Code 公式の「設定不要」の側に入る - iTerm2 が入れたフックが残る: iTerm2 3.7 は
~/.claude/settings.jsonに自分の道具(cc-status)を登録する。cmux では使わないので、iTerm2 をやめる時に外せる - Claude Code の設定フォルダを分けている人: cmux の「Vault」(昔の会話の検索)は、
CLAUDE_CONFIG_DIRか~/.claudeの会話しか読まない - キー操作は自分の指で確かめる: プログラムから送った偽のキー入力には cmux が反応せず、「動かない」と勘違いしかけた
- 日本語: cmux はほぼ日本語。Hammerspoon は英語だけなので、アイコンを隠した
8. 新しい Mac でも同じにする
要点: 設定ファイル3つをリポジトリに置き、リンクで使う。
- 置くもの:
cmux.json・Ghostty のconfig・Hammerspoon のinit.lua - 小さな
install.shで、リンクと Mac の設定(cmux のグローバルホットキーをオン等)をまとめて入れる - 手作業で残るのは、Hammerspoon のアクセシビリティの許可だけ
まとめ: こんな人におすすめ
おすすめ
- AI エージェントを何本も並べて動かし、タブが増え続けている
- 「どのタブが自分を呼んでいるか」を一目で知りたい
- 開きっぱなしのターミナルで、Mac が温かい・ファンが回る
向かないかもしれない
- iTerm2 の tmux 連携(
tmux -CC)やトリガーなど、iTerm2 ならではの機能に頼っている - 同じデスクトップのままの全画面を、追加の道具なしで使いたい
cmux なら、70画面を並べておいてもアプリ本体の CPU はほとんど使いません。そのうえ「どこで呼ばれているか」が左の一覧で分かります。タブを閉じられない人ほど、試してみる価値があると思います。

