rubyビルドガイド

ソースコードを手にいれる

ソースコードはアーカイブか CVS 経由のいずれかで入手できる。

アーカイブで入手

どこからか入手したらハードディスク上に展開する。 この文書では ~/src/ruby にソースを置くとして話す。

~/src % tar zxf ruby-XXX.tar.gz

CVS を使って入手

CVS を使う場合は以下のようにして入手できる。

~/src % cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login
Password: anonymous
~/src % cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src co ruby

CVSはオプションの順番にうるさいので、うっかり-Dオプションを "ruby"の後にしたりしてはすること。coの直後に-Dを書かないとだめだ。 また-dcvs自体に与えるオプションなのでcoより前に書かなければ いけない。

CVSからチェックアウトした場合はまずconfigureを生成する必要がある。 ソースツリーに入り、autoconfと打てばいい。ただしruby 1.7では autoconf 2.50以上が必須なので注意しよう。

~/src % cd ruby
~/src/ruby % autoconf

~/src/ruby % ls -F configure
configure*

コンパイル

UNIX 系 OS での話が一番単純なので、まずはこれを例として話す。 Windows に関係ある話もあるのでいちおう一通り見ておいてほしい。 また Cygwin はほとんど UNIX 環境と同じなのでこちらの話が通用する。

基本

コンパイルの原則的な手順は以下の通り。

~/src/ruby % ./configure
~/src/ruby % make
~/src/ruby % su
~/src/ruby # make install

configureでシステムの環境を検出し、makeで実際に構築、 make install でインストール。オプションとして、 install の前に make test をやってもいい。

以下、さらにconfigureについて細かい注意をする。

--enable-shared

EWS4800など一部のプラットホームでは configure に必ず --enable-sharedを付けないといけない。

~/src/ruby % ./configure --enable-shared

--enable-sharedというのはrubyコマンドのほとんどをダイナミック リンクライブラリ(libruby.so)として外に出すオプションだ。 必須でないプラットホームでも --enable-shared を付けておくと erubymod_ruby を作るときにダイナミックリンクになるので 便利である (でなければスタティックリンクになる)。

インストール先変更系

ruby はデフォルトでは /usr/local 以下にインストールされるが、 必ずしも /usr にインストールする権限があるとは限らない。 また /usr 以下にインストールしたいかもしれない。そういう場合は --prefix オプションを使うとよい。

% ./configure --prefix=/home/aamine

上記のようにすると /home/aamine/binruby が入り、 /home/aamine/lib/ruby 以下にライブラリが入る。

もっと細かく、種別ごとに制御することもできる。 例えば --bindir はバイナリのインストール先を直に指定できる。

% ./configure --bindir=/home/aamine/tmp/bin

ならば /home/aamine/tmp/binruby がインストールされる。 ライブラリはデフォルト通り /usr/local/lib/ruby にインストールされる。

このようなオプションには他に --libdir --mandir などがある。他にもいろいろあるが、 ruby ではあまり役に立たないので省略する。全部見たければ

% ./configure --help

で見ることができる。

名前変更系

筆者はこんな仕事 (Rubyの本の執筆) をしている関係で、 ruby 全バージョンをインストールしている。そうすると 各バージョンの ruby を別々の名前でインストールしないと ならない。自分で手でやってもいいけど、面倒だ。 そういうときは --program-prefix--program-suffix が使える。

% ./configure --program-suffix=-1.7

とすると、ruby コマンドが ruby-1.7 という名前で インストールされる。もちろん prefix なら前に付くわけだ。

環境変数

configure を実行するときに各種の環境変数を設定しておくと コンパイルフラグなどを変えることができる。 例えば CFLAGS なら cc のコンパイルオプションだし、 CPPFLAGS ならプリプロセッサのフラグ、 LDFLAGS ならリンカのフラグだ。

試してみよう。 gcc でデバッグオプションのみにするには次のようにする。

# sh系
~/src/ruby % CFLAGS=-g ./configure

# csh系
~/src/ruby % set CFLAGS='-g'
~/src/ruby % ./configure

ruby 1.7 以降 (と言うよりも autoconf 2.5x 以降) なら、 以下のように引数で渡すほうがよい。

~/src/ruby % ./configure CFLAGS=-g

これならシェルの違いにも影響されない。

最適化のヒント

ruby では最適化のかけすぎは死に直結する。 gcc なら -O2 まで。 他の cc では関数のインライン展開をさせないように選ぶ。 また --omit-frame-pointer も絶対にやってはならない。

最適化をかけすぎるとまずいというのは GC の影響である。 ruby はマシンスタックの上に置かれた Ruby オブジェクトを 実行時にスキャンしているのだが、最適化しすぎると オブジェクトの変数 (VALUE型変数) が省略されてしまうことがある。 そうするとまだ使っているオブジェクトを解放されてしまい、落ちる。

MinGW

MinGW は本当に最小限のビルドツールしかないので、 configure を 走らせるためには何か別のものが必要だ。現在その選択肢は 二つあり、一つが Cygwin でもう一つが MSYS である。 この節を読むときにはまず Cygwin と MSYS の概略 のページを読んでおいてほしい。

MinGW + Cygwin

まず Cygwin を使う方法。 以下のように Cygwin のプロンプトから CC を変更してビルドすればよい。

~/src/ruby % ./configure --enable-shared CC='gcc -mno-cygwin' CFLAGS='-pipe -g'

gcc-m はコンフィグ依存のオプションで、 no-cygwin によって Cygwin DLL とリンクしないように指定している。 -mno-cygwin-m no-cygwin は違うので注意。 また MinGW でも --enable-shared を付けておいたほうがいい。

make 以降は UNIX 系 OS の話とまったく同じである。

またソースツリー以外でコンパイルするときは

~/obj/ruby-mingw % CC='gcc -mno-cygwin' ../../src/ruby/configure --enable-shared

という感じに相対パスで configure を指定したほうがいい。 ruby のビルドには ruby 自身 (miniruby) を使うが、 その ruby は Cygwin のパスを理解できないからである。 Cygwin のパスと Windows のパスが偶然一致することもあるが、 そうでなければ意味不明のエラーになってしまう。 その点、相対パスなら Cygwin DLL があってもなくても

MinGW + MSYS

もう一つは MSYS (Minimum SYStem、MS とは関係ない) を使う方法。 その名の通り最小限しかない。 こちらは MSYS をインストールすればあとはそれを使って 普通にビルドすればよい。なにしろ MinGW のために作って あるのだから、相性に問題があるはずがないのだ。

~/src/ruby % ./configure --enable-shared
~/src/ruby % make
~/src/ruby % make install

この場合もやはり --enable-shared を付ける。 また MSYS でもやはりパスの変換をやっているので、 ソースディレクトリで作らないと何かとエラーが起こりやすいようだ。

--prefix などインストール先を付ける場合は、 必ず Windows ネイティブパスを使いドライブから始めるようにする。 ドライブを省略すると MSYS に中途半端に変換されてしまう。

Visual C++

別名 mswin32 版。 Visual C++ でコンパイルする場合はバージョン 5.0 以上が 必要である。SP もできるだけ入れておいたほうがいい。

Cygwin にしても MinGW にしてもパスの変換が入るのでどうしても ややこしいことが起こりがちだ。一方 Visual C++ を使う場合は 最初から最後まで Windows パスなので意外と問題が起きにくい。

基本

まず DOS 窓を開く。そして VC++のコマンドラインツールを 使えるようにするため環境変数を設定するバッチファイルを実行する。

C:\> cd "\Program Files\Microsoft Visual Studio\VC98\bin"
C:\Program Files\Microsoft Visual Studio\VC98\bin> vcvars32.bat

ただし Windows NT 系だと Visual C++ をインストールしたときに 環境変数を登録しておけるのでおそらく必要ない。

あとは ruby のソースツリーにある win32\ に移動して、 configure.batmake を実行すればよい。

C:\> cd C:\src\ruby\win32
C:\src\ruby\win32> configure.bat      # configureに相当する
C:\src\ruby\win32> nmake
C:\src\ruby\win32> nmake DESTDIR="C:\Program Files\ruby" install

これで C:\Program Files\ruby\bin に ruby がインストールされる。

なお、ruby のソースコードを CVS からコンパイルするには autoconfsedyacc も 必要である。Visual Studio にそういうものは当然ないので、 CVS からコンパイルしたければ全部用意しなければならない。 (そういうときは Cygwin を入れて結果だけ使うのも一つの手である。 生成した結果だけ使えばいい。)

パスを通す

こうやってインストールした ruby を使うときは、 もちろん毎回フルパスで指定してもいいが、面倒だ。 ruby と打つだけで使えるようにするにはパスを 設定しておく必要がある。

Windows 9x 系の場合

9x 系 (95, 98, Me) の場合は C:\autoexec.bat に ruby の インストール先ディレクトリを追加すればいい。 以下具体的に説明する。

まず C:\autoexec.bat をエディタで開き、最後に

SET PATH=%PATH%;C:\ruby\bin

という行を「追加」する (C:\ruby\bin は ruby コマンドがある場所に読み換える)。 このとき、絶対に他の行を変更しないこと。 うっかり変更して Windows が起動しなくなっても責任は取れない。

最後に Windows を再起動する。

Windows NT 系の場合

NT系 (NT, 2000, XP) ならコントロールパネルから追加できる。 NT なら「システム」のメニュー [環境変数] で、 2000 / XP なら「システム」のメニュー [詳細]→[環境変数] で、設定する。

システムの全ユーザに使わせたいなら「システム環境変数」の PATH を設定する (administrator権限が必要)。 自分だけで使いたいなら「ユーザ環境変数」の PATH を設定する。 追加の方法は以下の通り。

PATH はセミコロン区切りの文字列で、 それぞれがコマンドの入っているパスを指定している。 例えば

C:\windows;C:\windows\system

なら、C:\windows と C:\windows\system にあるコマンドは いきなりコマンド名だけで実行できる。これに C:\ruby\bin などを 追加すれば「ruby」と打つだけで ruby を実行できるわけだ。

以上を理解すればやるべきことは自明だと思う。 変数 PATH が存在しないならば

C:\ruby\bin

という内容で新しく作る。 すでに変数 PATH が存在するなら セミコロンを入れて C:\ruby\bin を追加すればいい。

一つ注意しなければいけないのは、特定ユーザのみに追加する場合、 つまり「ユーザ環境変数」を設定する場合である。この場合すでに システム全体の PATH が存在するので、これも先頭に 入れておかなければいけない。この場合は次のように書く。

%PATH%;C:\ruby\bin

%PATH% は「現在の PATH の値」に展開される。 つまり変数参照である。通常のプログラミング言語では代入・参照で 変数の見ためが変わらないのが普通だが、なぜかシェルだと違うことが多い。

それと、NT 系の場合は即座に変更が反映されるので再起動する必要はない。 ただし起動中のプロセスにまでは伝わらないので、コマンドプロンプトや Cygwin をすでに実行しているならもう一度起動しなおす。

フラグの変更

Visual C++ では最初から最適のコンパイルフラグを付けてくれるので あまり変える必要はないと思うが、変えたければ以下のようにする。

C:\src\ruby> nmake OPTFLAGS="-Od"

ちなみにこれはデバッグオプションだ。

ただし Visual C++ を使うときは CFLAGS を直接上書き してはならない。-DNT が定義されなくなってしまう。

別ディレクトリでコンパイル

configure.bat を別ディレクトリから実行すれば ソースディレクトリ以外でもコンパイルできる。

C:\obj\ruby-mswin32> C:\src\ruby\win32\configure.bat
C:\obj\ruby-mswin32> nmake

以下同じ。

Borland C++ Compiler (bcc)

基本

Borland C++ Compiler でのコンパイルは Visual C++ と似ていて、専用ディレクトリに入って行う。

C:\src\ruby> cd bcc32
C:\src\ruby\bcc32> .\configure.bat
C:\src\ruby\bcc32> make
C:\src\ruby\bcc32> make install

環境変数を設定する場合には make

> make OPTFLAGS="-v"

のようにすればいい。

またソースディレクトリ以外でビルドするには、 やはり単に configure.bat を別のディレクトリから 実行すればいい。

C:\obj\ruby-bcc> ..\..\src\ruby\bcc32\configure.bat

パスを通す

Borland C++ Compiler でコンパイルした場合もやはり ruby にパスを通しておく必要がある。 Visual C++ の「パスを通す」の項を参照のこと。

Copyright (c) 2002 Minero Aoki <aamine@loveruby.net>