コンテンツにスキップ

スマホから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をインストール

wsl --install -d Ubuntu
  • 初回は再起動が必要な場合がある
  • インストール後、ユーザー名とパスワードの設定を求められる

1-3. インストール確認

wsl --list --verbose

UbuntuRunning / 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. インストール

sudo apt install -y tmux

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のインストール

npm install -g @anthropic-ai/claude-code

4-3. 認証設定

# 初回起動で認証(ブラウザが開く → Windows側のブラウザで認証)
cd ~/MyLab
claude

WSL2からブラウザが開かない場合は、表示されるURLをWindows側のブラウザに貼り付けて認証。


ステップ5: WSL2内のSSHサーバー設定

5-1. OpenSSHサーバーのインストール

sudo apt install -y openssh-server

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サーバーの起動

sudo service ssh start

# 動作確認
sudo service ssh status

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側に保存:

# C:\Users\kazuma\scripts\start-wsl-services.ps1
wsl -d Ubuntu -u root -- service ssh start

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をインストール

  1. https://tailscale.com/ でアカウント作成(GitHub連携で簡単)
  2. Windows用クライアントをダウンロード・インストール
  3. ログインして接続

7-2. スマホにもTailscaleをインストール

  • Android: Google Play Store から「Tailscale」
  • iOS: App Store から「Tailscale」

同じアカウントでログイン。

7-3. 接続確認

Tailscaleに接続すると、各デバイスに 100.x.x.x のIPアドレスが割り当てられる。

# Windows側のTailscale IPを確認
tailscale 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(推奨)

  1. F-Droid から Termux をインストール(Google Play版は古いので非推奨)
  2. Termux内でセットアップ:
# パッケージ更新
pkg update && pkg upgrade

# SSHクライアントインストール(通常は初期搭載)
pkg install openssh

# SSH鍵の生成
ssh-keygen -t ed25519 -C "termux-mobile"

# 公開鍵を表示(WSL2側に登録する)
cat ~/.ssh/id_ed25519.pub
  1. 接続テスト:
# ローカルネットワーク経由(自宅内)
ssh -p 2222 ユーザー名@PCのローカルIP

# Tailscale経由(外出先)
ssh -p 2222 ユーザー名@100.x.x.x

iOS: Termius

  1. App Store からインストール
  2. 「New Host」で以下を設定:
  3. Hostname: TailscaleのIP(100.x.x.x
  4. Port: 2222
  5. Username: WSL2のユーザー名
  6. Password or Key: 設定に応じて

ステップ9: 接続テスト

9-1. 同一ネットワークでテスト

# スマホから接続(自宅WiFi)
ssh -p 2222 ユーザー名@PCのローカルIP

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経由テスト

  1. スマホのWiFiをOFFにしてモバイル回線にする
  2. Tailscaleアプリを有効化
  3. SSH接続:
ssh -p 2222 ユーザー名@100.x.x.x
tmux attach -t claude

9-4. 電波断からの復帰テスト

  1. tmux内でClaude Codeを起動
  2. スマホの機内モードをON → 数秒後OFF
  3. 再度SSH接続 → tmux attach -t claude
  4. セッションが維持されていれば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(スマホ側)に以下を追加:

Host mypc
  HostName 100.x.x.x
  Port 2222
  User ユーザー名
  ServerAliveInterval 30
  ServerAliveCountMax 5

tmuxセッションが見つからない

# セッション一覧を確認
tmux ls

# セッションがない場合は新規作成
tmux new -s claude

Claude Codeの認証が切れた

cd ~/MyLab
claude  # 再度認証フローが表示される

代替案: Claude Code Remote Control (/rc)

Claude Codeには /rc(Remote Control)機能があり、Webブラウザ経由でリモート操作可能。 SSH + tmux構成が安定したら、こちらも試す価値あり。

# WSL2内で実行
claude --remote

詳細は公式ドキュメントを参照。この方法ならスマホのブラウザだけで操作可能になる可能性がある。


セキュリティ注意事項

  • パスワード認証は公開鍵認証に置き換えることを推奨(設定完了後)
  • Tailscaleを使うため、ルーターのポート開放は不要(絶対に22番ポートを外部公開しない)
  • WSL2内のCredentials管理: Windows側のCredentials/を使う場合はシンボリックリンクで対応
  • PC電源: スリープしないよう電源設定を変更するか、Wake-on-LANを検討