外出先でのClaude Code
私は携帯電話から6つのClaude Codeエージェントを並列で実行しています。ノートパソコンもデスクトップもなく、iOSのTermiusとクラウドVMだけです。
セットアップ
flowchart LR
A[Phone] -->|Termius + mosh| B[Tailscale VPN]
B --> C[Vultr VM]
C --> D[Claude Code]
D -->|PreToolUse hook| E[Poke webhook]
E -->|Push notification| A
サイクルは、タスクを開始し、電話をポケットに入れ、Claudeが入力を必要とするときに通知を受け取ることです。どこからでも非同期開発。
インフラストラクチャ
シリコンバレーのVultr VM:
| Spec | Value |
|---|---|
| Instance | vhf-8c-32gb |
| Cost | $0.29/時間 (稼働時は~$7/日) |
| Access | Tailscaleのみ (公開SSHなし) |
作業時のみ支払います。2つのスクリプトがライフサイクルを管理します:
vm-start # Start VM, wait for Tailscale, connect via mosh
vm-stop # Halt VM
また、Vultr APIを直接呼び出すiOS Shortcutも持っています。Termiusを開く前に、電話からVMを起動します。
VMの公開IPにはSSHリスナーがありません。すべてのアクセスはTailscaleのプライベートネットワークを経由します。多層防御: クラウドファイアウォールはTailscale調整以外のすべてをブロック、バックアップとしてのローカルnftables、念のためfail2ban。
モバイルターミナル
TermiusはiOS/AndroidでSSHとmoshを処理します。moshが鍵です。ネットワークの移行に耐えられます。WiFiからセルラーに切り替え、デッドゾーンを歩き、電話をスリープにします。接続は持続します。
mosh --ssh="ssh -p 47892" [email protected]
1つの注意点: moshはSSHエージェントを転送しません。GitHub認証が必要なgit操作には、tmux内で通常のSSHを使用します。
セッション永続性
シェルはログイン時に自動的にtmuxにアタッチします。Termiusを閉じて、数時間後に再度開いても、すべてがそこにあります。
# In .zshrc
if [[ -z "$TMUX" ]]; then
tmux attach -t main 2>/dev/null || tmux new -s main
fi
複数のClaudeエージェントが並列ウィンドウで実行されます。新しいウィンドウにはC-a c、切り替えにはC-a n。電話のキーボードでうまく機能します。
プッシュ通知
これがモバイル開発を実用的にするものです。通知がなければ、常にターミナルをチェックすることになります。通知があれば、離れることができます。
~/.claude/settings.jsonのフック:
{
"hooks": {
"PreToolUse": [{
"matcher": "AskUserQuestion",
"hooks": [{
"type": "command",
"command": "~/.claude/hooks/poke-notify.sh question"
}]
}]
}
}
ClaudeがAskUserQuestionを呼び出すと、フックが起動します。シンプルなスクリプトが質問を抽出し、PokeのwebhookにPOSTします:
QUESTION=$(echo "$EVENT_DATA" | jq -r '.tool_input.questions[0].question')
MESSAGE="$PROJECT_NAME: Claude needs input - $QUESTION"
curl -X POST "$API_URL" -d "{\"message\": \"$MESSAGE\"}"
電話が振動します。通知が質問を表示します。タップし、応答し、続けます。
信頼モデル
Claude Codeを許可モードで実行しています。VMは隔離されています。本番システムへのアクセスはなく、開発に必要なもの以外の秘密はありません。最悪の場合: Claudeが使い捨てVMで予期しないことをします。
コスト管理が別のレイヤーを追加します。VMは$0.29/時間です。何かが暴走しても、1日の上限は制限されています。
並列開発
Git worktreesで複数の機能を同時に実行できます:
~/Code/myproject/ # main
~/Code/myproject-sidebar/ # feature branch
~/Code/myproject-dark-mode/ # another feature
各worktreeは、Claudeエージェントを持つ独自のtmuxウィンドウを取得します。ポート割り当てはハッシュベース—ブランチ名から決定論的で、競合なし:
hash_val = sum(ord(c) for c in branch_name)
django_port = 8001 + (hash_val % 99)
6つのエージェント、6つの機能、1つの電話。
これが可能にすること
コーヒーを待っている間にPRをレビュー。電車でリファクタリングを開始。テレビを見ながらソファからバグを修正。
パターン: Claudeに10〜20分かかるタスクを開始し、他のことをし、通知を受け取り、応答し、繰り返します。開発は、専用のデスク時間を必要とする代わりに、1日の隙間に収まります。
コンポーネント
| Tool | Purpose |
|---|---|
| Vultr | クラウドVM ($0.29/時間、従量課金) |
| Tailscale | プライベートネットワーク、安全なアクセス |
| Termius | iOS/Android SSHクライアント |
| mosh | ネットワーク耐性シェル |
| tmux | セッション永続性 |
| Poke | webhook経由のプッシュ通知 |
| Claude Code | 実際の作業 |
セットアップはClaude Code 1セッションで構築されました。Vultr APIキーとghへのアクセスを与え、安全な開発VMを要求しました。今、私は電話からコーディングしています。
この記事についてHacker Newsで議論する