WSL2 の開発環境を自動構築するセット
以前は、 WSL2 に都度コマンドを打って環境構築していたが似たような環境が複数必要になるため自動化し環境構築にかかる時間を省力化した。
Important
2025/05/24 に Backup/Restore を実装した。これにより devtool.ps1 を実行時に /home/user 配下を一定の条件で tar で固め %USERPROFILE%/Documents/WSL2/Backups に吐き出します。 一時保管ため非圧縮です Restore は WSL2 のディストリビューション初回起動時に最新の tar ファイルを利用し展開される。 展開後、 $HOME/.dwsl2-restore.lock を作成することで次回以降は実施されません
| Common software | Latest software version | Latest commit |
|---|---|---|
| albertony/npiperelay | ||
| BusyJay/gpg-bridge | ||
| Docker Engine | ||
| fish | ||
| mise |
| mise Tools | Latest release | Latest commit |
|---|---|---|
| aws-cli | ||
| aws-sam-cli | ||
| claude-code | ||
| dotter | ||
| dprint | ||
| dua-cli | ||
| fzf | ||
| ghq | ||
| gitleaks | ||
| lefthook | ||
| poetry | ||
| ripgrep | ||
| rust | ||
| starship | ||
| Tmux | ||
| topgrade | ||
| usage |
2026/01/11 の更新から WSL2 の初回起動時に Windows 11 側に npiperelay.exe, gpg-bridge.exe, yubikey-tool.ps1 のツールを自動ダウンロードし %USERPROFILE%/.local/bin に配置するようになりました。 yubikey-tool.ps1 は自動起動にも設定され gpg-agent, gpg-bridge の自動起動、タッチ/PIN入力の通知を実施するタスクトレイアプリケーションです。
これにより WSL2 上でも手軽に GPG 鍵を利用でき、 gpg-bridge を使うことで SSH 先でも GPG 署名できるようになりました。
Tip
Windows 11 の .ssh/config 例
Remote SSH 先の uid (id -u の結果)が 1000 の場合下記を設定します
Host example-01
HostName 192.0.2.1
ForwardAgent yes
User naa0yama
RemoteForward /run/user/1000/gnupg/S.gpg-agent 127.0.0.1:4321
RemoteForward /run/user/1000/gnupg/S.gpg-agent.extra 127.0.0.1:4321
Tip
Remote SSH 先のセットアップ
Remote 先でも gpg-agent の設定が必要です。 setup.sh にまとめてあるためこれを実行します。 このスクリプトは以下を実行します:
- GPG の設定 (
no-autostartを追加、gpg-agent サービスをマスク) - sshd の設定 (
StreamLocalBindUnlink yesを現在のユーザーに許可) - Windows SSH client の設定例を表示
curl -fsSL https://raw.githubusercontent.com/naa0yama/devtool-wsl2/main/scripts/bin/setup.sh | bashWindows Terminal などで PowerShell を開き下記のコマンドを投入すると最新の GitHub Releases から WSL2 イメージを取得し WSL に登録します
Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/naa0yama/devtool-wsl2/main/devtool.ps1' -OutFile "$env:TEMP/devtool.ps1"
powershell -ExecutionPolicy Unrestricted "$env:TEMP/devtool.ps1"フラグオプションをいくつか用意しています
-skipBackupAndRestore- 既存 default 環境の Backup & Restore をスキップします
-Tag- Release Tag を指定してダウンロードする場合に指定します。
-skipWSLImport- WSL へ
Importを実施しません。 - ダウンロードのみを実施し、スクリプト終了時のダウンロードフォルダークリーンアップ処理も実施しません。
- WSL へ
-skipWSLDefault- WSL へ
Importした場合にwsl --set-default <DistributionName>の実行をしません
- WSL へ
Important
-ImportForce- 同じ tag の WSL イメージが登録されている場合、登録解除(
wsl --unregister)を実施し強制的に更新します WSL イメージは削除されますので注意してください
- 同じ tag の WSL イメージが登録されている場合、登録解除(
Import 結果を確認します
dwsl2-<tag> があれば Import 出来ています。
wsl -l -v> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
dwsl2-8718ff1 Stopped 2
Ubuntu Stopped 2Tip
このスクリプトを使って展開された WSL2 は展開時に以前の default WSL2 環境でバックアップしたデータから自動で書き戻します。
この機能をオフにする場合 %USERPROFILE%/Documents/WSL2 に .restore-skip というファイルを配置してください。
これでリストア処理をスキップします。
New-Item -Path "$env:USERPROFILE/Documents/WSL2/.restore-skip"実際に起動してみます。
このセクションではデフォルトに設定してないためディストリビューション指定で起動します。
起動出来ると Bash が起動します。
wsl -d dwsl2-8718ff1
user@dead-desk1:~$
この手順では default に設定していないためディストリビューションを指定して起動する必要があります。
手間を省くために default に設定すると wsl コマンドで起動してくる事になります
下記の例では dwsl2-8718ff1 を default に設定します。
* の付いている物が default 起動の WSL です。
> wsl -l -v
NAME STATE VERSION
* Ubuntu-22.04 Running 2
dwsl2-8718ff1 Stopped 2
Ubuntu Stopped 2
> wsl -s dwsl2-8718ff1
この操作を正しく終了しました。
> wsl -l -v
NAME STATE VERSION
* dwsl2-8718ff1 Stopped 2
Ubuntu-22.04 Running 2
Ubuntu Stopped 2登録解除の場合は下記で ディストリビューションを停止してから --unregister を実施します
wsl -t dwsl2-8718ff1
wsl --unregister dwsl2-8718ff1デフォルトではユーザーフレンドリーのために login shell -> ~/.bashrc -> exec fish のような起動順序で fish shell が立ち上がります。が、 POSIX 準拠 SHELL ではないため GenAI などで生成したスクリプトは上手く機能しない可能性があります。その場合 Bash を起動するには、下記の方法を用意しています。NO_FISH 変数が定義済みの場合 ~/.bashrc で exec fish を実行しないようにしている。
# デフォルト WSL2 にしている場合
wsl NO_FISH=true bash -l
# ディストリビューションを指定する場合
wsl -d dwsl2-8718ff1 NO_FISH=true bash -l
[!TIP] Bash を永続起動にする 本イメージの中身は Fish, Bash どちらも設定済みのため Bash のみを永続的に利用したい場合は
~/.bashrcの末尾にある下記をコメントアウトすれば fish を起動しません# Switch to fish for interactive if [[ -z "\$NO_FISH" ]] && command -v fish &> /dev/null; then exec fish fi