C&R研究所より献本御礼。

こういう本を待っていた。特に「Rubyクックブック」(翻訳版)の出来がいささか残念だっただけに、この本の価値がさらに高く感じる。

他のプログラミング言語を会得している人であれば、Ruby本はこれと「初めてのRuby」で必要十分なのではないか。

本書「Ruby逆引きハンドブック」は、「出来ることが先」ではなく「やりたい事が先」にある人がRubyを使うための手本。いわゆるクックブックであるが、本家の出来が前述のとおりなので、日本においてはこれが de facto な「Rubyオフィシャルクックブック」となるのではないか。

目次 - Ruby逆引きハンドブックより
CHAPTER 01 Rubyの基礎知識
CHAPTER 02 基本的なツール
CHAPTER 03 Rubyの文法
CHAPTER 04 オブジェクトの基礎
CHAPTER 05 文字列と正規表現
CHAPTER 06 配列とハッシュ
CHAPTER 07 コレクション一般を扱う モジュールEnumerable
CHAPTER 08 数値と範囲
CHAPTER 09 時刻と日付
CHAPTER 10 入出力とファイルの扱い
CHAPTER 11 システムとのインターフェース
CHAPTER 12 ネットワーク
CHAPTER 13 データベースの扱い
CHAPTER 14 クラス・モジュール・オブジェクト
CHAPTER 15 Rubyそのものを拡張する ActiveSupport
CHAPTER 16 マルチスレッドと分散Ruby
CHAPTER 17 ドメイン特化言語(DSL)の構築
CHAPTER 18 テスト・デバッグ

版型も動物本より一回り小型のA5で、値段も税込みで4,000円弱というのは、二色刷りで768ページの本としては破格だ。内容もRuby本の世界では「コンバットプルーヴン」なるびきち著とあって、ほぼ文句のつけようがない一冊となっている。

強いて文句をつけるとしたら、折角の二色刷りのおかげで、コードが少し読みにくくなってしまったことだろうか。まず以下は Google Code Prettify の標準的なカラーリング。IE以外のブラウザーで見て欲しい。

#!/usr/local/bin/ruby -Ke 
# 「scan(/./)」「split(//)」「chars.to_a」(Ruby 1.8.7以降)は1文字ずつに分割するイディオム 
"<こんにちは>".scan(/./)   # => ["<", "こ", "ん", "に", "ち", "は", ">"] 
"<こんにちは>".split(//)   # => ["<", "こ", "ん", "に", "ち", "は", ">"] 
"<こんにちは>".chars.to_a  # => ["<", "こ", "ん", "に", "ち", "は", ">"] 
header = <<EOH 
From: rubikitch@ruby-lang.org 
To: ruby-list@ruby-lang.org 
Reply-To: ruby-list@ruby-lang.org 
Subject: I love Ruby! 
EOH 
# マッチしない正規表現の場合は空配列が返る 
header.scan(/no match/)         # => [] 
# 正規表現にマッチした部分の配列を得る 
header.scan(/^.+ruby-list.+$/) 
# => ["To: ruby-list@ruby-lang.org", "Reply-To: ruby-list@ruby-lang.org"] 
# ()付き正規表現の場合はキャプチャの配列の配列が返る 
header.scan(/^(\S+): (.+)$/) 
# => [["From", "rubikitch@ruby-lang.org"], 
#     ["To", "ruby-list@ruby-lang.org"], 
#     ["Reply-To", "ruby-list@ruby-lang.org"], 
#     ["Subject", "I love Ruby!"]] 
# キャプチャだけでなく、正規表現にマッチした部分も欲しければ、正規表現全体を()で囲む 
header.scan(/(^(\S+): (.+)$)/) 
# => [["From: rubikitch@ruby-lang.org", "From", "rubikitch@ruby-lang.org"], 
#     ["To: ruby-list@ruby-lang.org", "To", "ruby-list@ruby-lang.org"], 
#     ["Reply-To: ruby-list@ruby-lang.org", "Reply-To", "ruby-list@ruby-lang.org"], 
#     ["Subject: I love Ruby!", "Subject", "I love Ruby!"]] 
# ()が1つのみの場合、かなりの頻度で「Array#flatten」と併用される 
header.scan(/^(.+):/)           # => [["From"], ["To"], ["Reply-To"], ["Subject"]] 
header.scan(/^(.+):/).flatten   # => ["From", "To", "Reply-To", "Subject"] 
# ブロックを付ければマッチごとにブロックを評価する 
header.scan(/^(\S+): (.+)$/) do |name, value| 
  puts "送信アドレスは#{value}です。" if name == "From" 
end 
# >> 送信アドレスはrubikitch@ruby-lang.orgです。

次に、以下のPDFをご覧いただきたい。オフィシャルサンプルページである。

コメントが赤くて目立ちすぎると感じないだろうか。少なくともコードそのものよりも目立ってしまう。もう少し暗くしてほしかった。

あともう一つ上げるとすると、書籍のサポートページ。目次が短い。読み物ならこれでもいいが、技術書であれば項単位の目次が必要だ。実際の「やりたいこと」はそこに書いてあるのだから。時間があれば私自身で補完したのだが、現在時間不如意なので今のところはそのまま引用するに留めておく。

しかし、それくらいしかケチのつけどころがない仕上がりである。むしろオライリーに見習って欲しいほど。特に版型はなんとかしてほしい。動物本はかさばり過ぎである。原著の方もA5にして欲しいなあ....

Dan the Occasional Rubyist