「はじめてのRuby on Rails3」サポートページ「DevKitの使い方」

このページは「はじめてのRuby on Rails3」(工学社刊、ISBN978-4-7775-1563-9)のサポートページです。


DevKitを使って、Railsインストール時のエラーを解決する

RailsをWindowsにインストールするのが年々ややこしくなるワケ

Railsは2011年11月の時点で3.1.2までバージョンアップしてきましたが、新しいバージョンが出るたび、それをWindowsにインストールする時に何か不具合が出ることが多くなりました。
というのも、Railsの機能が増えるに従って、Railsが必要とする他のRubyプログラムが多くなり、それらの中に、RubyだけではなくCでも書かれているプログラムが出て来たのです。
RubyGemsを用いて(すなわち、gemコマンドで)Rubyのプログラムをインストールする場合、それが「純粋にRubyで書かれて」いるなら、それらの「ナントカ.rb」ファイルを適当な場所(Rubyのbinフォル ダやlibフォルダなど)に配置すればすみます。しかし、「Cのソースコードも含む」となると、そのソースコードをCでコンパイルしなければなりません。
とはいえ、Windowsの環境には、Cのコンパイラは含まれていません。
そこで、gemコマンドでRailsをインストールしようとすると、途中で以下のようなエラーを出してインストールがストップしてしまうのです(Rails 3.1.2の場合)。
ERROR:Error installing rails:
 The 'json' native gem requires installed build tools.

Please update your PATH to include build tools or download the DevKit
from 'http://rubyinstaller.org/downloads'

Windows用Rubyと一緒に使おうDevKit

このような事態に、Windows用のRuby である「RubyInstaller for Windows」を作ってくれているみなさんが「このままでは我々のRubyでRailsを使えなくなってしまう」と危機感を抱かれたのかどうかはわかりませんが、とにかく、そのようなエラーを解決するために用意してくれたソフトウェアが「DevKit」です。
「DevKit」の本体は、Cのコンパイラ環境と考えてよいでしょう。このコンパイラとは、RubyInstallerでインストールされるRubyが、MinGW (http://www.mingw.org/)) というCのコンパイラで動いていますので、これに合わせてあります。

実は、上記のエラーメッセージは、「もしWindowsにCのコンパイラがインストールされていれば、その実行ファイルのある場所を教えてくれ」と言っているのです。ですから、すでにWindows上にMinGWがインストールされている場合は「環境変数PATH」の設定などにより、RubyGemsにその場所を教えてやれれば、それでも動くと思います。しかし、DevKitはRubyGemsとの連携を明確に考えて作ってありますから、これを新たに導入するのがベストだと思います。

DevKitの考え方

DevKitの主役は、「dk.rb」という名前のRubyで書かれたプログラムです。仕事は、RubyGemsが「Rubyプログラムの中で、Cのコンパイルが必要な部分(このようなプログラムをCのエクステンションと呼びます。拡張部分などと訳すと考えやすいでしょう)」を見つけて処理するのを助けることです。このプログラムは、すでにRubyInstallerによりインストールしてあるRubyのlibフォルダに置かれます。(実はRubyのlibフォルダは複数の場所にあるのですが、ここでは簡単にlibフォルダを呼んでおきます)この作業が「DevKitのインストール」に相当します。
しかし、DevKitに含まれる他の部分も、「ライブラリ」など、RubyGemsによる処理の際、常に必要です。ですから、区別しやすい場所にちゃんと置いておきます。この作業は、「配置」と呼ぶことにしましょう。
このような意味で、DevKitの使用は、以下の手順で行います。

1. Webサイトから圧縮ファイルを「ダウンロード」
2. 圧縮ファイルを展開して、適当な場所に「配置」(手作業)。
3. 配置したファイルの中から、ファイル「dk.rb」を、Rubyの「libフォルダ」に「インストール」(コマンドによる)。


DevKitの「ダウンロード」と「配置」

DevKitの「ダウンロード」

DevKitは、RubyInstallerのダウンロードサイト「http://rubyinstaller.org/downloads/」で公開されています。
「DEVELOPMENT KIT」という、小さめの見出しの下に「DevKit-tdm-.......-sfx.exe」というファイルのダウンロード・リンクがあります。それをクリックします。
下図は、2011年11月中旬に得られたファイル「DevKit-tdm-32-4.5.2-20110712-1620-sfx.exe」というファイルです。
図1 「DevKit」のファイル。ファイル名にはバージョン番号がついている

DevKitの配置

図1のファイルは「自己解凍(展開)式」の圧縮ファイルです。
ダブルクリックすると、小さいウィンドウが現れて、展開先の入力を促します。
ここで注意です。この圧縮ファイルは、親フォルダを持ちません。すなわち、このままたとえば「ユーザのホームフォルダ」を展開先に指定すると、バラバラのファイルやフォルダがそのままホームフォルダに配置されてしまいます。
そこで、新たに「devkit」などわかりやすい名前のフォルダを作成して、そこを展開先に指定する必要があります。フォルダは事前に作らなくても、展開先の指定に入力すれば新規作成してくれます。下図は、「source」というフォルダの中にバラ撒かれると困るので、さらに「devkit」というフォルダ名を指定したところです。
図2 展開先には、新しいフォルダ名をつけて指定するのがよい


図3は、展開した中身です。「M」の字をあしらったアイコンが見えるのは、「MinGW」及び、これを使うための環境「MSYS」に由来します。
図3 展開した「DevKit」の中身


このうち、ファイル「config.yml」は、操作の途中で自動作成されるものですので、インストール直後には見つからないかも知れませんが、気にしないでください。

DevKitの操作

DevKitを「初期化」する

このDevKitの詳しい使い方は、「Development Kit-GitHub」という別のサイトのページに書いてあります。(https://github.com/oneclick/rubyinstaller/wiki/Development-Kit)ここでは、Railsのインストールに最低限必要な操作を説明します。
DevKitは、コマンドプロンプトで打つコマンドで操作します。
まず、スタートメニューから「Start Command Prompt with Ruby」を起動します。
そうしたら、「cd」コマンドで、「DevKit」を展開したフォルダに「移動」します。たとえば、c:¥Users¥ユーザー名¥devkitというフォルダに展開したとします(「ユーザー名」のところは、みなさんのユーザ名で置き換えて考えてください)。それならば、「c:¥Users¥ユーザー名」まではすでに移動済みなので、「cd」コマンドは以下のようになります。
cd devkit


移動したら、以下のコマンドを打ちます。
ruby dk.rb init


上のコマンドの本体は「ruby」コマンドです。「dk.rb」は、DevKitのプログラム名です。そして、「init」が、「dk.rb」を使って行う作業です。すなわち「初期化」です。主な仕事は、Rubyなど必要なファイルの場所を探して、RubyGemがそれを見つけやすいようにしてくれることです。
そのため、このコマンドには、以下のような応答が得られます。たとえば、RubyInstallerのRuby1.9.2がインストールされていれば、
[INFO]found RubyInstaller v1.9.2 at C:/Ruby192
異なるバージョンのRubyがインストールされていれば、全部見つけ出してくれます。 そして、以下の語を含むメッセージが表示されれば成功です。
Initialization complete!
そして、config.ymlというファイルが自動作成され、そこに設定内容が書き込まれます。このファイルは自分で書き換えてカスタマイズできるのですが、Railsをインストールするという目的を果たすためには、そこまでやる必要はありません。次項のコマンドに進みます。

DevKitを「インストール」

これがそのコマンドです。
ruby dk.rb install
このコマンドでは、見つけ出した全てのRubyの「libフォルダ」に「dk.rb」をインストールします。
状況により、いくつか応答が表示されると思いますが、最後に以下のような応答が得られれば成功と考えてよいでしょう。なお、以下は「Ruby1.9.2」がインストールしてある場合です。
[INFO] Installing 'C:/Ruby192/lib/......./devkit.rb'

この作業には「成功です」というようなメッセージは出ません。「ERROR」のようなメッセージが明らかに出なければ、これでDevKitのインストールは「完了」と考えます。

RubyGemによるRailsのインストール

gemコマンドには、「オプション」をつける

上記のようにDevKitのインストールを終えたら、改めてgemコマンドで、railsをインストールしてみましょう。

フォルダの場所は、現状(devkitフォルダにいる) のままで問題ありません。
ただし、コマンドにオプションがつきます。以下の通りになります。
gem install rails --platform=ruby
上記のオプションで、「ハイフン」は2つです。

応答はまず以下のようになります。
「Temporarily enhancing PATH to include DevKit...」
このページを御覧のみなさんのほとんどは、一度本書の通りにインストールを試みて、失敗しているでしょう。その状態では、実はRubyなどほとんどのものはインストールされていて、「json」というものだけがひっかかっている状態のはずです。
そこで、以下のようにメッセージが出て終わるでしょう。
Building native extensions. This could take a while...
Successfully installed json-1.6.1
1 gem installed


これで、railsのインストールは完了しているはずです。あとは本書の通りに作業を続ける事ができるでしょう。
Ruby on Railsの開発者の皆さんには、ゼヒWindows上での開発者人口を御配慮いただき、次のバージョンでは「RubyInstaller」の開発者の皆さんと御相談の上以下のような問題を始めから回避できるようにお取り計らいいただきたいものでございます。