書いた人:たむらけんいち
あなたはコンピュータを使っているだろうか。「もちろん。プログラムを使うってことは、コンピュータに命令しているってことだからね」
果たしてそうなのだろうか?
プログラムは OS を介してコンピュータに命令をしている。でもあなたとプログラムの関係は本当に
(主) あ な た - (従) プ ロ グ ラ ム
なのだろうか。
人間は仕様という名前の制限の下で使わされてるに過ぎないのではないのか?
Ruby は、ライセンス1 に基づいて、 公開されているフリーソフトウェア 2 だ。 ここでは「動かすことの出来る有用なプログラムのソースコードがある」事実をひとまず考えてみたい。
ソースコードは ruby インタプリタの設計図だ。理論的には、あなたはその全てを確認することが出来るし 自分の思うままに書き換えることが可能である。昔から ruby に 『++』(インクリメント)を導入して欲しい というリクエストがあるが、これだって自分で仕様を考えて、自分でコーディングして、自分で ruby インタプリタを作りさえすれば手に入る。自分の手のひらの中だけでだけど 3。
この記事を読んでいるあなたは、(アプリケーション)プログラムを触るだけでなく、スクリプティング言語 に興味があるのだと思う。自分から PC に歩み寄る選択肢を選んだあなたなら、この気持ちは判ると思う。
__ そ こ に ソ ー ス が あ る の だ か ら 、 コ ン パ イ ル し な き ゃ 損 な の だ __
あるいは、こう考える人もいるかも知れない。「プログラムを作るっていったって、OS の制限下での 話じゃないか」その通りである。しかし我々には Linux もあるし、FreeBSD / NetBSD / OpenBSD もあるし、 ソース公開したソラリスや OpenDOS や、えーっとえーっとたくさんのフリー OS があるではないか。
OS をいぢる前に(もちろん、いぢることから始めても良いけれど)プログラムをビルド(コンパイル)することから始めてみようじゃないか。 この連載は Windows OS (具体的には、Windows 2000 以降の Microsoft 製の OS たち)上で 4 、 ruby.exe をビルドする方法について説明していく。
ソースコードをコンピュータが処理可能な命令を出すモノ(プログラム)に変換する作業がコンパイルだ。 正確にはコンパイルとはソースコード→オブジェクトコードの変換を指すため、最終的なプログラム および必要なファイル群5 を生成する 後処理的な部分も合わせて「ビルドする」といった言い方6 を本稿では用いることとする。
開発環境とは、ビルドするためのツール群のことだ。コンパイラやリンカなどのツール、ヘッダ/ライブラリ7などが含まれる。 また、OS やコンパイラによっても、ビルドに必要なツールは変わっていく。
Windows OS には、基本的に開発環境は含まれないのでインストールする必要がある。
そもそも Ruby は作者のまつもとさん曰く、「Windows は(触ってないから)知らない」(ruby-list:40205)と明言していることもあって、各環境毎にコミッターがいる状態である。
詳しく知りたい向きは、青木日記突込付(2004/03/10)および、Microsoft Windows版のビルト環境による違い(ちょっと内容が古い)を読んで欲しい。
さて本稿では MinGW の開発環境をセットアップして Ruby のビルドに挑戦しようと思う。なぜ MinGW かというと
それでは、もう少し詳細に MinGW について見ていこう。
MinGW Project の WEB PAGE において MinGWはこう説明されている。
MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs.
なんちゃって日本語訳すると「MinGWってのはさぁ、とりあえず他に何もインストールしなくても動作するプログラムを作るための 自由に使える GNU の開発環境の Windows版なんだよね」くらいの意味である。
この文章のキモは次の2点にある
同様に GCC というコンパイラが使える Cygwin では、 cygwin1.dll という動作用の DLL 他を入れないと動かない8、しかし、UNIX 系 OS とほぼ同等の環境まで用意してくれる という違いがある。MSWin32版および bccwin32版でも基本的にフリーで環境をそろえることも可能なのだが、今回はインストールなどの手間が一番小さいと思われる MinGW および MSYS にて環境を作ることとする。
さていきなり出てきた MSYS であるが、先程のMinGW Projectにはこう説明がある。
MSYS: A Minimal SYStem to provide POSIX/Bourne configure scripts the ability to execute and create a Makefile used by make.
またまた適当になんちゃって訳すると「最小限の POSIX9 と configureスクリプトが動作して Makefileを作ることが出来る環境」ってとこだ。元々 UNIX環境を祖とする Rubyの場合 UNIX的環境(上記 POSIXおよび configureスクリプトが動作する環境だ)がある方がビルドの手間がかからない。 まぁ、知ってるに越した事はないんだが「コンパイラ以外のビルドに必要なツール群が入ってる」くらいの認識でも今は OK だ。おいおい知るハメにもなるわけだし。
MinGW/MSYS環境と Cygwin 環境との大きな違いはコンパイルした実行ファイルが、動作用の DLL(msys-1.0.dll)が無くても動くことを前提にしてる部分である。
MinGW/MSYS に関しては MinGW公式ページの FAQやDocumentationにも情報がある10 。この後紹介するページにも有用な解説もあるので見て欲しい。
それではインストールについて解説する。といっても、インストール自体の解説は行わない。各自で GoogleJ:MinGW インストール から探して欲しい。だけだとあんまりなので、例えば、
がまとまっている。で、今回は MinGW/MSYS セットアップのみをインストールする。
ファイルをダウンロードしたら、MinGW-3.0.0-1.exe をダブルクリックするとインストーラが起動するので画面の指示に従うだけである。
以 上
というか、上記 Google経由のページにたくさんあるので。
一つだけ忠告するならば、インストール先は C:\MinGW にしとくが吉である。他のアップデータパッケージに関しては入れないことを前提に以降は解説を行う。
こちらも MinGW 同様インストーラからマウスクリックするだけである。インストール先は C:\MSYS\1.0 にしておく。最後にコマンドプロンプトで入力を求めてくるので
「インストール後処理をするか?」 なので、『y』を入力してエンター。
「MinGW インストール済みか?」 その通りなので、『y』を入力してエンター。
「MinGW のインストール場所を答えよ」 なので、『C:/MinGW』を入力してエンター。
__ こ れ だ け で あ る __
さて、MinGW/MSYS 環境であるが、どうやって触るかというとコマンドプロンプトのようにキーボードから入力する環境であるコンソールが用意されている。
MSYS のアイコンから起動すると、一瞬コマンドプロンプトが表示された後で MINGW32 というタイトルの画面が表示される。
rxvt は Linuxなどの UNIX互換OSなどで動くターミナルプログラムの移植版である。詳しくはこれも GoogleJ:rxvtから探索して欲しい。そうそう、こいつは初期設定のままでは、日本語は通らない 12。
Linuxディストリビューションではシェルはほとんどコレである。詳しいことは、GoogleJ:bashする … というのも飽きてきたな。CUIであっても最近のシェルはファイル名補完機能というものがあって、
などと TAB キーを押すことで、入力を補佐してくれる機能だ。ちなみに MSYS では C:\は /c/ となる。この辺は慣れるしかないので、bash に関することと MSYS特有なことを区別して理解していく必要があるだろう。
さて、インストールの確認も兼ねてコンパイラである gcc の環境を見ておこう。
ここで、gccがありません系の反応だったり、specファイルが異常などの表示が無ければインストールは正常である。何か実際にコンパイルしてみよう。
こういう場合は古(いにしえ)より『Hello,World!!』と表示するプログラムを書くことになっている。で、早速ということだが、まずどうやってソースコードを書くのか?
まず MSYSというか rxvt 上でコードを書くためのエディタとしては、vi がある。
__ O K ! v i 問 題 な い っ __
という向きはそのまま書いていただきたい。無問題である。が、vi のキー操作を知らない向きにいきなりコードを書けってのも厳しい話だ。よって、今回は Windowsのメモ帳で書くこととする。が、しかし
__ rxvt で作業しているディレクトリに存在しているファイルを、どうやってメモ帳で編集するのか?__
今回はその辺は、きっちりやり方を説明させていただく。しかし
今 度 だ け だ よ ん 13
現在は、ホームディレクトリ(/home/#{ユーザー名})にいると思うのでソースコード用にディレクトリを用意して移動する。
これで、Homeディレクトリをエクスプローラが開いた状態で表示されるはずだ 14 後は何とかメモ帳から hello.cファイルを開いた状態にして欲しい。
そうしたら、以下のソースコードをコピペだ。
ではコンパイルだ。
15 特に問題は無いはずだ。
さてそれでは、第1回目を締めくくる前に Ruby をソースからビルドしてみよう。
現在の安定版は、1.8.1である。それから次期安定版の1.8.2 preview3 がアナウンスされている。最新のソースコードをWEB経由でCVSでも取得可能ではある。今回は新しさ、安定度、当原稿の都合を考え、1.8.2 preview3を対象とする。
インターネットエクスプローラでも、Firefoxでも何でも構わないので、ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.2-preview3.tar.gz をダウンロードする。その後で先ほど作った src ディレクトリにコピーをして欲しい。
再度 rxvtコンソールでの操作だ。コマンドラインでソースコードを解凍しよう。
展開した rubyソースコードのバージョンなどが判るようにディレクトリ名を変更しておく。
それでは、Ruby インストールガイド UNIX全般の通りにコマンドを入力する。mingw32 (ソースから)は若干古い内容なので、Cygwinを使えとか configure にオプションが必要とあるが、現在は単純にconfigureを実行するだけだ。
さて ruby.exeも正常に作れたし、後は make install するだけと思ったあなた。はっきりいって
甘 い な
これから、MinGW の環境の内部・Windows の DLL などの仕組み・C言語とライブラリの関係などがあなたを待っている。実は Ruby と根本的には関係ないことなのだけど。
という訳で、次回までに2つほど宿題として課題を提示させておいてもらう。
今回のビルドではいくつかの拡張ライブラリ16が作られていない。
以下で拡張ライブラリの名前17を表示させている 18。作られなかったライブラリの共通点を考えてみよう。
この原因を考えて欲しい。
vi を操作することに問題のない向きは関係ないが、メモ帳は開発に使うにはシンプル過ぎる 19。 やはりプログラミング言語用にカラーリングをしてくれたり、開発向き機能に特化したエディタの使い方に慣れた方が後々楽だ。
以下でフリーな開発系のエディタをいくつか紹介するので、インストールして試しておいて欲しい。もちろん秀丸エディタなどのシェアウェアのものであっても構わない。
本稿を書いているときに、まつもとさんより ruby-1.8.2 のリリースが 12/25に予定されていることが発表された(ruby-dev:25193)。たくさんのコミッターの成果である。
願わくば、未来のコミッターとなる人が、この記事を読んだ方の中から出てきてくれればと思う。
たむら (tamura at ruby-lang dot org)
退役エンジニア。最近人の管理だなんだで開発的な仕事が出来ないため 逃避を兼ねてるびまや雑誌原稿を書きなぐっています。
this writing special thanks for The Police on Synchronicity and VIRGIN RADIO GROOVE
GPL ライセンス、または Ruby’s と呼ばれる独自ライセンス http://www.ruby-lang.org/ja/LICENSE.txt を参照のこと ↩
実は『フリーソフトウェア』の定義ってやつも難しいのだが ↩
フリーソフトウェアの場合、改変が自由であるケースが多い。この辺はライセンスをきちんと確認すること ↩
ユーザーが多い、なじみがないというのがチョイスした理由だ ↩
ruby でいうならライブラリとかマニュアル関係とか ↩
configure とかもコンパイルじゃないな ↩
予め用意されている、プログラムに組み込むための材料 ↩
おまけに以前はこいつの動作が不安定という問題もあった。最近はかなり安定して動作するようではある ↩
UNIX系で共通の開発的インターフェースの共通仕様のこと。詳細は http://www.atmarkit.co.jp/icd/root/31/5787131.html ↩
残念ながら英語である。この辺に関しては英語のページを避けることは現状無理だ。ちょっとした辞書と根気と慣れがあれば何とかなるものである。探すと翻訳されたページが発見されたりするわけだが ↩
http://www.libsdl.org/ フリーなクロスプラットフォームのマルチメディア開発用ライブラリ ↩
http://fun.sci.fukuoka-u.ac.jp/RWiki/rw-cgi.rb?cmd=view;name=MSYS に msys.bat の修正をすることで表示は可能だと書かれている ↩
これは決していぢわるで言っているのではなく、自分の頭で解決出来るやり方やクセをつける方が、その人のためだからである ↩
C:\msys\1.0\home\tamura とか ↩
gcc -o hello.exe hello.c など出力ファイル名を指定しなければ、a.exe が作られる。ちなみに Linuxなどの環境では ./a.out としなければ実行されない ↩
C言語で記述されたRubyを拡張する機能を持つライブラリ ↩
Windowsでは hogehoge.so という名前になる ↩
コンパイル直後に実行だ ↩
容量が 64Kまでだったり、文字コードがShiftJISしか対応してなかったり ↩