無駄ロボット研究所

「Minecraft」の建築をRPAで自動化する ~劇的! マイクラ自動建築ロボの巻<その1>

匠の設計図を用意しよう

『無駄ロボット研究所』ではRPA(Robotic Process Automation)ツール「UiPath Studio」を使って役に立たない、無駄なロボットを作っていきます。業務を効率化するという本来RPAで実現すべき目的とは真逆のロボットたちをお楽しみください。

 資材集めや構想にかかった時間は別にして、仮に2階建ての家を作るために費やした時間がトータル10時間だったとすると、東京都の最低賃金985円×10で9,850円。どうですか?みなさん。これが、RPAのコスト削減効果ですよ! 何の話かというとマイクラです。自動建築ロボットで、時間泥棒のマイクラから、時間を取り戻そうじゃありませんか。

夢のTNTハウスを自動で建築

 『何ということでしょう。ロボの手によって生まれた……』。

【マイクラ自動建築ロボが夢のTNTハウスを建築!】
「UiPath Studio」を使って「Minecraft」の建築をRPAで自動化してみた - 窓の杜

 そうです。夢のTNTハウスです。最後にきちんとたき火も設置しますので、結果はお察しですが、本質はそこではありません。

 何と言っても、画期的なのはロボットです。今回、作るのは、設計図に従って、自動的に建築するマインクラフト(以下マイクラ)用のロボットなのです。

 設計図さえ用意すれば、家に限らず、トラップでも回路でも、何でも自動的に作ってくれるので、非常に便利。あなたが、家族を顧みずにマイクラの建築に費やしてきた時間を肩代わりしてくれます。

 しくみは単純で、「UiPath Studio」を使って、エクセルから素材表と設計図を読み込み、「Code Connection for Minecraft」経由で、REST APIを使ってマイクラに「setblock」で指定した座標にブロックを配置していくだけです。

Code Connectionを使うための準備

 というわけで、ロボットを作っていきたいところですが、このロボには、いろいろと準備が必要なので、今回は、そのための環境を整えます。実際にロボットを作る作業は次回詳しく解説します。

「Code Connection for Minecraft」をダウンロード

 まずは、マイクラを外部から操作するための準備をします。

 「Code Connection for Minecraft」は、マイクラを教育に活用するために開発されたプログラミング環境用のモジュールです。一般的には、「MakeCode」や「Scratch」を使ったブロックプログラミングに使われますが、実体はREST APIを提供するミドルウェア的な存在です。

 マイクラは、ゲーム内部に独自のコマンド体系を持っていますが、それらをREST APIとして外部から使えるようになります。

 事前の準備として、「Minecraft for Windows 10」(ストアから購入)がインストールされていることが大前提となりますが、その上で、次のリンクから「Code Connection for Minecraft」をダウンロードしてインストールしておきましょう。

マイクラ本体は当然必須
「Code Connection for Minecraft」でUiPathからマイクラを操作する
「Code Connection for Minecraft」をダウンロードしてインストールしておく

マイクラと「Code Connection for Minecraft」をつなぐ

 詳しい方法は、前述のドキュメントにも記載されていますが、「Code Connection for Minecraft」を利用するには、マイクラからコマンドを使って接続する必要があります。

 まずは、マイクラと「Code Connection for Minecraft」を起動します。どちらが先でもかまいません。

 続いて、マイクラでワールドを作成します。ゲームモードでクリエイティブを選択し、チートをONにした状態で作成しましょう。

 ゲームがスタートしたら、「Code Connection for Minecraft」に表示されている“/connect (IPアドレス):(ポート番号)”というコマンドをコピーします。「Code Connection for Minecraft」は、Web Socketを利用するので、マイクラからこのサーバーに接続するためのコマンドです。IPアドレスとポート番号は環境によって変わる可能性があります。

 コピーしたら、マイクラに戻り、[T]キーを押して、コマンド入力画面を表示し、“/”からはじまるコマンドを貼り付けて実行します。“サーバーへの接続を確立しました”と表示されれば完了です。

接続コマンドをコピーする
マイクラにコマンドとして入力すると接続が確立される

 なお、接続が完了すると、「Code Connection for Minecraft」の画面が“使用するエディター”の選択画面になりますが、この画面は操作しません。なぜなら、エディターには「UiPath Studio」を使うからです。

 閉じると切断してしまうので、そのまま最小化しておきましょう。

「Code Connection for Minecraft」は操作せずに最小化しておく

UiPathからつないでみる

 せっかくなので、「UiPath Studio」からつないでみましょう。

「UiPath.Web.Activities」の追加

 「UiPath Studio」から「Code Connection for Minecraft」に接続するには、[HTTPリクエスト]というアクティビティを使います。このアクティビティは標準ではインストールされていませんので、パッケージ管理から“UiPath.Web.Activities”を追加しておきましょう。

HTTPリクエスト

 「UiPath Studio」に、[HTTPリクエスト]を配置すると、自動的に[HTTP リクエストビルダーウィザード]が起動しますので、ここで実行したいコマンドを指定します。

 先に紹介したAPIドキュメントを参照すると、利用可能ないろいろなコマンドが紹介されています。まずは、シンプルにエージェント(「Code Connection for Minecraft」に接続すると登場するキャラクター)を動かしてみましょう。

 エージェントを動かすAPIは次のように紹介さいれいます。

move [string direction]
Attempts to move Agent in specified direction.
/move?direction=forward

 つまり、「/move?direction=forward」と、方向を指定したパラメーターをURLとして与えればいいことになります。

 エンドポイントは、“http:localhost:8080/move”です。マイクラから接続したときとホストは同じなので、localhostでもIPアドレスで指定してもかまいませんが、ポートは“8080”となります。要するに、“8080”ポートでエディターから命令を受け付けて、“19131”ポートでマイクラに命令を送ることになります。

 そして、エンドポイントの末尾には命令を“/”で記述します。ここでは“/move”と指定します。

 “?direction=forward”もエンドポイントに続けて記述してしまってもかまわないのですが、基本的には“パラメーター”として構成します。

 名前に“direction”、値に“forward”として、型は標準の“GetOrPost”(APIの仕様としては“GET”)のままにしておきます。

 これで、[プレビュー]ボタンを押すと、リクエストが発行されます。マイクラ内でエージェントが前に一歩進みます。同じ要領で、いろいろなAPIを試してみるといいでしょう。

結果が表示される。問題なければ[OK]でアクティビティを配置できる

リストと設計図を用意する

 つなぎ方がわかったら、次にリストと設計図を用意しましょう。

 リストは、設計図で使うブロックのリストです。次の表のように、使いたいブロックのブロックIDをExcelのシートとして記載しておきます。

ブロックリスト

 今回は80前後用意しましたが、一部に過ぎません。あまり多くても使いにくいので、マイクラのWikiサイトなどを見ながら、使いたいブロックだけを選んで記載しておきましょう。

 一方、設計図は、次のように、Excel方眼紙にブロック番号を記載することで表現します。各層をシートで表現し、左側から順番に上に重ねるようにブロックを配置していくことになります。

設計図。シートごとに各層のブロックを配置する。ブロック番号で指定する。画面の“64”は石ブロック。“30”はガラスといった要領

 注意点としては、範囲を決める必要がある点です。「UiPath Studio」では、Excelのシートを読み込んだときに、データが入力されている範囲だけを的確に読み取ります。このため、次の画面のように、上や左に空白がある場合、これが無視されてしまいます。

 もちろん、“1”の“air”ブロックで空白を埋めてもかまわないのですが、設計図の範囲は“ここから、ここまでだよ”と「UiPath Studio」に理解させるために、空白の場合は始めと終わりに“XX”を配置します(「UiPath Studio」では後でnullとXXを無視する処理を追加する)。

 ちなみに、シート名は便宜上“1”から順番に付けていますが、名前は何でもかまいません。「UiPath Studio」からは、名前が何であれ、とにかく左から順番に読み込んでいきます。逆に言うと、順番が変わると思い通りに建築されないので注意が必要です。

 準備は、ここまでで完了です。次回、いよいよロボットを作成していきます。今までのロボットに比べると、処理が長くなりますが、根気よくお付き合いください。