| 第1部 | Rubyをはじめよう |
| 第1章 | はじめてのRuby | 3 |
| 1.1 | Rubyを動かす | 4 |
| 1.1.1 | Windowsの場合 | 5 |
| 1.1.2 | Unixの場合 | 6 |
| 1.1.3 | MacOS Xの場合 | 7 |
| 1.1.4 | 動作確認 | 8 |
| 1.2 | プログラムの解説 | 8 |
| 1.2.1 | オブジェクト | 8 |
| 1.2.2 | メソッド | 9 |
| 1.3 | 文字列 | 9 |
| 1.3.1 | 改行文字と「\」 | 9 |
| 1.3.2 | 「''」と「""」 | 11 |
| 1.4 | メソッドの呼び出し | 12 |
| 1.5 | putsメソッド | 13 |
| 1.6 | pメソッド | 13 |
| 1.7 | 日本語の表示 | 15 |
| 1.8 | 数値の表示と計算 | 16 |
| 1.8.1 | 数値の表示 | 16 |
| 1.8.2 | 四則演算 | 17 |
| 1.8.3 | 数学的な関数 | 18 |
| 1.9 | 変数 | 19 |
| 1.10 | コメントを書く | 21 |
| 1.11 | 制御構造 | 22 |
| 1.11.1 | 制御構造の分類 | 22 |
| 1.12 | 条件判断:if〜then〜end | 23 |
| 1.13 | 繰り返し | 25 |
| 1.13.1 | while文 | 25 |
| 1.13.2 | timesメソッド | 26 |
| 1.14 | メソッドの作成 | 27 |
| 1.15 | 別のファイルを取り込む | 28 |
| 第2章 | 便利なオブジェクト | 31 |
| 2.1 | 配列(Array) | 32 |
| 2.1.1 | 配列を作る | 32 |
| 2.1.2 | 配列からオブジェクトを取り出す | 33 |
| 2.1.3 | 配列にオブジェクトを格納する | 35 |
| 2.1.4 | 配列の中身 | 35 |
| 2.1.5 | 配列と大きさ | 36 |
| 2.1.6 | 配列と繰り返し | 36 |
| 2.2 | ハッシュ(Hash) | 38 |
| 2.2.1 | ハッシュを作る | 38 |
| 2.2.2 | ハッシュからオブジェクトを取り出す | 39 |
| 2.2.3 | ハッシュの繰り返し | 39 |
| 2.3 | 正規表現 | 42 |
| 2.3.1 | パターンマッチと正規表現 | 42 |
| 第3章 | コマンドを作ろう | 47 |
| 3.1 | コマンドラインからのデータの入力 | 47 |
| 3.2 | ファイルからの読み込み | 49 |
| 3.2.1 | ファイルからテキストデータを読み込んで表示する | 49 |
| 3.2.2 | ファイルからテキストデータを1行ずつ読み込んで表示する | 51 |
| 3.2.3 | ファイルの中から特定のパターンの行のみを選んで出力する | 52 |
| 第2部 | 基礎を学ぼう |
| 第4章 | オブジェクトと変数・定数 | 59 |
| 4.1 | オブジェクト | 59 |
| 4.2 | クラス | 60 |
| 4.3 | 変数 | 61 |
| 4.4 | 定数 | 64 |
| 4.5 | 予約語 | 64 |
| 第5章 | 条件判断 | 73 |
| 5.1 | 条件判断とは | 73 |
| 5.2 | Rubyでの条件 | 74 |
| 5.2.1 | 条件と真偽値 | 75 |
| 5.2.2 | 論理演算子 | 76 |
| 5.3 | if文 | 77 |
| 5.4 | unless文 | 78 |
| 5.5 | case文 | 80 |
| 5.6 | if修飾子とunless修飾子 | 82 |
| 5.7 | まとめ | 84 |
| 第6章 | 繰り返し | 87 |
| 6.1 | 繰り返しの基本 | 87 |
| 6.2 | 繰り返しで気をつけること | 88 |
| 6.3 | 繰り返しの実現方法 | 88 |
| 6.4 | timesメソッド | 89 |
| 6.5 | for文 | 91 |
| 6.6 | 一般的なfor文 | 93 |
| 6.7 | while文 | 94 |
| 6.8 | until文 | 97 |
| 6.9 | eachメソッド | 98 |
| 6.10 | loopメソッド | 100 |
| 6.11 | 繰り返しの制御 | 100 |
| 6.11.1 | break | 102 |
| 6.11.2 | next | 104 |
| 6.11.3 | redo | 106 |
| 6.12 | まとめ | 107 |
| 第7章 | メソッド | 109 |
| 7.1 | メソッド呼び出し | 109 |
| 7.2 | メソッドの分類 | 110 |
| 7.2.1 | インスタンスメソッド | 110 |
| 7.2.2 | クラスメソッド | 111 |
| 7.2.3 | 関数的メソッド | 112 |
| 7.3 | メソッドの定義 | 112 |
| 7.3.1 | メソッドの返り値 | 114 |
| 第8章 | クラスとモジュール | 117 |
| 8.1 | クラスとは | 118 |
| 8.1.1 | クラスとインスタンス | 118 |
| 8.1.2 | 継承 | 119 |
| 8.2 | クラスを作る | 122 |
| 8.2.1 | class文 | 122 |
| 8.2.2 | initializeメソッド | 123 |
| 8.2.3 | インスタンス変数とインスタンスメソッド | 123 |
| 8.2.4 | アクセスメソッド | 125 |
| 8.2.5 | クラスメソッド | 126 |
| 8.2.6 | 定数 | 128 |
| 8.2.7 | クラス変数 | 129 |
| 8.2.8 | クラスを拡張する | 130 |
| 8.2.9 | 継承する | 130 |
| 8.2.10 | メソッドの呼び出しを制限する | 132 |
| 8.3 | オブジェクト指向とは | 135 |
| 8.3.1 | データと処理 | 135 |
| 8.3.2 | 「データと処理」の問題点 | 136 |
| 8.3.3 | オブジェクト | 138 |
| 8.3.4 | オブジェクト指向の特徴 | 141 |
| 8.3.5 | ダックタイピング | 142 |
| 8.4 | モジュールとは | 144 |
| 8.4.1 | モジュールの使い方 | 144 |
| 8.5 | モジュールを作る | 146 |
| 8.5.1 | 定数 | 147 |
| 8.5.2 | メソッドの定義 | 147 |
| 第9章 | エラー処理と例外 | 149 |
| 9.1 | エラー処理について | 149 |
| 9.2 | 例外処理 | 151 |
| 9.3 | 例外処理の書き方 | 152 |
| 9.4 | 後処理 | 156 |
| 9.5 | やりなおし | 157 |
| 9.6 | rescue修飾子 | 157 |
| 9.7 | 例外処理の構文の補足 | 158 |
| 9.8 | 補足する例外を指定する | 159 |
| 9.9 | 例外クラス | 160 |
| 9.10 | 例外を発生させる | 161 |
| 9.11 | catchとthrow | 162 |
| 第3部 | クラスを使おう |
| 第10章 | 数値(Numeric)クラス | 167 |
| 10.1 | Numericのクラス構成 | 168 |
| 10.2 | 数値のリテラル | 169 |
| 10.3 | 算術演算 | 170 |
| 10.3.1 | 割り算 | 171 |
| 10.3.2 | Mathモジュール | 172 |
| 10.4 | 数値型の変換 | 173 |
| 10.5 | ビット演算 | 174 |
| 10.6 | 数えあげ | 178 |
| 練習問題 | 180 |
| 第11章 | 配列(Array)クラス | 181 |
| 11.1 | 配列の復習 | 182 |
| 11.2 | 配列の作り方 | 183 |
| 11.2.1 | Array.newを使う | 183 |
| 11.2.2 | %wを使う | 183 |
| 11.2.3 | to_aメソッドを使う | 184 |
| 11.2.4 | 文字列のsplitメソッドを使う | 184 |
| 11.3 | インデックスの使い方 | 185 |
| 11.3.1 | 要素を取り出す | 185 |
| 11.3.2 | 要素を置き換える | 188 |
| 11.3.3 | 要素を挿入する | 189 |
| 11.3.4 | 複数のインデックスから配列を作る | 190 |
| 11.4 | インデックスを使わない配列の操作 | 191 |
| 11.5 | 集合としての配列 | 191 |
| 11.5.1 | 「|」と「+」の違い | 193 |
| 11.6 | 「列」としての配列 | 194 |
| 11.7 | 配列の主なメソッド | 197 |
| 11.7.1 | 配列に要素を加える | 197 |
| 11.7.2 | 配列から要素を取り除く | 199 |
| 11.7.3 | 配列の要素を置き換える | 201 |
| 11.8 | 配列とイテレータ | 203 |
| 11.9 | 配列内の各要素を処理する | 204 |
| 11.9.1 | 繰り返しとインデックスを使う | 204 |
| 11.9.2 | eachメソッドで要素を1つずつ得る | 205 |
| 11.9.3 | 破壊的なメソッドで繰り返しを行う | 206 |
| 11.9.4 | その他のイテレータを使う | 206 |
| 11.9.5 | 専用のイテレータを作る | 206 |
| 11.10 | 配列の要素 | 206 |
| 11.10.1 | 例:簡単な行列を使う | 207 |
| 11.10.2 | 初期化に注意 | 207 |
| 11.11 | 複数の値に並行してアクセスする | 209 |
| 練習問題 | 211 |
| 第12章 | 文字列(String)クラス | 213 |
| 12.1 | 文字列を作る | 214 |
| 12.1.1 | %Q,%qを使う | 214 |
| 12.1.2 | ヒアドキュメントを使う | 215 |
| 12.1.3 | sprintfメソッドを使う | 216 |
| 12.2 | 文字列の長さを得る | 219 |
| 12.3 | 文字列を分割する | 220 |
| 12.4 | 文字列をつなげる | 222 |
| 12.5 | 文字列のインデックス | 224 |
| 12.6 | 文字列を比較する | 225 |
| 12.6.1 | 文字列の大小比較 | 225 |
| 12.7 | 改行文字の扱い方 | 228 |
| 12.8 | 文字列の検索と置換 | 229 |
| 12.8.1 | 文字列の検索 | 229 |
| 12.8.2 | 文字列の置換 | 231 |
| 12.9 | 文字列と配列で共通するメソッド | 231 |
| 12.9.1 | インデックス操作に関するメソッド | 232 |
| 12.9.2 | Enumerableモジュール関連のメソッド | 232 |
| 12.9.3 | 連結や逆順に関するメソッド | 233 |
| 12.10 | その他のメソッド | 234 |
| 練習問題 | 239 |
| 第13章 | ハッシュ(Hash)クラス | 241 |
| 13.1 | ハッシュの復習 | 242 |
| 13.2 | ハッシュの作り方 | 243 |
| 13.2.1 | {}を使う | 243 |
| 13.2.2 | Hash.newを使う | 243 |
| 13.3 | 値を取り出す・設定する | 244 |
| 13.3.1 | キーや値をまとめて取り出す | 245 |
| 13.3.2 | ハッシュのデフォルト値 | 246 |
| 13.4 | あるオブジェクトをキーや値として持っているかどうか調べる | 247 |
| 13.5 | ハッシュの大きさを調べる | 248 |
| 13.6 | キーと値を削除する | 249 |
| 13.6 | ハッシュを初期化する | 250 |
| 13.6.1 | 2つのキーがあるハッシュを扱う | 251 |
| 13.7 | 応用例:単語数を数える | 252 |
| 練習問題 | 255 |
| 第14章 | 正規表現(Regexp)クラス | 257 |
| 14.1 | 正規表現について | 258 |
| 14.1.1 | 正規表現の書き方と使い方 | 258 |
| 14.1.2 | 正規表現オブジェクトの作り方 | 258 |
| 14.2 | 正規表現のパターンとマッチング | 259 |
| 14.2.1 | 通常の文字によるマッチング | 260 |
| 14.2.2 | 行頭と行末とのマッチング | 260 |
| 14.2.3 | マッチさせたい文字を範囲で指定する | 262 |
| 14.2.4 | 任意の文字とのマッチング | 263 |
| 14.2.5 | バックスラッシュを使ったパターン | 264 |
| 14.2.6 | 繰り返し | 266 |
| 14.2.7 | 最短マッチ | 268 |
| 14.2.8 | 「()」と繰り返し | 268 |
| 14.2.9 | 選択 | 269 |
| 14.3 | quoteメソッドを使った正規表現 | 269 |
| 14.4 | 正規表現のオプション | 270 |
| 14.5 | 後方参照 | 271 |
| 14.6 | 正規表現を使うメソッド | 273 |
| 14.6.1 | subメソッドとgsubメソッド | 273 |
| 14.6.2 | scanメソッド | 274 |
| 14.7 | 正規表現の例 | 276 |
| 練習問題 | 279 |
| 第15章 | IOクラス | 281 |
| 15.1 | 入出力の種類 | 282 |
| 15.1.1 | 標準入出力 | 282 |
| 15.1.2 | ファイル入出力 | 284 |
| 15.1.3 | open-uri.rb | 286 |
| 15.1.4 | stringio.rb | 287 |
| 15.2 | 基本的な入出力操作 | 288 |
| 15.2.1 | 入力操作 | 289 |
| 15.2.2 | 出力操作 | 291 |
| 15.3 | ファイルポインタ | 293 |
| 15.4 | バイナリモードとテキストモード | 295 |
| 15.5 | バッファリング | 296 |
| 15.6 | コマンドとのやりとり | 299 |
| 練習問題 | 301 |
| 第16章 | FileクラスとDirクラス | 303 |
| 16.1 | Fileクラス | 304 |
| 16.1.1 | ファイル名を変更する | 304 |
| 16.1.2 | ファイルをコピーする | 304 |
| 16.1.3 | ファイルを削除する | 305 |
| 16.2 | ディレクトリの操作 | 305 |
| 16.2.1 | ディレクトリの内容を読む | 307 |
| 16.2.2 | Dir.glob | 310 |
| 16.2.3 | ディレクトリの作成と削除 | 311 |
| 16.3 | ファイルとディレクトリの属性 | 311 |
| 16.3.1 | 属性の取得 | 311 |
| 16.3.2 | FileTestモジュール | 315 |
| 16.4 | ファイル名の操作 | 316 |
| 16.5 | ファイル操作関連のライブラリ | 318 |
| 16.5.1 | find.rb | 318 |
| 16.5.2 | tempfile.rb | 320 |
| 16.5.3 | fileutils.rb | 321 |
| 練習問題 | 324 |
| 第17章 | TimeクラスとDateクラス | 325 |
| 17.1 | Timeクラス,Dateクラス,DateTimeクラス | 326 |
| 17.2 | Timeオブジェクトを取得する | 326 |
| 17.3 | 時刻を計算する | 327 |
| 17.4 | 時刻のフォーマット | 328 |
| 17.5 | ローカルタイム | 329 |
| 17.6 | 文字列の解析 | 330 |
| 17.7 | DateTimeクラスを使う | 331 |
| 17.8 | DateTimeクラスとTimeクラスの違い | 332 |
| 17.8.1 | DateTimeクラスにおける1日の表現 | 332 |
| 17.8.2 | 時差の扱いの違い | 333 |
| 17.9 | Dateクラスを使って日付を求める | 335 |
| 17.10 | 日付を計算する | 336 |
| 17.11 | 日付のフォーマット | 337 |
| 17.12 | 文字列の解析 | 337 |
| 練習問題 | 338 |
| 第4部 | Rubyを使いこなそう |
| 第18章 | Ruby落ち穂ひろい | 341 |
| 18.1 | コマンドラインオプション | 341 |
| 18.1.1 | デバッグ・動作確認用 | 341 |
| 18.1.2 | 情報取得 | 344 |
| 18.1.3 | ワンライナー用 | 345 |
| 18.1.4 | セキュリティチェック | 347 |
| 18.1.5 | その他 | 348 |
| 18.2 | 環境変数 | 349 |
| 18.3 | リテラル | 351 |
| 18.4 | 組み込み変数 | 352 |
| 18.5 | 組み込み定数 | 356 |
| 18.6 | 多重代入 | 357 |
| 18.7 | BEGIN{}とEND{} | 360 |
| 18.8 | alias | 360 |
| 18.9 | undef | 361 |
| 18.10 | 疑似変数 | 361 |
| 第19章 | 演算子 | 363 |
| 19.1 | 論理演算子の応用 | 363 |
| 19.2 | 条件演算子 | 365 |
| 19.3 | 自己代入 | 366 |
| 19.4 | 範囲演算子 | 368 |
| 19.5 | 演算子の優先順位 | 369 |
| 19.6 | 演算子を定義する | 370 |
| 19.6.1 | 二項演算子 | 370 |
| 19.6.2 | 単項演算子 | 371 |
| 19.6.3 | 配列参照演算子 | 372 |
| 第20章 | イテレータ | 375 |
| 20.1 | イテレータとブロックつき呼び出し | 375 |
| 20.2 | イテレータの基本 | 376 |
| 20.3 | さまざまなイテレータ | 379 |
| 20.3.1 | 配列の場合 | 379 |
| 20.3.2 | ハッシュの場合 | 379 |
| 20.3.3 | ファイルの例 | 380 |
| 20.4 | Enumerableモジュール | 382 |
| 20.4.1 | eachメソッド | 382 |
| 20.4.2 | collectメソッド | 382 |
| 20.4.3 | sortメソッド | 382 |
| 20.4.4 | sort_byメソッド | 383 |
| 20.5 | イテレータを作る | 385 |
| 20.5.1 | 引数のあるイテレータ | 390 |
| 第21章 | Mix-in | 395 |
| 21.1 | includeメソッド | 395 |
| 21.2 | Comparableモジュール | 396 |
| 21.3 | Enumerableモジュール | 398 |
| 21.4 | 継承との関係 | 403 |
| 21.5 | メソッド検索のルール | 404 |
| 第5部 | ツールを作ってみよう |
| 第22章 | ログの解析 | 411 |
| 22.1 | アクセスログの概要 | 411 |
| 22.2 | アクセス数を調べる | 413 |
| 22.3 | アクセス日を調べる | 415 |
| 22.4 | アクセス日をグラフで出力する | 420 |
| 22.5 | 特定のファイルへのアクセス数を集計する | 422 |
| 第23章 | 郵便番号の検索 | 425 |
| 23.1 | 郵便番号データベース | 425 |
| 23.2 | とりあえず読んでみる | 426 |
| 23.3 | gdbmライブラリ | 427 |
| 23.4 | データの登録 | 428 |
| 23.5 | データの検索 | 430 |
| 23.6 | jzipcode.rb | 432 |
| 23.7 | 使ってみる | 433 |
| 23.8 | まとめ | 434 |
| 第24章 | HTMLの解析 | 435 |
| 24.1 | HTMLについて | 435 |
| 24.1.1 | 要素とタグ | 435 |
| 24.1.2 | コメント | 437 |
| 24.1.3 | 文字参照 | 437 |
| 24.2 | プログラムの作成 | 438 |
| 24.2.1 | コメントの解析 | 439 |
| 24.2.2 | タグの解析(その1) | 440 |
| 24.2.3 | テキストデータの解析 | 441 |
| 24.2.4 | 試してみる | 441 |
| 24.2.5 | タグの解析(その2) | 443 |
| 24.3 | リンクの一覧 | 449 |
| 付録 |
| A.1 | Rubyのインストール | 456 |
| A.2 | Windowsでのインストール | 456 |
| A.3 | Unixでのインストール | 460 |
| A.4 | MacOS Xでのインストール | 462 |
| A.5 | エディタ | 462 |
| A.6 | Rubyリファレンスマニュアル | 464 |
| A.7 | メーリングリスト | 465 |
| A.8 | Web上での情報 | 467 |
| A.9 | エラーメッセージ | 469 |
| 索引 | 473 |