島田 浩二 著
設樂 洋爾 著
村田 賢太 著
前田 智樹 著
谷口 文威 著
Rubyの世界はとても広大であり、Rubyに慣れ親しんだ者でさえ道に迷ってしまうことが多々あります。多くのライブラリ、多くの実装手段が存在するため、適切な解決策へとたどり着くまでに迷ってしまうのです。そのため、Rubyを始めたばかりの人たちが適切な解決策へたどり着くことは至難の業と言えるでしょう。Rubyの入門書の多くは、このための道案内をしてはくれません。
本書は、開発の現場で直面する現実の問題をRubyで解決する方法や、そのために必要な知識やノウハウを、レシピ形式で紹介する本です。実際の現場で扱うことの多いレシピを関連するカテゴリや目的別にまとめています。技術や概念の説明は必要最低限にとどめ、「やりたいこと」を実現するために「どのようなライブラリや機能をどう使えばよいか」を、サンプルコードを交えてわかりやすく簡潔に解説しています。
本書のもう1つの目的は、Rubyコミュニティで漠然と共有されているRubyらしい考え方を学ぶことです。リファレンスやチュートリアルの形ではなく、さまざまなライブラリが実際の問題をどのように解決しているかを知ることで、Rubyプログラマの考え方とその根底にある哲学を学ぶことができます。そうした考え方さえ身に付けることができれば、あなたは自然とRubyを使いこなして自力で問題を解けるようになっていることでしょう。
本書が、Rubyによる楽しいプログラミングの一助となれば幸いです。
第1章 さあ始めよう
1.1 ツールやライブラリを探してインストールする
001 Rubyの便利なライブラリやツールをインストールしたい
002 RubyGemsを使ってパッケージをインストールしたい
003 gemパッケージを検索したい
004 インストールしたgemパッケージをアップデートしたい
005 RubyGemsが参照するリモートポジトリを追加したい
006 インストール用スクリプトを使ってパッケージをインストールしたい
1.2 リファレンスマニュアルや各種ドキュメントを参照する
007 リファレンスマニュアルを参照したい
008 riコマンドでリファレンスマニュアルを参照したい
009 refeコマンドでリファレンスマニュアルを参照したい
010 RubyGemsでインストールしたパッケージのドキュメントを参照したい
011 よく使うコマンドやメソッドの利用方法を一覧したい
1.3 開発環境を整える
012 irb起動時に読み込むライブラリを指定したい
013 irbでTab補完やシンクタックスハイライトをしたい
014 irbの実行結果をハッシュロケット形式で式の横に表示したい
015 コマンドプロンプト上でANSIエスケープシーケンスを扱いたい
第2章 基本オブジェクト
2.1 文字列オブジェクト
016 スクリプトの文字エンコーディングを指定したい
017 文字列の中に式を埋め込みたい
018 単一引用符(′)や二重引用符(″)を含む文字列を扱いたい
019 複数行に渡る長い文字列を扱いたい
020 文字エンコーディングを変換したい
021 文字と文字コードを相互に変換したい
022 Base64形式でエンコード/デコードしたい
023 日本語を分かち書きしたい
2.2 数値オブジェクト
024 数値クラスが扱える数値の範囲を知りたい
025 10進法から2進法、8進法、16進法へ基数変換したい
026 階乗羃、順列、階乗、組み合わせの値を求めたい
027 Floatオブジェクトでは表現できない精度の浮動小数点数を扱いたい
028 10進法で表記された小数を誤差なく扱いたい
029 単位換算をしたい
030 数値ベクトルを高速に扱いたい
031 連立一次方程式の解を求めたい
2.3 コレクション/データ構造
032 サイズを指定して配列を初期化したい
033 ハッシュ要素の初期値を設定したい
034 配列やハッシュの状態を確かめたい
035 配列やハッシュから条件を満たす要素を取り除きたい
036 配列やハッシュの要素を条件に基づいて分割したい
037 2つの配列の和集合、積集合、差集合をとりたい
038 2つのハッシュをマージしたい
039 構造体を使いたい
040 遅延リストを作成したい
第3章 システム
3.1 日付と時刻
041 和暦表記の文字列を日付として処理したい
042 日時が特定の期間に含まれるかどうかを調べたい
043 月の日数を算出したい
044 月末の日時を算出したい
045 Timeオブジェクト、Dateオブジェクト、DateTimeオブジェクトを相互に変換したい
046 日時を任意のフォーマットで出力したい
047 曜日を日本語で出力したい
048 日時を和暦表記で出力したい
3.2 ファイルとディレクトリ
049 ファイルのパスからファイル名とディレクトリを分離したい
050 相対パスを絶対パスに変換したい
051 絶対パスを相対パスに変換したい
052 ファイル名がパターンにマッチするかどうかを調べたい
053 処理の間だけ特定のディレクトリに移動したい
054 作業用一時ディレクトリを作成したい
055 ファイルのタイムスタンプを参照したい
3.3 その他
056 標準入力からメッセージを読み込みたい
057 標準出力や標準エラー出力にメッセージを書き込みたい
058 コマンドラインから与えられたオプションを解析したい
059 環境変数を参照したい
060 アプリケーションの設定ファイルを作りたい
061 外部コマンドを実行したい
062 スクリプトをデーモンとして動作させたい
063 スクリプトをWindowsサービスとして登録したい
064 データを可逆圧縮したい
第4章 オブジェクト指向プログラミング
4.1 生成
065 オブジェクトが持つ情報を別の形式(オブジェクト)に変換したい
066 オブジェクトが持つ情報から新たな情報(オブジェクト)を生成したい
067 既存のインスタンスを雛形にして新しいインスタンスを生成したい
068 オブジェクトの生成に伴う具体的な手続きを隠蔽したい
069 あるクラスのインスタンスが1つしかないことを保証したい
4.2 構造
070 クラス名や定数名がほかと衝突するのを防ぎたい
071 メソッド呼び出しをほかのオブジェクトに委譲したい
072 受け取ったブロックをほかのオブジェクトに引き渡したい
073 既存のクラスの挙動を変更したい
074 スーパークラスで定義されている機能を拡張したい
075 単純な値の組み合わせをオブジェクトとして扱いたい
076 1つのクラスから異なる振る舞いを持つインスタンスを生成したい
077 既存のクラスのインターフェイスを別の形に変換して提供したい
4.3 状態
078 変数を初めて使うときに初期化したい
079 インスタンス変数を外部から参照できるようにしたい
080 インスタンス変数を外部から設定できるようにしたい
081 可変長引数を使いたい
082 キーワード引数を使いたい
083 状態遷移を表現したい
084 オブジェクトを変更できないようにしたい
085 オブジェクトがコピーされた際に特別な初期化をしたい
086 防御的コピーを使ってオブジェクトの内部状態を保護したい
087 メソッドがブロックを伴って呼び出されたかを知りたい
4.4 振る舞い
088 クラスメソッドを定義したい
089 真偽値を返すメソッドであることを示したい
090 使う際に注意が必要なメソッドであることを示したい
091 オブジェクトを同じとみなす基準を同値にしたい
092 メソッドに別名を付けたい
093 状態の変化を協調するオブジェクトに通知したい
094 相互作用するオブジェクトの約束事を1ヶ所で定義したい
095 後処理を必ず実行させたい
096 処理の一部を外から指定できるようにしたい
第5章 データベース/永続化
5.1 データベース
097 O/Rマッピングを用いてデータベースを手軽に扱いたい
098 簡潔なDSLでデータベースを手軽に扱いたい
099 SQLiteを使いたい
100 PostgreSQLを使いたい
101 MySQLを使いたい
102 高速な全文検索を行ないたい
103 memcachedを利用したい
5.2 データの永続化
104 オブジェクトを永続化したい
105 オブジェクトデータベースを手軽に利用したい
106 YAML形式でオブジェクトをシリアライズしたい
107 JSON形式でオブジェクトをシリアライズしたい
108 CSV形式のデータを読み書きしたい
第6章 ネットワーク処理/Webプログラミング
6.1 プロトコル
109 IRC botを作りたい
110 XMPPを使ってGoogle TalkなどのIMへ通知したい
111 SMTPでメール送信したい
112 SMTP over SSLでメールを送信したい
113 LDAPのエントリを手軽に扱いたい
114 SCPを使ってファイルをアップロードしたい
6.2 WEBrick
115 Webサーバーを手軽に作成したい
116 URIをディレクトリに対応付けたい
117 URIに対応するコンテンツを動的に生成したい
118 リクエストを別のURIへリダイレクトしたい
119 Basic認証を行ないたい
120 リクエストヘッダやボディの内容を参照したい
121 レスポンスに任意のステータスコードを返したい
6.3 Webアプリケーション基盤
122 WebサーバーをWSGIのような統一的なインターフェイスで扱いたい
123 DSLを使って小規模Webアプリケーションを簡潔に記述したい
6.4 Webクライアント
124 Webページを取得して解析したい
125 HTTPリクエストを発行したい
126 Basic認証付きHTTPリクエストを発行したい
127 ファイルをHTTP POSTしたい
128 RESTfulなWeb APIクライアントを簡単に作りたい
129 スクリプトで使うパスワードをまとめて管理したい
130 Webサーバーの動作をシュミレートしたい
131 open-uriをフックしてローカルファイルを返したい
6.5 並列分散処理
132 分散オブジェクトを利用したい
133 ダブルスペースを介した分散処理を行ないたい
第7章 各種フォーマット/画像
7.1 各種フォーマット
134 定型テキストをテンプレートから生成したい
135 PDFを生成したい
136 Wordファイルを読み書きしたい
137 Excelファイルの読み書きをしたい
138 vCard形式のデータを読み書きしたい
139 ユニークな識別子(UUID)を生成したい
7.2 HTML
141 ビルダーを使ってHTML/XML文書を生成したい
142 Markdown記法からHTMLを生成したい
143 Textile記法からHTMLを生成したい
144 Wiki記法からHTMLを生成したい
145 はてな記法からHTMLを生成したい
146 Haml記法からHTMLを生成したい
7.3 メール
147 メールからヘッダや本文を取り出したい
148 メールから添付ファイルを取り出したい
7.4 フィード
149 RSSを作成したい
150 Atom配信フォーマットを作成したい
151 フィードから特定のエントリを抽出/削除したい
152 Webサイトから情報を抽出したい
7.5 画像
153 画像にエフェクトをかけたい
154 サムネイル画像を作成したい
155 高品質な図を作成したい
156 折れ線グラフや棒グラフなどを生成したい
157 QRコードを生成したい
第8章 他言語/外部ライブラリ
8.1 Cプログラムとの連携
158 Rubyコードの中にCのコードを埋め込みたい
159 共有ライブラリ内の関数をRubyから呼び出したい
160 Cで作られたプログラムにRubyインタープリタを組み込みたい
8.2 JRuby
161 JRubyを使ってJavaとRubyをシームレスにつなげたい
162 RubyからJavaのクラスを利用したい
163 RubyからJavaのパッケージを利用したい
第9章 エラー処理/ログ
9.1 例外
164 例外処理を行ないたい
165 例外を発生させたい
166 例外を捕捉して処理したい
167 メソッド単位で例外を捕捉して処理したい
168 行単位で簡潔な例外処理を記述したい
169 独自の例外を定義したい
9.2 ログの記録
170 ファイルや標準出力にログを出力したい
171 特定のレベルよりも重要なログだけを出力したい
172 一定の期間ごとにログファイルをローテートしたい
173 一定のサイズごとにログファイルをローテートしたい
174 Syslogにログを出力したい
第10章 テスト/最適化
10.1 ユニットテストを行ないたい
175 ユニットテストを行ないたい
176 処理の結果が期待したとおりであることを検証したい
177 テストに先立って必要なデータを準備したい
178 Mochaを使ってモックやスタブを利用したい
179 テストを全部ひとまとめに実行したい
180 テスト結果を色付きで見やすく表示したい
181 振動駆動開発(BDD)を行ないたい
10.2 最適化
182 カバレッジを計測したい
183 パフォーマンスを計測したい
184 コードの不吉な匂いを検出したい
第11章 デバッグ
11.1 デバッガ
185 デバッガを利用したい
186 ブレークポイントを設定したい
187 プログラムの実行を例外が起きたところで止めたい
188 デバッグ中のソースコードを表示したい
189 スタックフレームを表示/選択したい
190 デバッグ中に式を評価したい
191 実行を停止するたびに特定の式を評価した結果を確認したい
192 起動時のデバッグオプションを設定したい
193 任意の箇所に適した場合にデバッガを起動したい
11.2 技法
195 処理中のファイル名や行番号を参照したい
196 コールスタックを調査したい
197 オブジェクトの中身を調べたい
198 オブジェクトが存在しているかを調べたい
199 オブジェクトのクラス名を調べたい
200 クラスライブラリをコマンドとして実行可能にしたい
201 スーパークラスを調べたい
202 オブジェクトで利用可能なメソッドを一覧したい
203 メソッドチェーンの途中経過を調べたい
第12章 システム管理/自動化
12.1 システム管理
204 Ruby版Mointでプロセスの動作を監視したい
205 Windowsサービスを管理したい
12.2 自動化
206 Rakeでビルド作業やタスクを自動化したい
207 Rakeタスク中で外部プログラムやRubyスプリクトを実行したい
208 引数をとるRakeタスクを定義したい
209 関連する複数のRakeタスクをまとめたい
210 ファイルを変換するRakeタスクを定義したい
211 中間ファイルや生成ファイルを削除するRakeタスクを定義したい
212 ソースリポジトリの変更を監視して自動でビルドやテストを実施したい
第13章 ドキュメンテーション/パッケージ化
13.1 ドキュメンテーション
213 ソースコードからAPIドキュメントを生成したい
214 ドキュメント用のコメント内でJavadocのようなメタデータを扱いたい
13.2 パッケージ化
215 exe形式でアプリケーションを配布したい
216 プログラムにインストーラを付けて配布したい
第14章 さらに先へ
14.1 Ruby 1.9
217 Ruby 1.9をインストールしたい
218 RubyVMに触れてみたい
219 文字列オブジェクトの文字エンコーディングを調べたい
220 Ruby 1.9の多言語化機能を用いて文字エンコーディング変換を行ないたい
221 文字列のバイト列を変更せずに文字エンコーディングを指定したい
222 入出力される文字列の文字エンコーディングを指定したい
223 入出力時のデフォルト文字エンコーディングを指定したい
224 スクリプトファイルの文字エンコーディングを指定したい
225 文字列のバイト列が正しく符号化されていることを検証したい
226 文字列をバイト列として使用したい
227 Fiberを使ってジェネレータを実装したい
228 分数や循環小数を精確に扱いたい
229 複素数を扱いたい
14.2 Rubyの文化、コミュニティ
230 Webにある情報を参照したい
231 メーリングリストに参加したい
232 各地で行なわれている勉強会に参加したい
付属データはこちら
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1刷 | 033 ページ下部のリスト囲み、2つ目の#~ |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 044 ページ下部のリスト囲み3行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 056 下から5・6行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 067 ページ最下部のリスト囲み |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 089 下から2行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 090 本文下から5・6行目(2箇所) |
未 | 未 |
|
2010.03.20 | ||||||
1刷 | 134, 135 リスト囲み、計6箇所 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 136 1つ目のリスト囲み、caseのインデント |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 136 2つ目のリスト囲み、2行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 139 リスト囲み、5行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 173, 174, 175 各リスト囲み |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 183 リスト囲みの最下行 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 197 2つ目のリスト囲み、下から2行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 199 最下部のリスト囲み、2行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 202 上から3つ目のコード |
未 | 未 |
|
2010.03.20 | ||||||
1刷 | 202 COLUMNの2つ目のコード |
未 | 未 |
|
2010.03.20 | ||||||
1刷 | 205 上から4行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 299 6行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 364 1つ目のリスト囲み |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 425 リスト囲み、1行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 431 2つ目のリスト囲み、冒頭のrequire |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 432 リスト囲み、冒頭にrequireを追加 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 496 1つ目のリスト囲みおよび2つ目のリスト囲みの1行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 537 リスト囲み3行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 551 1つ目のリスト囲み(define_lambda_alias.rb) |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 553 1つ目のリスト囲み、1~3行目 |
未 | 未 |
|
2009.09.04 | ||||||
1刷 | 555 リスト囲み、最下行 |
未 | 未 |
|
2009.09.04 |