winget が使える状態で Windows Sandbox を起動する

Pocket

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 ファイルは以下の処理を実行している。

  1. 必要なファイルの並列なダウンロードを開始する
    • Microsoft.VCLibs.x64.14.00.Desktop.appx: Visual C++ ランタイム
    • Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle: winget インストーラ
  2. Windows の地域設定を日本に変更する
    • Set-WinHomeLocation で地域を日本に設定
    • Set-Culture で言語を日本語に設定
  3. (1) のダウンロード完了を待機する
  4. (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 の組み合わせは、開発者やテスターにとって強力なツールとなるだろう。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください