GitHubからMinecraft内のコンピュータに自動デプロイするWebアプリケーションをつくった

f:id:ttata:20150419035631p:plain

はじめに

 MinecraftにはComputerCraftというMODがある.これはMCの世界の中にプログラマブルなコンピュータを追加するもので,導入により文明の発展と飛躍が約束される.

 ComputerCraftのコンピュータは,普段我々が扱うコンピュータと同様に,コマンドラインで操作しエディタを開いてLuaで書かれたコードを生成,実行することができる.また,コンピュータ間での情報のやりとりを可能にする有線/無線機能やレッドストーン入出力,turtleと呼ばれるロボット等,数多くの周辺機器が存在し,それらを利用することでMinecraftのブロックを操作することができる

 しかし,マルチプレイ時にクライアントからサーバー内コンピュータのコードを操作するには,付属のあまり高機能ではないエディタで文字を打ち込むか,pastebinといったサービスを利用してhttpAPI経由で,一つ一つコンピュータ上でidを入力しコードをダウンロードするしかない.これらの方法では大規模なシステムを構成する上で多大な労力を支払う必要がある.

つくった

 そこで,この原始的な開発プロセスからの脱却を図るため,タイトルにあるように,GitHubリポジトリを経由してMinecraft内のコンピュータに自動デプロイするアプリケーションを作成した.GitHubで管理されたリポジトリのmasterブランチにpushを行うと,その直後に自動でComputerCraftの全コンピュータにそのリポジトリの内容が反映されるため,コードを自由に編集,利用できるようになった.

具体的な話

 今回作成したアプリケーションはsinatraunicorn,nginxを用いたWebアプリケーションであり,GitHub WebHookというサービスと,ComputerCraftのファイルシステムの仕様を利用して動作する.

 GitHub WebHookはその名の通りGitHubでのpushやpull-request等のイベントを通知するHook機構である.これをhttpサーバで受け取ることでプロジェクトの自動デプロイや自動テスト等,様々な活用ができる.

 また,ComputerCraftでは,ラベリングされた(データが保存される)コンピュータの内部ディレクトリは,minecraft_server/world/computerと対応しており,直接Minecraftの外からファイルやディレクトリの操作をリアルタイムで行うことができる.さらに,ComputerCraftのファイルシステムは,Linuxシンボリックリンクにも対応しているため,端末の外のディレクトリをComputerCraftから読み込むこともできる.

 これらを用いて,シンボリックリンクによりComputerCraft内の全コンピュータと関連付けられたローカルリポジトリを,WebサーバがHookイベントを受け取り,更新することで自動デプロイを行う.

まとめ

  • ComputerCraftは文明を加速させる
  • GitHub経由で自動デプロイをするWebアプリケーションによって文明をさらに加速させた

得られた知見とか

  • 今まであまりWebアプリケーションとか触ってこなかったので,たくさんの知見が得られた
  • 自分を成長させてくれるLinuxに圧倒的感謝
  • shellscriptダメです
  • 普段低級言語を書いている人間が高級言語を書くと,身体が羽のようだ感が味わえる
  • インターネットは楽しいとおもった
  • 腱鞘炎が悪化したのでkinesisが欲しい

参考

Webサイトをgithubで管理してpush時に自動的に同期する方法 - Blog by Sadayuki Furuhashi