次世代のスーパーエンジニアたちも学ぶ！マインクラフトで触れる技術たちその１



だいぶ前に投稿した
http://qiita.com/appwatcher/items/6c0280cda9c4c8b3c65f
から一年ほど経ちますが、引き続きマインクラフトに関連した技術に携わっています。

![minecraft-maikura-4.jpg](https://qiita-image-store.s3.amazonaws.com/0/37731/dad0eb29-5295-54f0-f99a-e41f4083d92a.jpeg)


えマイクラ？子供の遊びでしょ？と思うかもしれませんが、たかが子供のゲームと思ってはいけません。



## 学べる技術は多種多様

* アルゴリズム
* ネットワーキング
* DevOps
* ゲーム開発
* VR
* IoT

マイクラ上でできることはオープンソースなマイクラサーバーが存在しているおかげで、かなりの部分をいじることが可能です。また利用されている技術も多種多様です。

## マイクラ上で様々なゲームが作れる
これらの技術を扱って独自のゲームを作成することも可能です。
基本的には全てを一から作るのではなく、ゲーム性の部分だけを考えて実装することが可能です。
今開発を携わっているおしゃマルでは例えば下記のようなゲームを作って遊んでもらっています。

ボン○ーマン
![1b8nlu.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/4fbfb561-1b62-d5c1-859f-e24a62bb0dad.gif)


スプラ○ゥーン

![1b8nw2.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/b14b5ea2-05c8-3c22-6342-e9bd4258275f.gif)



# マイクラワールド建築から学ぶアルゴリズム

まずもっとも基本的なマイクラの建築にて学べるアルゴリズムを紹介します。
ちなみにすべてPHPでプラグイン作成しています。
これらの作成はPHPさえ扱えれば容易なものになっています。

## パーリンノイズであの自然な地形を生成


パーリンノイズとは、濃淡が滑らかで自然なノイズを生成可能なアルゴリズムです。


http://postd.cc/understanding-perlin-noise/

どのようなものが作れるかデモです。


## 平地を作る
![1b8n9s.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/a0a3bf8d-5e3e-5eb5-21c5-7722c4b0bf3f.gif)

## 洞窟を作る
![1b8nc1.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/a8abb180-5772-60cb-a758-4aa110fb0585.gif)



このようなものがアルゴリズムによって作り出せるのは驚きではないでしょうか？

マイクラに限らずゲームではこのようにアルゴリズムによって生成されるものが数多く存在します。
色々調べてみるとアルゴリズムによってスマートに解決出来る問題に感動できることでしょう。

## 迷路をクラスタリングアルゴリズムで自動で作ってみよう

また自然なワールドを作るのではなく例えばみんなが遊べる迷路を作ってみたいとします。
ちまちま自分でもつくれますが、これもアルゴリズムで生成できます。

今回はクラスタリングアルゴリズムで作成のデモです。
![1b8ner.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/1879edd9-cc70-7a8d-cee3-1f1b1067ed94.gif)



このアルゴリズムの良いところは、事前に答えを決めてから作成することが可能で、例えば答えの結果を一筆書きで何かの図を描くようにすることも可能です。


迷路をつくったら今度は逆に迷路を解くAIの設計を考えてみると面白いはずです。
ダイクストラ法などのグラフ理論系のアルゴリズムなどの勉強になります。


このような迷路のアルゴリズムの話は、例えばドルアーガの塔など古くから様々なゲームがあつかってるので歴史をさかのぼって学んでみると非常に興味深いです。

## 他にも
それ以外にも、例えば、ゲームのローグや不思議なダンジョン系のようなランダムのダンジョンを生成するアルゴリズムなどなど、ワールドを作るに様々なアルゴリズムを活用することが可能です。
逆を言えばアルゴリズムによって多彩なゲームをマイクラ上で再現が可能なのです。


# マルチプレイゲームのネットワーク技術を学ぶ

マイクラはネットワーク越しのマルチプレイを行うことが可能で、マイクラの技術をふかぼっていくとネットワーク周りの勉強にもなります。マイクラPEの話なりますが、マルチプレイのプロトコルはOculusにに買収されたRaknetといったマルチプレイネットワークライブラリを利用しております。（マイクラPEがつかってるのはおそらく古めのバージョン）

https://github.com/OculusVR/RakNet

どのような設計になってるかを眺めてみても面白いかもしれません。
またこう言ったマルチプレイネットワークにつきもののUDPの特性やSTUN/TURNなどといった技術も身につくことでしょう。

# マイクラでもDevOps
マイクラのマルチサーバーを運用する場合、同じくDevOps的な技術もかかせません。通常のwebサーバーとは違う運用方法の工夫も必要ですが、たとえば、われわれが開発しているおしゃまるでのマイクラサーバーの運用周りはCircleCI,consul,Terraform,stretcherといったものを駆使して自動化を図っています。
ちなみにマイクラのチャットからデプロイを可能にしてたり、マイクラサーバーならではの運用方法も導入しています。

https://circleci.com/
https://www.terraform.io/
https://www.consul.io/
https://github.com/fujiwara/stretcher

インフラ周りはUUUMのエンジニアの方にがっつりと組んでもらい、活用しまくってます。

# VRも含め様々なプラットフォームで動き、開発言語も様々扱える
マイクラじたいがPC iOS Androidと幅広いプラットフォームで動きます。
またPE版についてはVR対応しており、oculusなどのプラットフォームにも展開が可能です。
オープンソースのサーバーもPHP、Java 版など複数存在しています。

![1b9sb6.gif](https://qiita-image-store.s3.amazonaws.com/0/37731/bccce2b0-2a72-bd49-d255-5d4ae0856e43.gif)

おしゃマルもVR対応させました

## マイクラを使うと良い所

### 実際に生成したワールドを手軽に遊ぶことができる。
ただ学ぶだけよりも自分が作った世界で遊べるため、よりモチベーションを持って学習ができる。
マイクラ自体はそれ自体に回路というロジックを組めるブロックが存在しており、
遊びならがら、様々な工夫が可能な点も人気のひとつ。

。 

### 地形生成以外もいろいろ扱ってアルゴリズムを学べる
例えばキャラクターも自在に操れるためAIの勉強や、投射物を発射したり
いろいろなエンティティを利用可能です。

実際にマイクロソフトもAIの発展ためのmalmoというマイクラのAIプロジェクトも発足している

https://github.com/Microsoft/malmo

### マイクラは全世界の大勢のユーザーをもつ巨大プラットフォーム
こうやって作ったものは世界中の何千万というユーザーに提供して使ってもらうことが可能です。

現状マイクラのスマホ版でも去年の時点で3000万ユーザーを超えています。
これら様々なアルゴリズムを駆使して、面白いワールドやゲームを作成して、手軽に多くの人に使ってもらえることも大きな魅力です。


## 衝撃！若い次世代エンジニアたちの台頭
また衝撃を受けたのが、マイクラに興味をもった本当に若い
スーパーエンジニアの存在です。

例えば、オープンソースのマイクラサーバーの日本人コミッターに連絡したら、社会人と思いきやなんと高１！
コミッターだけでなく、自分でマイクラ周りのサーバー運用やオリジナルのPVPのプラグインを開発してたりします。


http://haniokasai.com/

<img width="537" alt="スクリーンショット 2016-09-26 1.35.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/37731/06c3eb40-634c-01e4-1297-62b15fc5bc51.png">

高校生でOpenVZ知ってるとか。。

おじさんエンジニアの危機感が高まりも治らないまま後日
また、私にマイクラの技術の質問をしてくれた人がいた。

<img width="526" alt="スクリーンショット 2016-09-26 0.57.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/37731/527f98e9-a07e-70e9-e500-173ab2d17364.png">

<img width="535" alt="スクリーンショット 2016-09-26 0.57.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/37731/30703fcd-9be3-95cc-87f6-27ee2a14108e.png">

俺が中学や高校の時はなにをしてたんだ、、

昨今の中学生や高校生のレベルにびびりつつ、日本のエンジニアの今後はマイクラがもっと普及すれば安泰と感じさせられたマイクラ界隈の一コマ。


次世代エンジニアに負けないよう皆さんもマイクラを通して技術を学んでみてはいかがでしょうか？


私が開発をお手伝いさせてもらっている株式会社UUUM様のエンジニアブログにも色々面白い技術情報が満載です。
http://system.blog.uuum.jp/