Rubyスクリプトを実行ファイルに変換する
外部変形でRubyスクリプトを利用している場合、それを実行するPCにはRuby実行環境がインストールされている必要があります。Rubyには、スクリプト(テキストファイル)を単独で実行できるファイルに変換する方法があり、それを利用すれば配布・やり取りが楽になります。
以下では、Ruby1.8を前提に解説します。
実行形式化の手段
Rubyスクリプトを実行ファイルにするためのソフトウェアは複数あり、(たぶん)そのどれもがコンパイルを行うものではなく、スクリプト・処理系ごと全て1ファイルに詰め込むものです。そのため特徴として、「ファイルサイズが若干大きくなる」ことと、「”コードの隠蔽”目的では利用できない」ことが挙げられます。
上記のソフトウェアとしてメジャーなものに、Exerbというものがあります。これを使うと、Rubyスクリプト・requireしたRubyスクリプト・コンパイルされた拡張モジュール全てを1ファイルにまとめることができます。(動的リンクされたリソースやDLLファイルは含まれません。)
Exerb
インストールする
ActiveScriptRubyなどでRubyをインストールした場合は、最初から入っていると思います。インストールされていれば、コマンドプロンプトからexerbと入力すれば確認できます。
インストールされていなければ上記サイトからダウンロードし、解凍したフォルダ内でruby setup.rbと入力します。詳しくは同梱のREADMEを参照ください。
利用する流れ
Exerbはスクリプトを固めるだけのものなので、スクリプト開発はいつも通り普通に行うことができます。スクリプトを書いた後、設定や利用するスクリプト・ライブラリ(requireしたファイル)などを記述したレシピファイルと呼ばれるものを記述し、それをExerbに渡すことで実行ファイルが生成されます。
レシピファイル
レシピファイルは、ファイルの一般情報・利用するRubyスクリプト全て・exeに含まれるリソース(アイコンなど)などを記述するファイルです。書式や詳細は、同梱されているHTMLファイルか上記のリンクを参照ください。
簡単なチュートリアル
上述の通り、普通に書いたスクリプトを利用することができます。以下は、DOS窓に「Hello, Exerb!」と表示した後、Enterキーの入力を待って終了するプログラムです。
#!ruby -Ks
puts "Hello, Exerb!"
gets
上記ファイルtest.rbが置いてあるフォルダでコマンドプロンプトを開き、mkexy test.rbと入力すると、自動でレシピファイル(test.exy)が作成されます。このファイルを編集・追記することで実行ファイルの情報を付加することができます。次にコマンドプロンプト上で、exerb test.exyと入力すると、レシピファイルを基に実行ファイルが作成されます。
また、この例のようにスクリプトが単体で完結していれば、レシピファイルを使わず単にexerb test.rbでも作成できます。
Simple Dialogを使ってみる
Visualu Rubyを使ったスクリプトも1ファイルにまとめることが出来るので、GUIアプリケーションの配布・やり取りが容易になります。例として、当サイトのSimple Dialogを使った例を示します。
以下は、キャンセルされるまで名前を取得し続け、その一覧をファイルに書き込むスクリプトです。
#!ruby -Ks
require "simple_dialog"
include SimpleDialog
names = []
while true
name = input_box("Exerb test", "名前#{names.size+1}を入力してください")
if name
names << name
else
break
end
end
File.open("names.txt", "w"){|f|
f.puts names
}
同様にコマンドプロンプト上でmkexy test.rbとし、レシピファイルを作成します。このレシピファイルのまま作ってしまうと、DOS窓が表示されて格好の悪いプログラムになってしまうので、レシピファイルのcore: cuiの部分をcore: guiに編集、保存します。ちなみにレシピファイル内のfileブロックに羅列されているものが、requireされたファイル群です。
もっと活用してみる
もっと詳しいことは同梱のHTMLか公式サイトを参照してください。
アイコン・バージョン等を変更する
レシピファイル内のresourceブロック内には、バージョンや製品情報などの著作者情報・アイコンファイルなどを記述することができます。
実行ファイルを圧縮する
昨今では気になるレベルではないですが、出来上がった実行ファイルのサイズは若干大きくなります。ZIPなどの圧縮ではなく、実行可能形式のまま圧縮できるソフトがあるので、それを利用することができます。(Rubyとの直接の関係はありません。)
UPX(と、そのフロントエンド)を使えば、簡単に圧縮でき、Rubyで作った簡単なプログラムなら大体半分以下のサイズになります。
Jw_cadの外部変形で使う場合
当たり前ですが、外部変形でも上記の方法で実行ファイルを利用することができます。その場合は当然、batファイルの「Rubyを起動する行」のみ変更する必要があります。