書籍『Ruby逆引きハンドブック』を出版しました。 10 年にわたる Ruby の経験を一冊の本にまとめました。 この本は、「 Ruby で○○するにはどう書けばいいのか」という問いに答える 逆引き本ですが、それだけにとどまらず、陥りやすい落とし穴、理解しづらい部分、 応用例などもしっかり解説しました。 Ruby 初心者〜上級者、他言語から Ruby を学ぶ人すべてにおすすめです。
この本の持ち味は類書をはるかに凌ぐ圧倒的な情報量です。 セクションとコラムは合わせて 588 項目にわたり、総ページ数 768 ページです。 Ruby プログラミングの際には手元に置いて、辞書として繰り返し使ってください。 Ruby 1.8.6 、 Ruby 1.8.7 、 Ruby 1.9.1 全方位対応なので、今風な書き方も学べます。
Ruby on Rails 習得のためには、ベースとなっている Ruby の理解が不可欠です。 Ruby を使いこなしていれば、 Rails はあなたの味方となってくれるでしょう。
気に入りましたら、同僚や友人に広めてください!
まつもとさんより 「今や巨大に成長した Ruby の世界をすべて頭に入れるのは困難です。 本書なら『やりたいこと』から Ruby の機能を見つけられます。」
小飼弾さんの書評 「こういう本を待っていた。他のプログラミング言語を会得している人であれば、 Ruby 本はこれと「初めての Ruby 」で必要十分なのではないか。」
目次(公式サイト目次ページより引用)
CHAPTER 01 Ruby の基礎知識
001 Ruby とは
002 Ruby の入手方法について
003 Ruby の基本的な記述方法について
COLUMN エディタはパートナー
004 Ruby の実行について
005 スクリプトの文字コードを設定する
006 スクリプトを探索する順序について
007 ライブラリを読み込む
COLUMN ファイル間でローカル変数は共有できない
COLUMN ローカル変数の代わりに無引数メソッドを使用する
COLUMN グローバルな名前空間を汚染しないでロードする
008 ライブラリが意図通りに動かない原因について
009 Ruby を制御する環境変数について
010 オブジェクト指向について
COLUMN 特異メソッド
COLUMN クラスメソッド
011 クラス階層について
COLUMN Ruby 1.9 では BasicObject が Object のスーパークラス
COLUMN 卵が先か鶏が先か
012 動的型付について
COLUMN Ruby の学習方法
013 メソッドの表記方法について
014 Ruby 1.9 のエンコーディングについて
CHAPTER 02 基本的なツール
015 手軽な実験環境
COLUMN irb でスクリプトを実行
COLUMN 「 Kernel#p 」で式の値を表示する
COLUMN xmpfilter とエディタを使えば自動で再計算
016 拡張パッケージを手軽にインストール
COLUMN RubyGems の欠点
COLUMN gem コマンドの他の使い方
017 日本語でドキュメント引き
018 英語でドキュメント引き(高速版)
COLUMN その他の機能
CHAPTER 03 Ruby の文法
019 リテラルについて
020 演算子について
021 四則演算・剰余・べき乗について
022 論理式について
COLUMN 論理式を使った条件分岐
COLUMN 「 and 」「 or 」「 not 」をメソッドの引数にするときは二重括弧が必要
023 代入について
COLUMN Fixnum (小さい整数)と Symbol は即値
COLUMN インデックス代入・書き込みアクセサは広い意味での代入式
024 多重代入について
COLUMN 代入形式のメソッドにも多重代入が使用可能
025 変数と定数について
COLUMN スレッドローカル変数
026 組み込み変数について
COLUMN Perl でおなじみの「$_」
027 コメントについて
COLUMN RD について
028 条件分岐式について
029 ループ式について
030 ループ制御について
COLUMN 深いループを抜けるには「 Kernel#catch 」「 Kernel#throw 」を使用する
COLUMN 「 break 」「 next 」と返り値
COLUMN ブロック付きメソッドの旧名はイテレータ
COLUMN 忘れられたループ内「 retry 」
031 インクリメント・デクリメントについて
COLUMN なぜインクリメント演算子を用意していないか
032 メソッド呼び出しについて
COLUMN 組み込み関数とトップレベルの self
033 メソッド定義について
COLUMN 標準的なメソッドの命名法
COLUMN 暗黙の「 begin 」式
COLUMN メソッド定義のネスト
034 ブロックの使用例
035 ブロック付きメソッドについて
COLUMN Ruby 1.9 におけるブロックパラメータの渡り方の変更
COLUMN Ruby 1.9 でのブロックローカル変数
COLUMN 「 do 」ブロックと「{}」ブロックの使い分け
COLUMN ブロックと高階関数
036 クラス・モジュール定義について
COLUMN 標準的なクラス・モジュールの命名法
COLUMN 動的なクラス・モジュール定義
COLUMN 暗黙の「 begin 」式
037 クラスの継承について
038 Mix-in について
COLUMN インクルードをフックする
039 特異メソッド・クラスメソッドについて
COLUMN 「 Object#extend 」はモジュールを特異クラスにインクルードする
COLUMN モジュール関数はプライベートメソッドと特異メソッド
040 呼び出されるメソッドの決定方法
COLUMN 関数の落とし穴
041 「===」と「 case 」式について
COLUMN 「 case 」に式を指定しないと「 if 〜 elsif 〜 else 」の代わりになる
042 例外処理・後片付けについて
COLUMN 例外は濫用するな
043 定義の別名・取り消しについて
COLUMN 元のメソッド定義を利用してメソッドを再定義する
COLUMN クラス・モジュールに別名を付ける
COLUMN メソッド内で alias する
COLUMN クラスメソッドを alias する
044 式の検査について
COLUMN クラス・モジュールからメソッドの存在を確認する
045 %記法について
046 予約語について
CHAPTER 04 オブジェクトの基礎
047 オブジェクトの文字列表現について
048 オブジェクトを表示する
ONEPOINT オブジェクトを画面に表示するには「 Kernel#print 」や「 Kernel#puts 」を使用する
COLUMN 「 Kernel#p 」は主にデバッグ用
049 オブジェクトの同一性と同値性について
COLUMN ユーザ定義クラスでは「==」を再定義する必要があるので注意
COLUMN 「 eql? 」と「 hash 」
COLUMN Ruby と他言語の同一性比較・同値性比較の違い
050 破壊的メソッドについて
COLUMN オブジェクトをコピーしてから破壊的メソッドを適用すれば安全
051 オブジェクトの比較について
052 オブジェクトのコピーについて
053 オブジェクトが空であるかどうかを調べる
ONEPOINT 空のオブジェクトであるか判定するには「 empty? 」メソッドを使用する
COLUMN すべてのオブジェクトに対応するために
CHAPTER 05 文字列と正規表現
054 文字列リテラルについて
COLUMN Ruby 1.9 では Unicode 文字のためのバックスラッシュ記法「\u 」がある
055 Ruby での日本語の扱いについて
COLUMN jcode.rb は Ruby 1.9 から削除される
056 ヒアドキュメントについて
057 文字列の長さを求める
ONEPOINT 文字列の長さを求めるには「 String#length 」を指定使用する
COLUMN 文字数を数える方法の比較
058 部分文字列を抜き出す
ONEPOINT 部分文字列を抜き出すには「 String#[]」を使用する
059 文字列を連結する
ONEPOINT 文字列を結合するには「 String#+ 」や「 String#<<」を指定する
COLUMN 「<<」メソッドは String と Array と IO で共用できる
060 文字列の一部を書き換える
ONEPOINT 文字列の一部を書き換えるには「 String#[]=」を使用する
061 文字列を取り除く
ONEPOINT 文字列の一部を取り除くには「 String#slice! 」を使用する
COLUMN 「 String#[]=」でも文字列の一部を取り除くことができる
062 文字列を挿入する
ONEPOINT 文字列を挿入するには「 String#insert 」を使用する
063 文字列を繰り返す
ONEPOINT 文字列を繰り返すには「 String#*」を使用する
064 文字列を反転する
ONEPOINT 文字列を反転するには「 String#reverse 」「 String#reverse! 」を使用する
065 文字列を比較する
ONEPOINT 文字列比較は文字コード順に行われる
066 式の評価結果を文字列に埋め込む(式展開)
ONEPOINT 式展開はダブルクォート文字列に「#{式}」を含める
COLUMN 式展開のタイミングをずらす方法
067 文字列をフォーマットする( sprintf )
ONEPOINT 文字列をフォーマットするには「 Kernel#sprintf 」「 String#%」を使用する
068 文字列を 1 行・ 1 バイト・ 1 文字ごとに処理する
ONEPOINT 文字列を行、バイト、文字ごとに処理するには「 String#lines 」「 String#bytes 」「 String#chars 」を使用する
COLUMN Ruby 1.8 の「 String#chars 」は「$KCODE 」に依存する
COLUMN Ruby 1.9 の文字列における重大な仕様変更
069 文字列の大文字と小文字を変換する
ONEPOINT すべての ASCII アルファベットを大文字にするには「 String#upcase 」を使用する
070 文字列を中央寄せ・左詰め・右詰めする
ONEPOINT 文字列を中央寄せするには「 String#center 」を使用する
071 文字列の最後の文字・改行を取り除く
ONEPOINT 文字列の末尾の改行を取り除くには「 String#chomp! 」を使用する
072 文字列の先頭と末尾の空白文字を取り除く
ONEPOINT 文字列の先頭と末尾の空白文字を取り除くには「 String#strip! 」を使用する
073 文字の集合に含まれる同一の文字の並びを 1 つにまとめる
ONEPOINT 連続する文字の並びをまとめるには「 String#squeeze 」を使用する
COLUMN 余計な空白文字を取り除く
074 文字列を数値に変換する
ONEPOINT 文字列を整数に変換するには「 String#to_i 」を、小数に変換するには「 String#to_f 」を使用する
COLUMN 頭に 0 が付いた数の落とし穴
075 文字列中の文字を数える
ONEPOINT 特定の文字を数えるには「 String#count 」を使用する
COLUMN 特定の日本語文字を数える
COLUMN 括弧の対応が取れているかチェックする
COLUMN 行数を数える
076 文字列中の文字を置き換える
ONEPOINT 文字を別の文字に置き換えるには「 String#tr 」を使用する
077 文字列を eval できる形式に変換する
ONEPOINT 「 String#dump 」において「 eval ( string.dump ) == string 」が成立する
078 連番付きの文字列を生成する
ONEPOINT 連番付きの文字列を生成するには範囲オブジェクトを作成する
COLUMN 連番を適切に認識してくれない場合の対処法
079 文字コードを変換する
ONEPOINT 文字コードを変換するには NKF や Kconv を使用する
COLUMN NKF.nkf の知られざる機能
COLUMN ひらがなをカタカナに、カタカナをひらがなに変換する
COLUMN ROT13/47 暗号化・復号化
COLUMN 全角アルファベット・記号を半角にする
COLUMN MIME エンコード・デコード
COLUMN 改行コード変換
080 文字コードを推測する
ONEPOINT 文字コードを推測するには「 Kconv.guess 」を使用する
081 正規表現の基本
082 正規表現のオプションについて
COLUMN JIS コードのマッチ
083 正規表現の部分マッチを取得する(後方参照)
ONEPOINT 後方参照するには「()」付き正規表現にマッチさせてから「$1 」や MatchData を使用する
084 正規表現の欲張りマッチ・非欲張りマッチについて
085 正規表現の先読みについて
COLUMN Ruby 1.9 (鬼車)では戻り読みが使える
086 文字列から正規表現を作成する
ONEPOINT 文字列から正規表現を作成するには正規表現中の式展開を使用する
COLUMN grep コマンドを Ruby で実装する
087 先頭・末尾がマッチするか調べる
ONEPOINT 文字列の先頭・末尾が文字列にマッチするか調べるには「 String#start_with? 」「 String#end_with? 」を使用する
088 正規表現で場合分けする
ONEPOINT 正規表現で場合分けするには「 case 」式を使用する
089 文字列そのものにマッチする正規表現を生成する
ONEPOINT 文字列そのものにマッチする正規表現を作成するには「 Regexp.escape 」「 Regexp.union 」を使用する
090 正規表現マッチに付随する情報(マッチデータ)を参照する
ONEPOINT 正規表現マッチに関する情報は MatchData オブジェクトを参照する
COLUMN 予約語のメソッド名を作成することは可能
COLUMN マッチ関連の特殊変数のスコープはローカルかつスレッドローカル
091 複雑な正規表現をわかりやすく記述する
ONEPOINT 複雑な正規表現を記述するには「 x 」オプションを指定する
092 正規表現にマッチする部分を 1 つ抜き出す
ONEPOINT 文字列から最初に正規表現にマッチする部分を抜き出すには「 String#[]」に正規表現を指定する
093 正規表現にマッチする部分を全部抜き出す
ONEPOINT 正規表現にマッチする部分をすべて抜き出すには「 String#scan 」を使用する
COLUMN 正規表現にマッチした回数を数える
COLUMN 文字列の出現回数を数える
094 文字列を置き換える
ONEPOINT 文字列を置換するには「 String#sub 」「 String#gsub 」などを使用する
COLUMN 特殊変数置換はシングルクォート文字列を使う
COLUMN 欲張りマッチの落とし穴に注意
COLUMN 改行コードを統一する
COLUMN HTML ・ XML のタグを除去する
COLUMN 「\」を倍増させるには(ダブルエスケープ問題)
COLUMN 「 String#gsub 」をまとめると効率が上がることも
COLUMN ブロックパラメータはお勧めできない
095 文字列を分割する
ONEPOINT 文字列を分割するには「 String#split 」を使用する
COLUMN 分割結果を構造体にまとめる
COLUMN 「 String#partition 」「 String#rpartition 」について
COLUMN 先読み・戻り読み正規表現を指定する
096 文字列を検索する
ONEPOINT 文字列を検索するには「正規表現」「 String#index 」「 String#rindex 」を使用する
COLUMN 文字列の特定の位置から正規表現にマッチさせる
097 シンボルについて
COLUMN Ruby 1.9 のシンボルは文字列のような振る舞いをする
098 文字列とシンボルを変換する
ONEPOINT 文字列とシンボルの変換には「 Symbol#to_s 」「 String#intern 」を使用する
099 バイナリデータを扱う
ONEPOINT バイナリ文字列から情報を取り出すには「 String#unpack 」を使用する
100 文字列を一定の桁で折り畳む(日本語対応)
ONEPOINT 文字列を一定の桁で折り返すには NKF.nkf の第 1 引数に「-f 」「-F 」オプションを指定する
101 文字列から書式指定で情報を取り出す( scanf )
ONEPOINT 文字列から書式指定で情報を取り出すには「 String#scanf 」を使用する
COLUMN 書式文字列における文字クラスの落とし穴
102 パスワード文字列を照合する
ONEPOINT パスワードを照合するには「 String#crypt 」を使用する
COLUMN より強力なハッシュアルゴリズムを使う
COLUMN ファイルの同一性を確認する
103 文字列を暗号化・復号化する
ONEPOINT 文字列を暗号化・復号化するには「 OpenSSL::Cipher::Cipher 」を使用する
104 Unix シェル風に単語へ分割する
ONEPOINT Unix シェルの規則で単語分割・エスケープするには Shellwords のモジュール関数を使用する
105 HTML エスケープ・アンエスケープする
ONEPOINT HTML エスケープするには「 CGI.escapeHTML 」を使用する
COLUMN クロスサイトスクリプティング脆弱性
106 テキストに Ruby の式を埋め込む( eRuby )
107 eRuby で無駄な改行を取り除く
ONEPOINT ERB で余計な改行の出力を抑制するには「 ERB.new 」の「 trim_mode 」に「<>」を指定する
COLUMN 明示的に改行を抑制する eRuby タグについて
108 eRuby で行頭の%を有効にする
ONEPOINT ERB で「%」から始まる行を Ruby の式として評価するには「 trim_mode 」に「%」を指定する
109 eRuby に渡す変数を明示する
110 eRuby でメソッドを定義する
ONEPOINT eRuby でメソッドを定義するには「 def_method 」メソッド( ERB 、 Erubis 共通)を使用する
COLUMN eRuby のコンパイル結果を得る
111 eRuby で HTML エスケープする
112 CSV データを処理する
ONEPOINT CSV ファイルを扱うには「 CSV.read 」などを使用する
113 URL エンコード・デコードする
ONEPOINT URL エンコード・デコードするには「 CGI.escape 」「 CGI.unescape 」を使用する
COLUMN Ruby 1.9 では cgi.rb が再編成された
114 HTML を解析する
ONEPOINT HTML を解析するには「 Kernel#Hpricot 」を使用する
COLUMN より高速な HTML パーサ「 Nokogiri 」
115 XML を解析する
CHAPTER 06 配列とハッシュ
116 配列・ハッシュを作成する
117 同一要素にまつわる問題について
118 配列・ハッシュの要素を取り出す
ONEPOINT 配列・ハッシュから要素を取り出すには「 Array#[]」「 Hash#[]」「 Array#fetch 」「 Hash#fetch 」を使用する
COLUMN 「 Enumerable#first 」で最初の要素を得る
119 配列・ハッシュの要素を変更する
ONEPOINT 配列・ハッシュの要素を変更するには「[]=」を使用する
120 配列・ハッシュの要素数を求める
ONEPOINT 配列・ハッシュのサイズを求めるには「 Array#length 」「 Hash#length 」を使用する
COLUMN 「 Array#nitems 」は Ruby 1.9 で削除される
121 配列を結合する
ONEPOINT 配列と配列を結合するには「 Array#+ 」か「 Array#concat 」を使用する
COLUMN ループ中では「 concat 」を使用する
122 同じ配列を繰り返す
ONEPOINT 同じ配列を整数回繰り返すには「*」演算子を使用する
COLUMN コピーして繰り返す
123 部分配列を作成する
ONEPOINT 配列の連続した部分配列を作成するには「 Array#[]」を使用する
COLUMN 最初の n 個を取り出すには「 Enumerable#take 」が使用可能
COLUMN 最初の n 個を取り除いた配列を作成するには「 Enumerable#drop 」が使用可能
COLUMN 複数インデックスの要素からなる部分配列を作成するには
124 配列で集合演算する
ONEPOINT 配列で集合演算するには「&」「|」「−」演算子を使用する
COLUMN 配列 A のすべての要素が配列 B に含まれているかチェックする
COLUMN 集合クラス
125 順列・組み合わせ・直積を求める
ONEPOINT 順列・組み合わせを求めるには「 Array#permutation 」「 Array#combination 」を使用する
COLUMN 覆面算を強引に解く
126 配列に要素を追加する
ONEPOINT 配列に要素を破壊的に追加するには「 Array#push 」「<<」「 Array#unshift 」を使用する
COLUMN 配列は後ろに追加する方が速い
127 配列の末尾・先頭の要素を取り除く
ONEPOINT 配列の末尾・先頭の要素を取り除くには「 Array#pop 」「 Array#shift 」を使用する
128 配列を Lisp 的連想リストとして使う
ONEPOINT 連想リストからキーに対応する要素を得るには「 Array#assoc 」を使用する
COLUMN 少数要素でもハッシュの方が速い
129 配列・ハッシュを空にする
ONEPOINT 配列・ハッシュの内容を空にするには「 clear 」メソッドを使用する
COLUMN 別の配列・ハッシュに置き換えるには「 replace 」メソッドを使用する
130 配列から要素を取り除く
ONEPOINT 配列から要素を削除するには「 Array#delete 」「 Array#delete_at 」「 Array#delete_if 」を使用する
COLUMN 要素を削除する他のメソッド
131 配列の要素を 1 つずつ処理する
ONEPOINT 配列の要素を 1 つずつ処理するには「 Array#each 」を使用する
COLUMN while は邪道
132 配列のインデックスに対して繰り返す
ONEPOINT 配列のインデックスに対して繰り返すには「 Array#each_index 」を使用する
COLUMN 他の方法を模索する
133 配列の指定された範囲を同じ値で埋める
ONEPOINT 配列を同じ値で埋めるには「 Array#fill 」を使用する
COLUMN 「 fill ( value, 範囲指定引数)」には注意
134 ネストした配列を平滑化する
ONEPOINT ネストした配列を平滑化するには「 Array#flatten 」「 Array#flatten! 」を使用する
135 配列内で等しい要素の位置を求める
ONEPOINT 等しいオブジェクトを見つけてそのインデックスを得るには「 Array#index 」「 Array#rindex 」を使用する
COLUMN Ruby 1.8.7 以降ではブロックの評価結果が真になったインデックスを求める
136 配列に要素を挿入する
ONEPOINT 配列に要素を挿入するには「 Array#insert 」を使用する
137 配列を文字列化する
ONEPOINT 配列を文字列化するには「 Array#inspect 」や「 Array#join 」を使用する
COLUMN 「 Array#to_s 」は Ruby 1.8 と Ruby 1.9 で異なる
138 配列を反転する
ONEPOINT 配列の要素を逆順にするには「 Array#reverse 」を使用する
139 二次元配列を転置する
ONEPOINT 疑似二次元配列の行と列を入れ替えるには「 Array#transpose 」を使用する
140 配列から重複要素を取り除く
ONEPOINT 配列から重複要素を取り除くには「 Array#uniq 」を使用する
141 配列をシャッフルする
ONEPOINT 配列をシャッフルするには「 Array#shuffle 」を使用する
COLUMN 「 sort_by { rand }」がなぜシャッフルになるか
COLUMN 「 sort { rand ( 3 )− 1 }」は間違った方法である
142 配列をスタックとして使う
ONEPOINT 配列をスタックとして使うには「 Array#push 」と「 Array#pop 」と「 Array#last 」を使用する
143 配列をキューとして使う
ONEPOINT 配列をキューとして使うには「 Array#push 」と「 Array#shift 」を使用する
144 多次元配列を扱う
ONEPOINT 多次元配列はネストした配列やハッシュで代用する
COLUMN Ruby では多次元配列は特に必要ない
145 ハッシュのデフォルト値を設定・取得する
ONEPOINT ハッシュの値が設定されていない場合はデフォルト値を使用する
146 ハッシュの要素を 1 つずつ処理する
ONEPOINT ハッシュの要素を 1 つずつ処理するには「 Hash#each 」を使用する
COLUMN 「 Hash#each 」と「 Hash#each_pair 」の微妙な違い
147 ハッシュがキー・値を持つかどうかをチェックする
ONEPOINT ハッシュがキーを持つかチェックするには「 Hash#has_key? 」を使用する
148 ハッシュから要素を取り除く
ONEPOINT ハッシュから要素を取り除くには「 Hash#delete 」や「 Hash#delete_if 」を使用する
COLUMN nil の落とし穴
149 ハッシュの値に対応するキーを求める
ONEPOINT ハッシュの値に対応するキーを求めるには「 Hash#key 」を使用する
COLUMN ハッシュの逆検索は非常に遅い
150 ハッシュのキーと値を反転する(逆写像)
ONEPOINT ハッシュのキーと値を反転するには「 Hash#invert 」を使用する
151 ハッシュのキー・値のみを集める
ONEPOINT ハッシュのすべてのキー・値を得るには「 Hash#keys 」「 Hash#values 」を使用する
152 ハッシュを混合する
ONEPOINT ハッシュを混ぜ合わせるには「 Hash#merge 」か「 Hash#update 」を使用する
153 要素の初期化を簡潔に記述する
ONEPOINT メソッドチェーンの途中で値を覗き見するには「 Object#tap 」を使用する
COLUMN 「 Object#tap 」の定義
154 オブジェクトをハッシュのキーとして扱えるようにする
ONEPOINT ハッシュのキーとして使えるようにするには「 Object#eql? 」と「 Object#hash 」を再定義する
COLUMN キーに破壊的メソッドを適用すると値を取り出せなくなる
CHAPTER 07 コレクション一般を扱うモジュール Enumerable
155 Enumerable は配列を一般化したもの
156 各要素に対してブロックの評価結果の配列を作る(写像)
ONEPOINT 各要素にブロックを適用した配列を作成するには「 Enumerable#collect 」か「 Enumerable#map 」を使用する
157 すべての要素の真偽をチェックする
ONEPOINT 全要素・ 1 つ以上の要素が条件を満たすか調査するには「 Enumerable#all? 」と「 Enumerable#any? 」を使用する
COLUMN 「 Enumerable#all? 」の真逆は「 Enumerable#none? 」
COLUMN 1 つの要素のみが条件を満たすか調査するには「 Enumerable#one? 」を使用する
158 要素とインデックスを使って繰り返す
ONEPOINT 要素にインデックスを付けて繰り返すには「 Enumerable#each_with_index 」を使用する
COLUMN 他の配列との並行処理を行うには「 Enumerable#zip 」を使用する
159 指定した要素が含まれるかを調べる
ONEPOINT 指定した要素が含まれるか調べるには「 Enumerable#include? 」を使用する
COLUMN 「 case 」式で配列展開を使うこともできる
160 パターンにマッチする要素を求める
ONEPOINT 要素のパターンマッチを行うには「 Enumerable#grep 」を使用する
COLUMN Ruby 1.9 では文字列に grep できない
161 合計を計算する(畳み込み)
ONEPOINT 要素の合計を計算するには「 Enumerable#inject 」を使用する
COLUMN 畳み込みについて
COLUMN 「 inject 」応用編
COLUMN クラス名を表す文字列から実際のクラスオブジェクトを取り出す
162 最小値・最大値を求める
ONEPOINT 要素の最小値・最大値を求めるには「 Enumerable#min 」「 Enumerable#max 」を使用する
163 条件を満たす最初の要素を求める
ONEPOINT 条件を満たす最初の要素を求めるには「 Enumerable#find 」を使用する
164 条件を満たす要素をすべて求める
ONEPOINT 条件を満たす要素をすべて求めるには「 Enumerable#select 」を使用する
COLUMN 条件を満たさないところで打ち切るには「 Enumerable#take_while 」を使用する
165 条件を満たさない要素をすべて求める
ONEPOINT 条件を満たさない要素を求めるには「 Enumerable#reject 」を使用する
COLUMN 条件を満たさないところで打ち切るには「 Enumerable#drop_while 」を使用する
166 条件を満たす要素と満たさない要素に分ける
ONEPOINT 条件を満たす要素と満たさない要素を同時に求めるには「 Enumerable#partition 」を使用する
COLUMN ブロックの値によって分けるには「 Set#classify 」や「 Enumerable#group_by 」を使用する
167 条件を満たす要素を数える
ONEPOINT 条件を満たす要素を数えるには「 Enumerable#count 」を使用する
COLUMN Enumerator の要素数(行数・文字数)を求める
168 ソートする
ONEPOINT 要素のソートには「 Enumerable#sort 」や「 Enumerable#sort_by 」を使用する
COLUMN 降順のソートは「 sort.reverse 」を使用する
COLUMN 「 sort_by 」のカラクリ
169 縦横計算をする(配列の並行処理)
ONEPOINT Enumerable を並行処理するには「 Enumerable#zip 」を使用する
170 各要素を N 個ずつ繰り返す
ONEPOINT 各要素を N 個ずつ繰り返すには「 Enumerable#each_slice 」を使用する
COLUMN 重複ありで N 個一組にして繰り返すには「 Enumerable#each_cons 」を使用する
171 各要素をローテーションする
ONEPOINT 要素をローテーションするには「 Enumerable#cycle 」を使用する
172 each 以外のメソッドに Enumerable モジュールを適用する
ONEPOINT 繰り返しメソッドでブロックを省くと「 each 」メソッド以外で Enumerable モジュールが使用できる
COLUMN 繰り返しメソッドを with_index 化する
COLUMN 繰り返しメソッドを Enumerator 化するおまじない
CHAPTER 08 数値と範囲
173 数値リテラルについて
COLUMN 偶数・奇数判定は「 Integer#even? 」「 Integer#odd? 」を使用する
COLUMN 文字リテラルはバージョンによって値が異なる
COLUMN 整数の 16 進、 8 進、 2 進表記を得るには
174 数学関数の値を求める
ONEPOINT 数学関数を使うには Math モジュールを使用する
175 乱数を得る
ONEPOINT 疑似乱数を得るには「 Kernel#rand 」を使用する
COLUMN 乱数の種を設定する
176 範囲オブジェクトを作成する
ONEPOINT 範囲オブジェクトを作成するには「..」「...」リテラルを使用する
COLUMN 「<=>」メソッドを持っていれば始点・終点になれる
177 範囲の間の繰り返しを行う
ONEPOINT M から N までの繰り返すには「 Integer#upto 」や「 Range#each 」を使用する
178 範囲に含まれているかどうかをチェックする
ONEPOINT 範囲に含まれているかチェックするには「 Comparable#between? 」や「 Range#include? 」を使用する
COLUMN Ruby 1.9 における「 Range#include? 」の仕様変更
179 数字を 3 桁ずつカンマで区切る
ONEPOINT 数字を 3 桁ずつカンマで区切るには文字列化してから「 String#gsub 」を使用する
COLUMN 登場する正規表現の解説
180 行列・ベクトルを計算する
ONEPOINT 行列を作るには「 Matrix.[]」を、ベクトルを作るには「 Vector.[]」を使用する
COLUMN 数値の高速な行列計算をするには
181 複素数を計算する
ONEPOINT 複素数を作成するには「 Kernel#Complex 」「 Complex.polar 」を使用する
182 有理数を計算する
ONEPOINT 有理数を作成するには「 Kernel#Rational 」を使用する
183 任意精度浮動小数点数で浮動小数点数の誤差をなくす
ONEPOINT 10 進小数を使用するには「 Kernel#BigDecimal 」を使用する
COLUMN 浮動小数点数の誤差の累積について
COLUMN 10 進小数の 2 進数表記
184 数値計算用多次元配列で高速な数値計算をする
ONEPOINT 数値計算専用の配列を作成するには「 NArray.[]」を使用する
COLUMN NArray の要素の取り出し方は配列とは逆
CHAPTER 09 時刻と日付
185 現在時刻・日付を求める
ONEPOINT 現在時刻・日付を得るには「 Time.now 」や「 Date.today 」を使用する
COLUMN 特定の時刻・日付を得るには「 Time.local 」や「 Date.new 」を使用する
186 時刻・日付から情報を抜き出す
ONEPOINT Time ・ Date から情報を抜き出すには時間の単位名のメソッドを使用する
COLUMN 他の情報を抜き出すには
187 時刻・日付をフォーマットする
ONEPOINT Time ・ Date をフォーマットするには「 strftime 」メソッドを使用する
COLUMN 曜日の名称などを日本語にする
188 文字列から時刻・日付に変換する
ONEPOINT 文字列を解析して Time ・ Date に変換するには「 parse 」クラスメソッドを使用する
189 時刻・日付を加減算する
ONEPOINT 時刻・日付の計算をするには加減算を使用する
CHAPTER 10 入出力とファイルの扱い
190 ファイル操作を始めるには
COLUMN ファイルのパーミッションを指定する
191 Ruby 1.9 の IO エンコーディングについて
COLUMN 「 default_internal 」について
COLUMN default_external と default_internal を設定するコマンドラインオプション
COLUMN default_external と default_internal をスクリプト内で設定する
192 ファイル全体を読み込む
ONEPOINT ファイル全体を読み込むには「 IO#read 」や「 IO.read 」を使用する
COLUMN 「 IO#read 」「 IO.read 」の「 optional 」引数
193 ファイルを 1 行ずつ読み込む
ONEPOINT ファイルから 1 行ずつ読み込むには「 IO#gets 」や「 IO#each_line 」を使用する
COLUMN 「 IO#gets 」や「 IO#readlines 」で改行以外の区切りを指定する
194 ファイルを 1 バイトずつ読み込む
ONEPOINT ファイルから 1 バイトずつ読み込むには「 IO#each_byte 」を使用する
195 ファイルに書き込む
ONEPOINT ファイルに書き込むには「 IO#<<」などを使用する
COLUMN 「 IO#<<」とポリモーフィズム
COLUMN 「$stdout 」と「$stderr 」に IO 以外を指定することも可能
196 ファイルの情報を得る
ONEPOINT ファイルの情報を得るには「 File.stat 」を使用する
COLUMN シンボリックリンクそのものの情報を得るには「 File.lstat 」を使用する
197 ファイルのコピー・移動・削除などを行う
ONEPOINT ファイルをコピー・移動・削除するには FileUtils モジュールを使用する
198 ファイルポインタを移動する
ONEPOINT ファイルポインタを移動するには「 IO#pos=」などを使用する
199 一時ファイルを作成する
ONEPOINT 一時ファイルを作成するには「 Tempfile.open 」を使用する
COLUMN 一時ディレクトリを得るには「 Dir.tmpdir 」を使用する
COLUMN ファイル名を指定して一時ファイルを作成するには「 Kernel#open 」と「 Kernel#at_exit 」を使用する
200 gzip 圧縮のファイルを読み書きする
ONEPOINT gzip 圧縮のファイルを読み書きするには Zlib::GzipReader と Zlib::GzipWriter を使用する
201 ファイル名を操作する
ONEPOINT パス名を操作するには File の各種クラスメソッドを使用する
202 ワイルドカードでファイル名をパターンマッチする
COLUMN 隠しファイルについて
COLUMN 「 File.fnmatch 」のフラグについて
COLUMN 「 Dir.[]」と「 Dir.glob 」について
203 ファイル名をオブジェクト指向で扱う
204 文字列を IO オブジェクトのように扱う
ONEPOINT 文字列を IO オブジェクトのように扱うには StringIO クラスを使用する
COLUMN オブジェクトが IO であるかを判定してはいけない
205 ログファイルに書き込む
ONEPOINT ログファイルに書き込むには Logger を使用する
COLUMN ログファイルを取り換える
COLUMN tail シェルコマンドでログを閲覧する
COLUMN 特定の重要度のログのみを取り出す
CHAPTER 11 システムとのインターフェース
206 コマンドとしてもライブラリとしても使えるようにするイディオムについて
207 他の文字コードで記述されたスクリプトを実行する
208 コマンドライン引数を読む
ONEPOINT コマンドライン引数を得るには「 ARGV 」にアクセスする
COLUMN オプション変数
209 入力ファイルまたは標準入力を読む
ONEPOINT フィルタの入力を扱うには「 ARGF 」を使用する
COLUMN 「 ARGF 」は実は File オブジェクトではない
210 コマンドラインオプションを処理する
ONEPOINT 受け付けるオプション引数を制限する
COLUMN オプション引数の変換
COLUMN カジュアルなオプション解析をするには「 OptionParser.getopts 」を使用する
211 環境変数を読み書きする
ONEPOINT 環境変数を読み書きするには ENV にアクセスする
COLUMN 環境変数は基本的に汚染されている
212 Ruby のバージョンを知る
ONEPOINT Ruby のバージョンを得るには「 RUBY_VERSION 」にアクセスする
213 OS の種類を判別する
ONEPOINT 動作している OS の種類を知るには「 RUBY_PLATFORM 」にアクセスする
COLUMN より細かい判別には Platform モジュールを使用する
214 外部コマンドを実行する
ONEPOINT 外部コマンドを実行するには「 Kernel#system 」を使用する
COLUMN Process::Status オブジェクトについて
215 子プロセスの出力を文字列で得る
ONEPOINT 子プロセスの出力を得るには「`コマンド`」を使用する
216 文字列を標準入力として子プロセスの出力を文字列で得る
ONEPOINT 文字列をフィルタコマンドにかけた結果を得るには「 String#external_filter 」を定義して使う
217 子プロセスとのパイプラインを確立する
ONEPOINT 子プロセスとのパイプを作成するには「 IO.popen 」を使用する
COLUMN 入出力バッファリングについて
218 シグナルを捕捉する
ONEPOINT シグナルを捕捉するには「 Signal.trap 」を使用する
COLUMN シグナルによる割り込みから守る
219 デーモンを作成する
ONEPOINT Unix 系 OS でデーモンを作成するには WEBrick::Daemon.start を使用する
220 ワンライナーを極める
COLUMN zsh でシングルクォート文字列の中にシングルクォートを入れる方法
221 ワンライナーでフィルタを記述する
COLUMN 「-i 」でファイルを書き換える
COLUMN Perl には負けてしまう
222 ワンライナーでレコードセパレータを変更する
CHAPTER 12 ネットワーク
223 URL からホスト名、パスなどを抜き出す
ONEPOINT URL からホスト名などを抜き出すには URI クラスを使用する
COLUMN URI とは
224 Web サーバを立ち上げる
225 URL にある内容を読み込む
ONEPOINT URL の内容を読み込むには「 open-uri 」ライブラリを使用する
226 フォームを送信する
ONEPOINT フォームを送信するには HTTPClient クラスを使用する
227 ファイルをアップロードする
ONEPOINT CGI スクリプトでファイルをアップロードするには「 HTTPClient#post_content 」で File オブジェクトを指定する
COLUMN アップロード CGI スクリプトの作成方法
228 Web ブラウザをシミュレートする
COLUMN 古い Mechanize 用のスクリプトは書き換えが必要
229 メールを読み書きする
ONEPOINT メールを読み書きするには tmail を使用する
COLUMN 添付ファイル付きのメールを作成する
COLUMN 日本語メール送る際のおまじないヘッダの詳細
230 メールを送信する
ONEPOINT メールを送信するには Net::SMTP を使用する
COLUMN 単純なメールならば Net::SMTP だけで充分
231 ソケットを読み書きする
ONEPOINT ソケットは IO のサブクラス
232 TCP サーバ・クライアントを作成する
ONEPOINT TCP サーバを作成するには無限ループの中でスレッドを作成して「 TCPServer#accept 」を渡す
233 CGI スクリプトを作成する
ONEPOINT CGI スクリプトを作成するには CGI.new を使用する
COLUMN 同じコントロール名が複数ある場合は「 CGI#params 」を使用する
COLUMN スクリプトの文字コードは UTF-8 推奨
COLUMN CGI スクリプトを Ruby 1.9 へ移行するには
CHAPTER 13 データベースの扱い
234 オブジェクトをディスクに保存・復元する
ONEPOINT オブジェクトをディスクに保存・復元するには「 Marshal.dump 」「 Marshal.load 」を使用する
COLUMN extend されたオブジェクトは保存・復元できる
235 オブジェクトを人間が読める形式( YAML )で保存・復元する
ONEPOINT オブジェクトを YAML 化してディスクに保存・復元するには「 YAML.dump 」「 YAML.load 」を使用する
COLUMN 日本語を扱うには Ya2YAML を使用する
COLUMN 「 Kernel#p 」の YAML 版が「 Kernel#y 」
COLUMN PStore のインターフェイスで YAML を使う
COLUMN DBM のインターフェイスで YAML を使う
236 Ruby のオブジェクトをデータベース的に読み書きする
ONEPOINT Ruby のオブジェクトをデータベース的に扱うには PStore クラスを使用する
237 文字列ベースの簡易データベース( DBM )の読み書きをする
ONEPOINT 文字列データを永続化するには GDBM クラスを使用する
COLUMN GDBM.open の第 2 ・第 3 引数
238 MySQL データベースにアクセスする
239 PostgreSQL データベースにアクセスする
240 SQLite データベースにアクセスする
241 データベース統一インターフェイス( DBI )を使う
242 Ruby のみで記述されたデータベース「 KirbyBase 」を使う
COLUMN KirbyBase はテーブルごとにテキストファイルが作られる
CHAPTER 14 クラス・モジュール・オブジェクト
243 アクセサを使ってインスタンス変数をパブリックにする
ONEPOINT インスタンス変数を外部からアクセス可能にするには「 Module#attr_accessor 」などを使用する
COLUMN アクセサ経由でインスタンス変数にアクセスすることの利点
COLUMN 「 obj.getA ()」「 obj.setA ( a )」ではなくて「 obj.a 」「 obj.a = a 」が Ruby 流
244 デフォルト値付きのアクセサを定義する
ONEPOINT デフォルト値のアクセサを定義するには「 Module#attr_accessor_default 」を定義する
245 オブジェクトがメソッドを受け付けるかチェックする
ONEPOINT オブジェクトがメソッドを受け付けるかチェックするには「 Object#respond_to? 」を使用する
COLUMN プライベートメソッドを受け付けるかチェックする
246 メソッドの可視性を設定する
COLUMN private なメソッドを外部から強引に呼ぶ
COLUMN 見捨てられた protected
COLUMN 内部インターフェイスを共有する場合は private にして「 Object#__send__」で呼び出す
247 変数を遅延初期化する
ONEPOINT 変数が nil のときに初期値を与えるには「||=」演算子を使用する
COLUMN 「||=」は警告が出ないので安心
COLUMN 「||=」演算子を簡易 memoize として使う
248 複数のコンストラクタを定義する
ONEPOINT new 以外のコンストラクタを定義するにはクラスメソッド定義中に new を呼び出す
249 キーワード引数を使う
ONEPOINT 疑似キーワード引数を実現するにはメソッドの最後の引数にハッシュを指定する
COLUMN Ruby 1.9 で使える新しいハッシュリテラルを使う
COLUMN 疑似キーワード引数を一度にインスタンス変数に代入する
250 モジュール関数を定義する
ONEPOINT モジュール関数を定義するには「 module_function 」を指定する
COLUMN 「 extend self 」とするとすべてのメソッドをモジュール関数にできる
251 情報を集積するタイプのオブジェクトには構造体を使う
ONEPOINT 構造体を定義するには「 Struct.new 」を使用する
COLUMN ハッシュとの違い
COLUMN OpenStruct について
252 ハッシュのキーをアクセサにする
ONEPOINT ハッシュのキーをアクセサにするには構造体に変換する
253 メソッドを委譲する
ONEPOINT メソッドをインスタンス変数に委譲するには Forwardable モジュールを使用する
COLUMN 継承と委譲
254 未初期化のオブジェクトを作る
ONEPOINT 未初期化のオブジェクトを作成するには「 Class#allocate 」を使用する
COLUMN 「 Class#new 」を Ruby で記述すると
COLUMN 「 Class#allocate 」を使う前に設計の見直しを
255 オブジェクトを変更不可にする
ONEPOINT オブジェクトを変更不可にするには「 Object#freeze 」を使用する
COLUMN 自己代入は名札の張り替えである
256 キャッシュ付きのメソッドを定義する
ONEPOINT 計算結果をキャッシュするメソッドを作成するにはブロック付き「 Hash.new 」を使用する
COLUMN フィボナッチ数列に memoize が効果的な理由
257 オブジェクトに動的に特異メソッドを追加する
ONEPOINT オブジェクトに動的に特異メソッドを追加するには「 Object#extend 」を使用する
COLUMN 組み込みクラスに必要に応じてメソッドを追加するには
COLUMN オブジェクトの特異メソッド定義は extend を使用するべき
258 動的にメソッドを定義する
ONEPOINT 動的にメソッドを定義するには「 Module#define_method 」を使用する
259 動的にブロック付きメソッドを定義する
ONEPOINT 動的にブロック付きメソッドを定義するには「 Module#define_method 」でブロック引数を使用する
COLUMN Ruby 1.9 ではブロックに「 optional 」引数も持てる
260 動的に特異メソッドを定義する
ONEPOINT 動的に特異メソッドを定義するには特異クラス内で「 Module#define_method 」を使用する
COLUMN 特異クラスを開くのが面倒な理由
COLUMN 特異クラスを得るメソッド名が決まらない理由
261 動的にクラス・モジュールを定義する
ONEPOINT 動的にクラスを定義するには「 Class.new 」を使用する
262 メソッドを再定義する
ONEPOINT 元の定義を保持しつつメソッドを再定義するには「 Object#extend 」を使用する
COLUMN 「 once 」関数で保護しないとどうなるか
263 ブロックでクロージャー(無名関数)を作る
ONEPOINT 手続きオブジェクトは「 Proc.new 」「 Kernel#lambda 」「ブロック引数」で得られる
COLUMN 「 Proc.new 」と「 Kernel#lambda 」の違い
COLUMN クロージャーでデータを隠蔽する
COLUMN Ruby 1.9 での新しい文法
264 メソッドオブジェクトを得る
ONEPOINT メソッドをオブジェクトとして扱うには「 Object#method 」を使用する
COLUMN Method はメソッドの実体をコピーする
265 ブロックを他のメソッドに丸投げする
ONEPOINT ブロックを他のメソッドに丸投げするにはブロック引数を指定する
266 ブロックを簡潔に表現する
ONEPOINT 無引数メソッド呼び出しのみのブロックを簡潔に記述するにはブロック引数にシンボルを指定する
COLUMN 「 Symbol#to_proc 」の定義
267 抽象メソッドを定義する
ONEPOINT サブクラスで定義されるべきメソッドを宣言するには「 Module#abstract_method 」を定義して使う
268 文脈を変えてブロックを評価する
ONEPOINT 文脈を変えてコードを評価するには「 Object#instance_eval 」や「 Module#module_eval 」を使用する
COLUMN 「 Module#define_method 」とメソッド定義は同一ではない
269 文脈を変えて引数付きでブロックを評価する
ONEPOINT 「 Object#instance_eval 」にブロックパラメータを渡すには「 Object#instance_exec 」を使用する
COLUMN 「 Object#instance_exec 」の定義
COLUMN 「 Module#module_exec 」「 Module#class_exec 」は亜種
270 似たようなメソッドをまとめて定義する
ONEPOINT 似たようなメソッドをまとめて定義するには「 Module#def_each 」を定義する
271 文字列を Ruby の式として評価する
ONEPOINT 文字列を Ruby の式として評価するには「 Kernel#eval 」を使用する
COLUMN 複数行の文字列を評価する場合は
COLUMN ファイル名と行番号を設定しておくべき
272 名前を指定してメソッドを呼び出す
ONEPOINT 名前を指定してメソッドを呼び出すには「 Object#__send__」を使用する
COLUMN 呼び出すメソッドを「 case 」式で分岐する処理が出てきたら「 Object#__send__」を使うチャンス
273 名前を指定して定数の値を得る
ONEPOINT 名前を指定して定数の値を得るには「 Module#const_get 」を使用する
274 名前を指定してインスタンス変数を読み書きする
ONEPOINT オブジェクトのインスタンス変数を外から参照するには「 Object#instance_variable_get 」を使用する
COLUMN 長い名前のメソッドは要注意の意味
275 終了直前に実行する処理を記述する
ONEPOINT スクリプト終了直前に実行させるには「 Kernel#at_exit 」などを使用する
COLUMN リソース使用開始時に終了処理を記述する
276 大きいオブジェクトをコンパクトに表示する
ONEPOINT 大きいオブジェクトをコンパクトに表示するには不要なオブジェクトを短縮形にする
COLUMN UnboundMethod からメソッドを定義する
277 セキュリティチェックについて
278 リフレクションについて
279 使用可能なメソッド名をすべて得る
COLUMN 普通は「 Object#respond_to? 」を使用する
COLUMN 要素数が多い配列を省略して注釈する
280 変数のリストを得る
281 存在しないメソッド呼び出しをフックする
ONEPOINT 存在しないメソッドを呼び出した場合の動作を定義するには「 method_missing 」メソッドを定義する
CHAPTER 15 Ruby そのものを拡張する ActiveSupport
282 ActiveSupport の概要と構造について
283 オブジェクトが「空白」であるかどうかを調べる
ONEPOINT オブジェクトが空白であるか判定するには「 Object#blank? 」を使用する
284 DSL で容量計算をする
ONEPOINT 容量計算では単位名メソッドが使用できる
COLUMN SI 接頭辞と 2 進接頭辞
285 DSL で時刻計算をする
ONEPOINT 時刻・日付計算では単位名メソッドが使用できる
COLUMN 1 カ月、 1 年は何日?
286 クラス変数のアクセサを作る
ONEPOINT クラス変数のアクセサを作成するには「 Class#cattr_accessor 」などを使用する
287 出力を黙らせる
ONEPOINT 出力を黙らせるには「 Kernel#silence_stream 」を使用する
COLUMN 警告を黙らせる
COLUMN 特定の例外を無視する
288 アトミックな処理でファイルに書き込む
ONEPOINT アトミックな処理でファイルに書き込むには「 File.atomic_write 」を使用する
COLUMN アトミックとは
CHAPTER 16 マルチスレッドと分散 Ruby
289 スレッドで並行実行する
ONEPOINT Ruby で並行処理するには「 Thread.start 」を使用する
COLUMN 「 Thread.start 」の引数の必要性
COLUMN スレッドでの例外には注意
290 無限ループを実現する
ONEPOINT 無限ループするには「 Kernel#loop 」を使用する
COLUMN Ruby 1.8.7 以降では「 StopIteration 」例外で「 Kernel#loop 」から抜けることができる
291 他のスレッドの実行終了を待つ
ONEPOINT 他のスレッドと待ち合わせをするには「 Thread#join 」を使用する
COLUMN 「 Thread#join 」と例外
COLUMN スレッドのブロックが返した値を知るには「 Thread#value 」を使用する
COLUMN タイムアウトの設定
292 スレッドローカル変数を扱う
ONEPOINT スレッド固有のデータを設定するには「 Thread#[]=」を使用する
293 ブロックの実行にタイムアウトを設定する
ONEPOINT タイムアウトを設定するには「 Timeout.timeout 」モジュール関数を使用する
COLUMN timeout.rb のソースコードを読んでみる
294 キューで順番に処理していく
ONEPOINT スレッド間通信のキューを作成するには Queue クラスを使用する
295 スレッドを排他制御する
ONEPOINT 排他制御するには「 Mutex#synchronize 」や「 Monitor#synchronize 」を使用する
COLUMN Monitor は Mutex の高機能版
COLUMN 「 Thread.stop 」はカレントスレッドを停止する
296 他の Ruby スクリプトと通信する
ONEPOINT 他の Ruby スクリプトと dRuby で通信するには「 DRb.start_service 」と「 DRbObject.new_with_uri 」を対で使用する
COLUMN dRuby サーバを動かし続ける本来の方法
COLUMN 相手の知らないオブジェクトを渡すとどうなるか
COLUMN Unix 系 OS で他のユーザに使わせないようにするには drbunix を使用する
297 dRuby でオブジェクトを遠隔操作する
ONEPOINT 相手の知らないオブジェクトを遠隔操作するには DRbUndumped をインクルードする
COLUMN 「 Marshal.dump 」を実行できないオブジェクトは参照渡しになる
COLUMN 巨大なオブジェクトも参照渡しがよい
CHAPTER 17 ドメイン特化言語(DSL)の構築
298 ドメイン特化言語とは
299 コンストラクタにブロックを使って DSL を構築する
ONEPOINT コンストラクタにブロックを指定するには「 initialize 」で「 Object#instance_eval 」を使用する
300 メソッド呼び出しを英語として自然に読めるようにする
ONEPOINT メソッド呼び出しを英語として自然に読めるようにするには self を返すメソッドを定義する
301 メソッド呼び出しで英語を記述する
ONEPOINT メソッド呼び出しで英語を記述するには Recorder クラスを定義する
302 物理単位を表す DSL を定義する
303 型付き構造体を表す DSL を定義する
CHAPTER 18 テスト・デバッグ
304 自動テストの書き方について
COLUMN DRY 原則とユニットテスト
COLUMN Ruby 1.9 では miniunit が代わりに標準添付になる
305 モジュールメソッドのテストを書く
ONEPOINT モジュールメソッドのテストを書くにはモジュールをインクルードする
306 スタブを作成する
ONEPOINT メソッドの返り値を偽装するにはスタブを使用する
307 モックを作成する
ONEPOINT メソッドの呼び出し方をテストするにはモックを使用する
COLUMN モックは厳格化したスタブ
COLUMN モックは検証コードを含む
308 RSpec で実行可能な仕様書を作成する
ONEPOINT より可読性の高いテストを書くには RSpec を使用する
COLUMN 英語読みへのこだわり
COLUMN 日本語の仕様書を作成する
309 デバッガの使い方について
COLUMN デバッガコマンドのリストを得る
310 ベンチマークを測定する
ONEPOINT ブロックで囲まれたコードのベンチマークを測定するには「 Benchmark.bmbm 」を使用する
COLUMN プロセス時間と実時間の違い
311 ボトルネックを探す
312 テストの網羅具合を調査する
COLUMN テストスクリプトが複数ある場合は「--aggregate 」オプションを使用する
COLUMN rcov はコード解析ツールでもある
313 ライブラリのファイル名を得る
ONEPOINT ライブラリのファイル名を得るには「 Kernel#which_library 」を使用する
索引
購入する
livedoor
Ruby逆引きハンドブックの通販/るびきち - 紙の本:honto本の通販ストア
http://store.shopping.yahoo.co.jp/7andy/32254127.html
http://item.rakuten.co.jp/book/6073651/
Ruby逆引きハンドブック / るびきち【著】 - 紀伊國屋書店ウェブストア
http://www.owlbooks.jp/detail.jsp?ID=0110110054
追記[2009/07/08]
すみません、誤植です。後程正誤表が更新されるはずです。指摘ありがとうございます。
