Ubuntu日和

【第44回】「パルワールド」のゲームサーバーを自前で構築!きみもパルゲットだぜ!

パルワールドとは

 ここ最近、ゲーム好きの間で非常に話題になっているタイトルがある。それが1月19日にアーリーアクセスが開始された、「Palworld(パルワールド)」だ。どんなゲームかは、とりあえずローンチトレーラームービーを見てほしい。

 簡単に言えば、「野生の息吹を感じそうなオープンワールドで、ポケットに入りそうなモンスターをゲットして、方舟的なサバイバルをするアクションRPG」だ。この手のゲームが好きな人は、ムービーを見ただけでワクワク(あるいは、「これ」大丈夫かなとドキドキ)するのではないだろうか。

なお2024年1月22日現在Steamでは、世界で最もプレイされているゲーム1位となっている。なんとPUBGやAPEXはもとより、昨年のThe Game AwardsでGOTYを受賞したBaldur's Gate 3よりも上位である

 パルワールドで遊ぶには、まず自分の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 Decicated Serverは「ツール」であり、「ゲーム」ではない点に注意。インストールや起動の方法は、通常のSteamのゲームと同じで、ボタンをポチればいい
起動ボタンをポチるとこのようなウィンドウが表示されるので、「Palworld Dedicated Serverをプレイ」を選択してから「プレイ」をクリックする。なお「Open and start as a community server」は、このサーバーをコミュニティサーバーとして起動する設定だ。コミュニティサーバーとして起動すると、マルチプレイ参加時のコミュニティサーバーリストに表示される、いわば公開されたサーバーになる……のだが、筆者がUbuntu上で試したところ、PalServer.exeが見つからないというエラーが表示され、こちらの選択肢は動作しなかった。本記事の目的とも合致していないため、コミュニティサーバーについてはとりあえず忘れてよいだろう

 Palworld Dedicated Serverを起動しても、画面には何も表示されない。だが内部ではサーバープロセスが起動しているので、コマンドラインから確認してみよう。以下のように「sudo ss -lunp」コマンドを実行する。UDPの8211番ポートを、PalServer-Linuxプロセスが待ち受けていれば成功だ。

ssコマンドで待ち受けているポートを確認してみる。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でパルワールドのゲームクライアントを起動しよう。

タイトル画面で「マルチプレイに参加する(専用サーバー)」を選択する
画面下部のテキストボックスに、サーバー(を起動したUbuntuデスクトップ)のIPアドレスとポート番号を入力して「接続」をクリックしよう。()

 サーバーが正しく動作していれば、新規キャラクターの作成がはじまる。

サーバー上のワールドに新規キャラクターを作成して、冒険を始めた状態。ここでは2.5Gbpsの有線LANでサーバー繋いでいるため、レスポンスも非常に良好。なお、32人参加できるサーバーにもかかわらず、ぼっちなのは気にしてはいけない

コマンドラインからPalworld Dedicated Serverを動かす

 (インターネット越しに遊ぶのであれば、ルーターのポート解放などの作業は別途必要だが)SteamクライアントからPalworld Dedicated Serverを起動するだけで、友達とのマルチプレイを手軽に楽しめる。

 だがこの方法には問題もある。それは、サーバーを起動するためには、デスクトップセッションにログインし、Steamクライアントを実行しなければならない点だ。サーバーには無駄なデスクトップなどは必要ないし、専用サーバーなのであればいちいちログインなどせずとも、自動的にプロセスが起動してくれるのが望ましい。

 もうひとつが、Steamアプリの二重起動にあたる問題だ。先ほどUbuntuでサーバーを、Windowsでゲームクライアントを起動したが、その際に同一のSteamアカウントを使っていた場合は、クライアント起動時に以下のような警告が表示されたと思う。

同一のSteamアカウントを使い、サーバーとクライアントを別のPCで実行しようとすると、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クライアントだ。

steamcmdは通常のOSSのパッケージとは異なり、インストール中にSteamライセンスへの同意が求められる。条項を確認の上、「I AGREE」を選択しよう
$ 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)でインストールできるため、これで同一アカウントでの二重起動問題を回避できる。

Palworld Dedicated Serverのインストールコマンド。2394010はSteam上での、Palworld Dedicated ServerのアプリIDだ
$ steamcmd +login anonymous +app_update 2394010 validate +quit

 実はSteamCMDからインストールしただけでは、共有ライブラリがロードできず、Palworld Dedicated Serverは起動に失敗する。そこで以下のコマンドを実行し、インストールされた「steamclient.so」というファイルを「~/.steam/sdk64/」以下にコピーしよう。

アプリID 1007は、Steamworks SDK Redistというパッケージ。この中に含まれている共有ライブラリをコピーして使用する
$ 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」というシェルスクリプトを実行しよう。

デフォルトのインストールディレクトリは、SteamCMDを実行したユーザーのホームディレクトリ以下の「~/Steam/steamapps/common/PalServer」となっている
$ cd ~/Steam/steamapps/common/PalServer
$ ./PalServer.sh

 これでサーバーは起動したはずだ。別のターミナルを開き、ssコマンドでポートの状態を確認してみよう。問題がなければ先ほどと同様に、Windows PCのゲームクライアントからサーバーに接続してみよう。なおPalServer.shはフォアグラウンドで動作しているため、サーバーを停止したい場合はCtrl+Cを押せばよい。

ssコマンドでポートを確認した例。先ほどと同様に、PalServer-LinuxプロセスがUDPの8211番ポートを待ち受けているのが分かる
$ 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のユニットファイルを新規作成する。

ここではユニット名をpalserver.serviceとした
$ sudo systemctl edit --force --full palserver.service

 テキストエディタが起動するので、以下のように記述しよう。

palserver.serviceの内容。ユーザー名とディレクトリ名(User、WorkingDirectory、ExecStart行)は、お使いの環境に合わせて適宜書き換えてほしい。なおPalServer.shにつけている3つのオプションは、マルチスレッドCPU環境において性能を向上させるためのもの
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

 ユニットファイルを保存終了したら、以下のコマンドでサーバーを起動する。

小ネタだが、systemctlコマンドでサービスをenableにする際に--nowオプションをつけると、サービスのstartを同時に行なうことができる
$ sudo systemctl enable --now palserver.service

 最後に、サービスの状態を確認しておこう。プロセスが正常に起動していれば成功だ。

以後はPCを起動すると、Palworld Dedicated Serverも自動的に起動するようになる
$ 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」にしてから、サーバーを起動してみよう。

ダメージ倍率を1,000倍にしてみたところ、ゲーム開始直後にもかかわらず、素手攻撃で異常なダメージが叩き出せた。ちなみにゲーム内で行なえるシングルプレイのワールドカスタマイズでは、プレイヤーの与ダメージは最大で5倍までしか設定できないのだが、サーバーの設定ファイルをいじれば、このように制限を越えることが可能。ただし極端なパラメータを設定すると、ゲームの興を削いでしまうため、ご利用は計画的に

 このように、自由にカスタマイズしたワールドで友達と遊べるのも、プライベートゲームサーバーならではの楽しみといえるだろう。たとえば遅れて参加した友達のために、経験値2倍キャンペーンを実施するといったことも、管理者の裁量で自由にできる。こうした遊び方は、公式サーバーでは不可能だ。

 なおPalworld Dedicated Serverは、終了時(リロードや再起動も含む)に、現在メモリ上に持っている設定値をファイルに書き出す。そのためサーバーの起動中に設定ファイルを編集しても、再起動時に巻き戻りが発生してしまう。設定の編集はサーバーを停止した状態で行おう。また、ほかの設定できるパラメータについて詳しくは、公式のドキュメントを参照してほしい。

 ちなみに筆者は、デフォルト設定にはあるものの、ドキュメントに書かれていない「bActiveUNKO=False」という設定値が気になって仕方がない。

サーバーの負荷

 公式ドキュメントを見ると、それなりのスペックが要求されるサーバーだが、実際の所はどうだろうか。筆者はBeelink EQ12をサーバーにしてみた。そして、実際にゲームをプレイしている最中のリソースの変化を計測したのが、以下のグラフだ。

CPU使用率。N100は4コアなので、全体は400%。サーバーを起動したアイドル状態で使用率は50%程度。プレイヤーが一人ログインすると、おおむね100〜120%程度で安定する。仮に負荷が人数に正比例すると想定すると、5人くらいまでは快適だろうか
メモリ使用率。8GBでも動きそうではあるが、ギリギリかもしれない。EQ12には16GBのメモリを実装しているため、とりあえず問題なく遊べそうだ
ネットワークトラフィック。LANの帯域幅からすれば、ほとんど流れていないようなものだ。日本のネットワーク事情であれば、まったく気にする必要はないだろう。ただしこの手のゲームでは帯域幅よりもレイテンシが支配的なため、おそらくモバイルネットワークでは辛いだろう

 負荷試験をしたわけではないので、グラフから読み取れる以上のことは言えないのだが、個人利用の範囲であれば、N100のミニPCでも十分だと感じた。もちろん、32人の枠が満員になるほど友達がいる方は、つよつよなサーバーマシンを用意した方がよい。

サーバーのアップデート

 当然だが、サーバープログラムは随時アップデートされていく。SteamCMDでは、インストールと同じ以下のコマンドで、Palworld Dedicated Serverをアップデートできる。

コマンドラインでSteamアプリをアップデートする
$ steamcmd +login anonymous +app_update 2394010 validate +quit

 プログラムがアップデートされたら、サーバーの再起動も行なっておこう。カジュアルに動かしているサーバーであれば、メンテの手間を省くためにも、このコマンドをシェルスクリプト化して、systemd.timerから自動実行させてしまってもいいかもしれない。とはいえ複数のプレイヤーに解放しているサーバーであれば、きちんとメンテナンススケジュールを告知して、アップデートと再起動を行なうことを推奨する。

まとめ

 パルワールドの専用サーバーは、まだ実験的な機能ではあるものの、全体を通して特に動作上の問題は感じられなかった。本記事の手順通りにセットアップを行なえば、誰でも簡単にゲームサーバーを動かすことができるはずだ。パフォーマンスに関してだが、前述の計測結果を見ても、家族や友達同士の少人数プレイであれば、このクラスのミニPCでも遊べそうだ(もちろんプレイ人数が増えたり、ゲームがより進行した時に、どうなるかは未知数だ)。実際、AWS上にm5.xlargeインスタンスを用意して試してもみたのだが、少人数プレイであれば、サーバーのスペックよりもネットワークの状態が支配的であるように感じた。

長時間のプレイに耐えられるか、しっかり時間をかけて動作検証したので安心してほしい

 最後に一点。これはパルワールドに限らず、サーバーを立てる際のお約束だが、セキュリティ対策には気をつけよう。OSやアプリのバージョンアップをしっかりと行なうのは当然として、インターネットからアクセス可能にするのであれば、ファイアウォールの導入も検討してみよう。

 Palworld Dedicated Serverには、第三者が勝手に遊べないよう、パスワードをかける機能がある。だが2024年1月25日現在のバージョンでは、IPアドレスを直接指定してログインする際にパスワードが入力できない不具合があり、クローズドなサーバーでは実質使えない。この問題は次のアップデートで修正される予定のため、修正され次第設定してみるといいだろう。

【1月30日追記】最新のアップデートによりパスワードに対応しました。

 筆者はしばらくソロプレイを楽しむつもりなのだが、将来的な遊びの幅を考えると、最初から家庭内に専用サーバーを用意しておくメリットはありそうだと感じた。まあ、一緒に遊ぶ友達はいないのだが……。

 というわけで、皆さんも本記事を参考にして、専用サーバーでのマルチ(あるいはぼっち)プレイをエンジョイしてほしい。