この記事は「外出先のスマホから自宅マシン群の Claude Code で開発したい」エンジニア向け。tmux + Tailscale + Termius を組み合わせ、古いノートPC を 接続ハブ兼 Claude 母艦にして、画像生成 GPU・iOS 開発用 Mac・常時稼働 Raspberry Pi を使い分ける構成を全部書く。プロジェクトごとに tmux セッションを分ける運用も載せる。
この記事でできること
- 外出先のスマホ(iPhone / Android)から自宅の Claude Code セッションに接続して開発を続けられる
- 母艦をハブにして、用途別に GPU マシン・Mac・Raspberry Pi を使い分けられる
- プロジェクトごとに独立した tmux セッションを持って、画像生成・iOS 開発・投資ボット運用を並行で抱えても混ざらない
- tmux で永続セッション化するので、スマホ画面をオフにしても処理が続く
- 必要なものは古いノートPC 1 台 + スマホ。VPS 月額もポート開放も不要
3 つのアプローチ比較
「Claude Code をどこに置くか」で構成のクセが分かれる。本記事の 母艦ハブ型 は Claude Code を母艦 1 か所に集約し、重い処理や開発対象 OS は周辺マシンに ssh で逃がす。1 台に全部詰める単一マシン型と、各端末に Claude Code を常駐させて使い分ける分散型の中間に当たる。
| 構成 | 母艦ハブ型 (本記事) |
単一 Mac で全部 | 全端末で分散 (各マシンに Claude Code を常駐) |
|---|---|---|---|
| 必要マシン | 用途別の周辺マシン × N + 母艦 1 台 | 高スペック Mac 1 台 | 用途別マシン × N |
| 複数プロジェクト並行時の安定性 | ○ | ✕ | ○ |
| 機能横断ワークフロー | ○ | ○ | ✕ |
| Tailscale ノード数 | 2 | 2 | N+1 |
表を読み解くと 3 案のトレードオフが見える。例として SDXL で画像生成 → iOS アプリのアセットに組み込み → Mac で archive という機能横断ワークフローを Claude Code に任せたい場面で考える。
- 単一マシン型: 1 台で完結するので機能横断は強い。ただし画像生成まで賄える GPU 内蔵 Mac は M3 Max / M4 Max 級が必要で初期コストが現実的でない。重い画像生成中に同居するトレードボットや IDE がリソース競合で詰まりやすい。
- 分散型: マシンごとに独立しているので並行時の安定性は高い。一方、各マシンの Claude Code がそれぞれの島に閉じているので、機能横断ワークフローでは 人間が「画像 ready → Mac に渡す → ビルド」のタスク分割と引き渡しを毎回手で切り出す 必要がある。
- 母艦ハブ型: 並行も横断も両立する。1 つの Claude Code セッションが ssh +
scp/rsyncで各マシン間のファイルを動かせるので、機能横断ワークフローも 1 回の依頼でまるごと Claude Code に丸投げできる。コストは分散型に対して母艦 1 台分の追加が乗るが、母艦は低スペックの不要 PC の流用で足りるので増分は最小。
構成図
Termius アプリ
Tailscale (WireGuard)
WSL2 + tmux × N セッション + Claude Code
▼ ▼ ▼
画像生成・LLM 推論
iOS / macOS 開発
常時稼働ボット
スマホ → 母艦の経路だけ Tailscale。母艦から周辺マシンへは LAN 内の ssh で飛ぶ。周辺マシンを Tailscale に入れないので、ハイスペック機材に Tailscale デーモンや MagicDNS 名を増やさず、外部から触れる接続点を母艦 1 台に集約できる。
使ったもの
- 母艦ノートPC: 第7〜10世代 Core i5 / メモリ 8GB あれば十分。バッテリーが死んでいても AC 直挿しで OK。常時電源 ON で運用
- GPU マシン(任意): 画像生成や AI 推論を任せたい場合のみ。自分は GTX 1660 SUPER 搭載のミニ PC を使っている
- Mac(任意): iOS / macOS アプリ開発する場合のみ。Xcode が動けば Mac mini / 旧 MacBook でも可
- Raspberry Pi(任意): 常時稼働させたい軽量ボット用。投資シミュレーション・MQTT ブローカ・cron 系をここに集約
- スマホ: iOS / Android 問わず。Bluetooth キーボードがあると長時間でも疲れにくい
- Termius: 無料プランで ssh + 鍵管理ができる。複数端末で設定同期したい場合のみ Pro が必要
- Tailscale: 母艦とスマホの 2 ノードだけに入れる。WireGuard ベースの mesh VPN で個人利用は無料(最大 100 デバイス)
- tmux: 永続セッションを担う。Ubuntu なら apt 一発
- WSL2(母艦が Windows の場合): Linux 環境を Windows 内に共存させる
手順
1. 母艦に WSL2 + sshd + tmux を入れる
母艦が Windows の場合、PowerShell を管理者権限で開いて WSL2 + Ubuntu をインストール。
wsl --install -d Ubuntu
WSL2 の中で systemd を有効にすると sshd が systemctl で扱える。/etc/wsl.conf に以下を追記して wsl --shutdown で再起動する。
[boot]
systemd=true
続けて WSL2 内で sshd と tmux を入れる。
$ sudo apt update
$ sudo apt install -y openssh-server tmux
$ sudo systemctl enable --now ssh
母艦が Linux ならこの 1 コマンドで終わる。Mac なら brew install tmux + システム環境設定でリモートログインを ON にする。
2. Tailscale は母艦とスマホだけに入れる
Tailscale 公式でアカウントを作る(Google / GitHub / Microsoft でログイン)。VPN ノードに加えるのは母艦とスマホの 2 台だけ。GPU マシン・Mac・Raspberry Pi は LAN 内に閉じたままで触らない。これが母艦ハブ型の核で、ハイスペック機材側に Tailscale デーモンを増やさず、外部からの侵入経路も母艦 1 点に集約できる。
母艦(Linux / WSL2)に Tailscale を入れる:
$ curl -fsSL https://tailscale.com/install.sh | sh
$ sudo tailscale up
表示された URL をブラウザで開いて承認すると母艦が Tailscale ネットワークに参加する。スマホには App Store / Google Play で Tailscale アプリを入れて同じアカウントでログインするだけ。
Tailscale 管理画面で母艦に laptop-host のような MagicDNS 名が振られ、スマホからは ssh username@laptop-host でどこからでも母艦に繋がる。GPU マシン・Mac・Raspberry Pi には MagicDNS 名は振らない。母艦から先の名前解決は次の手順 5 のとおり LAN 内で完結させる。
3. 母艦に永続 tmux セッションを用意する
母艦に ssh で入って claude という名前のセッションを作る。
$ tmux new -s claude
このセッション内で claude コマンド(Claude Code CLI)を起動する。デタッチは Ctrl-b → d。スマホ側で Termius を閉じても、この tmux セッションはサーバ側で動き続ける。
再接続したいときは:
$ tmux attach -t claude
4. Termius にホスト登録
スマホで Termius を開いて新規ホスト追加。
- Hostname:
laptop-host(Tailscale の MagicDNS 名)または Tailscale IP(100.x.y.z) - Username: 母艦のユーザー名
- Auth: Termius が生成する ssh 鍵を使うのが楽。生成した公開鍵を母艦の
~/.ssh/authorized_keysに追記する
接続したら、ログイン直後に tmux attach -t claude を打つだけで Claude Code 画面が再現する。Termius のスニペット機能に登録しておくと 1 タップで再接続できる。
5. ssh 公開鍵を周辺マシンに配る(パスワードレス)
母艦から周辺マシンへの ssh は パスワードレスの公開鍵認証に統一しておく。Claude Code は対話の途中でパスワード入力を待たされると詰まりやすく、鍵認証なら ssh gpu-host コマンド のように一行で完結する。
母艦で ed25519 鍵を 1 ペア作り(無ければ)、同じ公開鍵を GPU マシン・Mac・Raspberry Pi の ~/.ssh/authorized_keys に配る:
$ ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 # 既にあればスキップ
$ ssh-copy-id user@gpu-host
$ ssh-copy-id user@mac-host
$ ssh-copy-id user@pi-host
母艦の鍵 1 本で GPU・Mac・Pi のどこにでも横断的に飛べるようになる。Claude Code は母艦上で動いているので、結果的に Claude Code が周辺マシンを全部使い分けられる状態になる。
逆に Claude Code に触らせたくない環境ができたら、そのマシンの authorized_keys から該当行を消すだけで良い。母艦側の鍵や ~/.ssh/config はそのままで、特定マシンだけ縁を切るという制御を後からピンポイントで効かせられる。
6. 母艦から周辺マシンへ ssh で飛ぶ
周辺マシンは Tailscale に乗っていないので、母艦からは LAN 内の ssh で繋ぐ。Linux / Mac / Raspberry Pi で avahi-daemon(mDNS)を有効にしておけば gpu-host.local / mac-host.local / pi-host.local で名前解決できる。Avahi が使えない環境では、ルータの DHCP 予約で固定 IP を振って母艦の ~/.ssh/config に Host gpu-host として書いておけば、同じく ssh gpu-host の短い名前で叩ける。Claude Code で重い処理を投げたいときは、tmux の別ウィンドウや別ペインから ssh しておくとそのままコマンドを叩ける。
# 母艦の tmux 内で別ウィンドウを開いて
$ ssh gpu-host
# そこで重い処理を起動
$ python sdxl_batch.py
# detach: Ctrl-b d
iOS 開発は母艦の Claude Code から ssh mac-host 経由で Xcode プロジェクトのソースを直接編集できる(ビルドは Mac 側で xcodebuild を叩く形)。Raspberry Pi の常時稼働ボットも同じパターンで、母艦から ssh pi-host してログを覗いたりコードを直したりする。
プロジェクトごとに tmux セッションを分ける
母艦に Claude Code セッションを 1 本だけ持つ運用だと、画像生成のジョブと iOS 開発の会話が同じ tmux に流れ込んで邪魔になる。プロジェクトごとに 独立した tmux セッションを持っておくと、用途別にスマホで切り替えられる。
セッション起動スクリプト
自分は ~/start_claude_<project>.sh という起動スクリプトを母艦のホームに置いている。中身は名前だけ違う以下のテンプレート:
#!/bin/sh
NAME=claude_blog
if [ -n "$SSH_CONNECTION" ] && command -v tmux &>/dev/null; then
if tmux has-session -t $NAME 2>/dev/null; then
# セッションが存在すれば自動アタッチ
tmux attach -t $NAME
else
# なければ新規作成
tmux new-session -s $NAME
fi
fi
ポイントは 2 つ。SSH_CONNECTION 環境変数で ssh 経由のときだけ tmux に入る(cron や直接ログインでは発動しない)、has-session で再接続を冪等にしている(毎回新規でも、再アタッチでも同じスクリプトでよい)。
運用しているセッション一覧
| スクリプト | tmux セッション名 | 用途 | 主な作業先 |
|---|---|---|---|
start_claude_blog.sh | claude_blog | ブログ自動生成 | 母艦内 |
start_claude_image.sh | claude_image | 画像生成パイプライン保守 | GPU マシン |
start_claude_ios.sh | claude_ios | iOS アプリ開発 | Mac |
start_claude_sim.sh | claude_sim | 投資シミュレーション | Raspberry Pi |
各セッションは用途と作業対象マシンを分担する。セッションに入ったら cd ~/projects/<project> したり ssh <target-host> したりして、その用途で必要な場所に移動する。
Termius 側のスニペット運用
Termius は接続後に実行する「スニペット」を保存できる。プロジェクトごとに以下のようなスニペットを作っておくと、母艦に ssh した直後の画面で 1 タップ起動できる。
# Snippet 名: blog
bash ~/start_claude_blog.sh
# Snippet 名: image
bash ~/start_claude_image.sh
# Snippet 名: ios
bash ~/start_claude_ios.sh
あるいは Termius の同一ホストに対して別エイリアスを作って、それぞれの「Startup snippet」に上記コマンドを設定すると、ホスト一覧から直接プロジェクト別セッションに入れる。
ハック拡張アイデア
- mosh を入れる: 電車の地下区間など回線が瞬断する環境で再接続が劇的に楽になる。Termius の Pro プランが必要
- 音声入力: スマホの IME を音声入力に切り替えると、Termius の入力欄に直接喋り込める。長文プロンプトを打つときはこれが楽
- tmux のキーバインド変更: スマホのソフトキーボードで
Ctrl-bは押しにくいので、~/.tmux.confでプレフィックスをCtrl-aに変更しておく - Tailscale ACL をスマホ → 母艦のみに制限: Tailscale ネットワーク内の許可経路を 1 本に絞る。GPU マシンや Mac は元から Tailscale に居ないので、スマホが盗まれてもアクセス可能なのは母艦だけで済む
- 長時間ジョブの通知: tmux 内で動いているジョブの完了を Slack や LINE Notify に送ると、外出先でも完走を把握できる
詰まりポイント
- WSL2 がアイドルで落ちる: tmux で何かが動いていれば落ちないが、空セッションだと数分で停止する。必ず
tmux new -s claude内で何かを走らせておく - WSL2 の sshd ポートが 22 で衝突する: Windows 側の OpenSSH と被る場合は
/etc/ssh/sshd_configでPort 2222に逃がす。Termius 側のホスト設定でもポート指定する - Tailscale の MagicDNS が引けない: 管理画面で MagicDNS が ON になっているか確認。OFF だと数値 IP(
100.x.y.z)でしか繋がらない - tmux のスクロールがスマホで効かない:
Ctrl-b→[でコピーモードに入ると指でスクロールできる - start_claude_*.sh が ssh で起動しない:
~/.bash_profileや~/.bashrcから呼ばないと発動しない。Termius のスニペットから明示的に呼ぶか、ホストごとの startup command に登録する - 同じセッションに 2 端末から同時にアタッチして操作が割れる: 共有を切りたいときは
tmux attach -d -t claude_blog(既存接続を切ってからアタッチ)にする
よくある質問
Q. 母艦をハブにするメリットは?
A. 外部接続点を母艦 1 点に絞れるので、ハイスペック機材に Tailscale デーモンや MagicDNS 名を入れずに済む。スマホで覚えるホストも 1 つで済み、ACL も簡素。プロジェクトとマシンのルーティングは母艦内のスクリプトに閉じ込められるので、機材構成を入れ替えてもスマホ側の設定はいじらなくていい。
Q. プロジェクトごとに tmux セッションを分けるのは過剰では?
A. 1 プロジェクトしか持っていなければ過剰。複数プロジェクトを並行で抱える場合、Claude Code はセッション単位でコンテキストが混ざるので分けたほうが事故が減る。start_claude_<name>.sh は 10 行で済むので始めやすい。
Q. Tailscale ではなく自前の VPN や ngrok でもいい?
A. 動く。ただし Tailscale は無料・設定 5 分・MagicDNS 付きで、個人用途なら明確な乗り換え理由がない。ngrok 系は外部公開 URL を発行する性質上、攻撃面が広がるので常用は避けたい。
Q. 公式の Claude Code Remote Control があるなら、わざわざ ssh する必要は?
A. 公式 Remote Control は便利だが、ローカルファイルや別マシンへの ssh、自前のスクリプトなど「Claude Code の外側」で何かしたい場面は ssh のほうが小回りが効く。両方併用してもいい。
Q. iPad / Android タブレットでも同じ構成で動く?
A. 動く。むしろ画面が広いぶん作業効率は上がる。Termius / Tailscale ともに iPadOS / Android タブレット向けに同じアプリが提供されている。
※本記事の手順は執筆時点(2026 年 5 月)で動作確認していますが、Tailscale / Termius / WSL2 のアップデートで挙動が変わる場合があります。動かない場合は コメント欄でお知らせください。
まとめ
tmux + Tailscale + Termius の 3 点セットに「母艦をハブとして周辺マシンを使い分ける」「プロジェクトごとに tmux セッションを切る」を加えると、外出先のスマホからでも複数プロジェクトを並行して回せる。古いノートPC の再活用先としても向いていて、画像生成・iOS 開発・常時稼働ボットといった性格の違うワークロードを同居させても接続が落ちにくい。
この記事が役に立ったら X(Twitter)でシェアしてもらえると喜びます。
関連記事
- ブログ用 AI 画像をローカル GPU で生成する【SDXL + IP-Adapter + img2img】
- Raspberry Pi Pico 2 W + MicroPython で温湿度センサーを自作する
参考
※この記事は Claude Code を使った自動更新を試しています。
0 件のコメント:
コメントを投稿