jrubyでWindowsで動くゲーム作った
この記事はRuby Advent Calendar 2014の15日目の記事です。
Windowsで動くexeファイルをRubyで作りたい!
序論
何をどうとち狂ったか、「ゲームを作ろう」「Windowsで動くexeファイルをRubyで作りたい!」そう思い立った俺たちは一路南米にとんだ。
南米では特に何も見つからなかったが、かわりに目的の技術であるJRubyFXとrawrという技術をインターネットで発見した
RubyでGUIアプリを作るならJRuby+JavaFX+Rawrで決まり! - かなりすごいブログ
なお作者はRuby AC 17日目担当の @supermomonga
ももんが (@supermomonga) | Twitter
さんであります。ありがとうございます!
JRubyFX とは
- JavaFXをjrubyから使えるようにするライブラリである。
- ControllerとModelはそこまで変態ではない
- ViewはfxmlというxmlっぽいViewテンプレートをもとに、jsでDOM操作するような感覚でViewの要素をいじる必要があって、だいぶ感覚が違った。Slimとか使いたい。
rawrとは
- JRubyFXでできたプロダクトをいい感じにexecutable jarとかMac Appとかexeファイルにしてくれるライブラリ
- 配布したいものが作れる。便利。
- build_configiration とか久々にいじった
で、どうなった?
- 三ヶ月くらいでなんとか配布できるプロダクトが作れた。
- 学習コストはそれなり。RailsのようなWAFありきの感覚とは異なる。画面表示を作るための最低限の薄いF/Wという感じ。
よかったこと
- rubyの大正義であるメタプログラミングやラムダによって、似ているけど微妙に異なる処理を簡単に作れる。ゲームでは超大事。
- rubyなので簡単に試せる。だから簡単に失敗できる。つまり簡単にチャレンジできる。
- rubyなので文字列操作が簡単。ゲームの文字列表示がすごい楽。これは大きい。
- つまり ruby が使える事がよい。
わるかったこと
- rubyの大正義、pryが画面表示状態で使えない。死ぬ。
- rawrでexeを出力した後、Windowsで動かないケースが多すぎた。
rawrのせいではないが、javaのバージョンの問題や、永続化の手段として使ったローカルへのファイル書き出しと読み出しで手間取った。Webの世界に帰りたい。 - Java7でビルドするとJava8で動かない。Webの世界に帰りたい。(最終的にJDK8をunpackしたものを同梱し、同梱のjavaファイルを使う事で回避)
- ローカルのファイル書き出しが文字化けする。Webの世界に帰りたい。
やっておいたほうがよいこと。
- 画面表示要素の元となる要素が入った配列を渡すと、いい感じに整形した画面表示要素を指定のListView配下に突っ込んでくれる処理とか書くと楽になる。
- 画面要素を操作する部分が散乱すると破滅の道しか見えない・
結論
- exeを作るときにrubyの便利さを持ち込めるのは大正義
- exeファイルが作れるのはいいよね、うん。
- Webの世界に帰りたい