Windows Sandbox は、Windows 10/11 Pro 以降に搭載されている仮想環境機能だ。
一時的でクリーンな Windows 環境を素早く作成し、アプリケーションのテストやファイルの検証を安全に行うことができる。
Windows Sandbox を使うにあたって、目的の作業に必要なツールをサクッとインストールしたいことがままある。
Windows 上でツールをインストールする場合、 Microsoft Store や winget を使う事が一般的だ。
しかし、 Windows Sandbox を立ち上げてすぐの環境ではこれらを使うことができない。
加えて、素直にこれらをインストールしようにも、依存関係が満たされていないためインストールに失敗してしまう。
そこで、 Windows Sandbox の設定ファイル (.wsb) を使用して、 Windows Sandbox 起動時に winget が使える状態を整えよう…というが、今回の話。
Windows Sandbox の設定ファイル (.wsb) とは
Windows Sandbox は、XML 形式の設定ファイル (.wsb) を使用して起動時の構成をカスタマイズできる。
この設定ファイルでは、主に以下のような設定が可能だ。
- vGPU(仮想 GPU)の有効/無効
- ネットワークの有効/無効
- 共有フォルダの設定
- メモリ使用量の制限
- ログオン時のコマンド実行
詳細な設定オプションについては、以下のマイクロソフト公式ドキュメントを参照:
今回は、上記のうち「ログオン時のコマンド実行」の機能を利用する。
winget をインストールするログオンコマンド
winget のインストーラは、 winget の GitHub プロジェクトのページ から入手できる。
しかし、前述したように Windows Sandbox 上で単純に winget のインストーラを実行しても、必要な依存関係が満たされていないためインストールに失敗する。これは、Windows Sandbox が最小限の構成で起動するためだ。
また、 winget の最新版だと必要な依存パッケージが多くてインストールに時間がかかる。 このため、依存が少なめの v1.6 あたりを、依存パッケージと共にインストールしよう。
適当なファイル名をつけた .wsb
ファイルを、 UTF-8 の文字コードで以下の内容で記述する。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<LogonCommand>
<Command>cmd /S /C "start powershell -c "cd ~\Downloads; $jobs = 'https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx', 'https://github.com/microsoft/winget-cli/releases/download/v1.6.3482/Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle' | %{ Start-Job -ArgumentList $_ { param($url); cd ~\Downloads; curl.exe -LO $url } }; Set-WinHomeLocation -GeoID 122; Set-Culture -CultureInfo ja-JP; Wait-Job $jobs; Add-AppxPackage -Path .\Microsoft.VCLibs.x64.14.00.Desktop.appx; Add-AppxPackage -Path .\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle;""</Command>
</LogonCommand>
</Configuration>
この .wsb ファイルは以下の処理を実行している。
- 必要なファイルの並列なダウンロードを開始する
Microsoft.VCLibs.x64.14.00.Desktop.appx
: Visual C++ ランタイムMicrosoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle
: winget インストーラ
- Windows の地域設定を日本に変更する
- Set-WinHomeLocation で地域を日本に設定
- Set-Culture で言語を日本語に設定
- (1) のダウンロード完了を待機する
- (3) のインストーラを順番にインストールする
この .wsb
ファイルをダブルクリックして Windows Sandbox を起動すると、 自動的に winget がインストールされ、すぐに使用可能な状態となる。
立ち上がった Windows Sandbox 内で PowerShell コンソールが消えた≒winget のインストールが完了したら、 winget でお好きなパッケージを入れていこう。
例えば、 Microsoft Store 上の Snipping Tool (切り取り領域とスケッチ) をインストールする場合、 シェルを立ち上げて以下のコマンドを叩けば良い。
winget install ‐‐accept-source-agreements ‐‐accept-package-agreements 9MZ95KL8MR0L # snipping tool
Microsoft Store 上のパッケージを winget でインストールする場合の キー は、「共有」で開いた URL から特定できる。
頻繁に利用するなら、上記 winget のインストールコマンドを .wsb
ファイルに記述してしまっても良い。
おわりに
本記事では、Windows Sandbox 上で winget を使えるようにする方法を紹介した。
Windows Sandbox と winget の組み合わせは、開発者やテスターにとって強力なツールとなるだろう。