教育版マインクラフトをさくらインターネットWindowsVPSでホストするあれこれ

この記事はさくらインターネットさんのアドベントカレンダー2022に参加している記事です。
さくらのアドベントカレンダー2022 5日目の記事です。

https://qiita.com/advent-calendar/2022/sakura

マイクロソフト認定教育イノベーター／グローバルマインクラフトメンターの　ほしの　です。

[さくらのマイクロコミュニティ（マイクラサーバー管理者の会）](https://sakura-tokyo.connpass.com/event/251502/)でも登壇させていただいているので今年のアドベントカレンダーに参加させていただきます。

さくらWindowsVPSサービスを使って教育版マインクラフトのホストをしている時のノウハウ（あれこれ）について書きます。

# 教育版マインクラフト
教育版マインクラフト公式サイト
https://education.minecraft.net/ja-jp

# グローバルマインクラフトメンター
筆者はグローバルマインクラフトメンター制度が開始された２年目からJoinしていて、β版のテスト・フィードバック活動などを行っている

https://education.minecraft.net/ja-jp/user/hisashi-hoshino
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13920/6b87ce82-649c-40df-6845-da0375ef0a4c.png)

那須歴史探訪館ジュニア学芸員の中学生がトライしたビルドチャレンジが教育版マインクラフト公式ブログで取り上げられたことがある。

MARCH MONTHLY STUDENT CHALLENGE – HIGHLIGHTS
https://education.minecraft.net/ja-jp/blog/march-monthly-student-challenge--highlights

最近はオリジナル教材制作や統合版・教育版マインクラフトのWebSocketプロトコルでmicro:bitと連携できるプログラミング環境マイクラ：ビット改め「マイマイラボ」の開発をGo言語で行っている。

具体的に何ができるのかは以下のYouTubeプレイリストを見て欲しい。

https://youtube.com/playlist?list=PLMwTZ-rL46BF2k9KORtEH_KuNJr5df_k7


# その他のマイクラとの関わり

https://minecraftcup.com/

Minecraftカップ全国大会の地区ブロック審査リーダーをしている
今年度は東京ブロックの審査を担当

https://www.microsoft.com/ja-jp/biz/education/gigaschool-miee.aspx

マイクロソフト認定教育イノベーターは２０１７年から認定を受けて活動しており、今年度はMinecraft Monthly Challengeと称してMIEE認定者向けに毎月教育版マインクラフトを使った普及活動を行っている

また、マインクラフト関連の記事をnoteにも書いているのでぜひ

https://note.com/naominix

# セレクトしたプラン
https://vps.sakura.ad.jp/windows/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13920/a00274f5-df69-4fc9-5c14-a4542513a2a1.png)

仮想３Core CPUやメモリ２GBだとスペック的に足りないのではないか、という疑問もあるだろうが、このスペックでもマルチプレイヤーモードは１０名ちょっと入っていてもサクサク動作しているが、このサクサク感のためにはある程度の設定が必要となる（後述）。

なお、VPSにゴージャスな環境（仮想CPUコアをたっぷり＋メモリ湯水の如く＋GPU）にすれば快適になるのは当たり前なので、この記事ではチープな環境下で快適にマルチプレイが出来る環境を目指すというアプローチであることをお忘れなくｗ。

# CPU負荷
セレクトしたプランで教育版マインクラフトを動かした場合、CPU負荷がどの程度になるのかが気になるだろう。
正直に書くと、何も工夫せずに教育版マインクラフトをそのまま動作させるとCPU負荷100%に張り付くのである。


# 負荷軽減対策
CPU負荷軽減対策は必須である。各設定項目について片っ端からオフにしていくことが必要だ。ホストするプレイヤーは事実上、プレイはできないのでホストするためだけに存在するので注意が必要だ。

もちろん、ホストプレイヤーでプレイをしようと考えるならもっと高いスペックのVPSにすべきだが、その分、毎月のコストに跳ね返ってくるので注意が必要だ。

この記事ではあくまで安価なプランでホストすることを前提としてまとめている。

## ビデオ設定
ホストする教育版マインクラフトは徹底した軽量化が必須となるため、まずは設定の【ビデオ】の処理が重くなる項目はすべてオフにするところから始める。

スクリーンショットは軒並みオンになっているのでグラフィック処理項目のスイッチをクリックしてオフにする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13920/9704ca2d-d9e8-d925-db0d-1a3abd751f3b.png)

## マイクラのウィンドウサイズ
教育版マインクラフトのウィンドウのサイズを一番小さくなるところまで小さくしておくこと。これでかなりCPU負荷が軽減される。

最小化ではなく、ウィンドウのサイズを小さくすることに注意する。最小化すると教育版マインクラフトはスリープ状態（？）になってしまってホストそのものができなくなるのでウィンドウは表示された状態であることが必須である。

## ホストプレイヤーの視点
教育版マインクラフトのホストはJava版や統合版のサーバ実装と異なり、ホストするために必ずプレイヤーアカウント１つを消費しなければならない。

このホストのためのプレイヤーの視点（どこを見ているか）がなぜ大切かというと、画面上にマインクラフトワールドのブロックが少しでも表示範囲に入っていると、それだけでCPU負荷が上昇するからだ。

そうならないようにするためにはビデオ設定で【雲を表示する：オフ】【美しい空：オフ】とした上で、ホストプレイヤーは何も無い空を見上げることでCPU負荷を大幅に下げることができるのだ。


# 教育版マインクラフトの問題点
## クライアントからの参加方法
最新のv1.18.42ではクライアントからホストへの参加方法が次の方法に限られている。

* 参加コード（４つの絵合わせ）
* 接続ID（長い数字の羅列）
* 参加URL

IP/ポート番号による方法はv1.18.32で廃止されている。

これらの参加方法の問題点はホスト側が接続できなくなった場合に**毎回再発行が必要なこと**である。

:::note alert
**最悪である**
:::

現状のホスト機能は１日〜２日連続稼働しただけで接続できなくなり、**教育版マインクラフトを再起動しない限り復活できない**という問題を抱えている。

ホスト運用という意味で非常に~~煩雑~~**地獄**である。

この地獄を抜け出すため、筆者は昨年、Power Automate Desktopによる教育版マインクラフトの再起動を含めた自動化に取り組んだ。

# 自動化について

VPS上で運用するにあたっては自動化は重要なポイントである。

Power Automate Desktopは以下の通り、Windows Server(Windows Server 2016、Windows Server 2019、Windows Server 202２)でも動作可能だ。

## Power Automate Desktopの動作プラットフォーム
https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/requirements

あまり期待してもらっては困るのだが、Power Automate Desktopで作成したものが、教育版マインクラフトのバージョンアップでお釈迦になることがあることを予め書いておく（というか実際にそうなった）。

さらに、問題なのはPower Automate Desktopは無償ライセンスの場合は無人運用はできないため、リモートデスクトップによるセッションを開いたままにしておかなければ実行できないという弱点もある。そのため、この自動化においてはRaspberry Piからリモートデスクトップに接続したセッションをそのまま残して連続稼働を実現していた。

Raspberry Piは消費電力がわずかであるため、この運用を実現するための妥協案として利用していた。

## 自動化した内容

実際にPower Automate Desktopを使って自動化した内容は次のようなものだ。

### 教育版マインクラフトの再起動
上記で記載した教育版マインクラフトをホストする上での問題点を解決するには、教育版マインクラフトそのものを再起動する以外に方法がない。そのため、接続できなくなった状態の教育版マインクラフトを終了させ、再び起動する処理が必須となる。

これをPower Automate Desktopで作成し、後述する参加コードが無効になった際の自動再起動とクラウド経由で再起動を指示する方法によって教育版マインクラフトを再起動することを実現した。

### サインイン

教育版マインクラフトはMicrosoft365のアカウントによる認証が必須である。アカウントを覚えさせてログインを簡略化することも可能ではあるが、残念ながらこれがうまく行かないケースが稀に発生する。

その問題を回避するために、アカウント情報を記憶させないようにして毎回確実に認証を行うしくみとした。そうしないとうまく行かなかったケースの対応が煩雑となるためだ。

### ワールド選択

ホストするワールドについては、保存されているワールドデータの一番最初に表示されるものを対象に開くこととした。ワールドを変更したいときは、事前に開きたいワールドを手動で開いておく必要がある。

### ホストとしてワールドを開く

ワールド選択時にシングルプレイヤーでやるのかホストでやるのかを選択することができる。ホストすることが目的なので自動的にホストボタンをクリックするようにPower Automate Desktopで実装した。

### ホスト参加コードのスクショ撮影とクラウドへの共有

ホストの参加コードは４つの絵の組み合わせなのだが、これをどう共有するのかは悩ましい。Power Automate Desktopは画面キャプチャを撮影することができるので、参加コードが表示されたら画面スクショを撮影し、それをWindows Serverでクラウドストレージ連携フォルダにその画像を保存することで容易に参照するようにした。

Googleドライブに同期し、さらにOneDriveにもPower Automate（クラウド版）で同期した。これにより、リモートデスクトップでVPSを開かずとも参加コードを知ることができるようになった。

### ホスト参加URLの発行とクラウドへの共有

ホスト参加URLの発行は、ホストしたあとにワールドの共有URLの発行が必要となる。この操作もPower Automate Desktopで自動化した。

Power Automate Desktopではクリップボードにコピーされた参加URLをファイルに落とし込むことができたため、こちらもクラウドストレージ連携フォルダにテキストファイルとして保存するようにした。

このテキストファイル内の参加URLは、OneDriveに同期するとURLとしてリンクをクリックできるのでホストに参加するのがとても快適になった（Googleドライブは残念ながらクリックできるURLとしては表示できなかった）。

### ホスト参加コードが無効化した際の自動再起動処理
自動化を行っていた当時の教育版マインクラフトでは２，３日すると参加コードがすべてバツ表示になることがあった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13920/d562cb98-a1df-98f5-5713-be24b53ded58.png)

Power Automate Desktopでこの参加コード画像を自動認識するようにして、教育版マインクラフトを自動的に再起動する実装を行った。

# バージョンアップの悪夢
Power Automate Desktopによる自動化はかなりうまく行き、数週間（約１ヶ月程度）は全く問題なく連続運用ができていた。まさにサーバとしての連続運用が実現できたのだ。

もちろん、実際には再起動しているので本当の意味での連続運用ではないのだが、ホストに参加することの無い時間帯に再起動しているので外形上は連続運用となっていた。

ところが・・・である。

教育版マインクラフトがバージョンアップされると、Power Automate Desktopのスクリプトは無残にも敗れ去ったのである（涙）。


# 強く求められる教育版マインクラフトサーバ実装

教育版マインクラフトの公式フォーラムではFeature Wishlistがあり、実現して欲しい機能の数々が書き込まれている。当然のことながら教育版マインクラフトのサーバ実装を希望する投稿があり、数年前から数多くの賛同投票数も得ているにも関わらず、ずっと無視され続けている。

教育機関におけるマイクラの活用では継続的な活動とするためにサーバ運用が必要とされている。最近廃止されたIP／ポート番号による接続方法も効率的な運用をする上では必要な接続方法であった。

教育機関で本気で普及するならサーバ実装は必須である。ただでさえ忙しい教育現場で毎回のように参加コードを発行するような運用は現実的ではないのだ。

そろそろサーバ実装を本格的に実現することをマイクロソフトさん・Mojangさんに要望してこの記事を締めくくりたい。