Rubyの実行ファイルを作成するExerbとOcraを試してみた
対象プロジェクト
win32oleを使ってExcelファイルを読み込みシートを取得し連番で吐くというRubyスクリプトをexe化。ソースはこんな感じ。
出力結果はこう。
$ ruby getSheetname.rb Book1.xlsx Book1.xlsx --- Sheet1 Sheet2 Sheet3 Sheet4 Sheet5 --- end.
ExerbとOcraをためしてみた。
Exerb(ダメだった)
最新は5.4.0らしいが、今回はなんでか4.3.0を入れていた。(理由不明)
手順(失念)
- Exerb ProjectよりExerbをダウンロード後、setup.rbを実行?だけでいいんだっけ?
- mkexy.batとexerb.batがRubyのbinに入るはず
- exyファイルを作成する
$ mkexy.bat getSheetname.rb --- end.
- 成功するとgetSheetname.exyというファイルが作成される(GemfileにおけるGemfile.lockのようなもん?)
# Generated by mkexy # on 2012-02-15 22:05 general: startup: getSheetname.rb core: cui kcode: none file: getSheetname.rb: win32ole.so: file: C:/rubies/Ruby/lib/ruby/1.8/i386-mswin32/win32ole.so type: extension-library nkf.so: file: C:/rubies/Ruby/lib/ruby/1.8/i386-mswin32/nkf.so type: extension-library kconv.rb: file: C:/rubies/Ruby/lib/ruby/1.8/kconv.rb rational.rb: file: C:/rubies/Ruby/lib/ruby/1.8/rational.rb date/format.rb: file: C:/rubies/Ruby/lib/ruby/1.8/date/format.rb date.rb: file: C:/rubies/Ruby/lib/ruby/1.8/date.rb prettyprint.rb: file: C:/rubies/Ruby/lib/ruby/1.8/prettyprint.rb pp.rb: file: C:/rubies/Ruby/lib/ruby/1.8/pp.rb
- exyファイルをもとにexeファイルを作成する
$ exerb.bat getSheetname.exy
- 特にエラーも出ず、exeファイルも生成されたが…実行時にエラー
プロシージャ エントリ ポイント rb_during_gc がダイナミックリンクライブラリ getSheetname.exe から見つかりませんでした。
ruby-dev jp - [ruby-dev:35318] rb_during_gc
これ? んー何かコマンドが足りない? 手がかりが少なそうなので、もう一つのツールを当たってみる事に…。
Ocra
バージョンは1.3.0
手順
- gemでインストール
$ gem install ocra
- ocraコマンドでexe化
$ ocra.bat getSheetname.rb === Loading script to check dependencies --- end. === Building getSheetname.exe === Adding user-supplied source files === Adding ruby executable ruby.exe === Adding library files === Compressing 2113827 bytes === Finished building getSheetname.exe (615866 bytes)
これで終わり。ワンコマンドでいける分、手順的にはOcraの方が早いか。(他のメリット・デメリットはおいといて……)