Exerb
このページはRubyスクリプトをWindowsのexe化するExerbに関する雑多なメモです。
目次 |
Exerb(イグザーブ)とは
Exerb Projectで開発されているRubyスクリプトをWindowsで動作するexeファイルに変換するツール。
Rubyの実行環境ごとexe化されるのでRubyの実行環境がないマシンでも実行できるファイル作成される。
exerbはActiveScriptRubyに同梱されるので単体でインストールせず Ruby環境ごとインストールするのがおすすめ。
使い方
たとえばhello.rbというスクリプトをexe化するには次をコマンドプロンプトで実行する。
exerbの実行時オプションに-c guiをつけないと生成したexeファイル実行時にコマンドプロンプトが出てきてしまうのでGUIを持つプログラムの場合はつける。
>ruby -r exerb/mkexy hello.rb >exerb -c gui hello.exy
すると、helle.exeができている。 これだけ。ちょー簡単。
もう少し詳しく知りたければ次のURLに非常にわかりやすいチュートリアルがある。
exe化したスクリプト内で実行ファイルのパスを取得する
普通のRubyスクリプトでは$0に実行中のスクリプトファイル名がフルパスで格納されるが、 exe化したあとだとexeファイルのある場所ではなく作業ディレクトリが取得してしまう。
exeファイルと同じディレクトリにある設定ファイルを読み込みたいときなどそれでは困ってしまう。
exerbではExerbRuntimeというモジュールが用意されている。それを使えば実行しているexeファイルの場所などを取得できる。
たとえば実行ファイルのパスを表示するには次の様に書く。
printf("ExerbRuntime.filepath = %s\n", ExerbRuntime.filepath) if $Exerb
if修飾子がついているのは、通常のRubyスクリプトとして実行するときにはExerbRuntimeがつかめず、エラーとなるため。 exe化して実行したときにしかExerbRuntimeモジュールは操作できない。
Opensslを使っているプログラムのexe化
暗号化を行うような処理を実装した場合、自動的に作ったexyファイルでは組み込まれるファイルが足りない。
具体的に足りないファイルは次の2つ
- libeay32.dll
- ssleay32.dll
これらはexyファイルに追記すればexeファイルに含まれる。
ActiveScriptRubyでインストールした際には次の場所にある。
\bin
次の記述をexyファイルのfileセクションに追加すればよい。
ssleay32.dll: file: <Rubyのインストールディレクトリ>\bin\ssleay32.dll libeay32.dll: file: <Rubyのインストールディレクトリ>\bin\libeay32.dll