ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

Rubyのコードをexe化する

Rubyローグライクゲームを作っていることは前々から書いてますが、
Ruby+DXRubyだと非常に書きやすいものの、大きな問題が一つあります


・・・つまり、どうやって配布するか、でして


Rubyのコードは、当然ながら(Windowsなら)ruby.exeがないとダメですし、
ライブラリも利用していたらそのコードも必要でしょう


プレイヤー側がわざわざRuby環境を用意するのも面倒な話ですし、
WindowsでRuby環境を作るのは、慣れてない人には相当きついはずです


・・・というわけで、例によって前置きが長くなりましたが、
Rubyをexe化するライブラリを2つ試してみました


どちらも基本は同じで、gemでインストールすると、
実行環境ごとコードをパックするスクリプトがインストールされ、
そのスクリプト経由で実行すると、必要なコードを解析してまとめてくれます



Ocra

なぜこちらを先に試したのかというと、
Ruby1.9に対応していたからです


以前書いたゲームライブラリの評価と並行でexe化も評価していて、
この時点ではRuby1.9専用のMiyako2.0を使う可能性もあり、
Ruby1.9対応は魅力的だったのです


実際に試したところ、確かにRuby1.9で動きます
それもそのはず、実はruby.exeを丸ごと中に同梱していて、
テンポラリに生コードと一緒に展開し、実行しているだけだったからですΣ(・ω・ノ)ノ


ただ、exeがexeを呼ぶ形になるため、セキュリティソフトが反応しまくり、
しかも毎回違うテンポラリPATHのruby.exeに反応するため、
起動exeを許可しても警告が止まらないのです
カスペルスキー2009で確認)


カスペのセキュリティレベルが高いからだとは思いますが、
ターゲット層がROプレイヤーの予定なので、
カスペ率は高いと思われるため、Ocraは断念しました

Exerb

昔から実績のあるライブラリで、弱点はRuby1.9に対応できてないことだけです
DLLが実体になっていて、exeに内包する形でも、外に出す形でも動きます


テンポラリを使わないため、Ocraのように生コードを展開することがなく、
コードが見られたくないケースでもわりといけそうに思います
(Ocraよりましというだけで、不可能ではない)


セキュリティソフトにも反応しますが、
あくまでexeそのものへの警告なので、
一度許可すれば実行可能なようです



正直、特にこだわりがなければExerbでいいと思います
Ruby1.8.7に対応していることを考えれば、たいていの場合十分かと(`・ω・´) b


ただ、ExerbでDLLを内包し、DXRubyもDLL内包のstatic版にすると、
ゲーム自体のコードはたいしたことがないのに、
exeのサイズが1Mを超えます


まあ、1M程度で済む、という考え方もありますが・・・