メインコンテンツへスキップ
中級9分で読める

cmuxでSSHリモート開発する方法

cmuxを使ってSSH越しにリモートサーバーで開発する方法を、接続設定・セッション維持・実践的な使い方まで実例を交えてわかりやすく解説します。

効率化cmuxSSHリモート開発ターミナル効率化

🎯 この記事で学べること

  • 1
    cmuxとSSHを組み合わせたリモート開発の考え方を理解できます
  • 2
    cmuxのペインからSSH接続する基本的な手順がわかります
  • 3
    接続が切れても作業を失わないセッション維持の方法を学べます
  • 4
    リモートサーバー上でAIエージェントを動かすワークフローを構築できます
  • 5
    リモート開発で注意すべきポイントを把握できます

読了時間: 約9

cmuxとSSHリモート開発の考え方

こんにちは!今日は「cmuxでSSHリモート開発する方法」について学びましょう。

「cmuxはローカルのAIエージェント開発に特化したターミナルだったよね?それでリモート開発ってどういうこと?」と思った方、鋭いですね。

生徒

cmuxってmacOSのローカル専用アプリだよね?それなのにSSHでリモート開発ってできるの?

ユニコーン先生

いい質問だね!cmux本体はたしかにローカルで動くんだけど、cmuxは普通のターミナルでもあるんだ。だからペインの中でsshコマンドを打てば、いつものSSH接続がそのまま使えるんだよ。

生徒

なるほど!じゃあcmuxの便利な機能を使いながら、中身はリモートサーバーで動かせるってこと?

ユニコーン先生

その通り!通知リングや画面分割、内蔵ブラウザといったcmuxの強みはローカル側で活かしつつ、コードのビルドやサーバー実行はリモート側で行う。この役割分担がポイントだよ。

まず大前提を整理しておきましょう。cmuxはGhosttyのレンダリングエンジンを搭載したmacOSネイティブのターミナルで、AIコーディングエージェント連携に特化したアプリです。cmuxアプリそのものはローカルマシン(macOS)上で動作し、リモートサーバーにインストールして動かすものではありません。

では「cmuxでSSHリモート開発する」とはどういうことか。それは、ローカルで起動したcmuxをSSHクライアントとして使い、リモートサーバー上の作業を行うということです。役割を分けて考えると分かりやすくなります。

役割担当する場所具体例
ターミナルUI・画面分割・通知ローカル(cmux)ペイン操作、通知リング、内蔵ブラウザ
コードの編集・ビルド・実行リモート(SSH先)コンパイル、テスト、開発サーバー起動
セッションの永続化リモート(tmux/screen)接続断からの復帰、長時間ジョブの維持

cmuxはローカル専用のアプリです。リモートサーバー上での「ターミナル多重化」や「セッション永続化」そのものは、SSH先で動かすtmuxやscreenが担当します。cmuxとtmuxは競合ではなく、レイヤーが違う補完関係だと考えてください。

接続の基本

cmuxのペインからSSH接続する

cmuxのペインは通常のシェルなので、sshコマンドがそのまま使えます。新しいワークスペースやペインを開いて、いつも通りSSHで接続するだけです。

# リモートサーバーに接続
ssh user@example.com

# ポートを指定して接続
ssh -p 2222 user@example.com

# 鍵ファイルを指定して接続
ssh -i ~/.ssh/id_ed25519 user@example.com

cmuxの画面分割を使えば、複数のサーバーへ同時に接続して並べて作業できます。例えば左ペインでアプリケーションサーバー、右ペインでデータベースサーバーに接続する、といった使い方です。

# 左右に分割: Cmd+D
# 上下に分割: Cmd+Shift+D
# ペイン移動: Option+Cmd+矢印キー

SSH接続もcmuxの1ペインに過ぎないので、ローカル作業用のペインとリモート作業用のペインを1画面に並べられます。「ローカルでエディタ、リモートでログ監視」のような混在レイアウトが自然に作れますよ。

SSH configで接続を整理する

接続先が増えてくると、毎回ホスト名やポート、鍵を指定するのは面倒です。~/.ssh/configに設定をまとめておくと、短い名前で接続できるようになります。これはcmux固有の機能ではなく、標準的なSSHの仕組みです。

# ~/.ssh/config の例
# Host dev
#   HostName 203.0.113.10
#   User developer
#   Port 2222
#   IdentityFile ~/.ssh/id_ed25519

この設定があれば、次のように短く接続できます。

# config の Host 名で接続
ssh dev

接続をまとめて開くスクリプト

cmuxはCLIやSocket API経由でスクリプトから制御できるため、よく使う開発環境を一発で立ち上げることもできます。ここではまず、SSH接続自体をシェルスクリプトでまとめる素朴な例を示します。

#!/bin/bash
# connect-dev.sh
# よく使うリモートサーバーへ接続する

ssh dev

cmuxのCLI・Socket APIを組み合わせれば、ワークスペース作成からSSH接続までを自動化することも可能です。具体的なコマンド体系は変わる可能性があるため、最新の挙動は公式ドキュメントを確認してください。

セッションの維持・復元

リモート開発で最初にぶつかる壁が「接続が切れると作業が消える」問題です。ノートPCを閉じたり、Wi-Fiが切れたりすると、SSHセッションが切断され、実行中のプロセスも一緒に止まってしまうことがあります。

cmuxのセッション復元とは役割が違う

ここで混同しやすいのが、cmux自身のセッション復元機能です。cmuxはアプリを再起動してもレイアウトや作業ディレクトリを自動で復元しますが、ターミナル内で実行中のプロセスの状態までは復元しません

復元される復元されない
ペインのレイアウト(ローカル)SSH接続そのもの
各ペインの作業ディレクトリ(ローカル)リモートで実行中のプロセス
スクロールバック履歴リモートのシェルセッション

つまり、cmuxを再起動するとSSH接続は切れ、再接続が必要になります。だからこそ、リモート側でのセッション永続化が重要になります。

リモート側でtmux/screenを使う

リモートサーバー上でtmuxscreenを使うのが定番の解決策です。これらはSSH接続が切れてもサーバー上でセッションを維持し続けるため、再接続してattachするだけで作業を再開できます。

# リモートにSSH接続したあと、tmuxセッションを開始
tmux new -s work

# 接続が切れたら、再接続後にアタッチして再開
ssh dev
tmux attach -t work
# screen を使う場合
screen -S work       # セッション開始
# 切断後
screen -r work       # 再開

「ローカルのcmux」と「リモートのtmux」は別レイヤーです。cmuxのCmd+Dなどのショートカットはローカル側に効き、tmuxのCtrl+b系プレフィックスはリモートのセッション内で効きます。キー操作がどちらに届いているか意識すると混乱しません。

長時間ジョブを切断に強くする

ビルドやデータ移行のような長時間ジョブは、tmux/screenの中で実行しておけば、接続が切れても処理は続行されます。完了後にcmux側の通知機能と組み合わせると、ローカルで結果を受け取れて便利です。

# リモートの tmux セッション内で長時間ジョブを実行
tmux new -s build
npm run build
# ここで接続が切れても、リモート上ではビルドが継続する

🔄 使い分けのポイント: cmuxはローカルのUI・通知・並列表示を、tmux/screenはリモートのセッション永続化を担当します。両方を重ねて使うことで「快適な操作感」と「切断に強い実行環境」を両立できます。

リモートでのAIエージェント活用

cmuxはAIコーディングエージェントとの連携に特化したターミナルです。リモート開発でもこの強みを活かせます。ポイントは「エージェントをどこで動かすか」を決めることです。

パターン1: エージェントをローカルで動かす

Claude CodeなどのエージェントをローカルのcmuxペインでSSH接続中に動かすシンプルなパターンです。エージェントの状態に応じてcmuxの通知リングが光るため、入力待ちを見落としません。

# ローカルのcmuxペインでSSH接続
ssh dev

# 接続したリモートシェル上でコマンドを実行しながら作業
# cmux側の通知リング・サイドバーバッジで状態を把握

パターン2: エージェントをリモートで動かす

リモートサーバー上にエージェント環境を用意し、tmuxセッション内でエージェントを実行するパターンです。GPUや大容量メモリが必要なケース、リポジトリがリモートにしかないケースで有効です。

# リモートでtmuxセッションを開始し、その中でエージェントを起動
ssh dev
tmux new -s agent
# tmuxセッション内でAIエージェントを実行

この場合、cmuxの通知リングはローカルのターミナル出力(エスケープシーケンスなど)に反応します。リモートのエージェントからローカルの通知へどこまで連携できるかは環境に依存するため、確実に通知が必要な場合はリモート側の仕組み(メール・チャット通知など)も併用すると安心です。

cmuxの通知システムはOSC 9 / OSC 99 / OSC 777といったターミナルエスケープシーケンスやcmux notifyコマンド、エージェントフックで通知を検知します。SSH越しの場合、エスケープシーケンスはリモートの出力としてローカルのcmuxに届きますが、cmux notifyコマンド自体はcmuxが動いているローカル側で実行する点に注意してください。

ローカルとリモートを橋渡しする

実務では「リポジトリはローカル、実行はリモート」のように混在することもあります。cmuxの画面分割で複数の役割を並べると、行き来がスムーズになります。

# 左ペイン: ローカルでコード編集・git操作
# 右上ペイン: SSHでリモートに接続しビルド・テスト
# 右下ペイン: 内蔵ブラウザでリモートの開発サーバーを確認

# Cmd+D で左右分割
# 右ペインで Cmd+Shift+D で上下分割
# 右下ペインで Cmd+Shift+L で内蔵ブラウザを開く

🔍 注目ポイント: リモートの開発サーバーにアクセスするには、SSHポートフォワーディング(ssh -L)でローカルポートに転送すると、cmuxの内蔵ブラウザからlocalhostとして確認できます。

# リモートの3000番ポートをローカルの3000番に転送
ssh -L 3000:localhost:3000 dev
# これでローカルブラウザから http://localhost:3000 にアクセスできる

注意点

リモート開発を快適かつ安全に行うために、押さえておきたいポイントをまとめます。

1. cmuxの機能はローカルに効く

繰り返しになりますが、cmuxの画面分割・通知・内蔵ブラウザ・セッション復元はすべてローカル側の機能です。リモートでの永続化やプロセス管理はtmux/screenに任せましょう。レイヤーを分けて考えるのが混乱しないコツです。

2. 接続断に備える

モバイル回線やVPN経由では接続が不安定になりがちです。重要な作業は必ずリモートのtmux/screenセッション内で行い、切断されても再アタッチで復帰できる状態にしておきましょう。

3. SSHのセキュリティ基本を守る

リモート開発ではSSHのセキュリティ設定が前提になります。これはcmux固有の話ではなく、一般的なSSH運用の範囲です。

  • パスワード認証ではなく公開鍵認証を使う
  • 鍵には適切なパーミッション(chmod 600)を設定する
  • 可能であれば多要素認証や踏み台サーバー(bastion)を併用する
# 鍵ファイルのパーミッションを確認・修正
ls -l ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519

4. 機密情報の扱いに注意する

リモートにAIエージェントを置く場合も、ローカルで動かす場合も、認証情報やトークンの取り扱いには注意が必要です。.envファイルや鍵をリポジトリに含めない、ログに出力しないといった基本を徹底しましょう。

SSH越しのリモート開発では、ローカルとリモートのどちらにどの情報が置かれるかを常に意識してください。特にAIエージェントに渡すコンテキストには機密情報が含まれやすいので、扱いには慎重になりましょう。

🎮 理解度チェック

Q1: cmuxでSSHリモート開発するときの正しい考え方は?

cmuxでSSHリモート開発する際の役割分担として、最も適切なものは?

Q2: SSH接続が切れても作業を失わないためには?

リモート開発でSSH接続が切れても作業を継続するために有効な方法は?

Q3: リモートの開発サーバーをcmuxの内蔵ブラウザで確認するには?

SSH先で動かしている開発サーバーを、cmuxの内蔵ブラウザでlocalhostとして確認するには?

よくある質問

Q.1

cmuxをリモートサーバーにインストールして使えますか?

先生
A.

いいえ。cmuxはGhosttyエンジンを搭載したmacOS専用のネイティブアプリで、ローカルマシン上で動作します。リモートサーバー(多くはLinux)にインストールして動かすものではありません。リモート開発では、ローカルのcmuxからsshコマンドで接続し、リモート側のターミナル多重化やセッション永続化はtmuxやscreenに任せる構成になります。

Q.2

cmuxとtmuxはどう使い分ければいいですか?

先生
A.

レイヤーが異なる補完関係です。cmuxはローカルのターミナルUI・画面分割・通知・内蔵ブラウザを担当し、tmuxはリモートサーバー上でのセッション永続化を担当します。ローカルのcmuxペインからSSH接続し、その先でtmuxを起動するのが定番の組み合わせです。詳しくは関連記事の比較も参考にしてください。

Q.3

SSH接続が切れてもリモートのビルドは続きますか?

先生
A.

リモート側のtmuxやscreenのセッション内でジョブを実行していれば、SSH接続が切れてもサーバー上で処理は継続します。単にsshで接続したシェルでそのまま実行している場合は、接続断とともにプロセスが止まることがあるため、長時間ジョブは必ずtmux/screenの中で実行しましょう。

Q.4

リモートの開発サーバーをcmuxの内蔵ブラウザで確認できますか?

先生
A.

はい。SSHのポートフォワーディング(ssh -L)でリモートのポートをローカルに転送すれば、cmuxの内蔵ブラウザからlocalhostとしてアクセスできます。ターミナルとブラウザを並べて表示できるので、リモートでもローカルと近い感覚で開発の確認ができます。

Q.5

リモートでAIエージェントを動かすときの通知はどうなりますか?

先生
A.

cmuxの通知システムはターミナルのエスケープシーケンスや cmux notify コマンド、エージェントフックで通知を検知します。SSH越しの出力に含まれるエスケープシーケンスはローカルのcmuxに届きますが、cmux notify コマンド自体はcmuxが動くローカル側で実行します。確実に通知が必要な場合は、リモート側のメールやチャット通知など別の手段も併用すると安心です。

📝 まとめ

今回は「cmuxでSSHリモート開発する方法」について学びました!

ポイントは、cmuxとリモート環境の役割分担を理解することでした。覚えておきたい点をまとめます。

  • cmuxはローカル専用: 画面分割・通知・内蔵ブラウザはすべてローカルマシン側の機能
  • SSHは普通に使える: cmuxのペインでsshコマンドを実行すれば、いつものリモート接続がそのまま使える
  • 永続化はtmux/screen: 接続断に備えてリモート側でセッションを維持し、再アタッチで作業を再開
  • 内蔵ブラウザ × ポートフォワーディング: ssh -Lでリモートの開発サーバーをローカルブラウザから確認
  • セキュリティの基本を守る: 公開鍵認証・鍵のパーミッション・機密情報の取り扱いに注意

cmuxのローカルでの快適さと、tmux/screenによるリモートの堅牢さを組み合わせれば、リモート開発でも生産性を落とさずに作業できます。

cmuxの基本機能をまだ押さえていない方は、cmuxでAIコーディングを加速するを、cmuxとtmuxの違いを詳しく知りたい方はcmux vs tmuxの記事もぜひチェックしてみてください!