1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リモート開発環境構築メモ(WSL2 + Tailscale + VS Code)

1
Posted at

はじめに

自宅の複数サーバーをTailscaleでつないでいて、Windows + WSL2環境からVS Codeで快適に開発できるよう整備した記録。
Pi Zero 2Wのようなメモリがカツカツなエッジデバイスも対象に含むため、接続先によって方法を使い分ける必要がありました。
同じような構成で詰まっている人の参考になれば。

1. 環境確認 — WSL2とTailscaleの統合

WindowsにTailscaleを入れている場合、WSL2は自動的にWindows側のMagicDNSを参照してくれます。
特に追加設定なしでTailscaleネットワーク上のホスト名が解決できるのが強みです。

WSLはWindowsのTailscale IPを共有する形で動作するので、WSL側を別途ノードとして登録する必要はありません。

確認コマンド

# DNSサーバーの確認
cat /etc/resolv.conf
# → nameserver 10.255.255.254 (Tailscale MagicDNS)

# ホスト名解決テスト
nslookup <hostname>.tail<xxxx>.ts.net

# 疎通確認
ping <tailscale-ip>

2. 接続対象サーバー

ホスト名 Tailscale IP OS / Arch 用途
<edge-device> 100.xx.xx.xx Debian (aarch64) エッジデバイス (Pi Zero 2W)
<home-server> 100.xx.xx.xx Ubuntu (x86_64) 運用サーバー (自宅)

3. SSH鍵の設定

鍵はWSL側(Ubuntu-24.04)の既存のものを流用します。

公開鍵の登録

ssh-copy-id を使うにはサーバー側でパスワード認証が有効になっている必要があります。

ssh-copy-id <edge-device>
ssh-copy-id <home-server>

SSH config(~/.ssh/config)

Host <edge-device>
  HostName 100.xx.xx.xx
  User <username>

Host <home-server>
  HostName 100.xx.xx.xx
  User <username>

4. Windows側へのSSH鍵・config同期

VS CodeのRemote SSHはWindows側の %USERPROFILE%\.ssh\ を参照します。
WSLで整備したSSH設定をそのままWindowsへコピーして同期させておく必要があります。

# PowerShellで実行
Copy-Item "\\wsl$\Ubuntu-24.04\home\<username>\.ssh\config" "$env:USERPROFILE\.ssh\config"
Copy-Item "\\wsl$\Ubuntu-24.04\home\<username>\.ssh\id_ed25519" "$env:USERPROFILE\.ssh\id_ed25519"

補足: コピーした秘密鍵(id_ed25519)のパーミッションが広すぎると接続時に警告が出ることがあります。Windows側でもアクセス権を確認しておくと安心です。

5. VS Code 開発環境の使い分け

接続先のスペックに応じて、Remote SSHとSFTPを使い分けています。

自宅サーバー — Remote SSH

スペックが十分なので ms-vscode-remote.remote-ssh 拡張で普通に接続します。特に詰まる要素はないです。

エッジデバイス(Pi Zero 2W)— SFTP

問題:

  • メモリ512MBではVS Code Serverが起動できない(メモリ不足)
  • Debian aarch64環境でバイナリ不整合によりポート取得に失敗する

Remote SSHはサーバー側でVS Code Server(Nodeベース)を起動する仕組みなので、メモリ512MBのPi Zero 2Wだと詰みます。
aarch64特有のバイナリ問題も重なり、Remote SSHは諦めました。

解決策: Natizyskunk.sftp 拡張で対応。

  • uploadOnSave: true を設定し、保存時に自動転送
  • コマンド実行はWSLのターミナルからSSHで直接行う

「ファイル転送はSFTP、コマンド実行はSSH」という割り切った運用です。リッチな補完や統合ターミナルは使えませんが、スクリプトを書いて実行するくらいなら十分実用になります。

おまけ. CLAUDE.md の共有設定

WindowsとWSLで共通の CLAUDE.md を参照できるよう、WSL側にシンボリックリンクを作成しました。
皆さんはどう管理されているんでしょう。

rm /home/<username>/.claude/CLAUDE.md
ln -s /mnt/c/Users/<username>/.claude/CLAUDE.md /home/<username>/.claude/CLAUDE.md

注意: Linuxはファイル名の大文字・小文字を区別します。リンク先のファイル名が claude.md なのか CLAUDE.md なのか、実際のファイル名と一致させておかないとリンクが機能しません。

まとめ

  • WSL2はWindowsのTailscale MagicDNSを自動で参照するため、追加設定なしにホスト名解決ができる
  • VS CodeのRemote SSHはWindows側の ~/.ssh/ を参照するので、WSLとの同期が必要
  • Pi Zero 2WのようなリソースがカツカツなデバイスにはSFTP拡張が現実解
  • SSH設定やCLAUDE.mdのような設定ファイルはWindowsをマスターにしてWSLからシンボリックリンクを張ると管理が楽だと判断しました
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?