トップ 検索 一覧 ヘルプ RSS ログイン

wxRuby + Exerb 2009の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!wxRuby + Exerb 2009

最初、この記事では[Ruby|http://www.ruby-lang.org/ja/]自体の紹介から始まる能書きを色々書いていたが、それらはやめることにした。

Windows上で[wxRuby|http://wxruby.rubyforge.org/]+[Exerb|http://exerb.sourceforge.jp/]で実行ファイル(.exe)を作りたいというRuby初学者の人がググって来てくれればいいやということで。

RubyにはExerb, [RubyScript2Exe|http://www.erikveen.dds.nl/rubyscript2exe/index.html], [OCRA|http://ocra.rubyforge.org/]などいくつかその手のツールがあるが、日本では圧倒的にExerbの使用者が多いだろう。
しかし、''ExerbはRubygemsと相性が悪い''らしく、筆者の手元ではいくらか工夫をしないと、最新のwxRuby+Exerbは実現できなかった。
そして、(Ruby使いにはそれなりのエキスパートが多く自己解決しているからかもしれないが)ネット上にその情報が少ないようなので、ここにメモを残すことにした。

!!構築する環境

この記事では、Ruby実行環境がない状態からActiveRuby(Active Script Ruby) 1.8.7.11-p174-winsock2(exerb 5.0.0を含んでいる)とwxRuby 2.0.1で実行ファイルを作成するまでを追う。

手順は、途中でrubygemsの関連をどのように扱うかで2つに分かれる。レシピファイルと最終的な.exeに''rubygemsごと含んでしまうお手軽コース''と、あくまで''wxRubyのみを含める無理矢理コース''だ。この記事では最初、無理矢理コースのみ紹介していたが、掲示板でご指摘を頂いたのでお手軽コースも掲載することにした。

なお、筆者の試した環境はWindows XP Professional SP3だ。他のOSの場合は適宜読み替えて欲しい。

!!手順

コマンドプロンプトの操作と環境変数の設定くらいはできるものとして書いているので注意。

!ActiveRubyのインストール

[ActiveRuby|http://www.artonx.org/data/asr/] 1.8.7.11-p174-winsock2をダウンロードし普通にインストール。これにはexerb-5.0.0を含んでいる。

[安定版|http://arton.hp.infoseek.co.jp/indexj.html]を使用しないのは、Exerbが古いため。もしかしたら安定板ならこの記事のような変な手順は不要なのかもしれないが。

なお、ActiveRubyはコマンドプロンプト用にパスを通してくれないので、
 C:\Program Files\ruby-1.8\bin
に自分でパスを通しておくこと。

!wxRuby2のインストール

コマンドプロンプトを開き、以下の通り実行。
 gem install wxruby

なお、ruby1.9系列では
 gem install wxruby-ruby19
としなければならないかも知れない。

本来、gemを使用せずにwxRubyをインストールすれば、この記事のような手順は不要なはずだ。しかしwxRubyを手動でインストールするには、wxWidgetsを自分で用意しなければならないなど手間が掛かりすぎるようなので、観念してgemに頼った。筆者自身はwxWidgetsのビルドを何度も行っているが、それを解説するとこの記事の殆どをそれに費やすことになってしまう。

実はwxRubyにはOne-Click-Installerベースの総合パッケージが用意されており、本当はこれでruby1.9系列で使用したかったのだが、肝心のExerbが1.8.7ベースなのでこれも諦めた。''Exerbは自前のRubyエンジンとユーザスクリプトを合わせて.exe化する''ため、ExerbのRubyエンジンとユーザ環境のRubyエンジンのバージョンを合わせないと、環境の相違による動作の違いに悩まされることになる。ひどい場合にはまともに起動すらしない。

特にwxRuby側が、''同じwxRuby2.0.1でもRuby1.8系列と1.9系列では内容が異なる''ため、ユーザ環境のRubyが1.9系列だとExerb自前の1.8系列Rubyエンジン上で1.9系列用のwxRubyを動かすことになってしまう。自分でExerbを1.9系に対応させれば問題は解決するが、余りに手間が掛かりすぎるだろう。

どうしてもRuby1.9系列でwxRubyを使用し.exe化を行いたい方は、[[wxRuby + ocra 2009]]を参照のこと。

!wxRubyをgems非依存にする
次の手順は最初に述べた通り、お手軽コースと無理矢理コースに分かれる。とりあえずwxRubyを試したいだけの方はお手軽コースを、あくまでムダなく行きたい方は無理矢理コースを選択するとよい。

!お手軽コース:wxRubyとgemsを両方含める

アプリケーションをapp.rbと仮定する。app.rbのディレクトリでコマンドプロンプトを開き
 mkexy -Ku -rrubygems app.rb
としてapp.exy(レシピファイル)を作成する。
-Kuはapp.rbがUTF-8N(BOMなしUTF-8)の場合。
Shift_JISの場合は-Ks、EUC-JPの場合は-Ke。

この場合、rubygemsがレシピファイルに追加され、最終的な実行ファイル(.exe)にも含まれる事になる。実行ファイルのサイズが少々大きくなるが、他にもgems経由で使用したいライブラリがある場合には、無理矢理コースよりもこちらのほうが便利だ。

!無理矢理コース:wxRubyをgems非依存にする

RubygemsとExerbは相性が悪いので、無理やりRubygemsを経由せずに使えるようにする。あまりよい方法とは呼べないかも知れないが。
 C:\Program Files\ruby-1.8\lib\ruby\gems\1.8\gems\wxruby-2.0.1-x86-mswin32-60\lib
にある全てのファイル・フォルダを
 C:\Program Files\ruby-1.8\lib\ruby\site_ruby\1.8
に丸ごとコピーする。

蛇足だが、ここでsite_rubyを使用しvendor_rubyにしなかった理由は、[Ruby v1.8.7の更新履歴|http://svn.ruby-lang.org/repos/ruby/tags/v1_8_7/NEWS]に書かれているvendor_ruby導入の目的にある。
これによると、vendor_rubyはActiveRubyやOne-Click-Installerのようなディストリビューションを作る際に、その作成者が添付するライブラリやパッケージを入れる場所と思われる。
一方site_rubyは、そのディストリビューションのユーザが自分で自由にライブラリやパッケージを入れるために使用する場所らしい。
今回の手順は若干無理矢理の方法ではあるが、''我々ユーザが手動でwxRubyを入れるなら、site_rubyに入れるべき''だろう。

因みにwxRubyの総合パッケージでもwxRuby自身をsite_rubyに入れているが、この観点から言えば''本当はよろしくない''ことであると思われる。
なお、ライブラリの検索順序はディストリビューション付属のものよりもユーザが上書きしたものが優先されるべきなので、site_rubyが優先になる。

閑話休題。この状態で、wxRubyを使用するアプリケーションが
 require 'rubygems'
を''書かなくとも''動作することを確認しておくこと。

!Exerbを実行し.exe化

アプリケーションをapp.rbと仮定する。

app.rbのディレクトリでコマンドプロンプトを開き
アプリケーションをapp.rbと仮定する。app.rbのディレクトリでコマンドプロンプトを開き
 mkexy -Ku app.rb
としてapp.exy(レシピファイル)を作成する。
-Kuはapp.rbがUTF-8N(BOMなしUTF-8)の場合。
Shift_JISの場合は-Ks、EUC-JPの場合は-Ke。

次に
!Exerbを実行し.exe化

レシピファイルが作成できたら、あとはいよいよ実行ファイル(.exe)を作成する。
 exerb app.exy
または、実行ファイル(.exe)実行時にコマンドプロンプトを表示させたくなければ
または、完成したアプリケーションの実行時にコマンドプロンプトを表示させたくなければ
 exerb -c gui app.exy
でapp.exeが完成。

なお、文字コードに関してはexerbに-k utf8(またはsjis,euc,none)で指定する方法もあるが、mkexy実行時に文字コードの問題でテスト実行が停止しては困るので、mkexyの時に指定するほうがよいだろう。それがレシピファイルにも反映されるので問題ない。

なお、mkexyとexerbが上手く行かない場合は
 C:\wxruby\ruby\bin\
から
*exerb
*mkexy
をapp.rbと同じディレクトリにコピーしてきて、以下のようにruby.exeを直接起動して読ませるとよい。
 ruby mkexy -Ku app.rb
 ruby exerb app.exy
最近のActiveRubyではmkexy/exerbにバッチファイルが用意されているため、恐らくこのような手順は不要だろう。

!!おまけ1(.exeのUPXでの圧縮)

今回の手順で作成した、Hello! Worldレベルの.exeは''約10.3MiB''にもなった。''wxruby2.soが巨大''なことが原因だが、wxWidgets自体大きなライブラリなのでこれは仕方がない。
今回の手順で作成した、Hello! Worldレベルの.exe(無理矢理コースで作成)は''約10.3MiB''にもなった。''wxruby2.soが巨大''なことが原因だが、wxWidgets自体大きなライブラリなのでこれは仕方がない。

有名な[UPX|http://upx.sourceforge.net/]を使用して.exeを圧縮すると-9で2915KiB、--bestで2913KiBまで縮んだが、さらにドキュメントやヘルプにはない(もしかしたらまだEXPERIMENTALなのかもしれないが)''--lzmaオプションを使用すると2461KiB''まで縮んだ。これは7-zip(.7z)形式に採用されているLZMAアルゴリズムを使用するオプションで、最高速設定である-1 --lzmaでも2859KiBと、通常の--bestよりも''高速かつ圧縮率が高い''。かなり有効なので試してみると良いだろう。

なお、ネット上ではExerbをかける前のライブラリにUPXをかける方法と、完成した.exeにかける方法で情報が割れている。雰囲気を見るに、昔のExerbでは事前にかけるべきであったが、最近(exerb-3.0.0以降?)は事後にかけられるようだ。猫科研究所では事後にかける方法で、特に問題は発生していない。

!!おまけ2(工夫してもっと小さく)

この項目は大きすぎたので、[[wxRuby + Exerb + UPX 2009]]に分割した。正直、サイズに非常な拘りがなければ、上記の「おまけ1」の方法で十分だと思う。

!!リンク集

今回wxRubyとExerbのことを調べた際に集めたリンク。
*[wxRubyでGUIプログラミング|http://wx.k5-n.com/wxruby/]
**基本。
*[-Pegasus' Wing SIDE_K memo- - Exerbを使いこなす|http://mono.kmc.gr.jp/~mak/hiki/?Exerb%A4%F2%BB%C8%A4%A4%A4%B3%A4%CA%A4%B9]
**一応抑えておくべき。
*[wxRubyでハマったこととかまとめ - BitArts|http://bitarts.jp/blog/archives/003210.html]
**wxRubyを実際使う際の注意点。
*[ruby1.9でwxRuby - HOW YOU CAN STAND BEING JUST A DOG?|http://d.hatena.ne.jp/hachimura/20090831/1251729249]
**Ruby1.9系列ではビルドが必要という話。
*[もうRubyのGUIは wxRuby + wxsugar で良い気がしてきた - HOW YOU CAN STAND BEING JUST A DOG?|http://d.hatena.ne.jp/hachimura/20090914/1252944571]
**よりRubyらしく書けるwxsugar。
*[Development -Brand New Art-|http://www8.ocn.ne.jp/~daixque/dev/exerb.html]
**古い情報だが簡潔にまとまっていてwxRubyに興味を持ったきっかけだった
*[rubyのexerbにD&DでFTPアップロード - toyosystem|http://www.jamboree.jp/cms/archives/418]
*[Route 477 - Exerb化したexeの置かれているパスを取得する|http://route477.net/d/?date=20060715#p02]
*[tips : tips/02.プログラミングなど/Ruby/Ruby-GUIメモ.txt|http://homepage2.nifty.com/takaaki024/tips/programs/ruby/ruby-gui.html]
**wxRuby+Exerbに限らない話が大量に
*[tips : tips/02.プログラミングなど/Ruby/Rubyめも.txt|http://homepage2.nifty.com/takaaki024/tips/programs/ruby/ruby.html]
**こちらでもwxRuby+Exerbに限らない話を大量にしている
*[Ruby on Windows: Windows XP Visual Style Controls with wxRuby|http://rubyonwindows.blogspot.com/2007/10/windows-xp-visual-style-controls-with.html]
**XPのテーマに合わせるためのmanifestファイルの書き方。