minetest マルチプレイ環境構築 ( クラウドで学ぶゲーム環境)

概要

本資料では、ゲームエンジンのMinetestを用いて、ボクセル型ゲームのマルチプレイ環境を構築する手順について取り扱います。

マルチプレイを実際に行うには、AWSやGoogle Cloud、IBM Cloud、Microsoft Azure 等のパブリッククラウドの仮想マシンが必要です。
しかし、パブリッククラウドを利用するには、クレジットカードおよびデビットカードを持っている人しかできないため、ここでは、パブリッククラウドの仮想マシンの代わりにパソコン上の仮想マシンを用いて、minetestのマルチプレイ環境を作る手順を学びます。

シンプルに動かすだけであれば、AWSなどパブリッククラウド上で、仮想マシン1台(最低でもメモリ1GB、1CPUの月5ドルくらい)あれば動きます。ただし、多数が利用することを考えると、仮想マシン1台では心もとなく、Kubernetes などを使う方が良いでしょう。

パソコン上の仮想マシンの場合も、パブリッククラウドで仮想マシンを使う場合と、ほぼ変わりません。パブリッククラウドでは、インターネットを経由してパブリッククラウドに接続していますが、パソコン上の仮想マシンを使う場合は、パソコン内で、Minetest クライアントアプリと仮想マシン間の通信になります。

パブリッククラウド上で構築する場合とパソコン上の仮想マシンを使う場合では、構成が似通っています。そのことから、パソコン上の仮想マシンやコンテナで確認し、その後、パブリッククラウドで確認するといった開発手法が一般的です。

Raspberry Pi 4 ( 4GBモデルまたは8GBモデル)を使って、教室や友達間をつなぐ小さなLANの場合

クラウドコンピューティング技術が支えるゲーム

2000年代以降のゲームは、クラウドコンピューティング技術を活用することで、発展してきました。例えば、PaaSである「Google App Engine」が2008年に登場した際には、無料で使えて負荷が高まるとスケールすることから、ゲーム等のエンターテインメント系の基盤として活用されてきました。こうしたことは今では当たり前のことになっています。

クラウドゲーミングという括りの取り組みもあります。たとえば、撤退済みですが「Google Stadia」 、現在提供されているもので特に有名なサービスは、Microsoftの「Xbox Cloud Gaming」とNvidiaの「 GeForce Now」 などがあります。

ネットワーク上の計算資源であるコンピュータを活用する「分散コンピューティング」や「クラウドコンピューティング」を含める「ネットワークコンピューティング」で稼働するゲームサーバーに、パソコンやスマートフォン、家庭用ゲーム機器のアプリケーションから接続することで、ゲームをプレイする仕組みになっており、買い切り型のゲームではなく、サービス化されたゲームとなっています。>> Game as a Service。

Game as a Service により、1つのゲームが年単位の長期に渡ってビジネスモデルを維持することができることから、消費者に長くプレイしてもらうことが可能です。こうしたクラウドコンピューティングを前提にしたゲームでは、コンテナやKubernetesといった最新の技術が活用され、プレイヤー体験(UX)の向上に貢献しています。ゲームは、常にクラウドコンピューティングのトレンドの最前線にあると言えます。

したがって、ゲーム関係に関わりたい場合、クラウドコンピューティング技術者として関わることが可能です。

Minetest について

https://www.minetest.net/ は、Minecraftのようなボクセル型ゲームを運用するための「ゲームエンジン」という位置づけです。

2010年に最初のバージョンがリリースされ、2023年現在は、バージョン 5.7.0 です。

2009年に登場したMineCraftと異なり、マルチプレイのためのサーバー機能が含まれていることから、Minetestは「ゲームエンジン」という言い方をしています。Minetestに付属する「Minetest Game」が、ゲーム本体です。

Minetestは、オープンソースソフトウェアライセンスの「LGPLv2.1+」が適用されます。オープンソースソフトウェアはビジネス利用ができますが、細かい条件等がありますのでビジネス利用したい場合は、https://wiki.minetest.net/Licensing をご確認ください。

下図のように、ボクセル型のゲームです。1人でプレイすることもできますし、サーバーを立てることでマルチプレイもできます。作成例として、https://www.minetest.net/#gallery にアクセスしてみると良いでしょう。

AWSなどのパブリッククラウド上で、Minetestをサーバーモードで起動し、パソコン上のMinetestクライアントアプリから接続することも可能。毎月 5ドルの低スペックサーバーでも動かすことができる。

仮想マシンの準備

パブリッククラウドの仮想マシンの代わりにパソコン上の仮想マシンを用いるため、資料作成にあたり確認したスペックと設定について述べます。パブリッククラウド上の仮想マシンは、Windows Server を除き、デスクトップ画面(GUI)がないことがほとんどなので、Linux(Ubuntu , Red Hat Enterprise Linux等)を使う場合はGUIなしに慣れることを推奨します。

仮想マシンのスペック

例として、仮想環境としてVirtualBoxを使っていますが、他の仮想環境でも構いませんです。以下のスペックの仮想サーバーを用意します。

  • OS:Ubutnu Server 20.04 または、Ubutnu Server 22.04

  • 仮想CPU割り当て数 : 1

  • 仮想メモリ割り当て:2048MB(2GB)以上

  • 仮想ディスク:40GB以上

  • 仮想マシンのユーザー名 : vboxuser << 異なる場合は、資料内の各所で読み替えてください。AWS等のパブリッククラウドでは、ユーザー名が、ubuntu などになっていることがあります。

仮想マシンのネットワーク設定

Minetest では、UDPのポート番号 30000 を使うため、VirtualBox における仮想マシンのネットワーク設定が必要になる。パブリッククラウドであれば、セキュリティグループで設定すれば良い。

VirtaulBoxに作成した仮想マシンの場合

仮想マシンの設定画面を開き、「ネットワーク」内の「NAT」が割り当ててあるネットワークアダプタで、「Advanced」内の「ポートフォワーディング」をクリック。また、「ケーブル接続」にチェックが入っているものとする。

「ポートフォワーディングルール」が表示される。「+」を押すとルールを追加でき、「-」を押すとルールを削除することができる。下図のように、プロトコル「UDP」、ホストポートとゲストポートの値に、30000 を指定する。その後、「OK」をクリックする。

「OK」をクリックして仮想マシンの設定画面を閉じる。

パブリッククラウドで設定した場合 ( 例 AWS Lightsail )

作業ディレクトリ

仮想マシンのユーザー名を、vboxuser とする。パスは、/home/vboxuser になる。

Ubuntu(Linux)に最新のソフトウェアを適用

sudo apt update -y sudo apt upgrade -y

「Pending kernel upgrade」 , <Ok>でEnterキーを押す
「Daemons using outdated libraries」で、どれも選ばずに、<Ok>でEnterキーを押す

Minetestのインストール

Minetest の安定版をインストールするためのリポジトリを追加するため、次のコマンドを実行。また、Press [ENTER] to continue or Ctrl-c to cancel. と表示されるので、Enterキーを押す

sudo add-apt-repository ppa:minetestdevs/stable sudo apt update

Minetestをインストール

sudo apt install -y minetest

この後の作業で、zipファイルを解凍するので、unzip もインストールしておく。

以下の処理を求められた場合は、それぞれ、<Ok>でEnterキーを押す。

「Pending kernel upgrade」 と「Daemons using outdated libraries」

カスタムコンフィグファイル

configファイルを作成することで、Minetestの様々なオプションを利用することができる。

作成

ログインしているユーザー(vboxuser)のホームディレクトリに移動

Minetestのインストールで追加された、サンプルのコンフィグファイルを複製。zcat コマンドは、gz(gzip)形式のファイルの中身を表示することができる。

これで、Minetestをサーバーモードで起動する際に、/home/vboxuser/minetest.conf を読み込ませることで、minetestの様々なオプションを利用することが可能になる。たとえば、Fly(空を飛ぶ)機能も、初期状態では無効になっているので、カスタムコンフィグファイルで、Flyを有効にする必要がある。

編集

Ubuntuを使っているので、nano を使って、編集を行う。

例として、Fly(空を飛ぶ) を使えるようにする。編集箇所は、次の通り。編集後、保存しておく。nanoの操作については他でも紹介しているので割愛する。
公式サイトのnano エディタの使い方 >>

編集前

編集後

カスタムコンフィグファイルを用いた、Minetestサーバーの起動

--configオプションを使うことで、カスタムコンフィグファイルを指定し、Minetest をサーバーモードで起動することができる。

起動すると、次のように表示される。Ctrl + c キーを押すことで、Minetestのサーバーモードは停止する。

Minetest クライアントアプリ

Minetestの公式サイトの「」にアクセスし、Windwos、Mac、Android 端末のいずれかのアプリをダウンロードする。iPhone/iPad 向けはない。パソコン上の仮想マシンにMinetestサーバーを構築する場合は、Windowsパソコンであれば、Windows版のクライアントアプリ(2023年5月現在では、Minetest 5.7.0 - portable, 64-bit (recommended))をダウンロードし、Macの場合は、Mac版のクライアントアプリ(2023年5月現在は、Minetest 5.7.0 - App)をダウンロードすること。

どちらもZip形式なので解凍すること。

Windows版のクライアントアプリ

2023年5月現在では、Minetest 5.7.0 - portable, 64-bit (recommended)であり、ダウンロードすると「minetest-5.7.0-win64.zip」となっている。

Windowsのエクスプローラーで、「minetest-5.7.0-win64.zip」を選び、「すべて展開」を実行し、Zip形式のファイルを解凍する。Zip形式のファイルを通常の状態に戻すことを、伝統的に解凍という。

「minetest-5.7.0-win64」フォルダが作成され、「minetest-5.7.0-win64」以下の「minetest-5.7.0-win64」、さらにその下の「bin」に「minetest.exe」が入っているので、「minetest.exe」をダブルクリックする。初回起動の場合は、「WindowsによってPCが保護されました」と表示されるので、「詳細情報」>>「実行」の順にクリックすること。

Minetestのクライアントアプリが起動する。

Mac版のクライアントアプリ

2023年5月現在では、Minetest 5.7.0 - Appであり、ダウンロードすると「minetest-5.7.0-osx.zip」となっている。Zipファイルをダブルクリックして解凍後、mintest アプリをFinderを開き、アプリケーションディレクトリに移動し、mintestを起動する。

Minetest クライアントアプリから、起動したサーバーに接続

Minetest クライアントアプリ内の「ゲームに参加」タブをクリックし、「アドレス」にIPアドレスの「127.0.0.1」、「ポート」にポート番号の「30000」を入力する。サイズの都合で途切れるが入力する。仮想マシンにローカルホストに、UDP : 30000 で接続することを意味する。

「アドレス」の部分が、パブリッククラウドの仮想マシンであれば、パブリッククラウドにおける仮想マシンのグローバルIPアドレスや、ホスト名とドメイン名の組み合わせになる。

「登録」をクリック。接続先のサーバーで使用する、ユーザー登録を行う。例として、user1 としたが、識別できればなんでも良い。ユーザー名とパスワードでは、英数字のみ使える。入力後、「登録」をクリックする。

なお、既に使われているユーザー名は使えない。初回のユーザー登録後は、「ゲームに参加」のタブで、「アドレス」と「ポート」に接続先のサーバーについて入力されていることを確認し、「名前(=ユーザー名)」と「パスワード」を入力し、「ログイン」をクリックすることで、接続することができる。

接続すると、次のように表示される。画面が真っ暗の場合、仮想空間が夜になっている可能性が高い。

「Esc」キーを押して、操作に必要なキーボード操作を確認すること。「キー変更」をクリックすると、より詳細な操作方法を確認することができる。「再開」をクリックすることで、操作を再開できる。

「キー変更」をクリックした場合。「キャンセル」で戻れる。

詳しくは、Minetestの公式Wikiを確認のこと。>>

mods

拡張するための追加機能を「mod」と言い、Minecraftなど、同様のゲームでもお馴染みとなっている。Minetestでは

mod のダウンロード

modは、Minetestの「ContentDB( )」でダウンロードすることができる。非公式なものであれば、他にもある。

例として、「More Blocks」のmodをダウンロードする。 にアクセスし、画面内の「Download」をクリックして、「moreblocks_13045.zip(2023年5月現在)」をダウンロードする。

mod のインストール

Minetest サーバーモードの停止

作業のため、Minetestのサーバーモードを起動している場合は、Ctrl + c キーを押して、停止する。

modsディレクトリの作成

/home/vboxuser 下に、.minetest というディレクトリがあるので、そのなかに「mods」ディレクトリを作成する。

Windowsの場合は、Tera Termを使っていれば「SSH SCP」、Macでは「scp」コマンドを使い、ダウンロードしておいたZip形式のMod(例 moreblocks_13045.zip)を、「.minetest」下の「mods」ディレクトリにアップロードする。

Zip形式のmodを解凍する。(例 moreblocks_13045.zip)

modの有効化のために、world.mt ファイルを変更

「.minetest」下の「worlds」、さらに下の「world」ディレクトリにある「world.mt」ファイルに、mod を有効化する記述を追記する。「.minetest」下の「mods」にいるため、次のコマンドを実行する。

world.mt」ファイルの末尾に追記する。More Blocksのmodを読み込む…という意味。

これで、Minetest サーバーを起動すれば、mod が読み込まれる。

Minetestサーバーの起動

カスタムコンフィグも読み込んで起動する。

起動時の表示から、mod を読み込んでいることがわかる。

Minetest クライアントアプリで動作確認

サーバーに接続後、「I(アイ)」キーを押し、インベントリ画面で「レシピ」タブに切り替えると、作成可能なブロックが増えていることがわかる。

追加課題

パブリッククラウドで実際に動かしてみよう

パブリッククラウド上で、仮想マシンを起動し、UDPのポート30000 に接続できるようすれば、Minetest のクライアントアプリから接続することができます。

自動起動になるように、シェルスクリプトを作って、動かしてみよう

「systemctl」を使って制御してみよう。

Kubernetesクラスターによる運用

開志専門職大学の「クラウドプラットフォーム実習Ⅱ」を履修中の学生向けの課題ですが、仮想マシンを使って起動している以上、仮想マシン上で何らかのトラブルが起きれば、あと一歩で苦労した建築物ができあがるとしても、Minetestのサーバーは停止します。そこで、停止しないように、Kubernetes によるコンテナベースの運用について検討してみましょう。

参考資料

機能拡張を行う mod の例

mod 配布 : Content DB ( )

  • ロボットプログラミング :

  • AND , NOT等のデジタル回路学習 :

  • ユーザ管理機能 :

ビジネス要素

もし、起業等に取り組むのであれば、Minetestについては次のようなビジネスが考えられます。

  • Minetestサーバーを月額請求で、提供と保守、監視の実施 << AWSやMicrosoft Azure , IBM Cloud , Google , Oracle 等のパブリッククラウドを活用。顧客が増えれば、ストックビジネス。

  • Minetestサーバーの構築

  • mod の開発

  • mod の導入支援・導入代行

  • Minetest による作成物のスクリーンショットを公開・共有する画像ギャラリーアプリの提供

  • Minetest クライアントを実行するパソコンやタブレット端末、モバイルルーター等のハードウェア販売

  • Minetest を活用した人材トレーニング(チームビルディング、対人コミュニケーション、リーダースキルの育成など)

    • Minecraftの人材トレーニング事例があるので、Minetestでもほぼ同じことができる

  • Minetest を活用した教育サポート(技術力が不足する学校でMinetestを活用した授業のサポート)

    • Minetestの活用事例