Claude Codeを自宅PCで常時起動する
public.icon
https://gyazo.com/30a7bce6c522c65140b40c90d597cab1
この記事について
MacBookを閉じてもClaude Codeが動き続け、スマホからも操作できる環境を構築した
背景と課題
Claude CodeはAnthropicが提供するターミナルベースのAIコーディングツール
通常はMacやPCのターミナルで起動し、そのターミナルを閉じるとセッションが終了する
これだと困ること:
MacBookを閉じたらClaude Codeが止まる
MacBookを閉じてもスリープしないアプリはあるが、出先などではインターネットが途切れることもある
バッテリーの観点からもMacBookを常時起動したくない
やりたかったこと
自宅の常時起動PC(VPS)にClaude Codeを置いて、MacBookへの依存をなくす
MacBookを閉じてもClaude Codeが動き続ける
スマホからいつでも進捗確認・指示ができる
複数プロジェクトのセッションを作成・切り替えできる
Max $200サブスクの範囲で、追加のAPI費用をかけない
最終構成
code:text
└─ tmux(mainセッション)
├─ ウィンドウ0: claude (project-a)
└─ ウィンドウ1: claude (project-b)
スマホ → Claude公式アプリ → Remote Control → 同じセッションに接続 前提条件
この構成を実現するには以下が必要:
1. 自宅に常時起動のPCがあること
Windows + WSL(Windows Subsystem for Linux)、またはLinuxマシン
常時電源ONでネットワークに接続されている必要がある
WinにWSLを入れて、OpenSSHでSSH接続できるようにする
2. Tailscaleで自宅PCに外部からアクセスできること
自宅PCにグローバルIPやポート開放なしでどこからでもアクセス可能にする
自宅PC・MacBook・スマホにインストールするだけでプライベートネットワークが構成される
3. MacBookからSSHで自宅PCに接続できること
SSH鍵の作成・配置が済んでいること
4. 自宅PCにClaude Codeがインストール・ログイン済みであること
Node.js(v22以上)、tmux、Claude Codeがインストール済み
Claude CodeにMax/Proプランでログイン済み(claude auth status で確認)
使用技術の説明
tmux
ターミナルの中に「仮想ターミナル」を作るツール
SSH接続が切れても、tmux内のプロセスは動き続ける
これがClaude Codeを「閉じても動き続ける」を実現するキーとなる技術
autossh
SSH接続を監視し、切断されたら自動で再接続してくれるツール
普通のSSHだとネットワークが不安定なとき手動で再接続する必要がある
Claude Code Remote Control
Claude Codeの公式機能(2026年2月リリース)
ターミナルで動いているClaude Codeセッションを、ブラウザやスマホのClaude公式アプリから操作できる
UIはclaude.aiのチャット画面と同じなので、スマホでも快適に操作可能
セッション一覧から複数セッションを切り替えられる
構築手順
Step 1:VPS側のtmux自動接続を設定
SSH接続時に自動でtmuxのmainセッションに入るようにする
VPS側の ~/.bashrc の末尾に追記:
code:bash
# tmux mainセッションに自動接続
tmux attach -t main 2>/dev/null || tmux new-session -s main
fi
これにより:
SSHで接続すると自動でtmuxのmainセッションに入る
mainセッションがあればattach(再接続)、なければ新規作成
すでにtmux内にいる場合はスキップ(二重起動防止)
Step 2:Mac側の接続スクリプトを作成
~/bin/connect-home として保存し、chmod +x で実行権限を付与
code:bash
set -euo pipefail
SSH_KEY="$HOME/.ssh/id_ed25519_tailscale"
SERVER="user@VPSのIPアドレス"
SSH_OPTS="-i $SSH_KEY -o ServerAliveInterval=10 -o ServerAliveCountMax=3"
export AUTOSSH_POLL=10
exec autossh -M 0 -t $SSH_OPTS "$SERVER"
ポイント:
tmuxのコマンドはMac側に書かない(VPS側の.bashrcに任せる)
autossh経由でリモートのtmuxコマンドを渡すとうまく動かないケースがあったため
ServerAliveInterval/CountMax でSSH接続の死活監視
Step 3:使い始める
code:bash
# MacからVPSに接続(自動でmainセッションに入る)
connect-home
# Claude Codeを起動(Remote Controlがデフォルトonならスマホからもすぐ操作可能)
claude --cwd ~/project-a
# 別のプロジェクトも並行して動かしたい場合
# Ctrl+b c で新しいウィンドウを作成
# Ctrl+b , でウィンドウに名前をつける
claude --cwd ~/project-b
日常のワークフロー
作業開始
1. Macでターミナルから connect-home → 自動でmainセッションに入る
2. claude --cwd ~/project-a でClaude Code起動
3. 別プロジェクトは Ctrl+b c で新ウィンドウ → claude --cwd ~/project-b
外出・MacBookを閉じる
そのまま閉じてOK
VPS上のtmux + Claude Codeは動き続ける
スマホのClaude公式アプリからRemote Controlでセッション一覧を見て操作可能
作業再開
connect-home → 同じmainセッションに復帰
Ctrl+b w でウィンドウ一覧から作業中のプロジェクトを選択
終了したいとき
Claude Codeを終了:セッション内で /exit
ウィンドウを閉じる:exit
全Claude Code停止:pkill claude
全tmux停止:tmux kill-server
構築で詰まったポイント
1. tmuxをどこで動かすか
最初Mac側のtmuxの中でSSHしていた
Macを閉じる → Mac側tmuxごとSSH切断 → Claude Code死亡
解決 tmuxはVPS側で動かす。MacはSSHクライアントとしてだけ使う
2. autossh経由でtmuxコマンドが正しく渡らない
SSHするたびに番号付きセッション(101, 102, ...)が量産された
autossh経由で tmux new-session -A -s main を渡しても正しく動かなかった
解決 connect-homeスクリプトからtmuxコマンドを削除し、VPS側の.bashrcで自動接続する方式に変更
3. WSLでSSH環境変数が空になる
SSH接続の検出に SSH_CONNECTION 環境変数を使おうとしたが、WSL経由だと空
Mac → Windows OpenSSH → WSL bash の流れで、SSH変数がWSLに渡らない
体験の感想
Remote Controlのおかげでスマホからの操作がclaude.aiのチャットUIと同じ体験で快適
セッション一覧で複数プロジェクトを簡単に切り替えられる
MacBookへの依存がなくなった。スマホだけでも指示・確認ができる
サブスク(Max $200)の範囲内で追加コストなし
セッションの移動について
「MacBookで作業していたClaude Codeのセッションを、そのままVPSに移動したい」
現時点ではマシン間のセッション移動はできない
Remote Controlは「同じマシンのセッションを別デバイスから操作する」機能
セッション(会話履歴)はローカルマシンに保存されており、別マシンへの転送機能はない
Web(claude.ai)→ ローカルCLI へのテレポートは可能(一方向のみ)
ローカルCLI → 別マシン は不可
関連するFeature Request
現実的な対処法
最初からVPS側で作業する — 移動の問題自体が発生しない
CLAUDE.mdにプロジェクトのコンテキストを書いておく — VPSで新セッションを立てても文脈を引き継げる
未解決・今後の期待
VPS再起動時にtmuxセッションが消える(tmux-resurrectプラグインで対策可能)
現時点ではヘッドレスモード(-p)とRemote Controlの組み合わせは不可
これが実装されればデーモンとして常駐でき、tmuxも不要になる
現時点ではAgent SDKはAPI Key(従量課金)のみ