Ubuntu日和
【第44回】「パルワールド」のゲームサーバーを自前で構築!きみもパルゲットだぜ!
2024年1月27日 06:17
パルワールドとは
ここ最近、ゲーム好きの間で非常に話題になっているタイトルがある。それが1月19日にアーリーアクセスが開始された、「Palworld(パルワールド)」だ。どんなゲームかは、とりあえずローンチトレーラームービーを見てほしい。
簡単に言えば、「野生の息吹を感じそうなオープンワールドで、ポケットに入りそうなモンスターをゲットして、方舟的なサバイバルをするアクションRPG」だ。この手のゲームが好きな人は、ムービーを見ただけでワクワク(あるいは、「これ」大丈夫かなとドキドキ)するのではないだろうか。
パルワールドで遊ぶには、まず自分のPC上に「ワールド」を作成し、そこにプレイヤーの分身であるキャラクターを作成する必要がある。キャラクターはワールドに紐づくため、新しいワールドを作り、既存のキャラクターを引越すといったことはできない(2024年1月現在。将来的にはアップデートでワールド移動が実装される予定)。
通常はこのワールド内で、自分一人でプレイすることになる。いわゆるシングルプレイだ。だがワールドの設定をマルチプレイ用に変更することで、友達をワールドに招待し、最大4人までで遊ぶことができる。
だがこの招待型のマルチプレイには、色々と制限がある。まずはプレイヤーが最大4人である点だ。今時のマルチプレイヤーゲームとしては、ちょっと物足りないのではないだろうか。
次に、ワールドがホストのPC上で動くという点だ。つまりホストのPCに、通常のゲームプレイよりも余計な負担がかかってしまう。特に接続しているプレイヤー数が増えると、スペックによっては厳しいことになるかもしれない。
そしてもう1つが、(繰り返しになるが)パルワールドにおいてキャラクターはワールドに紐づくという点だ。つまり招待するホスト側は、普段遊んでいるワールドを解放するだけのため、いつものワールドとキャラクターでそのまま遊べる。だがゲストは、自分のローカルPC上にあるキャラクターを、ホストのワールドに持ち込むことができない。初めて訪れたホストでは、必ず新規キャラクターを作成し、レベル1から始まる。これは少し不公平だろう。
この理由から、同じワールドで継続的にプレイを行なう場合、常に同じプレイヤーがホストになる必要がある。そのためホストの都合が悪い日など、ゲームが起動していない時は、ゲスト全員がそのワールドの続きを遊べなくなってしまう。かといってホストに、ゲームPCを24時間起動しっぱなしにさせておくわけにもいかないだろう。
そこでおすすめしたいのが、プライベートなゲームサーバーだ。クライアントPCとは別に、ワールドをホストするためだけの専用サーバーを用意する。そしてプレイヤーは全員、そのゲームサーバーに接続して遊ぶというスタイルだ。この方式であれば、なんと最大32人までのマルチプレイが可能になる。またサーバーを常時稼動させておけば、ホストの都合を気にすることなく、自由に遊ぶことができるというわけだ。つまり友達と一緒に遊ぶ予定があるのであれば、最初から専用サーバーを構築してプレイを開始するのがいいだろう。
なお、誰でも参加できるマルチプレイヤー用のサーバーは、パルワールドの公式やコミュニティによっていくつも運営されているため、必ずしも自分で構築する必要はない。だが「ネット上で知らない人と遊ぶのはちょっと怖い」、「仲間内で遊びたいから、知らない人に入ってきて欲しくない」という人もいるだろう。そんな人にも、非公開のゲームサーバーの利用はおすすめと言える。
前置きが長くなったが、今回はUbuntuでパルワールドのゲームサーバーを構築する方法を紹介する。パルワールドのサーバー自体は、Windowsでも動かすことはできる。だがこうした用途には、無料で使えるLinuxがベストマッチと言えるだろう。
なおパルワールドにはXbox版やMicrosoft Store版も存在するが、現時点で専用ゲームサーバーに接続できるのはSteam版のみであるため、本記事もSteam版のみを対象としている。またパルワールド自体が開発中のタイトルであるため、想定外のトラブルや、今後仕様が変更される可能性がある点にも留意してほしい。
そもそもサーバーを自作する必要はあるの?
実はパルワールドは世界的にヒットしているタイトルということもあり、ゲームサーバーをホスティングしてくれるサービスが、早くも登場している。自分でイチからサーバーを立てずとも、こうしたサービスをベースとして利用した方がいいと考える人もいるだろう。もちろんそれも選択肢としてはアリなのだが、以下に挙げるような懸念点もある。
- サーバーのロケーションによっては、日本からのアクセスが快適であるとは限らない
- マルチテナントのサービスは、サーバーのパフォーマンスが保証されない
- そもそもアーリーアクセス中のゲームのため、これからどうなるか分からない
こうした状態でサービスを契約し、それなり(月あたり数千円ほど)の料金を支払うのは、心理的にもハードルが高いだろう。その点自宅サーバーであれば、余っているPCに無料のUbuntuをインストールするだけなので、気軽に試せるし、飽きたら止めてしまっても懐は痛まないというわけだ。
……というのは実は建前で、ぶっちゃけ「自宅にゲームサーバーを立てていじるのは面白そう」、「話題のタイトルなので、このビッグウェーブに乗りたい」が筆者の本音だったりする。そんなわけで皆さんも本記事を参考に、ご家庭に余っているPCを使って(きっと何台かあるだろう)試してみてほしい。
ちなみに本記事は自宅内にサーバーを構築することを前提としているが、VPSやクラウドなど、インターネット上にサーバーを構築する場合も、(ネットワーク設定を除けば)同じ手順で行なえるので、そうしたケースでも参考になるはずだ。
SteamのGUIからPalworld Dedicated Serverを動かす
ゲームサーバーを起動する一番簡単な方法は、GUIのSteamクライアント上から行なうことだ。SteamがインストールされているUbuntuデスクトップがあるならば、この手順でサーバーを起動できる。まずSteamのライブラリから「パルワールド」で検索してみよう。「Palworld Dedicated Server」が見つかるので、これをインストールして起動しよう。
Palworld Dedicated Serverを起動しても、画面には何も表示されない。だが内部ではサーバープロセスが起動しているので、コマンドラインから確認してみよう。以下のように「sudo ss -lunp」コマンドを実行する。UDPの8211番ポートを、PalServer-Linuxプロセスが待ち受けていれば成功だ。
$ sudo ss -lunp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:8211 0.0.0.0:* users:(("PalServer-Linux",pid=10343,fd=59))
UNCONN 0 0 0.0.0.0:27015 0.0.0.0:* users:(("PalServer-Linux",pid=10343,fd=41))
UNCONN 0 0 0.0.0.0:27036 0.0.0.0:* users:(("steam",pid=5765,fd=116))
(...略...)
サーバーが起動したので、マルチプレイに参加しよう。ここでは別のWindows PCからゲームに参加することにした。通常のゲームプレイと同様に、Windows PCでパルワールドのゲームクライアントを起動しよう。
サーバーが正しく動作していれば、新規キャラクターの作成がはじまる。
コマンドラインからPalworld Dedicated Serverを動かす
(インターネット越しに遊ぶのであれば、ルーターのポート解放などの作業は別途必要だが)SteamクライアントからPalworld Dedicated Serverを起動するだけで、友達とのマルチプレイを手軽に楽しめる。
だがこの方法には問題もある。それは、サーバーを起動するためには、デスクトップセッションにログインし、Steamクライアントを実行しなければならない点だ。サーバーには無駄なデスクトップなどは必要ないし、専用サーバーなのであればいちいちログインなどせずとも、自動的にプロセスが起動してくれるのが望ましい。
もうひとつが、Steamアプリの二重起動にあたる問題だ。先ほどUbuntuでサーバーを、Windowsでゲームクライアントを起動したが、その際に同一のSteamアカウントを使っていた場合は、クライアント起動時に以下のような警告が表示されたと思う。
実はここで「続行」をクリックしても、サーバー側のSteamクライアントをシャットダウンするまでは、普通にサーバープロセスは動作してくれる。だが正しい利用方法とは言えないだろう。これらの問題は、サーバーとクライアントを同じPC上で動作させれば解決する。だがそれでは「ワールドがホストのPCに依存する」という最初の問題が解決できないため、本末転倒だ。
なのでここからは、CLIのみでパルワールド専用サーバーを構築する方法を紹介しよう。本格的にサーバーを運用したいのであれば、こちらの方法を推奨する(つまり今までの話は、背景を説明するための前フリだ)。
まず専用のPCを用意して、Ubuntu Serverを新規にインストールしよう。今回はLTSの最新ポイントリリースである22.04.3を利用した。ちなみに利用する人数にも依存するものの、サーバーにはそれなりのスペックが要求される。公式の説明では、4コアのCPUと16GBのメモリ(安定稼働のためには32GB以上を推奨、8GBでも動きはするものの、メモリ不足によるサーバークラッシュの可能性が高まる)が必要とされているため、古いPCの再利用などは厳しいかもしれない。
Ubuntu Serverのインストールについては、第26回を参照してほしい。またサーバーのネットワークがDHCPでは問題がある。第29回を参考に、IPアドレスの固定を行なっておこう。
Palworld Dedicated Serverのインストール
OSのインストールが完了したら、以下のコマンドでSteamCMDをインストールしよう。SteamCMDはその名の通り、コマンドライン版のSteamクライアントだ。
$ sudo add-apt-repository multiverse
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt install -y steamcmd
次にsteamcmdコマンドを使って、Palworld Dedicated Serverをインストールしよう。Palworld Dedicated ServerはSteamにログインしない状態(anonymous)でインストールできるため、これで同一アカウントでの二重起動問題を回避できる。
$ steamcmd +login anonymous +app_update 2394010 validate +quit
実はSteamCMDからインストールしただけでは、共有ライブラリがロードできず、Palworld Dedicated Serverは起動に失敗する。そこで以下のコマンドを実行し、インストールされた「steamclient.so」というファイルを「~/.steam/sdk64/」以下にコピーしよう。
$ steamcmd +login anonymous +app_update 1007 +quit
$ mkdir -p ~/.steam/sdk64/
$ cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/
ここまでの作業が完了したら、Palworld Dedicated Serverがインストールされたディレクトリに移動して、「PalServer.sh」というシェルスクリプトを実行しよう。
$ cd ~/Steam/steamapps/common/PalServer
$ ./PalServer.sh
これでサーバーは起動したはずだ。別のターミナルを開き、ssコマンドでポートの状態を確認してみよう。問題がなければ先ほどと同様に、Windows PCのゲームクライアントからサーバーに接続してみよう。なおPalServer.shはフォアグラウンドで動作しているため、サーバーを停止したい場合はCtrl+Cを押せばよい。
$ sudo ss -lnup
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:8211 0.0.0.0:* users:(("PalServer-Linux",pid=3980,fd=43))
UNCONN 0 0 0.0.0.0:27015 0.0.0.0:* users:(("PalServer-Linux",pid=3980,fd=26))
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=677,fd=13))
UNCONN 0 0 fe80::7e83:34ff:feb9:2ea2%enp1s0:546 :::* users:(("systemd-network",pid=674,fd=21))
Palworld Dedicated Serverの自動起動設定
サーバーを再起動する度に、SSHでログインしてシェルスクリプトを実行するのは面倒くさいし、Ctrl+Cで終了するのもお行儀が悪いだろう。なので、ゲームサーバーが正常に起動することが確認できたら、自動起動を設定しよう。
まず以下のコマンドで、systemdのユニットファイルを新規作成する。
$ sudo systemctl edit --force --full palserver.service
テキストエディタが起動するので、以下のように記述しよう。
Unit
Description=Palworld Dedicated Server
Wants=network-online.target
After=network-online.target
Service
User=mizuno
WorkingDirectory=/home/mizuno/Steam/steamapps/common/PalServer
ExecStart=/home/mizuno/Steam/steamapps/common/PalServer/PalServer.sh -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS
ExecReload=/usr/bin/kill -s HUP $MAINPID
KillSignal=SIGINT
Restart=always
TimeoutStartSec=60
TimeoutStopSec=60
Install
WantedBy=multi-user.target
ユニットファイルを保存終了したら、以下のコマンドでサーバーを起動する。
$ sudo systemctl enable --now palserver.service
最後に、サービスの状態を確認しておこう。プロセスが正常に起動していれば成功だ。
$ sudo systemctl status palserver.service
⚫ palserver.service - Palworld Dedicated Server
Loaded: loaded (/etc/systemd/system/palserver.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-01-23 03:22:25 UTC; 29s ago
Main PID: 4564 (PalServer.sh)
Tasks: 37 (limit: 18778)
Memory: 1006.7M
CPU: 12.965s
CGroup: /system.slice/palserver.service
├─4564 /bin/sh /home/mizuno/Steam/steamapps/common/PalServer/PalServer.sh port=8211 players=32 -useperfthreads -NoAsyncLoadingThre>
└─4571 /home/mizuno/Steam/steamapps/common/PalServer/Pal/Binaries/Linux/PalServer-Linux-Test Pal port=8211 players=32 -useperfthre>
(...略...)
サーバーのカスタマイズ
パルワールドのシングルプレイでは、取得経験値倍率やアイテムドロップ率といったワールドのパラメータを、プレイヤーがある程度自由にカスタマイズできる。だが当然、マルチプレイヤー用のワールドの設定は、プレイヤーサイドでいじることはできない。これは言い換えると、サーバー管理者ならば、ワールドのゲームバランスを自由にいじれるという意味でもある。
サーバーにおけるワールドのカスタマイズは、「~/Steam/steamapps/common/PalServer/Pal/Saved/Config/LinuxServer/PalworldSettings.ini」という設定ファイルを通して行なう。まずは以下のコマンドで、デフォルト設定をコピーしよう。
$ cp ~/Steam/steamapps/common/PalServer/{DefaultPalworldSettings.ini,Pal/Saved/Config/LinuxServer/PalworldSettings.ini}
このファイルをテキストエディタで書き換えることで、ゲームバランスを変更できる。たとえばプレイヤーの与ダメージは「PlayerDamageRateAttack」というパラメータで設定でき、デフォルトは当然だが「1.000000」となっている。これを「1000.000000」にしてから、サーバーを起動してみよう。
このように、自由にカスタマイズしたワールドで友達と遊べるのも、プライベートゲームサーバーならではの楽しみといえるだろう。たとえば遅れて参加した友達のために、経験値2倍キャンペーンを実施するといったことも、管理者の裁量で自由にできる。こうした遊び方は、公式サーバーでは不可能だ。
なおPalworld Dedicated Serverは、終了時(リロードや再起動も含む)に、現在メモリ上に持っている設定値をファイルに書き出す。そのためサーバーの起動中に設定ファイルを編集しても、再起動時に巻き戻りが発生してしまう。設定の編集はサーバーを停止した状態で行おう。また、ほかの設定できるパラメータについて詳しくは、公式のドキュメントを参照してほしい。
ちなみに筆者は、デフォルト設定にはあるものの、ドキュメントに書かれていない「bActiveUNKO=False」という設定値が気になって仕方がない。
サーバーの負荷
公式ドキュメントを見ると、それなりのスペックが要求されるサーバーだが、実際の所はどうだろうか。筆者はBeelink EQ12をサーバーにしてみた。そして、実際にゲームをプレイしている最中のリソースの変化を計測したのが、以下のグラフだ。
負荷試験をしたわけではないので、グラフから読み取れる以上のことは言えないのだが、個人利用の範囲であれば、N100のミニPCでも十分だと感じた。もちろん、32人の枠が満員になるほど友達がいる方は、つよつよなサーバーマシンを用意した方がよい。
サーバーのアップデート
当然だが、サーバープログラムは随時アップデートされていく。SteamCMDでは、インストールと同じ以下のコマンドで、Palworld Dedicated Serverをアップデートできる。
$ steamcmd +login anonymous +app_update 2394010 validate +quit
プログラムがアップデートされたら、サーバーの再起動も行なっておこう。カジュアルに動かしているサーバーであれば、メンテの手間を省くためにも、このコマンドをシェルスクリプト化して、systemd.timerから自動実行させてしまってもいいかもしれない。とはいえ複数のプレイヤーに解放しているサーバーであれば、きちんとメンテナンススケジュールを告知して、アップデートと再起動を行なうことを推奨する。
まとめ
パルワールドの専用サーバーは、まだ実験的な機能ではあるものの、全体を通して特に動作上の問題は感じられなかった。本記事の手順通りにセットアップを行なえば、誰でも簡単にゲームサーバーを動かすことができるはずだ。パフォーマンスに関してだが、前述の計測結果を見ても、家族や友達同士の少人数プレイであれば、このクラスのミニPCでも遊べそうだ(もちろんプレイ人数が増えたり、ゲームがより進行した時に、どうなるかは未知数だ)。実際、AWS上にm5.xlargeインスタンスを用意して試してもみたのだが、少人数プレイであれば、サーバーのスペックよりもネットワークの状態が支配的であるように感じた。
最後に一点。これはパルワールドに限らず、サーバーを立てる際のお約束だが、セキュリティ対策には気をつけよう。OSやアプリのバージョンアップをしっかりと行なうのは当然として、インターネットからアクセス可能にするのであれば、ファイアウォールの導入も検討してみよう。
Palworld Dedicated Serverには、第三者が勝手に遊べないよう、パスワードをかける機能がある。だが2024年1月25日現在のバージョンでは、IPアドレスを直接指定してログインする際にパスワードが入力できない不具合があり、クローズドなサーバーでは実質使えない。この問題は次のアップデートで修正される予定のため、修正され次第設定してみるといいだろう。
【1月30日追記】最新のアップデートによりパスワードに対応しました。
筆者はしばらくソロプレイを楽しむつもりなのだが、将来的な遊びの幅を考えると、最初から家庭内に専用サーバーを用意しておくメリットはありそうだと感じた。まあ、一緒に遊ぶ友達はいないのだが……。
というわけで、皆さんも本記事を参考にして、専用サーバーでのマルチ(あるいはぼっち)プレイをエンジョイしてほしい。