今回から3回にわたって,Webアプリケーション開発に興味があるという読者を対象に,プログラミング言語「Ruby」を使ったWebアプリケーション開発について紹介します。3回概要は次を予定しています。
第7回 Rubyの特徴とインストール
第8回 Ruby on Railsのインストール
第9回 課題管理システムRedmineの紹介
Rubyの特徴
Rubyは,コンパイルといった面倒な手続きなしに,簡単に使えるスクリプト言語です。本格的なオブジェクト指向プログラミングをサポートしています。
特徴の一つは,プログラムを書いてすぐに実行して結果を確認できる手軽さです。加えて,オブジェクト指向の考え方やデザイン・パターンを活用することで,プログラムが大きくなっても扱いやすい構造にもできます。
Rubyは,柔軟な文法と強力な拡張性によって,いろいろなスタイルでプログラムを記述できるマルチパラダイムの言語であるともいわれています。オブジェクト指向だけでなく,C言語のように手続き的に書くこともできますし,Lisp言語のように関数型的なプログラミングもできます。このような,懐の深さがRubyの魅力の一つです。
一般的に,プログラムのアルゴリズムを解説する際,プログラムの流れを分かりやすく記述するために,言語に依存しない「疑似コード」で記述する場合があります。疑似コードとは,変数の型宣言や記号のような分かりにくい記述を除いて,既存のプログラミング言語に似せて単純化したものです。次のプログラムは疑似コードの例です。
hour = 現在時
if (hour > 5時 and hour < 12時)
print "おはようございます"
elseif (hour > 12時 and hour < 19時)
print "こんにちは"
else
print "こんばんは"
end
この疑似コードは,現在の時間によって挨拶の文言を切り替える処理を説明したものです。プログラムを書いた経験があれば,どのような処理なのか容易に想像できるでしょう。では,Rubyを使って同じ処理を書いた例を見てみます。
hour = Time.now.hour
if (hour > 5 and hour < 12)
print "おはようございます"
elsif (hour > 12 and hour < 19)
print "こんにちは"
else
print "こんばんは"
end
疑似コードとそっくりなことに驚いてしまいますが,これが実際に動作するRubyプログラムなのです。Rubyは簡潔でありながら高い表現力によって,あたかも疑似コードがそのまま動作するように見えるほどの記述性があります。
Rubyの文法
Rubyの文法には,簡単でない部分もあります。ただ,基本を押さえればプログラムを書き始めるのは難しくありません。例えば,データ型はすべてオブジェクトとして扱います。Javaのようにプリミティブ型とオブジェクト型のような区別がなく,Rubyは数値も文字列もすべてオブジェクトとして操作できます。
変数の代入の例は,次のようになります。
num=11
name=’Ruby’
また,クラス定義は以下のように行います。
class Class1
def func1
...
end
def func2
...
end
end
そのほかのRubyの特徴的な機能としてブロックがあります。ブロックはデータだけでなくプログラムの断片をオブジェクトとして扱える機能です。Rubyでよく使われるのは,繰り返し処理の中身としてブロックを用いて記述することです。
次の例では「do … end」の間がブロックとしてeachメソッドに渡されます。ブロックを使うとデータを差し替えるだけでなく振る舞いも変更可能な柔軟なプログラミングが可能です。
#!/usr/bin/ruby
data = [1, 2, 3]
data.each do |i|
print i, "\n"
end
Rubyのブロックで書いた処理と同等なプログラムをC言語でも書いてみました。変数の宣言やループのカウントのような細かい処理も記述しなくてはならないことが分かります。
#include <stdio.h>
int main( int argc, char *argv[] )
{
int data[3] = {1, 2, 3};
int i;
for (i = 0; i < 3; i++) {
printf("%d\n", data[i]);
}
}
一人のプログラマが1日に書けるプログラムの量は言語によらず一定といわれています。そこでRubyのような1行当たりの密度が濃い表現力を持ったプログラミング言語を使うことで,より多くの仕事をこなせるアプリケーションを開発できるのです。