http://rubikitch.com/に移転しました このページをアンテナに追加 RSSフィード

2009-05-25

[] 『Ruby逆引きハンドブック』出版

http://www.c-r.com/cv_rubyg.jpg

asin:4863540221

書籍Ruby逆引きハンドブック』を出版しました。 10 年にわたる Ruby の経験を一冊の本にまとめました。 この本は、「 Ruby で○○するにはどう書けばいいのか」という問いに答える 逆引き本ですが、それだけにとどまらず、陥りやすい落とし穴、理解しづらい部分、 応用例などもしっかり解説しました。 Ruby 初心者〜上級者、他言語から Ruby を学ぶ人すべてにおすすめです。

この本の持ち味は類書をはるかに凌ぐ圧倒的な情報量です。 セクションとコラムは合わせて 588 項目にわたり、総ページ数 768 ページです。 Ruby プログラミングの際には手元に置いて、辞書として繰り返し使ってください。 Ruby 1.8.6 、 Ruby 1.8.7Ruby 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 」を使用する

索引

購入する

no title

livedoor

Ruby逆引きハンドブックの通販/るびきち - 紙の本:honto本の通販ストア

Yahoo!ショッピング - Tポイントが貯まる!使える!ネット通販

no title

Ruby逆引きハンドブック / るびきち【著】 - 紀伊國屋書店ウェブストア

http://www.owlbooks.jp/detail.jsp?ID=0110110054

追記[2009/07/08]

すみません、誤植です。後程正誤表が更新されるはずです。指摘ありがとうございます。

佐藤佐藤 2009/07/07 09:05 第2刷において
SECTION-054、P.188
"\#{none}" # 「#@{none}」

ここで、「@」は出てこないような気がしますがいかがでしょうか?

前川前川 2009/10/02 18:02 1.8.7p174で動作するプログラムが、なぜ、1.9.1p129や、1.9.2preview1では、エラーとるのでしょうか?
サンプルソースは、以下です。
本体;;
#!D:/Ruby/bin/ruby.exe

#require 'kconv'
#require 'nkf'
require 'D:/Apache2.2/htdocs/qmsPotalShip/myclass' #MyClass 変換メソッド等

# 試験データ
# 文字→HEXへ変換するためのデータ

data1 = '船海システムG' # 26バイトの '91448a43835683588365838047'に変換する
data2 = 'TEST' # 8バイトの '54455354'に変換する
data3 ='船'
data4 ='kaisya会社123重厚重工業・・あaア  /\¥'
data5 ='kaisya会社123重厚重工業あaイ  '
data6 ='会社'
data7 = 'C:/Apache2.2/htdocs/qmsPotalShip/confirmation/sjisコード表
textConversion用.html'
data8 = "12_FBSYS_不具合情報入力-所内工事(速報) 23船証第三確認者の確認画面
03:コメント記入前:船証.png"
puts '文字からHEXへ変換'

puts data1 + " → " + MyClassText.text_to_hex(data1)
puts data2 + " → " + MyClassText.text_to_hex(data2)
puts data3 + " → " + MyClassText.text_to_hex(data3)
puts data4 + " → " + MyClassText.text_to_hex(data4)
puts data5 + " → " + MyClassText.text_to_hex(data5)
〜以下略


MyClassText.text_to_hex(data?)は、以下

#!D:/Ruby/bin/ruby.exe -Ks

print "Content-Type: text/html\n\n"

require 'kconv' # Stringの日本語関連メソッド
require 'nkf' # 漢字関係 Network Kanji code conversion Filter version 1.7
require 'cgi' # CGI プログラムの支援ライブラリ
require 'mysql' #MySQLライブラリ
#require "rubygems" # ライブラリ管理ツール
#require "dbi"


CODES = {
NKF::JIS => "JIS",
NKF::EUC => "EUC",
NKF::SJIS => "SJIS",
NKF::BINARY => "BINARY",
NKF::UNKNOWN => "UNKNOWN(ASCII)",
}



class MyClassText

# 文字を16進数の文字コードに変換する
def self.text_to_hex(data)
data.unpack('H*')[0]
end

# 16進数の文字コードを文字に変換する
def self.hex_to_text(data)
data.gsub(/../){|c| c.hex.chr}
end

#string内の特定文字列を、指定した文字で置き換える。
#戻り値;置き換えた文字列
# 該当する文字列が存在しない場合は、元の文字列を返す
def self.string_change(data,org,change)
data.gsub( org, change )
end
end #MyClassText 終了
もちろん、2行目には、# -*- coding: windows-31j -*- を入れました。
また、1行目の-Ksは、1.9系の場合は、削除しました。
ぜひ、アドバイスをお願いします。

5.55.5 2009/10/28 14:16 p. 92 で __method__ が擬似変数になっていますが,Kernel のモジュール関数であるようです。

kachickkachick 2011/12/31 00:40 第一刷P674のObject#class_valuesは、Module#class_variablesでしょうか?
まだ正誤表へ記載が無いように思われたので、念のため

rubikitchrubikitch 2012/01/02 23:53 >>kachick縺輔s, 5.5縺輔s
おお、御指摘ありがとうございます。
さっそく正誤に書き加えておきます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証