2018年以降の記事はGitHub Pagesに移行しました

Rubyの実行ファイルを作成するExerbとOcraを試してみた

あらすじ

Rubyが入っていないWindows環境でも(要は自分以外)Rubyスクリプトを実行したいのでexe化する方法を模索する。というか、昔模索した後の結果を今更まとめる。

対象プロジェクト

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の方が早いか。(他のメリット・デメリットはおいといて……)