Rubyのスクリプトを単独実行可能な Windows実行形式ファイルにするソフトウェア。
存在は前々から知っていたけど、初めて必要になったので使ってみた。
ドキュメントが充実しているので、exe を作るまでで困ったところは無し。gem に入ってると思ったら無くて、肩透かしをくらったような感はあったけど(苦笑)。
で、レシピファイル(*.exy)とやらに、実行時に使う Rubyファイルを、添付ライブラリなどのものも含めて全部書かないといけないというのが、めんどくさい。つか、そのぐらい一部の特殊な奴を除いてやってくれればいいのに。ということで、どっかにありそうだけど作った。
# 追記
# って、普通に mkexy が添付されてるじゃないかorz
# ちゃんとドキュメント読め!<自分
# exyputs.rb if __FILE__ == $0 exit if ARGV.size <= 0 loaded_before = $LOADED_FEATURES.clone # 引数1つ目は require startup = ARGV.shift require startup loaded = $LOADED_FEATURES - loaded_before # 2つ目以降は 直接追加(動的に変わる部分(主に load 用?)) loaded.concat ARGV loaded.uniq! puts <<-EOS general: startup: #{startup} file: #{loaded.join(":\n ")}: EOS end
使ってみる。
# sample.rb require 'pp' require 'yaml' require File.join(File.dirname(__FILE__), 'imas.rb') if __FILE__ == $0 pp IMAS_B puts IMAS_B.to_yaml end
# imas.rb IMAS_B = { 'Yayoi Takatsuki' => 72, 'Chihaya kisaragi' => 72, 'Azusa Miura' => 91, }
>ruby exyputs.rb sample.rb > sample.exy >exerb sample.exy >sample.exe sample.rb:4:in `require': No such file to load -- yaml (LoadError) from sample.rb:4
‥‥ダメじゃん。
yaml.rb が最初からロードされてるらしい。なんでそんな意外なものが‥‥そんなに意外でもないか。
他のライブラリとかの事も考えると、$LOADED_FEATURES の差分なんてとらずに、全部出すべきなのかもしれんね。
# exyputs.rb if __FILE__ == $0 exit if ARGV.size <= 0 #loaded_before = $LOADED_FEATURES.clone loaded_before = [] # ロード済みは無いことにする # 引数1つ目は require startup = ARGV.shift require startup loaded = $LOADED_FEATURES - loaded_before # 2つ目以降は 直接追加(動的に変わる部分(主に load 用?)) loaded.concat ARGV loaded.uniq! puts <<-EOS general: startup: #{startup} file: #{loaded.join(":\n ")}: EOS end
exy は長くなるけど、別にいいや。exe もでかくなるけど別にいいや。
今まで、まったく意識したこと無かったけど、こっちで require する前からロードされているものって結構多いのね。
$ ruby -e "puts \$LOADED_FEATURES" rbconfig.rb rubygems/rubygems_version.rb thread.rb rbconfig/datadir.rb rubygems/user_interaction.rb socket.so timeout.rb net/protocol.rb uri/common.rb uri/generic.rb uri/ftp.rb uri/http.rb uri/https.rb uri/ldap.rb uri/mailto.rb uri.rb net/http.rb stringio.so yaml/error.rb syck.so yaml/ypath.rb yaml/basenode.rb yaml/syck.rb yaml/tag.rb yaml/stream.rb yaml/constants.rb rational.rb date/format.rb date.rb yaml/rubytypes.rb yaml/types.rb yaml.rb zlib.so rubygems/remote_fetcher.rb digest.so digest/sha2.so rubygems/digest/digest_adapter.rb rubygems/digest/sha2.rb forwardable.rb parsedate.rb time.rb rubygems/source_index.rb rubygems/version.rb rubygems/specification.rb openssl.so openssl/bn.rb openssl/cipher.rb openssl/digest.rb openssl/buffering.rb fcntl.so openssl/ssl.rb openssl/x509.rb openssl.rb rubygems/gem_openssl.rb rubygems/security.rb rubygems/custom_require.rb rubygems.rb ubygems.rb
‥‥ gems のせい?