お仕事でプログラミングされていることの多いプログラマのみなさんは,もうパソコンなんか見たくもないやい! とお嘆きになることが,そう,たまにはあるでしょう。でも,そもそもプログラミングは創造的な行為です。本来それ自体が楽しいものです。雨降りの午後に趣味のプログラミングをたしなむ――そんな日があってもいいんじゃないでしょうか。仕事と違って難しく考える必要はありません。思いつくままにいきなりコードを書いたらいいのです。手直しすることも楽しみましょう。

 プログラミングを楽しむ目的なら,好きな言語を選べます。どの言語にしようかと迷っているあなたに,筆者がお薦めしたい言語が「Ruby」です。Rubyはオブジェクト指向のスクリプト言語です。スクリプト言語ですが,とても強力です。筆者がRubyを知る前は,PerlとJavaを使っていました。Perlは優れたスクリプト言語でしたし,Javaは優れたオブジェクト指向言語でした。ところがRubyは,Perlよりも美しい言語で,Javaよりも使いやすいオブジェクト指向言語だったのです! 今ではRuby=Perl+Javaだと思っています。RubyにはPerlをお手本とした強力な文字列操作や正規表現*1による検索の機能がありますし,Javaよりもシンプルにオブジェクト指向のありがたみを享受できます。しかも文法が簡単で,例外処理と自動的なメモリー管理機能を備え,プログラマが無駄に悩んだりすることが少ないように設計されています。学習や理解が容易です。

Rubyは魅力的?

 “そりゃちょっと褒めすぎじゃないのか”と思っている方,まだ読むのをやめないでください。Rubyは生まれて8年のまだ若い言語ですが,かの「達人プログラマー*2」の著者Pragmatic Programmersのお二人もRubyに入れ込んでいて,「プログラミングRuby*3」という書籍まで発行しています。XP*4のKent Beckさんも好きな言語として「最近の言語ではRuby」と発言したことがあります。RubyはまだJavaやVisual Basicのようには広く普及していません。でも,すでに多くのプログラマがRubyプログラミングに取り組み,成果をあげています(表1[拡大表示])。Win32,データベース,GUI,XMLなどのライブラリや,他の言語と連携するインタフェースも充実してきました。Rubyを気に入っているのは筆者やごく一部の限られた人たちだけではないのです。

表1●Rubyで記述されたアプリケーションの例
リスト1●名前を聞いて,それを答えるRubyのコード
図1●リスト1の実行結果
リスト2●リスト1 を式展開を利用して書き換えた

 Rubyは既存のいろいろな言語のよい点を取り入れて設計されています。その結果,これまでの言語がなし得なかった,統一感と実用性を兼ね備えた言語になりました。どんな言語を知っているにしろ,あなたがプログラマならRubyを使えば使うほど目からウロコがぼろぼろ落ちることでしょう。

 ここでは,スクリプト言語にあまりなじみがない方を対象に,Rubyのいいところ,特徴的な部分を重点的に紹介していきます。何が特徴的と見るかは,人それぞれなのですが,ここでは筆者の気に入っている部分ということでご了承ください。

 読んでみて,もしRubyを気に入りそうだったら,ぜひ手に入れて動かしてみてください。Rubyの動作環境はWindows,Linux,各種UNIXなどです。いずれも,http://www.ruby-lang.org/ja/ から無償でダウンロードできます。Rubyに限らず,多くの言語をマスターすれば,言語を客観的にとらえることができるようになります。これはあなたのプログラミング人生を楽しく変えてくれるはずです。だって,筆者がそうでしたから。

Rubyの概要

 Rubyという言語そのものを解説する前に,Rubyの概要に簡単に触れておきます。Rubyはオブジェクト指向のスクリプト言語です。「ルビー」と発音します。Rubyはインタプリタ*5として動作します。実行する前にソースコードをコンパイルする必要はありません。Rubyは,Perlのようなテキスト処理やシステム管理のための豊富な機能を持っています。また,Rubyは単純で,分かりやすく,簡単に拡張できます。もし,簡単なオブジェクト指向言語を求めていたり,Perlは見にくいと感じていたり,Lispの考え方は好きだがあのカッコの多さには困ると感じているなら,Rubyはまさにぴったりです。

 Rubyの開発環境は普通テキスト・エディタです。筆者は普段,秀丸*6を使っています。Rubyの作者は日本人のまつもとゆきひろさんです。おかげで日本語のドキュメントが充実していますし,メーリングリストでは,作者と日本語で言語の仕様を議論したり,改善案を提案したりできます。

Rubyはすべてがオブジェクト

 Rubyがどんなものかを知りたければ,なにはともあれ簡単で短いソースコードを見てもらうのがよいでしょう。リスト1[拡大表示]は,名前を聞いて,それを答えるプログラムです。あなたのパソコンにRubyがインストールされていれば,「test1.rb」という名前で保存してください。Rubyのソースファイルは,「.rb」という拡張子をつけるのが一般的です。

 ruby test1.rb

とすると実行できます(図1[拡大表示])。

 コードを解説しておきましょう。(1)のprintは,指定した文字列を標準出力*7に出力する関数です。文の終わりに「;」をつける必要はありません(つけてもよいです)。改行が文の終わりを意味します。(2)では,ユーザーがキーボードから入力した文字列を,変数「name」に格納します。変数はPerlと同様に,宣言なしでいきなり使えます。Rubyの変数はどのような型のデータでも格納することができるので,変数の型について心配する必要はありません。その半面,実行する前のチェックは弱くなっています。

 大文字から始まる名前をつけると定数になります。STDINはRubyの組み込み定数で,標準入力*8を意味します。そのうしろに付いている「.gets」はデータを1行(改行まで)読み込むメソッドです。ここでRubyを理解するポイント。Rubyでプログラマが扱う値は,すべてがオブジェクトです。数値も,文字列も,正規表現のパターンも,すべてオブジェクトです。

 STDINは,「IOクラス」という基本的な入出力機能を実装するクラスを実体化した「IOオブジェクト」として振る舞います。なので,IOクラスが備える様々なメソッドが利用できます。getsのほかに,1文字読み込むgetcなどのメソッドがあります。

 これでは普通のオブジェクト指向ですね。Rubyがスゴイのはここからです。STDINのほかにIOクラスから派生しているクラスには,ファイルの入出力を扱うFileクラス,ネットワークとデータをやりとりするSocketクラスなどがあります。これらはIOクラスを継承していますので,IOクラスが備えるほとんどのメソッドを実装しています。さらにIOクラスから派生していなくても,入出力処理を扱うクラスはIOクラスと同じメソッドの組を実装していることが多いです。このため,入出力をするほとんどのオブジェクトを,プログラム上では同じように扱うことができるようになっています。どのオブジェクトに対しても1行読み出したかったらgetsメソッドです。

 このようにすべてがオブジェクトとして扱われるおかげで,プログラマは“これはオブジェクトなのかどうか”と余計なことを考えなくてすみます。思考のレベルをメモリー上のイメージなど低い次元に落とす必要がなく,常に同じ次元で考えることができます。ソースコードの見通しがよくなり,バグが入りにくく,すぐ理解できる読みやすいコードが書けます。

 (3)に進みましょう。nameはユーザーが入力した文字列を格納する変数でした。なので文字列クラスのメソッドが利用できます。「.chomp」は末尾の改行を取り除くメソッドです。

 (4)は出力です。文字列は演算子「+」で連結できます。(1)のprintと違ってここではputsという組み込み関数を利用しています。putsとprintの違いは,末尾に改行をつけるか,つけないかです。printを使って,

 print "お名前は" + name +
 "さんですね。\n"

と書くこともできます。「\n」はC言語やJavaと同じように改行を意味します。

 さらにリスト1はリスト2[拡大表示]のように書き換えることもできます。(5)の「#{ … }」は「式展開」と呼ばれていて,「{」と「}」の間の式を実行して返り値を出力します。ある行の中でちょっとした処理を実行したい時に便利です。リスト2の場合はオブジェクト名が書いてあるだけですので,そのオブジェクトに格納されている値を返します。以上,細かいところで気になったところがあれば,Rubyのリファレンス・マニュアルをチェックしてください*9

株式会社ミッタシステム 吉田和弘