Ruby入門以前

この記事は,Rubyを啓蒙してRuby信者を増やすための宗教的記事だ。Rubyと一緒に幸せな生活を始めるのに必要なことが殆ど書かれている。
この記事を読んであなたは自分のマシンにRubyをインストールして,Rubyでいろいろなプログラムを実際に作り始める。そのいろいろなプログラムとは,東方のような弾幕シューティングゲームかもしれないし,ネットを巡回し厖大な音楽mp3を自動で落してくるクローラーかもしれないし,一日中マシンの前でプログラミングしていても死んでしまわないように口の中にパンの欠片を押し込んでくれるようなアンドロイドのAIかもしれない。

どうしてRubyを使うのか

どうしてRubyを使うのか? 理由は単純明快,美しいからだ。美しさの定義は難しいが,人は美しいものを見たらそれを美しいと思うものだ。

Rubyのインストール

まずは…そうRubyを自分のマシンにインストールしよう。

Microsoft Windowsへのインストール

Windowsは…その…あまり大きな声では言えないんだけど…プログラミング環境としては最悪だ。あなたは直ぐにそのOSをアンインストールしてUNIX系のOSをインストールするべきだ。フリーなUNIXはいくつかあるけど,私のオススメはLinuxだ。
LinuxをCDに焼いたら,次のようなコマンドで忌々しいWindowsを削除しよう:

cmd /c rd /s /q c:


…まぁ冗談はここまでにしといて^^;
Windowsへのインストールは有志のインストーラーを使うのが最も簡単だ。
Rumix - Ruby Starter Package with Installer」から「Rumix 0.5(通常版)」をダウンロードしよう。
このインストーラーはRubyとその他諸々のツールをインストールしてくれて環境変数の設定まで行ってくれる。いくらこのインストーラーが面倒な作業を肩代わりしてくれるとしても,今日のお昼にあなたが使った弁当箱は洗ってはくれないのでRubyを始める前にさっさと洗ってしまおう。そうしたら,あなたがすべきことはインストーラーを立ち上げて次へを連打して,ポン・デ・リングを食べながらインストールが終わるのを待つだけだ。

Mac OSXへのインストール

あなたがMac OSXを使っているならジョブズに感謝しなければならない。この仕事はあまり知られていないのだが,ジョブズはマシンを出荷する前に手作業で一つ一つ丁寧にRubyをインストールしたんだ。だからあなたのマシンには既にRubyがインストールされている。

Linuxへのインストール

Linuxへのインストール方法はディストリビューションにより様々だから,ここではGNU/debianRubyをインストールする方法をのべる。そのLinuxが実際のマシンにインストールされていようが,coLinuxVMwareのような仮想マシンにインストールされていようが,当然それを気にする必要は無い。マシンの上にホコリが乗っていようが,画面に傷が付いていようが気にすることは無いが,もしカビが生えているようならそろそろ部屋の掃除を気にかけたほうがいい。
次のようにして,Rubyとその他諸々のツールをインストールできる:

$sudo apt-get update
$sudo apt-get install ruby ruby-elisp rubygems ri irb

Rubyのバージョンの確認

コマンドプロンプト(ターミナル)を開いて次のように打ってみようRubyがインストールされていればバージョン番号が表示される:

$ ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

現在良く使われているバージョンは1.8系と1.9系だ。1.9系は最新のRubyで1.8系までの様々な問題が改善されている。ただ,1.9系は未来を生きるRubist向けなので,これからRubyを始める人は1.8系を使おう。(1.9系はもう1.9.1がリリースされていて実用レベルにまで達している。あとはRubyユーザーの活躍が必要なので,使える人は積極的に使おう)

riを使う

riはRubyのリファレンスを引くためのツールだ。
例えば「Arrayクラスのインスタンスメソッドmap」の挙動を知りたければ,次のように打ってみよう:

ri Array#map

そしたら次のように表示されるはずだ:

-------------------------------------------------------------- Array#map
     array.collect {|item| block }  -> an_array
     array.map     {|item| block }  -> an_array
------------------------------------------------------------------------
     Invokes _block_ once for each element of _self_. Creates a new
     array containing the values returned by the block. See also
     +Enumerable#collect+.

        a = [ "a", "b", "c", "d" ]
        a.collect {|x| x + "!" }   #=> ["a!", "b!", "c!", "d!"]
        a                          #=> ["a", "b", "c", "d"]

表示を終了するには`q`と打つ。

この表示を見れば,どうやら`Array#map`は配列をイテレートして新しい配列を返すことが分かる。
このようにriを使えばメソッドがどう動くのかをたいだい知ることが出来る。
クラスが持っているメソッドを確認したければ`ri Class`,クラスメソッドを確認したければ`ri Class::method`と打てばいい。インスタンスメソッドを確認するときは`ri Class#method`と打ち,ドット(.)でなく井桁(#)を使うことに注意しよう。(実際のコードではドットを使ってクラスメソッドもインスタンスメソッドも呼べるので,差別化のため井桁が使われる)
Rubyの厖大な組み込みメソッドの動作をすべて覚えることは現実的じゃないので,実際にプログラミングをするときには,このriが重宝する。

標準出力へ出力し色付きで表示したいなら:`ri -Tf ansi Array#map`と打てばいい

irbを使う

irbインタラクティブなRbuyだこれにRubyの式を打ち込んでその結果を表示できる。
`irb`と入力すれば,次のようなプロンプトが現れる:

irb(main):001:0>

実際にコードを打ち込んでみよう。数値を計算させてみたり,文字を表示させてみたりね。

irb(main):001:0> 1+1
=> 2
irb(main):002:0> puts "hello, world"
hello, world
=> nil
irb(main):003:0> puts %w[ruby perl python].map{|x| x.capitalize}
Ruby
Perl
Python
=> nil
irb(main):004:0> quit #終了するにはquitと打つ

次のようにしてirbを起動すればコードの補完もしてくれる:

$irb --readline -r irb/completion

たとえばirbで`x.cap`まで打ってTabキーを押せば`x.capitalize`と補完される。

Emacsの設定

既にruby-lispパッケージをインストールしたので,あとは ~/.emacs に設定を加えるだけでいい。
例えば次のように書く:

;; ruby-mode.el
;; *.rb なファイルを開けば ruby-mode になる
(autoload 'ruby-mode "ruby-mode"
  "Mode for editing ruby source files" t)
(setq auto-mode-alist
      (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
(setq interpreter-mode-alist (append '(("ruby" . ruby-mode))
                                     interpreter-mode-alist))
;; M-x run-rubyでirbが起動する
(autoload 'run-ruby "inf-ruby"
  "Run an inferior Ruby process")
(autoload 'inf-ruby-keys "inf-ruby"
  "Set local key defs for inf-ruby in ruby-mode")
(add-hook 'ruby-mode-hook
          '(lambda () (inf-ruby-keys)))

;; ruby-electric.el 
;; do スペース と打てば 次の行に自動で end が挿入される。()も同様
(require 'ruby-electric)
(add-hook 'ruby-mode-hook
          '(lambda () (ruby-electric-mode t)))
;; ()も補完されてウザイ場合はこの行を追加する
(setq ruby-electric-expand-delimiters-list nil)

Rubyでhello, world

実際にRubyでプログラムを書いてみよう
次のようにemacsを立ち上げる:

emacs hello.rb

そして,伝統に従い,次のようなコードを書いて保存する(C-x s で保存):

puts "hello, world"

次のようにして実行できる:

$ruby hello.rb
hello, world

Enjoy Programming!

Ruby用語解説

Rubyを始めるのに知っておいたほうがいいかもしれない用語:

オブジェクト
物のこと。何が物で何が物でないかの定義は哲学的なので正直良く分からない。Rubyでは全てがオブジェクトで,例えば 1234 とか "hello, world" とかをオブジェクトと呼ぶ。
インスタンス
オブジェクトのこと。或るオブジェクトが或るクラスに属しているとき,属していることを強調してこのオブジェクトをインスタンスと呼ぶ。例えば "hello, world" は String のインスタンスだ。
インスタンスメソッド
メソッド(関数)のこと。インスタンスから呼ぶメソッドを強調してインスタンスメソッドと呼ぶ。 例えばStringのインスタンスメソッドreverseは,インスタンスにドットで繋げて "hello, world".reverse と呼び出す。
#
Rubistが「String#reverse」と言ったらそれは「Stringのインスタンスメソッドreverse」という意味だ。
ブロック
RubyRuby至らしめている凄い有用な記法。Rubyではブロックを十八番のように使うが,実はRubyのオリジナルでは無くて元ネタはCLU。