柔らかい春の風が吹く中,僕にはまだ現実が受け入れられなかった。彼女から暗号メールで突然の別れを告げられたものの,その後もメールのやり取りは続いていた。ただし,いずれの内容も,別れを希望したものだった。

 唯一の希望は,彼女からの最後の暗号メールだった。解読した内容には,何か引っかかるものがある。それが何を意味するかはまだわからない。その“引っかかり”を解くにはもう少し気を落ち着かせる必要があるようだ。落ち着くために,Rubyについて思いを巡らせることにしよう。

RubyはRailsで普及した

 この連載では,Rubyの主要な機能を紹介してきた。クラスの定義から始まり,「すべてがオブジェクト」という大きな特徴やオープンクラスと継承,例外処理までを説明してきた。これら以外にも,Rubyにはまだまだ面白い機能がたくさんある。本連載で語り尽くせないのが非常に残念だ。

 最終回となる今回は,Rubyがどのようにして広く使われるようになったのか,そして,結局のところ,Rubyのどこがすばらしいのかについて,もう一度考えてみたい。

 Rubyは1993年に誕生した。C/C++などに比べると,比較的新しいプログラミング言語だ。開発者は,日本人のまつもとゆきひろ氏である。

 数年前までは,業務でRubyアプリケーションを利用することはなかなか想像できなかった。もちろん,個人レベルの便利なツールとしてRubyで作ったプログラムを使うことはあっただろう。しかし,企業情報システムの一部としてRubyアプリケーションを活用することは,少なくても僕の周りではほとんどなかった。

 こうした状況を一変させたのが,Ruby on Rails(以下,Railsと呼ぶ)というWebアプリケーション開発用のフレームワークだ。Railsは,多くのプログラマに衝撃を与えた。なぜなら,簡単なアプリケーションであれば,コードを一切書くことなく,10分ほどで作成できてしまうからだ。たったの10分! 僕がパスタをゆであげるのと同じくらいの時間で,Webアプリケーションが完成してしまうのだ。

Railsの威力を知る

 Railsは,Rubyが持つ力を徹底的に取り込んだツールといえる。

 具体例を示そう。Railsでデータベース(DB)にアクセスするには,「ActiveRecord」というRails独自のDBアクセス用モジュール(ORM)を利用する。ActiveRecordは,一つのテーブルを一つのクラスとして表現する。

 例えば,図1のEmpsという社員表があったとしよう。この表にアクセスするには,ActiveRecordではEmpクラスを作成する必要がある。EmpクラスをActiveRecordに従って作成すれば,

emp = Emp.find(id)  #idによる社員の検索
puts emp.name     #名前の表示
puts emp.role      #役職の表示

というように,データベースへの検索結果がEmpのオブジェクト(emp)として取得できるようになる。検索だけでなく,データの作成や更新,削除をすべてEmpクラスで処理できる。それでは,Empクラスはどのように定義されているのかというと,

class Emp <ActiveRecord::Base
end

というたった2行だけだ。「ActiveRecord::Base」という親クラスを継承したEmpクラスを定義するだけで,図1の表にアクセスできる。

図1●社員表の例
図1●社員表の例

 これは高機能な親クラスを継承しているためだが,ここで少し考えてほしい。先ほどのサンプル・コードでは,Empオブジェクト(emp)は,「name」と「role」というメソッドを持っていた。ところが,Empクラスの定義の中にはnameとroleという名前は一切入っていない。

 では,親クラスであるActiveRecord::Baseがnameやroleといったメソッドを持っているのかというと,そうではない。nameとroleは,純粋にEmps表にある情報であり,当然親クラスのActiveRecord::Baseは,そのようなメソッドの存在を知らない。Rubyにおいては,定義されていないメソッドを呼び出すとエラーになってしまう。それでは,なぜエラーが起きないのだろうか?