Windows版RubyのインストールとRubygemsのインストール

なんか環境構築で酷い目にあったのでメモしておく。
cygwinとか使えばそもそも苦労しないとか言っちゃらめぇ!!
そもそもunix,linuxなら苦労しないとかも言っちゃらめぇ!!

rubyのインストール

まずはRuby (Windows への手動導入) - あさあさの公開メモに基づいてRubyWindowsにインストールする。
リンク先が消えるといけないので簡単に説明しておくと、公式からwindowsRubyをダウンロードして、適当なところに展開して、ruby.exeのあるディレクトリを環境変数に加える。これだけ。
ここで注意して欲しいのは展開する場所。C:\Program Files\..とすると後で不幸なことが起こるので、空白文字を含まないフォルダにインストールする。DLLもすべて獲得しておく

コンパイル環境が違うと後々不幸なことが発生することが判明。rubyのソースコードのコンパイルからrailsの起動までを参考にしてみて。詳細は後述。

Rubygemsのインストール

Rubygemsってのはよく分からんけどRubyのパッケージ管理システムらしい。
インストール方法はRubyGems をインストールする(for Windows)を参考に。
リンク先が消えるといけないので簡単に言うと、rubygemsの最新版をダウンロード、適当なところに展開したらコマンドプロンプトからそのディレクトリに移動。>ruby setup.rbって打ち込むだけ。後は自動でやってくれる。

おまけ:twitterのインストール

どうもgemでインストールできるtwitter関連のものは2つある、らしい。twitterとtwitter4R、なのかな?

と、ここまできて問題発生!

c:\>gem install twitter4r
と打ち込んだら、
MSC version unmatch
と怒られた。
エラーでググったらなんか出てきた。MSC_version_unmatch
英語はほとんど分からないけど解答見た感じ

a) compile your extension with VC6 (or mingw), or
b) compile ruby (and other extensions if you need) by yourself with VC7.

が正解か。
しかし、この場合の"extension"って何になるんだ? rubygems

とネットの海で溺れていたらrubyのソースコードのコンパイルからrailsの起動までというのがあった。これを参考にしてrubyのインストールからやりなおす。VCでコンパイルするってことだね。
nmakeってプロンプトに入力して「こんなコマンドしらねーよ」って怒られるときはnmake.exeを探してそのディレクトリに環境変数のパスを通す。

基本的にこのページのとおりにやればいいんだけど、rubygems-1.2.0はこのページの順序ではうまくいかない。
rubygems-1.2.0インストール時にzlibが無いと怒られる。
ここでzlibのインストール方法。
まずはこのページからzlibのバイナリ(mswin32)をダウンロードして、展開。
そしたら、rubyのインストールフォルダ(この場合はC:\ruby\)にincludeとlibをコピー。C:\ruby\binにはzlib.dllを。
zlibのバージョンが古いけど新しいdllがどうしても見つからないのでコレで代用。
Visual Studio 2008 コマンドプロンプトを起動。
rubyのインストール時に利用したディレクトリ(この場合はC:\tmp\ruby-1.8.7)に移動。
さらに

cd ext\zlib
と打ち込む。
このextフォルダにソースからビルドしただけではインストールされない拡張ライブラリが入ってる。
ココまできたら、
ruby extconf.rb --with-zlib-include=c:\ruby\include
と打ち込んでやる。
さらに

nmake
nmake install
とやればいい。
参考:mswin-rubyでのzlibのインストール方法

で、後はrubygemsをインストールしてやれば完成!

試しにtwitter4Rをインストールしてみた。


C:\tmp\rubygems-1.2.0>gem install twitter4r
Building native extensions. This could take a while...
Successfully installed json-1.1.3
Successfully installed twitter4r-0.3.0
2 gems installed
Installing ri documentation for json-1.1.3...

No definition for cState_configure

No definition for cState_configure
Installing ri documentation for twitter4r-0.3.0...
Installing RDoc documentation for json-1.1.3...

No definition for cState_configure

No definition for cState_configure
Installing RDoc documentation for twitter4r-0.3.0...

となって成功。実行時のディレクトリはどこでもいいですよ。
こんな感じでやっとtwitter4Rが利用できるようになりました、と。
ゆとりなのでUNIX分かんないからWindowsでどうにか開発してやろうとあがいていたら余計に苦労した、というお話。
おそらくOne-Click Ruby Installer for Windowsを使えばzlib周りで混乱することは無かったと思う。けど、どうしても最新のRubyには追いついてないという問題もあるので頑張って最新版でインストールしてみました。


書きながらやりながらで書いたのであまりうまく纏まってないかも。試行錯誤したのを載せるのはいいんだけど、ちゃんとエラー内容を載せないとネットに流す文章としては不合格だよな。

参考URL一覧(もっとあるよ!)

【重要な追記】
このあと実際にtwitter4r動かそうとしてみたら、opensslが必要だと言われたので、zlibと同じようにコンパイルしてやろうとしたら

http://pastie.org/64648

の2段目にあるような大量のエラーが出てきた。
oscp.hが悪さをしているらしいがココで完全に手詰まり。
ext/openssl/extconf.rbを少しだけ触ってlibssl.lib,libcryptro.libもインクルードしてみるように設定してみたりしたけどやっぱり無理。

というわけでこのやり方はもうダメ!
さらにカッとなって、

ActiveScriptRubyでいっぺんに何もかもインストールしてみる。


>gem -v
1.1.1
だったので(現時点の最新版は1.2.0)

>gem update --system
をやってみるが、

C:\>gem update --system
Updating RubyGems
Bulk updating Gem source index for: http://gems.rubyforge.org/
Updating metadata for 643 gems from http://gems.github.com/
................................................................................
................................................................................
................................................Failed to download spec farleykn
ight-Farley Knight-0.1.0 from http://gems.github.com/:
bad URI(is not URI?): quick/farleyknight-Farley Knight-0.1.0.gemspec.rz
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
..................................
complete
Nothing to update

なんか知らないけどうまくいかない(やたら時間がかかるし)

オートが無理ならとソースからコンパイルしてやってtwitter4rいれようとしたら

MSC version unmatch
って怒られて最初に逆戻り。

しょうがないからこのままtwitter4rインストールしてやるかと


C:\>gem install twitter4r
とやってみたら、これもやたら待たされて

Bulk updating Gem source index for: http://gems.rubyforge.org/
Updating metadata for 643 gems from http://gems.github.com/
................................................................................
................................................................................
................................................Failed to download spec farleykn
ight-Farley Knight-0.1.0 from http://gems.github.com/:
bad URI(is not URI?): quick/farleyknight-Farley Knight-0.1.0.gemspec.rz
................................................................................
................................................................................
................................................................................
................................................................................
................................................................................
..................................
complete
Building native extensions. This could take a while...
ERROR: Error installing twitter4r:
ERROR: Failed to build gem native extension.

C:/ruby/bin/ruby.exe extconf.rb install twitter4r
creating Makefile

nmake

Microsoft(R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.

cl -nologo -I. -IC:/ruby/lib/ruby/1.8/i386-mswin32 -IC:/ruby/lib/ruby/1.
8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -c -Tcparser.c
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin
\cl.EXE"' : リターン コード '0xc0000135'
Stop.


Gem files will remain installed in C:/ruby/lib/ruby/gems/1.8/gems/json-1.1.3 for
inspection.
Results logged to C:/ruby/lib/ruby/gems/1.8/gems/json-1.1.3/ext/json/ext/parser/
gem_make.out

なんか勝手にnmakeやって勝手に自滅してる感じ?
コレもよく分からない。

というわけで今からActiveScriptRubyアンインストールして、One-Click Ruby Installer for Windows使ってみます。今度はrubyのバージョンが古くて苦労する、のか!?

One-Click Ruby Installer for Windows使ってみた。

結論から言うと失敗でした


>gem -v
したら0.9.4でした。嫌な予感を抱えながらとりあえずアップデート(gem update --system)してみたら、1.2.0に見事バージョンアップ。
さらにtwitter4rも簡単に入りました。
スゲー!

そしてirbを使ってみたら・・・


irb(main):001:0> require("rubygems")
=> false

あれーと思いながら他のヤツのバージョンが古いのかと


>gem update
してみたらまた出ましたよ

C:\>gem install hpricot
Building native extensions. This could take a while...
ERROR: Error installing hpricot:
ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb install hpricot
checking for stdio.h... yes
creating Makefile

nmake

Microsoft(R) Program Maintenance Utility Version 9.00.21022.08
Copyright (C) Microsoft Corporation. All rights reserved.

cl -nologo -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -Ic:/ruby/lib/ruby/1.
8/i386-mswin32 -I. -MD -Zi -O2b2xg- -G6 -DHAVE_STDIO_H -c -Tcfast_xs.c
cl : コマンド ライン warning D9035 : オプション 'Og-' の使用は現在推奨されていま
せん。今後のバージョンからは削除されます。
cl : コマンド ライン warning D9002 : 不明なオプション '-G6' を無視します
fast_xs.c
c:\ruby\lib\ruby\1.8\i386-mswin32\config.h(2) : fatal error C1189: #error : MSC
version unmatch
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN
\cl.EXE"' : リターン コード '0x2'
Stop.


Gem files will remain installed in c:/ruby/lib/ruby/gems/1.8/gems/hpricot-0.6.16
1 for inspection.
Results logged to c:/ruby/lib/ruby/gems/1.8/gems/hpricot-0.6.161/ext/fast_xs/gem
_make.out

まぁ、全部似たような文章なので。コマンドはちょっと違いますが。
要約すると例の

MSC version unmatch
ですね。
2008使ってんだから当然っちゃ当然です。しかし、不便すぎるだろう常識的に考えて……互換モードとかないの?

そろそろゆとりの精神力的に限界です。大体プログラム書き始める前からこんなに苦労するとかおかしいと思うんですが、どうですかね?