(Windows)(ruby)(Windowsに ruby2.0 + ImageMagick + RMagick の環境を構築する)

 今回は、今後のrubyのリリースの事なども考え、なるべく複数Verのrubyが共存できるように考慮してみます
またWindows7/8 64bitの環境を想定して書いていますので、各自環境に合わせ適当に読み替えてください
あと、複数バージョンのrubyを共存させるつもりですがImageMagickとRMagickとrubyの組み合わせの相性が
かなりナーバスみたいなので、RMagickを使うのはVer2.0.0のみに絞った方が良いかもしれません

 まずは、なにはともあれruby2.0の環境の構築です
RubyInstaller(http://rubyinstaller.org/)さんの7-zip版を利用させてもらいます
Downloadページ(http://rubyinstaller.org/downloads/)を開き
特に問題が無いならば最新のバージョンのをダウンロードします
2013年11月05日現在の最新は「Ruby 2.0.0-p247」でした
Windowsが64bit環境でも今回は32bit版のを利用することにします
バージョンをそろえて「ruby本体」と「ライブラリドキュメント」と「Development Kit」をダウンロードします
ruby-2.0.0-p247-i386-mingw32.7z
ruby-2.0.0-p247-doc-chm.7z
DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe
2013年11月05日現在では、この3つのファイルになります
(DevKitは.exeですが単に自己解凍形式の7-zipファイルなので拡張子を.7zに変えれば7-zipファイルとして扱えます)

 今回はruby2.0なので適当な所にrubyの本体(ruby-2.0.0-p247-i386-mingw32.7z)を解凍します
複数バージョンの共存を考慮しようと思ってるので「ruby」ではなく「ruby200」のようにバージョンも付加します
Windowsを再インストールしても影響が出にくいDドライブ以降、「d:\ruby200」などが個人的にはお勧めです
ドキュメントは何処でもいいですけど同じフォルダ(d:\ruby200)に解凍すればいいでしょう(.chmファイルが出てきます)
DevKitもrubyの本体の近くに解凍したほうが混乱も少ないでしょう「d:\DevKit200」あたりがいいでしょう

 以降、ruby本体のフォルダは「d:\ruby200」、DevKitのフォルダは「d:\DevKit200」にあるとして書きます
違う場所に解凍した場合はその場所に読み替えてください


 今回は複数バージョンのruby環境を考慮しているので、ruby関係の環境変数が設定されているとトラブルの原因になります
過去にワンクリックインストーラーや各自でruby環境を構築したことがあるなら
「PATH」でruby.exeへのパスが通ってたり、「RUBYOPT」や「RUBYLIB」や「RUBYPATH」などが設定されている可能性があります
もしruby関係の環境変数が設定されているなら、「PATH」だとruby.exeへのパスを排除したり
「RUBYOPT」なども変数そのものを削除したりしてください

 続いて行うことは、DevKitをrubyにインストールというか認識させます
コマンドプロンプトから
d:\ruby200\bin\ruby.exe d:\DevKit200\dk.rb init
とするとDevKitのフォルダ(d:\DevKit200)に「config.yml」というYAMLファイルが出来ます
Exampleを見習って書き換えます
ファイル名:config.ymlエンコード:Shift-JIS、 フォーマット:DOS形式(CRLF)

# This configuration file contains the absolute path locations of all # installed Rubies to be enhanced to work with the DevKit. This config # file is generated by the 'ruby dk.rb init' step and may be modified # before running the 'ruby dk.rb install' step. To include any installed # Rubies that were not automagically discovered, simply add a line below # the triple hyphens with the absolute path to the Ruby root directory. # # Example: # # []---[] # []-[] C:/ruby19trunk # []-[] C:/ruby192dev # []---[] []-[] d:/ruby200

 「config.yml」の編集が終わったら、再びコマンドプロンプト
d:\ruby200\bin\ruby.exe d:\DevKit200\dk.rb install
として実行します
[INFO] Updating convenience notice gem override for 'd:/ruby200'
[INFO] Installing 'd:/ruby200/lib/ruby/site_ruby/devkit.rb'
みたいなメッセージが出てるなら成功してます

 ここで、ついでにWindowsでもLinux版のirbに近い感じで操作が出来るようになる「pry」をインストールします
d:\ruby200\bin\gem install pry pry-doc
なんかやたら skippingが出ますけど、まあ無視して大丈夫らしいです 笑)
でpryを実行しようと
d:\ruby200\bin\pry
とするとエラーが出て実行できません、でも焦らないで! 笑)
「d:\ruby200\bin\pry.bat」の中身を確認すると
ruby.exeへのパスが通っていることが前提のバッチファイルになっているので
ruby.exe」になってる所二ヶ所を「d:\ruby200\bin\ruby.exe」とフルパスで書き換えるだけでOKです
pryを起動すると「DL is deprecated, please use Fiddle」などと言われますが
現状のところは無視してて大丈夫のようです

 さてこれでrubyの環境までは構築できましたが
いちいちフルパスでruby.exeを指定するのが超めんどくさいですよね?

 まず一つ目の方法として、設定するのが少々面倒ですが、 .rbファイルを実行ファイルのようにして
Linux系では当たり前の .rbファイルの一行目でスクリプトを指定する shebangのような機能を付加する方法
Windowsでもスクリプトの一行目でインタプリタを切り替える→ http://d.hatena.ne.jp/morakana/20131031/1383206446
をご参考にしてください、設定がめんどいけど一度設定すると後々がラクになります

 もう一つ、方法として バッチファイルを組んでパスの通ったところに置いておく、こちらはラクですね
個人的にはDLLファイルを「d:\DLL」に置いてそこにパスを通してますので、そこに
ファイル名:ruby200.batエンコード:Shift-JIS、 フォーマット:DOS形式(CRLF)

@ECHO off D:\ruby200\bin\ruby.exe %*
ファイル名:gem200.batエンコード:Shift-JIS、 フォーマット:DOS形式(CRLF)

@ECHO off D:\ruby200\bin\gem.bat %*
ファイル名:pry200.batエンコード:Shift-JIS、 フォーマット:DOS形式(CRLF)

@ECHO off D:\ruby200\bin\pry.bat %*
を作って置いておきます
これで「ruby200 aaa.rb」とか「gem200 list」とか「pry200」のようにして実行が出来るようになります
他のバージョンのruby環境を構築する時も「ruby187」「ruby193」と読み替えてここまでの作業をやれば共存が可能になります
そしてこうやって共存した場合のちょっとした裏技として
一行目(shebang)でVer2.0.0のrubyを指定していても、「ruby187 aaa.rb」みたいにするとVer1.8.7で強制的に実行することも出来ます

 さてやっと ImageMagick+RMagickの番ですね、長かった・・・ 笑)
ImageMagickhttp://www.imagemagick.org/script/index.php
「Binary Releases」の「Windows」のところ http://www.imagemagick.org/script/binary-releases.php#windows に行き
ImageMagick-x.x.x-x-Q8-x86-dll.exeをダウンロードします
2013年11月05日現在では「ImageMagick-6.8.7-4-Q8-x86-dll.exe」になります
ダウンロードしたインストーラを実行します
注意点としてはインストール途中に C/C++のライブラリもインストールされるように、チェックを付けてください
「Install dev・・・ headers and lib・・・ for C and C++の所ですね
これが無いとRMagickをビルド出来ずに泣きを見ることになります 笑)

 続いてRMagickのインストールです
gem200 install rmagick -- '--with-opt-dir="C:\Program Files (x86)\ImageMagick-6.8.7-Q8"'
「--with-opt-dir」に設定しているのは ImageMagickのインストール先です、各自の環境で読み替えてください
うまくいけばビルドが始まります、少々時間がかかりますが気長に待ちましょう
いくらかのskippingが発生しますがまあこれも気にしなくて良いみたいです
ここまで来ればあとは普通に RMagickが使えるようになっているはずです!!
レッツ エンジョイ RMagick!!



 さて・・・、おそらくこの最後のビルドでトラブってトラウマに陥っている人も多いのではないでしょうか? 笑)、頑張ってください 笑)
比較的起こりうる、個人的にも陥った落とし穴のひとつを紹介します
エラーを見ると「無効なドライブ指定です。」「Unable to get ImageMagick version」の文字列が見受けられる場合は
ビルド中にImageMagickの「convert.exe -version」というコマンドを実行して、ImageMagickのバージョン確認をしたいのに
パス指定の優先順位により「c:\windows\system32\convert.exe」の方が実行されてしまっているのが原因のようです
ちなみに「c:\Windows\System32\convert.exe -version」と実行してみると「無効なドライブ指定です。」と表示されます 笑)
WindowsのconvertコマンドというとパーティションNTFSに変換するコマンドですね
まあ頻繁に使うようなシロモノではないですし
PATHの環境変数の設定で「C:\Program Files (x86)\ImageMagick-6.8.7-Q8」を「%SystemRoot%\system32」よりも先に書いちゃえば
ImageMagickのconvert.exeの方の優先順位が先になり実行されるようになる
ので、このトラブルを回避することができます

 また各gemをインストールしてる最中にエラーが出て止まってしまう場合
コマンドプロンプトのカレントディレクトリを rubyのbinフォルダに変更し
rubyへのパスを一時的に追加「set path=d:\ruby200\bin;%path%」してから
各gemのインストールとかアップデートを行ってみてください
この条件下でうまく行くようになるケースも確認しています