スマホからClaude Codeを利用する環境構築ガイド¶
関連issue: #102 作成日: 2026-03-08
全体構成図¶
┌─────────────────┐ Tailscale VPN ┌──────────────────────────┐
│ スマホ │ ──────────────────► │ 自宅PC (Windows 11) │
│ Termux/Termius │ SSH (port 22) │ │
│ │ │ ┌─ WSL2 Ubuntu ───────┐ │
└─────────────────┘ │ │ sshd (port 2222) │ │
│ │ ↓ │ │
│ │ tmux セッション │ │
│ │ ↓ │ │
│ │ Claude Code │ │
│ │ (MyLabリポジトリ) │ │
│ └──────────────────────┘ │
└──────────────────────────┘
ポイント: - Tailscale: ポート開放・DDNS不要で外出先から安全に自宅PCへ接続 - WSL2 Ubuntu: tmux + Claude Code の実行環境 - tmux: SSH切断してもセッションが維持される(電波断対策)
ステップ一覧¶
| # | 作業 | 所要時間 | 権限 |
|---|---|---|---|
| 1 | WSL2にUbuntuをインストール | 10-15分 | 管理者 |
| 2 | WSL2内の基本セットアップ | 5分 | 一般 |
| 3 | tmuxのインストールと設定 | 5分 | 一般 |
| 4 | Claude Codeのインストール | 5分 | 一般 |
| 5 | WSL2内のSSHサーバー設定 | 10分 | 一般 |
| 6 | Windows起動時の自動起動設定 | 5分 | 管理者 |
| 7 | Tailscaleのインストール | 10分 | 管理者 |
| 8 | スマホアプリの設定 | 10分 | - |
| 9 | 接続テスト | 5分 | - |
ステップ1: WSL2にUbuntuをインストール¶
1-1. 管理者PowerShellを開く¶
Win + X → 「ターミナル(管理者)」を選択
1-2. WSL2でUbuntuをインストール¶
- 初回は再起動が必要な場合がある
- インストール後、ユーザー名とパスワードの設定を求められる
1-3. インストール確認¶
Ubuntu が Running / VERSION 2 で表示されればOK。
ステップ2: WSL2内の基本セットアップ¶
WSL2のUbuntuターミナルを開いて実行:
# パッケージ更新
sudo apt update && sudo apt upgrade -y
# 基本ツールのインストール
sudo apt install -y git curl wget unzip build-essential
2-1. MyLabリポジトリへのアクセス設定¶
WSL2からWindowsのファイルにアクセスできるが、パフォーマンスのためWSL内にクローンする方が高速:
# SSH鍵の設定(既存のWindows側の鍵をコピー)
mkdir -p ~/.ssh
cp /mnt/c/Users/kazuma/.ssh/id_rsa ~/.ssh/
cp /mnt/c/Users/kazuma/.ssh/rsa.pub ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# GitHubへの接続テスト
ssh -T git@github.com
# リポジトリをクローン
cd ~
git clone git@github.com:KZ55230/MyLab.git
注意: Windows側(
/mnt/d/Kazuma_Teramachi/MyLab)を直接使うことも可能だが、 WSL2のファイルシステム(~/MyLab)の方がI/Oが高速。 両方使う場合はブランチの競合に注意。
ステップ3: tmuxのインストールと設定¶
3-1. インストール¶
3-2. 設定ファイル作成¶
cat > ~/.tmux.conf << 'EOF'
# === スマホ操作最適化 ===
# マウス操作(タップ)を有効化
set -g mouse on
# プレフィックスキーをCtrl+aに変更(スマホで押しやすい)
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# ペイン分割のショートカット
bind | split-window -h
bind - split-window -v
# ペイン移動をVim風に
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# ステータスバーの設定
set -g status-bg colour235
set -g status-fg colour136
set -g status-left '[#S] '
set -g status-right '%Y-%m-%d %H:%M'
# スクロールバッファを大きく
set -g history-limit 10000
# ウィンドウ番号を1から開始
set -g base-index 1
setw -g pane-base-index 1
# 256色表示
set -g default-terminal "screen-256color"
# Escキーの遅延をなくす
set -sg escape-time 0
EOF
3-3. 基本的な使い方¶
# 新規セッション作成
tmux new -s claude
# セッションからデタッチ(切断してもセッション維持)
# Ctrl+a → d
# セッションに再接続
tmux attach -t claude
# セッション一覧
tmux ls
ステップ4: Claude Codeのインストール¶
4-1. Node.jsのインストール¶
# nvm(Node Version Manager)をインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# シェルを再読み込み
source ~/.bashrc
# Node.js LTSをインストール
nvm install --lts
4-2. Claude Codeのインストール¶
4-3. 認証設定¶
WSL2からブラウザが開かない場合は、表示されるURLをWindows側のブラウザに貼り付けて認証。
ステップ5: WSL2内のSSHサーバー設定¶
5-1. OpenSSHサーバーのインストール¶
5-2. SSH設定の編集¶
sudo tee /etc/ssh/sshd_config.d/mobile.conf << 'EOF'
# WSL2用SSH設定
Port 2222
ListenAddress 0.0.0.0
PasswordAuthentication yes
PubkeyAuthentication yes
# セッション維持設定(スマホの電波断対策)
ClientAliveInterval 60
ClientAliveCountMax 10
# X11転送は不要
X11Forwarding no
EOF
Port 2222 を使用(Windows側のSSHと競合しないため)
5-3. SSHサーバーの起動¶
5-4. 公開鍵認証の設定(推奨)¶
スマホ側で鍵を生成してから、公開鍵をWSL2に登録:
# スマホ側(Termux)で鍵生成後、公開鍵を登録
# mkdir -p ~/.ssh
# echo "スマホの公開鍵" >> ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keys
ステップ6: Windows起動時の自動起動設定¶
WSL2のsshdとtmuxはPC再起動で停止するため、自動起動を設定。
6-1. WSL起動スクリプトの作成¶
Windows側に保存:
6-2. タスクスケジューラに登録¶
管理者PowerShellで実行:
$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-WindowStyle Hidden -File C:\Users\kazuma\scripts\start-wsl-services.ps1"
$trigger = New-ScheduledTaskTrigger -AtLogon
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName "WSL-SSH-AutoStart" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Description "WSL2のSSHサーバーを自動起動"
6-3. ポートフォワーディング(WSL2 → Windows)¶
WSL2は仮想ネットワーク上にあるため、Windows側でポート転送が必要:
# 管理者PowerShellで実行
# WSL2のIPを取得してポートフォワード設定
$wslIp = (wsl -d Ubuntu hostname -I).Trim()
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=$wslIp
# 確認
netsh interface portproxy show all
注意: WSL2のIPはPC再起動で変わる場合がある。 タスクスケジューラのスクリプトにポートフォワード設定も含めると良い。
6-4. 起動スクリプトの改良版¶
# C:\Users\kazuma\scripts\start-wsl-services.ps1
# WSL2のSSHを起動
wsl -d Ubuntu -u root -- service ssh start
# WSL2のIPを取得
$wslIp = (wsl -d Ubuntu hostname -I).Trim().Split(" ")[0]
# 既存のポートプロキシをリセットして再設定
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0 2>$null
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=$wslIp
ステップ7: Tailscaleのインストール¶
外出先から自宅PCに安全に接続するためのVPN。ポート開放不要。
7-1. Windows側にTailscaleをインストール¶
- https://tailscale.com/ でアカウント作成(GitHub連携で簡単)
- Windows用クライアントをダウンロード・インストール
- ログインして接続
7-2. スマホにもTailscaleをインストール¶
- Android: Google Play Store から「Tailscale」
- iOS: App Store から「Tailscale」
同じアカウントでログイン。
7-3. 接続確認¶
Tailscaleに接続すると、各デバイスに 100.x.x.x のIPアドレスが割り当てられる。
このIPをスマホのSSHアプリで接続先に使う。
7-4. Windowsファイアウォールの設定¶
Tailscale経由の接続にはファイアウォールのルール追加が必要な場合がある:
# 管理者PowerShellで実行
New-NetFirewallRule -DisplayName "WSL2 SSH (Tailscale)" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow -Profile Any
ステップ8: スマホアプリの設定¶
Android: Termux(推奨)¶
- F-Droid から Termux をインストール(Google Play版は古いので非推奨)
- Termux内でセットアップ:
# パッケージ更新
pkg update && pkg upgrade
# SSHクライアントインストール(通常は初期搭載)
pkg install openssh
# SSH鍵の生成
ssh-keygen -t ed25519 -C "termux-mobile"
# 公開鍵を表示(WSL2側に登録する)
cat ~/.ssh/id_ed25519.pub
- 接続テスト:
iOS: Termius¶
- App Store からインストール
- 「New Host」で以下を設定:
- Hostname: TailscaleのIP(
100.x.x.x) - Port:
2222 - Username: WSL2のユーザー名
- Password or Key: 設定に応じて
ステップ9: 接続テスト¶
9-1. 同一ネットワークでテスト¶
9-2. tmux + Claude Code の動作確認¶
# WSL2に接続後
tmux new -s claude
cd ~/MyLab
claude
# Claude Codeが起動したら、Ctrl+a → d でデタッチ
# 再接続: tmux attach -t claude
9-3. Tailscale経由テスト¶
- スマホのWiFiをOFFにしてモバイル回線にする
- Tailscaleアプリを有効化
- SSH接続:
9-4. 電波断からの復帰テスト¶
- tmux内でClaude Codeを起動
- スマホの機内モードをON → 数秒後OFF
- 再度SSH接続 →
tmux attach -t claude - セッションが維持されていればOK
日常の使い方¶
外出先からClaude Codeを使う流れ¶
# 1. スマホでTermux/Termiusを起動
# 2. SSH接続
ssh -p 2222 ユーザー名@100.x.x.x
# 3. 既存セッションがあれば再接続、なければ新規作成
tmux attach -t claude 2>/dev/null || tmux new -s claude
# 4. Claude Codeを起動
cd ~/MyLab
claude
# 5. 作業終了時はデタッチ(Ctrl+a → d)
# ※ Claude Codeは動き続ける
便利なエイリアス(WSL2の ~/.bashrc に追加)¶
# Claude Code用tmuxセッションに接続/作成
alias cc='tmux attach -t claude 2>/dev/null || tmux new -s claude -c ~/MyLab'
トラブルシューティング¶
WSL2のIPが変わって接続できない¶
# Windows側で再設定
$wslIp = (wsl -d Ubuntu hostname -I).Trim().Split(" ")[0]
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=$wslIp
SSH接続がすぐ切れる¶
~/.ssh/config(スマホ側)に以下を追加:
tmuxセッションが見つからない¶
Claude Codeの認証が切れた¶
代替案: Claude Code Remote Control (/rc)¶
Claude Codeには /rc(Remote Control)機能があり、Webブラウザ経由でリモート操作可能。 SSH + tmux構成が安定したら、こちらも試す価値あり。
詳細は公式ドキュメントを参照。この方法ならスマホのブラウザだけで操作可能になる可能性がある。
セキュリティ注意事項¶
- パスワード認証は公開鍵認証に置き換えることを推奨(設定完了後)
- Tailscaleを使うため、ルーターのポート開放は不要(絶対に22番ポートを外部公開しない)
- WSL2内のCredentials管理: Windows側の
Credentials/を使う場合はシンボリックリンクで対応 - PC電源: スリープしないよう電源設定を変更するか、Wake-on-LANを検討