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

[Ruby][備忘録][Windows]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を入れていた。(理由不明)

手順(失念)

$ 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 から見つかりませんでした。

http://ruby.11.n6.nabble.com/ruby-dev-35318-rb-during-gc-td3526996.html:title

これ? んー何かコマンドが足りない? 手がかりが少なそうなので、もう一つのツールを当たってみる事に…。

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

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  2. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  3. 2012/04/20 [Ruby] [Windows] ZenTestで実行したRSpecの結果をGrowlで通知してくれるようにした
  4. 2012/03/27 [Windows] [Jenkins] [Ruby] simplecovとsimplecov-rcovを使ってJenkinsでカバレッジを確認
  5. 2012/03/20 [Windows] [Jenkins] [Ruby] Windows環境用にrcovをビルドしなおす手順
  6. 2012/02/29 [Ruby] [Rails] [Windows] Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、Railsの規約など
  7. 2012/02/28 [Ruby] [Windows] [Rails] Rails3レシピブックを読みながらRailsを学ぶ
  8. 2011/09/30 [Java] [Windows] [Ruby] .msgファイルをパースして中から添付ファイルを抜き出す
  9. 2011/09/07 [Ruby] [Redmine] [SQLite3] [Windows] Redmineのプラグイン作成のための備忘録と、時々SQLite3
  10. 2011/08/23 [Ruby] [Windows] MicrosoftOutlookで消せなくなったフォルダをwin32ole経由でRubyから消してみる
  11. 2011/07/09 [Windows] [Ruby] MicrosoftOutlookのメールをRuby(win32ole)で操作する! その2
  12. 2011/05/17 [Ruby] [Windows] MicrosoftOutlookのメールをRubyで操作する!
  13. 2011/05/01 [Ruby] [Redmine] [Windows] Redmineインストール備忘録(Windows)
  14. 2012/12/25 [Ruby] メモ化を知った
  15. 2012/11/12 [Ruby] [Jekyll] はてなダイアリーのエントリをJekyllへ移行する