眠る世界に合わせて自動化する
Day11 では、Robo が世界に入る準備と、到着ゲートの保護、眠るサーバとの付き合い方を整えました。オンデマンドの世界では、作業している側も「いつでも起きている」とは考えられません。
Robo が入れない理由は一つではありませんでした。アカウントとして認証すること、サーバが求めるリソースパック応答を返すこと、Minecraft 26.x のプロトコルを正しく読むこと、入場直後の準備完了を待つことが重なります。
アカウントは、身体が誰なのかを世界に伝える
Robo が世界に入るには、身体が誰なのかを世界が判断できる必要があります。人間が入るときと同じように、入場にはアカウント、認証、許可の考え方があります。
ここで大事なのは、認証の中身を公開しないことです。このページでは、仕組みの考え方だけを説明します。
一度つながってから切れるまでのまとまった状態です。入場、移動、確認は、セッションの中で起きます。
プロトコルは、入場後の細かい約束まで含む
サーバにつながっただけでは、Robo がすぐに動けるとは限りません。Minecraft のバージョンが変わると、リソースパックへの応答、チャンクの読み込み完了、操作を受け付ける準備完了など、細かい約束も変わります。
Day11 の「入れない」は、単なるアカウント問題ではありません。ログインは通っていても、途中のパケットへの応答が足りなければ先へ進みません。入場直後に早すぎる操作を送ると、サーバ側ではまだ準備中として無視されることもあります。
サーバがリソースパックを提示したとき、クライアントは受け取ったかどうかを返します。Robo のような bot も、この応答を返さないと先に進めない場合があります。
保護は、入口の安定を守る
到着ゲートのような最初の足場は、自由に壊せる場所とは分けて扱います。そこが壊れると、新しく来た人の体験が最初から崩れるからです。
これは Day6 の 権限 の話とつながります。自由と保護は対立ではなく、役割分担です。
失敗したときに危険な状態へ進まないようにする考え方です。Robo が入れないときも、入口や世界を壊さず止まることが大事です。
オンデマンドは、眠ることを設計に入れる
オンデマンドの世界は、必要なときに起き、使われなくなると眠ります。これは便利ですが、作業中に時間の扱いを間違えると、確認の途中で止まったように見えることがあります。
だから、作業は短く区切り、起きている状態を確認し、眠る前提で次の手順へ進む設計にします。基本の考え方は 必要なときだけ目を覚ますサーバ でも説明しています。
誰も使っていない状態が続いたら止まる仕組みです。節約には役立ちますが、長い作業は途中で区切る必要があります。
いま世界を必要としている人や処理がいくつあるかを数える考え方です。参照がある間は起きていて、参照がゼロになったら眠ってよい、と考えるとオンデマンド運用を設計しやすくなります。
状態遷移は、いま何ができるかを分ける
眠っている、起きている、Robo が入れる、人間が遊んでいる。状態が違えば、できる作業も違います。
状態遷移を意識すると、「なぜ今できないのか」を落ち着いて分けられます。止まっているのか、準備中なのか、入場の条件がそろっていないのかを見ます。
一定時間待っても返事がないときに、失敗として扱う境界です。眠る世界では、待つ時間の設計も重要になります。