子どもも来る参加型サーバーを守るためにしたこと:街の保護・バックアップ・本番の入れかえ方

この記事でわかること
- 城壁の内側を守る自作プラグイン MachiGuard でしていること
- 荒らしの記録と巻き戻しを、既存のプラグインが使えないときにどうしたか
- 1 時間ごとのバックアップとワールドの端の決め方
- 不具合の直しを、遊んでいる人のじゃまをせずに本番へ入れる方法
ラクガキ街は、だれでも参加できる「視聴者参加型」のサーバーです。参加型には、知らない人どうしが同じワールドに入るという楽しさがある一方で、荒らし・けんか・事故・データの消失といった心配もついてきます。見てくれている人には子どももいるので、なおさらです。
この記事では、オープンまでに用意したことと、オープンしてから足したことを、「街を守る」「データを守る」「直しを安全に入れる」の 3 つに分けて書きます。どれも特別な道具は使っておらず、ほとんどは自作の保護プラグイン「MachiGuard(街の守り)」と、日々の運用の決まりです。
街を守る:城壁の内側は「安全地帯」にした

街は城壁でぐるっと囲んであり、その内側を MachiGuard で守っています。最初に決めたのは次のことです。
- プレイヤーどうしの攻撃を止める。人のペットへの攻撃も止めます。
- モンスターは湧かない。外から入ってきたモンスターも消えます。
- 火・爆発・外から流れこむ水や溶岩を止める。試しに広場で TNT を爆発させて、石畳がこわれないことを確かめました。
城壁の外は、ふつうのマイクラと同じように冒険できます。「街の中は安心して集まれる場所、外は自由に遊べる場所」と分けておくと、ルールを説明するときもかんたんでした。
建物は守りつつ、空き地には自由に建てられるようにした
オープン前は、街そのものを「建築中」として守っていて、管理者以外はブロックを置いたりこわしたりできませんでした。ただ、住民の人といっしょに街を作っていく企画なので、オープンにあわせてルールを変えています。
- 空いている場所には、だれでも自由にブロックを置ける。
- みんなが置いたブロックは、だれでもこわせる(だれがどこに置いたかはサーバーが覚えています)。
- もとからある街の建物(道・家・城壁など)はこわせない。
- 広場と噴水と露店、大通りと正門、大階段と段々畑、闘技場、アトリエ館、魚屋のまわりなど、大事な場所には置けない。
- 地下のアトリエは、今までどおり自由に使える。

小さな事故の芽もつんでおく
街の植え込みには、はじめスイートベリーの茂みを使っていました。ところがスイートベリーはトゲでダメージを受けます。小さい子がふみこんで体力が減っていくのは、知らないと「なぜかダメージを受ける」こわい体験になります。502 か所あった茂みを、花つきツツジ・ツツジ・ピンクの花びらに置きかえ、街を建て直すときの設計図からも外しました。
ほかにも、夜に空から襲ってくるファントムは湧かない設定にし、ファントムの素材が必要な人のために、釣りの交換所で手に入るようにしました。街の外では、ラクガキのペットは与えるダメージを 6 割に、受けるダメージを少し大きめにしています。描いた絵が強すぎて、ふつうの冒険のつりあいがくずれないようにするためです。
迷子にさせない:帰還の羽とワールドの端
子どもにとってマイクラのワールドは広すぎます。冒険に出て帰り道がわからなくなる、というのはよくあることです。そこで MachiGuard に「街へ帰る羽」を作りました。右クリックして 3 秒動かずに待つと、中央の広場へ戻れます(30 秒に 1 回)。コマンドを知らなくても使えるのがポイントです。
羽は最初、入ったときや生き返ったときに自動で配っていましたが、それで羽が増えてしまう不具合が出たので、今は広場のチェストでもらう形にしています(くわしくは 参加者が来てから見つかった「アイテムが増える」不具合)。
ワールドの広さにも上限を作りました。地上は街を中心に半径 5,000 ブロック、ネザーとエンドも半径 5,000 です。最初は 3,000 で考えていましたが、それだと冒険するには足りないと思い、5,000 にしました。広すぎると、遠くまで行った人のぶんだけワールドのデータが大きくなり、バックアップも重くなります。
荒らしに備える:記録と巻き戻し
空き地に自由に建てられるようにすると、心配になるのが荒らしです。ふつうは CoreProtect というプラグインで「だれが・いつ・どこで・何をしたか」を記録し、荒らした人の分だけまとめて元に戻します。ところが、そのときの CoreProtect はまだ 26.3 に対応しておらず、撮影用サーバーで試すと「26.3 には対応していません」と出て動きませんでした。
待っているあいだにオープンしてしまうので、同じことをする小さなしくみを MachiGuard に足しました。
- ブロックを置いた・こわした・バケツを使った記録を、だれが・いつ・どこで・何をの形で、日ごとのファイルに残す。
- 場所を指定すると、そこで起きたことを新しい順に出す。
- 名前と時間を指定すると、その人がその時間内にしたことをまとめて元に戻す。
あわせて、Paper にもとからある透視(X-ray)対策をオンにし、正規のアカウントだけが入れる設定と、サバイバルで空を飛ぶとはじく設定も確かめました。専用のチート対策のプラグインは入れていません。統合版の人をまちがえてはじいてしまうことがあるので、小さなサーバーではまず記録と巻き戻しを優先しました。
管理者の権限(OP)を持つのは自分だけにしています。オープン前に建築を手伝ってくれた人たちも、オープンの日に持ち物をリセットして、ほかの住民と同じ立場にしました。
データを守る:1 時間ごとのバックアップ
MachiGuard は、1 時間ごとにワールドとプラグインのデータ(ラクガキ・置物・名簿など)を zip にまとめて保存します。残すのは最新の 48 個、つまり 2 日分です。何かあっても、1 時間前までは戻せます。戻すときはサーバーを止めて、zip の中身を上書きするだけです。
ディスコードのルールには「テストサーバーなので、止まる・もどす・リセットすることがあります」と書いてあります。守りを固めても、テスト中に大きな不具合が見つかって戻すことはありえるので、先に伝えておくほうが住民の人も安心できると考えました。

直しを安全に入れる:試してから、だれもいないときに
運営していていちばん気をつかうのは、不具合を直したプラグインを本番に入れるときです。プラグインを入れかえるにはサーバーの再起動が要り、遊んでいる人は 30 秒ほど切れてしまいます。そして、直したつもりのものが別のところをこわすこともあります。
そこで、次の流れを決まりにしました。
- 撮影用サーバーで試す。本番のワールドを写した別のサーバーで、直した版を動かします。ここは動画の撮影にも使っているサーバーで、本番と同じ街がそのままあります。本番には、試しのデータを入れません。
- 前の版の写しを取る。入れかえる前のプラグインを残しておき、何かあればすぐ戻せるようにします。
- だれもいないときに入れかえる。人数を見張る小さなスクリプトを動かし、だれもいない状態が 2 分ほど続いたら、自動でサーバーを止めて入れかえ、起動し直します。
- 起動したら確かめる。プラグインがエラーなく起動したか、入れた版が撮影用サーバーで試したものと同じかを確かめます。
実際には、みんなが寝ている深夜に入れかえが進むことが多く、遊んでいる人を途中で切らずにすみます。急いで入れたいときは、ゲームの中で予告してから再起動します。待ち役のスクリプトは、止めたあとも動き続けていないか、毎回プロセスを確かめるようにしています。一度、止めたつもりの待ち役が残っていたことがあったからです。
まとめ:守りは「ルール」と「戻せること」の 2 本立て
- 街の中と外でルールを分けると、守る範囲もせつめいもはっきりします。
- 荒らしを完全に防ぐより、「だれが何をしたかわかる」「すぐ戻せる」ことのほうが、小さなサーバーでは大事でした。
- 本番に入れる前に、同じ街が入った別のサーバーで試せることが、いちばんの安心材料です。撮影用サーバーを作っておいたことが、思わぬところで役に立ちました(撮影のしくみは 撮影レーンを 2 本にして、コマ一覧で破綻チェックする に書いています)。
サーバーの部品の組み方は Java 版と統合版がいっしょに遊べるマイクラサーバーの組み方 にまとめました。