トップ 最新 追記

Route 477



2009-06-06

[ruby][memo] DXRubyスターターキットとか作れんじゃねーの

DXRuby使ったRubyスクリプトをOcraで普通に固められたので、 これはDXRubyスターターキット作るしかない。

と思ったけどexeのパスがスクリプトから取れなくて困った。リクエスト は上がってるみたいなんでそのうちできるようになるかなぁ。

まあとりあえずは、カレントディレクトリとexeのパスが一致すると仮定して問題ないんかな。


以下は製作過程のメモです。

構造

exeに含めるのは、ruby本体といくつかのファイルだけ。

D:\proj2\rskit2>ocra.rb.bat --no-autodll dxtest.rb
=== Loading script to check dependencies
=== Building dxtest.exe
m src
a src\dxtest.rb
m bin
a bin\ruby.exe
a bin\msvcrt-ruby191.dll
m lib
m lib\ruby
m lib\ruby\1.9.1
m lib\ruby\1.9.1\i386-mswin32
m lib\ruby\1.9.1\i386-mswin32\enc
a lib\ruby\1.9.1\i386-mswin32\enc\encdb.so
a lib\ruby\1.9.1\i386-mswin32\enc\shift_jis.so
m lib\ruby\1.9.1\i386-mswin32\enc\trans
a lib\ruby\1.9.1\i386-mswin32\enc\trans\transdb.so
a lib\ruby\1.9.1\rubygems.rb
m lib\ruby\site_ruby
m lib\ruby\site_ruby\1.9.1
m lib\ruby\site_ruby\1.9.1\i386-msvcrt
a lib\ruby\site_ruby\1.9.1\i386-msvcrt\dxruby.so
e RUBYOPT
e RUBYLIB
l bin\ruby.exe ruby.exe \src\dxtest.rb
=== Compressing
=== Finished (Final size was 804769)

Rubyスクリプトは、起動用のファイルのみを含める。そこから、main.rbを動的にrequireする。

ただしmain.rbはexeファイルと同じディレクトリ(←これはカレントディレクトリとは限らない)から探さなくてはならない。 なので、まずexeファイルのパスを取得する必要がある。

が、

 kicker.exe
 -> ファイル展開
 -> bin/ruby src/kicker.rb

となるので、kicker.rbからはkicker.exeの情報を知るすべがない。これは困った。

[web] いまひどいCAPTCHAを見た

http://narabete.com/ にユーザ登録しようとしたんだが

画像の説明

真ん中の数字が読めねえwww 1か3か5か6か7か0のどれかだと思う。

まあ何回かリロードしたら普通に読めるようなの( 画像の説明 )が出てきたのでなんとかなった。

…って、これじゃ強度が足らなくないか?ロボットが防げる程度なら良いってことかな。

[ruby] Rubyスクリプトをexe化するためのソフト、Ocra

Rubyスクリプトのexe化というとRubyScript2ExeExerbが有名ですが、 最近Ocraというソフトウェアがリリースされたので紹介してみる。

まずはインストール。

 c:\> gem install ocra
 c:\> gem install win32-api   # Ruby 1.8系のみ(今のところ)

あとは適当なスクリプトを用意して、

 c:\> ocra.rb.bat hello.rb

すれば*1、hello.exeの出来上がり。ね、簡単でしょ?

仕組みはわりと簡単で、hello.rbを実行して必要なファイルを収集し、Ruby本体とそれらをexe内に格納する。 exeが実行されたら、テンポラリディレクトリに一式を解凍して、Ruby本体にスクリプトを実行させる。という感じ。

おまけ

比較してみた。

  • Ocra
    • 必要なものだけを圧縮・展開するので、速度・サイズともに悪くない。
    • 試験実行を行うため、クロスコンパイルはできない(今のところ)。
    • 1.9も対応済み。
  • Exerb
    • 必要なものだけを圧縮する。
    • さらに、requireをハックしてexe内部からスクリプトを読み込むので、テンポラリディレクトリを使わない。かっこいい。
    • コアファイル(ruby本体)を外だしできるので、アプリケーション(exe)がたくさんある場合もファイルサイズを抑えられる。
    • しかしRubyGemsと相性が悪いという弱点が。
    • ファイルサイズと(展開不要による)実行速度がメリットだが、どちらも昨今は余剰気味である。
    • そういえばクロスコンパイルができた。
  • RubyScript2Exe
    • 使ってるRuby環境をまるごとexeにして、実行時にはテンポラリディレクトリに展開する。
    • lib以下をぜんぶ圧縮・展開するので遅い。おすすめできない。
    • ただし作戦がシンプルなのでLinux/Macも対応しているようだ(未確認)。
    • 2007年以来更新されてない。
  • Crate
    • まだWindowsに対応してない。
    • バイナリを作るのにCコンパイラが必要。
    • スクリプトはsqliteのDBに圧縮して格納する。実行時は(requireをハックして)DBからRubyスクリプトを読み込む。
    • (作者の根気が続けば)テンポラリディレクトリなし・クロスコンパイル可能と、Exerbの上位互換になり得る。

*1 Ruby 1.9系の人は --no-autodllを付けてください

[ruby] DXRubyスターターキットできたよー

Ocra見てからスターターキット余裕でした。

game.exeをダブルクリックするとmain.rbが実行されます。

development.exeはgame.exeと同じですが、DOS窓が出るのでデバッグしたり例外を確認したりできます。

解説

単にカレントディレクトリのmain.rbをloadするようなファイルをOcraで固めただけです。

  1. お使いのRubyにDXRubyを入れる
  2. gem install ocra
  3. rake[Enter]
  4. game.exeとdevlopment.exeができる

ドキュメント書いたりとかはid:mirichiさんに任せました(ひどい!)

[Ruby/SDL] Ruby/SDLスターターキット2

上のやつのRuby/SDL + MyGame版

本日のツッコミ(全9件) [ツッコミを入れる]

Before...

k-zakko [rskit2を使わせていただきました。ありがとうございました。もし配布方法に問題がありましたらコメント下さい。 ht..]

yhara [問題ありません。使っていただけて嬉しいです。]

k-zakko [了解しました。感謝します。]