教育版・統合版マイクラ x micro:bit連携プログラミング環境をつくる

この記事はmicro:bitアドベントカレンダー2022に参加している記事。
micro:bitアドベントカレンダー2022 22日目

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

# マイクラをmicro:bitと接続できないだろうか

そんな問いかけから始まったプロジェクトだったワケだが、まずは自分で実装するよりも先人の知恵を借りてみようとググってみるとやっている人は結構いるのだと分かった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13920/338c3d33-a7b1-7124-1d57-47e16e3a2095.png)

教育版・統合版マイクラはベースが同じものなので機能が共通しているところが多い。元々、これらのマイクラはプログラミング機能を付加することができるCode Connection for Minecraftという別アプリとWebSocketプロトコルで連携して機能拡張を実現していた。

このWebSocketプロトコルをしゃべるサーバ実装をNode.jsなどで行うことで外部ハードウェア（Raspberry Piなど）と連携してモーター制御を実現している事例が多く見つかった。

ただ、これらはいずれも実験的な取り組みであったり、サンプルコードを示すだけのものであったりしたのでマイクラと外部ハードが相互にやり取り出来るようなものがないかとボヤッと考えている時期があった。

# マイクラをKubernetes互換の管理ツールにする事例

そんな中、飛び込んできたのが以下の記事だった。

マインクラフトをKubernetes互換の管理ツールにしてしまった人物が出現
https://gigazine.net/news/20220107-kubecraftadmin/

この記事はマイクラの可能性が無限に広がっていることを再認識させられたことを今でも鮮明に覚えている。

これが出来るならmicro:bitとの連携も十分可能だろうと思い、本格的に調査に乗り出したのである。

# Minecraft WebSocket Server Library

先程の記事にあった管理ツールはkubecraftadminというプロジェクトでGithubで公開されている。

https://github.com/erjadi/kubecraftadmin

実装はGo言語。

利用しているWebSocketサーバライブラリがGo言語による実装なので、早速これを活用して開発してみることになった。

※現在、このWebSocketサーバライブラリは更新されておらず、最新の統合版・教育版のWebSocketプロトコルに対応していないため、使用できなくなっている。
筆者はこのプロジェクトからForkされたプロジェクトを最新のプロトコルに対応させている方の開発中ブランチコードを元に最新版の開発を継続している。
なお、まだ全てのマイクラ内イベントへの対応は出来ていないため、筆者自身が必要とするイベントへの変更を独自に行っているので、後日プルリクする予定である。

# MiMi-Lab/マイマイラボ（Minecraft:bit）で実現できること
これは言葉で説明するよりも動画で見た方が早いので以下のプレイリストを見て欲しい。

https://bit.ly/3FFwHhC

## マイクラ→micro:bit

マインクラフト内のイベントをmicro:bitに反映することが可能だ。

そのためにはマインクラフト内のイベントを購読（Subscribe)することで該当イベントが発生した際に関連する情報がJSON形式で返ってくる。

そのデータの中にはプレイヤーのワールド座標が含まれていたり、各種エンティティの情報も返ってくる。これらのデータをうまく活用すればこれまで出来なかった取り組みが可能になるだろう。

個人的にお気に入りなのは、Ivan Bosnić氏のこちらの実装だ。

https://twitter.com/PlusPlusInt/status/1588617333547077632

プレイヤーの歩行イベントをSubscribeし、返ってきたワールド座標をPythonで３Ｄグラフにプロットする実装例となっている。

MiMi-Labにはプレイヤー座標をCSVに記録する機能を追加したので、Ivan Bosnić氏の３ＤグラフにプロットするPythonスクリプトにそのCSVファイルを指定すればプロットできるようになった。

プレイヤーのワールド内の行動を記録できるという意味で興味深い実装例と言える。

## micro:bit→マイクラ
micro:bitのセンサーやボタンのイベントが発生するとマイクラにマイクラコマンドの実行をすることが可能だ。

こちらはマインクラフトのコマンドの知識がそのまま役立つ。ただ、その知識が無いと何をやらせれば良いのか分からないというのもあるのだが、実はマイクラコマンドの知識を学ぶきっかけにしたいと考えている。

micro:bitのボタンを押したらワールド内のエンティティを全員集合させるコマンドを発行する事例はこちらのmicro:bit Foundation Community Lead Japan @sarahatamicrob1 さんのTweetにある通りだ。

https://twitter.com/sarahatamicrob1/status/1555780382867353601

他にはGROVE拡張ボードにmicro:bitをセットして各種センサー類を使った作成もある。

https://twitter.com/naominix/status/1605572288803647489

こちらは超音波距離センサーで5cm未満になると、ワールド内にロケット花火が打ち上がる事例だ。


# マイクラコマンドの可能性

マインクラフトを自由自在に扱えるコマンドは、マインクラフトの魅力の１つである。そのコマンドの発動条件はワールド内部にあるものだったが、MiMi-Labによって外部から発動可能となる。そのきっかけはセンサーでもボタンでも良い。組み合わせは自由だ。


# ネーミングについて
元々このプロジェクトは「マイクラ：ビット（Minecraft:bit）」と個人的に呼んでいた。マイクラとマイクロビットの組み合わせだからだ。ただ、マイクラは登録商標でもあるのでこの名前を使い続けるのもどうかと思い、独自のネーミングを検討しているところだ。

【マイ】クラと【マイ】クロビットの組み合わせコ【ラボ】レーション（ラボには研究環境という意味合いも掛け合わせている）ということでマイマイラボと呼びはじめているが、もっといい名前を名付けたい方がいれば募集中なのでご連絡を。

# 開発中

教育版・統合版マイクラ x micro:bit連携プログラミング環境は、現在もなお開発中であるため安定性やその他課題のクリアを目指しているところである。

micro:bit MakeCode側のブロックの国際化も行っていないため、これの対応を行うことを優先的に進める方針である。

また、マイクラコマンドにあまり詳しくない人でもこんな動きをしたら楽しい！と思ってもらえそうな定番コマンドは１ブロック化して提供することも検討中だ。

それをきっかけにマイクラコマンドを自分で作ってみたいと思ってもらえればと考えている。

# 体験ワークショップ実施

マイルストーンの１つだった体験ワークショップの実施を12/17にTIOM(Try It On Monday)2022@日本マイクロソフト品川本社にて実施した。

http://tiomonday.com/

http://kiyotakah.com/tiom-2022-posters/

ハードとソフトを連携させる取り組みで50分という時間は若干短い設定だったが、micro:bit MakeCodeという優秀なプログラミング環境があるので一通りの機能を試せるところまで参加者が体験できた

今年の教育版マインクラフトのバージョンアップ時にWebSocketプロトコルが変更となって一時的に使えなくなってしまった時期があったものの、想定以上のスピードで復活することが出来たことで今回のワークショップに漕ぎ着けることができたのは感慨深い。

# micro:bit ファンミーティングLT登壇

さらにTIOM2022の翌日である12/18には秋葉原にてmicro:bit ファンミーティングが開催され、LT登壇してMiMi-Labについての話とデモを行った。

https://twitter.com/sw_education/status/1604328033732550656

https://twitter.com/sarahatamicrob1/status/1604428315132981248

# 2023年に向けて

年が明けてからはMiMi-Labのmicro:bit MakeCodeの拡張機能を整理・国際化対応などを進め、より多くの方に触れられるようにしていく予定である。