わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

Ruby 1.9.1のWindowsバイナリ

これまでRuby 1.9.1は,Cygwinで…Linuxと同じように,ソースを取ってきて,configure && make && make installとしていました.
あるRubyスクリプトを,私の手を離れ,簡単に実行できるようにするニーズが出てきまして,Cygwinやらmakeやらというのは面倒ですので,Windowsのバイナリを調査しました.
1.9.1のバイナリ配布は,http://www.garbagecollect.jp/ruby/mswin32/ja/download/release.htmlが良さそうです.しかし『読めない人、読んでも意味が分からない人には説明のしようがないので諦めてください。』とは厄介そう敷居が高そう…ともあれ試しました.
ruby-1.9.1-p0-i386-mswin32.zipと,「インストール」のページからリンクしている「Porting Libraries to Win32」のうち,gdbm-1.8.3-1-mswin32.zip, openssl-0.9.8d-1-mswin32.zip, gdbm-1.8.3-1-mswin32.zip, gdbm-1.8.3-1-mswin32.zip, gdbm-1.8.3-1-mswin32.zip,長々書きましたが要は「-mswin32.zip」で終わるファイルをすべて,デスクトップにダウンロードしました.
すべてを,Cygwinのunzipコマンドで伸張すると,デスクトップにいろいろフォルダができてしまったので,ruby191というフォルダを作ってそこに移動しました.ファイル数は11,102,フォルダ数は1,515です*1
動作確認のRubyスクリプトを書いてみましょう:

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

# r.rb

desktop = 'C:/Users/__USER__/Desktop'.sub(/__USER__/, ENV['USER'])
Dir.chdir(desktop) do
  s = 0
  open('ruby-1.9.1-p0-i386-mswin32.zip', 'rb') do |fin|
    s = fin.read.size
  end
  open('size.txt', 'w') do |fout|
    fout.puts s
  end
end

ダウンロードしたばかりのRubyのzipファイルを読み出し,そのバイト数を,size.txtに書き込みます.ファイルサイズだけなら,File.statを使えば簡単ですが,バイナリモードで読めることを確認するためですのでご容赦ください.あと,かつてはファイルオープン時のブロックローカル変数は,読み出しならf,書き込みにはgと書いていましたが,どこかで読んだのに影響を受けまして,fin,foutとしています.
変数desktopはデスクトップのディレクトリ名が入ります.パス区切りは「/」でも「\」でもうまくいきました.Cygwinではないので,'/cygdrive/c/…'は不可です.環境変数USERは,http://www.atmarkit.co.jp/fwin2k/win2ktips/460envset/envset.htmlに書かれています.どうやらcase-insensitiveらしく,irbで確認すると*2,「ENV['USER']」も「ENV['User']」も「ENV['UseR']」も同じ値でした.
実行は,作ったファイルを,ruby.exeにドラッグ&ドロップ…ちゃんとsize.txtができました.中身は「14174582」で,zipファイルのサイズと一致します.改行コードはCR LF(2バイト)でした.
一瞬だけコマンドプロンプトのウィンドウが出ましたが,rubyw.exeにドラッグ&ドロップすれば,出なくなりました*3

*1:コピーや削除は,フォルダ1個でもけっこう時間がかかります.

*2:Windowsバイナリに入っていたirb.exeをダブルクリックし,いろいろな式を試してみました.矢印キーが使えませんでしたが,C-p,C-bなどは大丈夫です.

*3:http://homepage1.nifty.com/markey/ruby/win-env/ruby_on_win01.html