それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ocra :RubyスクリプトをEXEファイルに変換する

rubyで出来たスクリプトをWindowsのEXE形式にしてくれる。起動が楽になって嬉しい

RubyをEXEにするツールで今まで動かなかった問題が解決したら嬉し。ExeRbはめんどくさかった。

ocra でEXE化する

ruby スクリプト実行には、Shebangや関連付けしかなかった。EXE形式になることで起動が楽になって嬉しい。配布出来るし、拡張子rbをエディタへ関連づけられる。

インストール

gem install ocra

もちろん ms-win 版Ruby専用( mswin32 か mingw だけ、CygwinはEXE化できたど、実行がダメっぽい cygwin.dll が無いからかな)

使い方(超簡単)
ocra sample.rb

これで、sample.exe が作成される

コマンドプロンプトを非表示に
ocra --windows sample.rb

コレで、 ruby.exe でなく rubyw.exe の利用に変わるので,コマンド画面が不要なら,画面表示なしで実行可能

exe化すると便利ね

自動化スクリプトに組み込みやすくなったわ

おまけCygwin環境での注意

cygwin ruby は EXE化出来ても実行時にこけるようなのであきらめた

かわりにMingwRubyを起動するラッパーをCygwinRubyで書いた

/usr/local/bin/ocra
  1 #!/usr/bin/env ruby
  2 KCODE='u'
  3 require "kconv"
  4 #cygwin ruby のある環境変数をリセットして
  5 #純粋にmingw のRuby環境で、ocraを起動し直す
  6 cmd = 'PATH=''; C:/Users/takuya/apps/ruby-mingw32/bin/ocra ' + $*.join('  ')
  7 IO.foreach("| #{cmd} 2>&1 "){|line|puts line.kconv(Kconv::UTF8,Kconv::SJIS)}

2011-12-08

OCRAのファイルには記述ミスがある。ので、場当たり的に対応が必要だった。

ocra-1.3.0/bin/ocra

          SEPARATOR_PAT = %r"[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]"

File::ALT_SEPARATORがNullのとき nil をRegexp.quato して失敗する。なので次のように変更した。

  18     SEPARATOR_PAT = %r"[#{Regexp.quote File::SEPARATOR}]" unless File::ALT_SEPARATOR
  19     SEPARATOR_PAT = %r"[#{Regexp.quote File::ALT_SEPARATOR}#{Regexp.quote File::SEPARATOR}]" if File::ALT_SEPARATOR