第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 |