M1 MacBook AirでVRChatに挑戦|8GBモデルは入室直前で力尽きた

steam os vrchat 003.

Xでジトメ(@ji10me)氏が投稿していた「Apple SiliconのMacでVRChatをプレイする」という話を見て、試してみたくなりました。使うのは、Apple SiliconのMacでSteamOSを動かすオープンソースの仕組み「SteamAC」です。

ただし、SteamACの公称要件はメモリ16GB以上です。手元の実験機はM1 MacBook Airで、メモリは要件の半分の8GBしかありません。それでも、どこまで行けるのかを検証してみました。

なお、この挑戦はMuseのAIアシスタントの「マル」と一緒に進めたもので、この記事もマルと一緒に執筆しています。

「SteamAC」とは

「SteamAC」は、fxgl(FX Games)が公開しているオープンソースプロジェクトです。ARM系のチップを採用したValveのスタンドアロン型VRヘッドセット「Steam Frame」に搭載されている公式のARM64版SteamOSを、Macの上で仮想マシンとして起動します。

そのイメージは、アップデート用としてValveのサーバーから配信されているもので、取得時に署名が検証され、正規のイメージであることが確認されます。

関係するソフトは、下から順にこのような関係になっています。

・Mac(Apple Silicon/macOS):いちばん下の土台です

・FX Steam Launcher:実際に起動するMac用アプリです。このアプリがlibkrunを使って仮想マシンを立ち上げ、画面の表示や設定も担当します

・libkrun:アプリの中に仮想マシンを組み込む軽量なライブラリで、macOS標準のHypervisor.frameworkを使ってVMを起動します

・SteamOS(ARM64版):仮想マシンの中で動くOSです

・Proton:OSの違いを吸収する担当で、Windows向けのゲームをLinux(SteamOS)で動かすための互換レイヤーです

・FEX:CPUの違いを吸収する担当で、x86向けのプログラムをARMで動かすためのエミュレーターです

つまり、Macの中にSteamOSを入れ、その中でProtonがOSの違いを、FEXがCPUの違いを翻訳することで、Windowsのゲームを動かす、という入れ子の構造になっています。

グラフィックスについても変換が入ります。SteamOS側の描画命令を、MacのGPUが受け付けるMetalに翻訳する仕組みになっていて、ゲームの画面はMacのGPUで描画されます。

要件はApple Silicon、macOS 15以上、メモリ16GB以上で、VMにはMacのメモリの半分が割り当てられます。

steamac diagram v4.

実験機と準備

実験機はM1 MacBook Air(メモリ8GB、macOS 26.6.2)です。空き容量は、公称の要件では約150GBとされています。ただ、ディスクイメージはスパース形式で、実際に使った分だけしか容量を消費しないため、今回の実験では空き約49GBで足りました。

steam os vrchat 009.

「SteamOS」はあっさり起動した

「FX Steam Launcher」(1.9.8)を入れると、SteamOSは無事に起動し、Steamへのサインインにも成功しました。VRChatのダウンロードは初回で約2GBでした。

steam os vrchat 006.

壁その1:EACエラー

互換ツールをProton Experimentalに設定し、Proton EasyAntiCheat Runtimeも入れましたが、VRChatの起動はEACの「Unexpected error. (#1)」というエラーで失敗しました。

EAC(Easy Anti-Cheat)は、チート行為を防ぐためにプログラムが改変されていないかを検証する仕組みで、VRChatにも組み込まれています。原因は、EACが求めるLinuxの細かな挙動を、Valve純正のFEXが再現しきれていなかったことです。EACはゲームを監視する仕組み上、挙動が本物と違うと認証が完了しません。

steam os vrchat 004.

パッチ版FEXでEACを突破

対策として、StonkGuy氏のフォークで公開されている「fex-eac」の手順を実行しました。ランチャーの設定でSSHを有効化し(ポート2222、ユーザーsteamos)、ゲストの中でパッチ版FEXをビルドしました。ビルドは約10分で終わり、install-fex-tool.shで導入して、READMEで指定された起動オプションもVRChatに設定しました。

するとEACを通過し、VRChatのログイン画面が表示されました。実際にログインすると、VRChat Homeへの入室まで始まりました。

steam os vrchat 002.

壁その2:メモリ4GBの上限

最後の壁はメモリでした。8GB機では、ゲストに割り当てられるRAMは4GBが上限で、ランチャー上はこれ以上増やせません。

1回目は入室待ちのまま止まり、2回目はワールドの取得中にメモリ不足(OOM)で強制終了しました。

対策として4GBのスワップファイルを追加した3回目はOOMを回避して「Initializing World…」の画面まで進みましたが、スワップを3.2GBも使う状態で実質的に止まってしまいました。

steam os vrchat 001.

結論:8GBでは「起動とログイン」まで

要件の半分の8GBでも、SteamOSの起動、VRChatのログイン、入室の開始までは到達できました。ただ、ワールドに入りきって遊ぶところまでは実用になりませんでした。フォーク作者の検証環境がM2・16GBであるように、16GB以上が現実的なラインだと思います。

遊べるのはVRヘッドセットではなくデスクトップモードのみですが、MacからVRChatにログインできることに、メリットを感じる人は少なくないのではないでしょうか。

AIアシスタントと一緒に進めた実験

いろいろ複雑なことをやっているように見えるけれど、実際には「Muse」が画面操作も含めてサポートしてくれるので、難しさはありませんでした(ただしターミナルを触るところはある)。

具体的には、Steamの設定変更やSSHでのコマンド実行、ログの確認といった作業はマルが画面を操作しながら進め、マサトは仮想マシンを消すかどうかといった判断や、アカウントへのログイン、起動オプションの貼り付けなどを担当しました。

「Muse」に「これはどういうことをやってるの?」と質問して、今回の実験はスタートしました。

この記事はどうでしたか?