見出し画像

MGL週報 #75 - Steam DeckでMGLのビルド実験

このエントリはゲーム開発用フレームワーク「MGL」の開発記録です。MGLはzlibライセンスの下に無償で提供されています。


Steam DeckでMGLのビルド実験

年末にようやく入手したSteam Deckを用いて、これ単体でMGLを用いたゲームの開発環境を整えられるかという実験を行ってみました。結論から言うと、ソースコードを書いてビルドという流れは問題なく行えそうです。

まず前提知識として、Steam Deckに搭載されているSteamOSはManjaroベースのLinuxです。通常は起動直後に専用のクライアントアプリが立ち上がるためバックグラウンドを意識せずに利用できますが、電源メニューから「デスクトップに切り替え」を選択すると通常のデスクトップモード(KDE Plasma)に切り替わります。すなわち、基本的にはPCにLinuxをインストールした環境とあまり変わりはありません。

Steamボタン→「電源」→「デスクトップに切り替え」で切り替え可能
デスクトップ環境はKDE Plasma

ただし、SteamOSはシステム領域は読み取り専用として保護されているため、pacmanのようなパッケージマネージャを経由して新たなアプリケーションを追加する事はできません。これは読み取り専用を無効化することで可能にはなるのですが、その場合は動作検証向けの環境ではなくなる事、システムのアップデート時に変更が破棄される事などのデメリットがあるため、今回は無いものとして考えます。

システムの管理領域にアプリケーションを追加することはできませんが、幸いにもコンテナ化されたアプリケーションの導入は可能となっています。デスクトップアプリケーションであればKDE標準のDiscover経由で追加できる他、Podmanもプリインストールされているため多くのDockerイメージもそのまま利用可能です。今回はこれを利用してみます。

デスクトップアプリはDiscover経由でインストール可能。VSCodeやJetBrains製品の他、Godotすらも導入可能らしい。

さて、Linuxという環境は多種多様であるが故に、ゲームのようにビルド済みのアプリケーションを配布するには依存ライブラリの問題が付き纏います。そこで、SteamではLinux向けに「Steam Runtime」というものが用意されています。これはLinux環境でよく使われるライブラリの詰め合わせみたいなもので、Steamクライアント経由で起動するなら必ずこれらが使えますよ、というランタイムパッケージです。

Steam Runtimeにはバージョンごとにコードネームが付与されていて、現時点での最新版である3.x系列は「Sniper」と呼ばれています。このSniper向けのSDKも用意されていて、それを使用してビルドする限りはライブラリの依存性をあまり意識する必要はなくなります。これは便利。

Sniperについての詳細はこちら。

さてさて、実践編。SniperのSDKはコンテナイメージとして頒布されていますので、これをSteamOSにプリインストールされているPodmanで扱えるよう導入します。と、言ってもコンソールで以下の1行を実行するだけです。

podman pull registry.gitlab.steamos.cloud/steamrt/sniper/sdk

実は私はコンテナに関してあまり詳しくはないのですが、Podmanの使用方法はおおよそDockerと同じらしいです。有名なのでインターネットなどで検索すれば情報に困ることはないでしょう。試しに、gccのバージョンを表示してみます。

podman run --rm sniper/sdk gcc --version
実行結果。ちなみにzshやtmux、vimなどはSteamOS側にプリインストールされている。

Sniper SDKのコンテナイメージにはゲームの開発に必要そうなライブラリとビルドツールがおおよそ備わっています。嬉しいことにビルドツールのSConsも含まれているため、MGLのビルドも次のように実行するだけで簡単に行えます。

podman run --rm -v $PWD:$PWD -w $PWD sniper/sdk scons

-vオプションと-wオプションはカレントディレクトリをアタッチして、その中で作業することを指定するためのオプションです。($PWDはカレントディレクトリを表す環境変数です)

現行の1.1.13は既知の不具合によりビルドに失敗しますが、次にリリース予定の1.1.14ではビルドに成功することを確認しています。とても簡単!

現時点ではMGLのLinux向けバックエンドが用意できていないため、残念ながらゲームを動かすまでには至りません。その辺はおいおい対応していく予定ですが、今回の実験で何となくLinux対応の感覚が掴めた気がします。

ついでにXCBを用いたウィンドウ表示をSniper SDKでビルドして実行するテスト。これもMGLのビルドと同じ要領で簡単に行える。

その他

今年はプレイアブルなゲームを最低1つは増やそうという目標のもと、作りかけのゲームに少しだけ本腰を入れ始めました。色々と実験的な意味合いの強いゲームです。


いいなと思ったら応援しよう!