プロジェクトの動機、仮想マシンの「重さ」からの脱却
これまでMinecraft(Pixelmon)サーバーの運用基盤としてVirtualBoxを使用してきましたが、ホストマシンのリソース管理において大きな課題がありました。
最大の要因は、仮想化に伴う「静的なメモリ占有」です。VirtualBoxは起動時に設定したメモリ分をホストから完全に切り離して確保するため、Linux側での実際の消費量にかかわらず、ホストPCのメモリを常に圧迫し続けていました。

VirtualBoxだけで約8.2GB、OpenJDKを合わせると11GB以上を常に占有している
なぜWSL2(Rocky Linux)なのか
次期環境としてWSL2を採用した理由は、ホストOSとメモリを柔軟に共有する「動的メモリ割り当て」にあります。また、今回もOSはRocky Linux 9を選択しました。
しかし、WSL2の標準ストアにはRocky Linuxが存在しません。そのため公式のコンテナイメージをベースにした「手動インポート」という道を選択しました。
直面した「リンク切れ」と「形式」の罠
構築過程では、ネット上の古い情報を鵜呑みにしたことによるトラブルにも直面しました。
// 1. 404 Not Found:GitHubリポジトリ名の変更
WSL用のインストーラーをダウンロードしようとした際、参照していたリポジトリ名が変更されており、Invoke-WebRequestが404エラーで落ちるという事態が発生しました。

コマンドコピペでは解決できない、インフラ構築特有の「URL変更」の罠
// 2. .xz形式の壁と自動化による解決
また、公式イメージが .tar.xz 形式であったため、標準のWSLインポートコマンドでは解凍できず弾かれるという課題もありました。これに対し、GitHub APIを叩いて最新版のURLを動的に取得するPowerShellスクリプトを構築し、この問題を突破しました。
# GitHub APIから最新のリリース情報を取得し、自動ダウンロードする
$api = Invoke-RestMethod -Uri "[https://api.github.com/repos/mishamosher/RL-WSL/releases/latest](https://api.github.com/repos/mishamosher/RL-WSL/releases/latest)"
$zipUrl = ($api.assets | Where-Object { $_.name -match "9" -and $_.name -match "\.zip$" }).browser_download_url
Invoke-WebRequest -Uri $zipUrl -OutFile "$env:USERPROFILE\Desktop\RockyLinux9.zip"
インストーラーによるWSL2への展開完了ログ
OSの起動確認と生存証明
展開が完了した後は、実際にWSL2上でRocky Linuxが正常に起動しているか、中に入ってバージョン情報を確認します。
# WSL2へ入り、OSのリリース情報を出力
wsl -d Rocky9
cat /etc/os-release
無事にWSL2上で起動した Rocky Linux 9.5 (Blue Onyx)
リソースの最適化、.wslconfigによる制御
WSL2はデフォルトではホストメモリの50%以上を際限なく使おうとする性質(vmmemの暴走)があります。これを防ぐため、.wslconfig を用いて厳格なリソース制限をかけました。
# %USERPROFILE%\.wslconfig を作成し、メモリとCPUを制限
$configContent = @"
[wsl2]
memory=6GB
processors=4
"@
Set-Content -Path "$env:USERPROFILE\.wslconfig" -Value $configContent -Encoding UTF8この設定とWSL2の動的メモリ管理により、OS起動直後のメモリ占有量は驚くべき数値にまで改善されました。

vmmemプロセスのメモリ占有は約779MBに激減
次回、次なるフェーズ「IaC化」へ
VirtualBoxからWSL2へ移行したことで、PC全体の動作が劇的に軽快になりました。8GB以上の「固定された器」から解放され、必要な分だけリソースを消費するモダンな環境が手に入りました。
これで「無菌室」としてのRocky Linux基盤は整いました。次回は、この環境に対してAnsibleを用いた構成管理を行い、Dockerエンジンの導入からMinecraftサーバーのコンテナ化、そしてIaCによる自動構築のプロセスを具現化していきます。