今回はWindows Sandboxと、その活用法について紹介していきます。「過去に使おうとしたが制約が多く断念した」という方にも、近年のバージョンで変わってきた事もありますから、お役に立てるかもしれません。
概要
Windows SandboxはWindows OS Proエディション以上であれば使える仮想化機能の一つです。以下は起動直後のスクショです。
……単なるWindowsの画面ですが、タイトルバーが見えますね。Sandboxを実行すると、クリーンインストールされたWindows1がかなり早く立ち上がります。
サンドボックスなので、終了すると環境は破棄され、次回起動時はまた真っ新な環境として起動します。
活用例としては、一般的なサンドボックス同様、リスクのあるコマンドやアプリケーションの実行などもありますが、開発環境では汚れがちな環境変数やデバッグランタイムのインストールも無いため、作成したプログラムが自身以外の環境で正常に動作するか確認したり、1から環境構築するドキュメント作成時にシミュレーションやスクショ作成に使ったりもしています。
インストールから起動まで
おもむろにスタートメニューから開いていきましょう。
設定
→システム
→オプション機能
→
Windows のその他の機能
→
Windows サンドボックス
にチェックを入れて再起動します。2
再起動後
スタートメニューの中にアプリケーションの一つとしてインストールされています。クリックで起動します。
ホストとのファイル共有
タイトルバーの右上にある・・・
を押すとメニューが表示され、Share folder
を選択するとホストPC側でフォルダ選択が出ますので、そちらで選んだフォルダがサンドボックス環境のデスクトップに出現します。
こちらはサンドボックス側からも読み書きが出来るフォルダなので注意して下さい。
.wsbファイルの使い方
.wsbファイルは起動パラメータを記述するXMLファイルです。テキストエディタで編集後、ダブルクリックでSandboxが起動します。
<Configuration>
</Configuration>
ホストにあるディレクトリのマウント
先にファイル共有の説明しましたが、Sandboxを立ち上げる度にメニューから選択するのは面倒です。そこで.wsbにファイルパスを設定することで、起動のたびに自動的にホストにあるディレクトリをマウントする事ができます。
<Configuration>
<MappedFolders>
<MappedFolder>
<HostFolder>d:\sandbox</HostFolder>
<SandboxFolder>c:\host_sandbox</SandboxFolder>
<ReadOnly>true</ReadOnly>
</MappedFolder>
<MappedFolder>
...
</MappedFolder>
</MappedFolders>
</Configuration>
Configuration
の子ノードにMappedFolders
、さらにその子ノードにMappedFolder
を記述して指定することができます。
-
HostFolder
にはホスト側からサンドボックスに見せたいディレクトリを記述します -
SandboxFolder
にはサンドボックスのどのパスにHostFolder
をマウントするかを記述します -
ReadOnly
をtrue
に設定することでサンドボックス側から編集出来なくします
その他のパラメータ
大半の機能はデフォルト有効化されているため、アプリケーションのテストとして制限環境の再現や、よりセキュアなサンドボックスの構築に使用しましょう。こちらもConfiguration
の子ノードに記述します。多いので、よく使うものを一部だけ紹介します。
GPUの無効化
<vGPU>Disable</vGPU>
GPUを無効化しても画面が映らなくなるといった事はなく、WindowsにはWindows Advanced Rasterization Platformと呼ばれる代替コンポーネントによってCPUが描画を担うため、CUDA(GPGPU)を使ってるでもない限りは、動かなくなるアプリケーションは殆ど無いと思います(逆に言えばそういったプログラムのフォールバックを試せます)
ネットワークの無効化
<Networking>Disable</Networking>
インターネットが繋がらなくなるだけでなく、ネットワークアダプタが一つもない状態になるので、たまに初期化に失敗するアプリケーションが出てきます(アダプタをforして1つ取り出すみたいな処理を書いてる等)
メモリ量の調整
<MemoryInMB>4096</MemoryInMB>
昨今はドライバでも書かない限りはあまり気にする必要は無いですが、Windows 11の最低要件以下(1GBくらいならギリギリ)でも動くので、Out Of Memoryの挙動確認に使うことが出来るでしょう。
起動直後に実行するコマンド
<LogonCommand>
<Command>c:\host_sandbox\dotnet-sdk-9.0.101-win-x64.exe /install /quiet /norestart</Command>
</LogonCommand>
例として.NET Runtimeのサイレントインストールの例を書いてみました。MappedFolders
で設定されたディレクトリにインストーラーを設置し、サイレントインストールを整備しておけば、Sandboxを起動後に、環境再現あれこれの操作を一々行う必要はありません。
Command
は複数書けますが、.batを指定することもできるので、Sandboxに利用するだけでなく、環境構築は積極的にスクリプト化したいですね。
最後に
他のOSにあるサンドボックス環境同様、Windowsのアプリケーション開発に必要な機能が揃っていると思います。またこの機能がとてもスマートな形で実現されている事がMicrosoft Learnに掲載されていますので、ご興味がある方はぜひご一読下さい。