萎草の茂るブログ

暇人も多忙の方も。

[Ruby] Windows 上の Ruby Gems で嵌まった点 まとめ

※ 以下の操作によって不利益を被っても筆者は一切の責任は負いかねます。
※ 記事中に現れるパス名は筆者の環境におけるものです。ご自分の環境に合わせて適宜読み替えてください。

Windows 上で Ruby Gems を実行したところ、上手く動かなかった。
そんな嵌まった点のまとめ。

1. nmake

次のようなエラーが出た場合。

'nmake' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

Visual Studio をインストールし、Visual Studio にパスを通してください。
Visual Studio の「開発者コマンド プロンプト」上で gem を実行するとよいでしょう。
〔参考: NekoGrammerのホームページ [Wayback Machine](NekoGrammerさん)〕

2. Ruby のパス名

次のようなエラーが出た場合。

'C:\Program' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
NMAKE : fatal error U1077: 'C:\Program' : リターン コード '0x1'
Stop.

何故か Gems は空白文字の入ったパスを正しく認識できないようです。
環境変数の Ruby のパスが C:\Program Files (x86)\Ruby-2.0.0\bin; のようになっているのを、C:\Progra~2\Ruby-2.0.0\bin; のようにしてください。
(空白を含まない 8.3 形式のファイル名(MS-DOS ファイル名)にする)

3. _MSC_VER の値(バージョン)

次のようなエラーが出た場合。

C:\PROGRA~2\Ruby-2.0.0\include\ruby-2.0.0\i386-mswin32_100\ruby/config.h(4) : fatal error C1189: #error :  MSC version unmatch: _MSC_VER: 1600 is expected.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\x86_amd64\cl.EXE"' : リターン コード '0x2'
Stop.

何故か Ruby はコンパイラのバージョンが丁度 1600 であることを期待しているようです(この数値は Ruby のバージョンによる)。
より新しいコンパイラで実行しようとするとエラーが起きるので、
C:\PROGRA~2\Ruby-2.0.0\include\ruby-2.0.0\i386-mswin32_100\ruby\config.h 中に

#if _MSC_VER != 1600

とあるのを

#if _MSC_VER < 1600

のように書き換えてください。
〔参考: kyashiro's blog

4. 「添字が負の数です」

次のようなエラーが出た場合。

c:\program files (x86)\ruby-2.0.0\include\ruby-2.0.0\ruby/ruby.h(125) : error C2118: 添字が負の数です。
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\x86_amd64\cl.EXE"' : リターン コード '0x2'
Stop.

64-bit の Ruby に対して 32-bit のコンパイラを使っている場合や、その逆の場合に起こるようです。
正しいコンパイラが使われていることを確認してください。
〔参考: Ruby メーリングリスト