瀬宮の球拾いブログ

エンジニアだったはずが、みんなにヘイストかける方がチームに貢献できた男のブログ

jrubyでWindowsで動くゲーム作った

この記事はRuby Advent Calendar 2014の15日目の記事です。

Windowsで動くexeファイルをRubyで作りたい!

序論

何をどうとち狂ったか、「ゲームを作ろう」「Windowsで動くexeファイルをRubyで作りたい!」そう思い立った俺たちは一路南米にとんだ。
南米では特に何も見つからなかったが、かわりに目的の技術であるJRubyFXrawrという技術をインターネットで発見した
RubyでGUIアプリを作るならJRuby+JavaFX+Rawrで決まり! - かなりすごいブログ

なお作者はRuby AC 17日目担当の @supermomonga

ももんが (@supermomonga) | Twitter

さんであります。ありがとうございます!

JRubyFX とは

  • JavaFXjrubyから使えるようにするライブラリである。
  • 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の世界に帰りたい