Rubyはプログラミングを楽しむための言語です。 プログラミングが初めての方から、経験を積んだエキスパートの方まで、全ての人にお勧めします。 きっとあなたもRubyを知れば、人に教えてあげたくなりますよ。

準備編集

まずはRubyインタープリタを用意しましょう。 インタープリタとは、あなたが書いたプログラムを読んでそれを実行してくれるソフトウェアです。 Rubyの公式Webページ[1]の「ダウンロード」ページから、 それぞれの環境に合ったインタープリタをダウンロードして下さい。 どうすれば分からない方は、同ページの「インストールガイド」を参照して下さい。 準備ができたら、試しにコマンドラインからインタープリタを呼び出してみましょう。

 % ruby --version
 ruby 1.8.5 (2006-08-25)[i486-linux]

ちゃんと表示されましたか?それではいよいよRubyを始めましょう。

Hello, World!編集

他のたくさんのプログラミングマニュアルがそうであるように、 私たちもまずはRubyの世界にあいさつすることから始めましょう。 helloworld.rbというファイルを作り(Rubyではプログラムファイルに.rbという拡張子を付けることが通例となっています)、次のように書いて保存して下さい。

# helloworld.rb
s = 'Hello, World!'
puts s

それではこのプログラムを実行してみましょう。コマンドラインから次のようにタイプして下さい。

% ruby helloworld.rb
Hello, World!
%

ちゃんと表示されましたか?これで最初のプログラミングは終了です。

まずは1行目。この行は#で始まっています。これは#以降がコメントであるというしるしです。 インタープリタは#がプログラムに現れると、その行の#以降を読み飛ばします。 CやC++、JAVAにおける//と同じ働きですね。

次に2行目を見てください。 ここではsという変数に、Hello, Worldという文字列を代入しています。 Rubyでは、多くの他の言語と違って変数の型を宣言する必要がありません。 文字列の表現に"ではなく'を使っている理由については後で説明します。

そして3行目ではputsというメソッドが使われています。 putsは引数の値を出力して、その後に改行を出力します。 ここではsという変数の値、すなわち文字列Hello, World!を出力し、最後に改行してくれています。 自動で改行したくないときには、printを使います。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
print s1
print s2
puts s3

文字列は+というメソッドを使って連結することができます。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
puts s1 + s2 + s3

また、putsやprintといったメソッドは、,(コンマ)で区切っていくつでも引数を取ることができます。 極端な話、全く引数を取らなくてもよいのです。

# helloworld.rbと同じ動作をする
s1 = 'Hello'
s2 = ', '
s3 = 'World!'
print s1, s2, s3
puts

この例ではputsは何も仕事をしていないと思いましたか?それは違います。 putsは何も引数を取らなくても、改行をしてくれているのです。 putsとprintの違い、分かってもらえたでしょうか。

irb編集

Pythonperl -de 1と同様、Rubyにもirbというインタラクティブな実行環境があります。シェルからirbを実行するとコマンドインタプリタが起動します。

% irb
irb(main):001:0> puts "Hello, world!"
Hello, world!
=> nil
irb(main):002:0>

times編集

n.times{CODE}はnCODEを実行せよというメソッドです。nは整数です(CODEをブロックと呼びます)。

3.times{ puts 'Hello, world!' }

この例ではHello, world!を3回表示します。

iter = 3.times
puts iter.next # 0
puts iter.next # 1
puts iter.next # 2
puts iter.next #  `next': StopIteration: iteration reached an end

Number::times にブロックを渡さないと、Enumeratorを返します。 Enumerator オブジェクトは外部イテレータと呼ばれnextメソッドで反復を行えます。

lambda編集

無名関数を定義するにはKernel.#lambdaを使用します。Proc.newも近い機能を提供しますが、lambda のほうがより厳密で、引数の数が異なるって場合エラーとなります。

lambda {|x, y| x + y }[2, 3] # => 5

lambdaが返すProcオブジェクトにアクセスするにはブラケットを使用します。callメソッドを呼んでも同じことです。

Rangeオブジェクト編集

Rangeオブジェクトのリテラルは開始 .. 終了の形式です。Rangeのeachメソッドは perl 等のforeach文にあたるブロック付きメソッド呼び出しのイテレータです。

Rangeオブジェクト
r = (0..9)
p r
p r.class
r.each {|x| p x }
実行結果
0..9
Range
0
1
2
3
4
5
6
7
8
9
putsメソッドはオブジェクトにto_sメソッドで適用した結果を表示するのに対し、pメソッドはオブジェクトにinspectメソッドで適用した結果を表示します。
putsとp
puts "Hello, world!"
p "Hello, world!"
実行結果
Hello, world! 
"Hello, world!"

HTTPクライアント編集

open-uriを使用すると簡単ですが、より高度なインタフェースが必要な場合はNet::HTTPを使用します。

require 'open-uri'
puts open('http://www.example.com/').read

open-uriは組み込みのopenメソッド(Kernel.#open)をオーバーライドします。ワンライナーで書くこともできます。

% ruby -ropen-uri -e 'puts open(ARGV.shift).read' http://www.example.com/

ARGVはコマンドライン引数の配列、Array#shiftメソッドは最初の要素を取り出します。

応用編集

このページ「Ruby」は、まだ書きかけです。加筆・訂正など、協力いただける皆様の編集を心からお待ちしております。また、ご意見などがありましたら、お気軽にトークページへどうぞ。