書籍紹介『Effective Ruby』

書いた人:takkanm

書籍情報

: effective_ruby.jpg

書籍名
Effective Ruby
著者、訳者
PeterJ.Jones 著、長尾高弘 訳、arton 監修
発売日
2015年01月08日
ISBN
ISBN978-4-274-05065-7
原書
Effective Ruby

書籍の紹介

公式ページより。

C++やJavaで開発している一線級のプログラマたちが座右の一冊としている「Effective」シリーズ。そのシリーズの最新刊となる本書は言語にRubyをとりあげ、小手先の対処法ではない骨太のRubyプログラミング技法を解説します。 ごくカンタンに実装できるがゆえに、無駄なオブジェクトを配置して見通しの悪いプログラムになっていたり、アクセスしにくいコレクションを作っていたり、機能的ではない例外処理を施していたり、知らず知らずのうちに実行速度を犠牲にしていたりなどなど、自己流では解決しない問題に正しい道筋を示してくれます。

とくに、誰か他のプログラマーに利用されるコードを、どう書くことで堅牢さや使い易さを確保するかという観点が多いことが、本書の特徴といえるでしょう。

Rubyの良さを殺しているプログラミングを撲滅し、より美しくRubyを輝かせるためのノウハウを、各種サンプルを交えてわかりやすく提示する、中級~上級者向けの一冊です。

詳細目次

 * 第1章 Rubyに身体を慣らす
   - 項目1 Rubyは何を真と考えているかを正確に理解しよう
   - 項目2 オブジェクトを扱うときにはnilかもしれないということを忘れないようにしよう
   - 項目3 Rubyの暗号めいたPerl風機能を避けよう
   - 項目4 定数がミュータブルなことに注意しよう
   - 項目5 実行時の警告に注意しよう
 * 第2章 クラス、オブジェクト、モジュール
   - 項目6 Rubyが継承階層をどのように組み立てるかを頭に入れよう
   - 項目7 superのふるまいがひと通りではないことに注意しよう
   - 項目8 サブクラスを初期化するときにはsuperを呼び出そう
   - 項目9 Rubyの最悪に紛らわしい構文に注意しよう
   - 項目10 構造化データの表現にはHashではなくStructを使おう
   - 項目11 モジュールにコードをネストして名前空間を作ろう
   - 項目12 さまざまな等値の違いを理解しよう
   - 項目13 ""<=>""とComparableモジュールで比較を実装しよう
   - 項目14 protectedメソッドを使ってプライベートな状態を共有しよう
   - 項目15 クラス変数よりもクラスインスタンス変数を使うようにしよう
 * 第3章 コレクション
   - 項目16 コレクションを書き換える前に引数として渡すコレクションのコピーを作っておこう
   - 項目17 nil、スカラーオブジェクトを配列に変換するには、Arrayメソッドを使おう
   - 項目18 要素が含まれているかどうかの処理を効率よく行うために集合を使うことを検討しよう
   - 項目19 reduceを使ってコレクションを畳み込む方法を身に付けよう
   - 項目20 ハッシュのデフォルト値を利用することを検討しよう
   - 項目21 コレクションクラスからの継承よりも委譲を使うようにしよう。
 * 第4章 例外
   - 項目22 raiseにはただの文字列ではなくカスタム例外を渡そう
   - 項目23 できる限りもっとも対象の狭い例外を処理するようにしよう
   - 項目24 リソースはブロックとensureで管理しよう
   - 項目25 ensure節は最後まで実行して抜けるように作ろう
   - 項目26 retryでは回数の上限を設け、頻度を変化させ、オーディットトレイルを残そう
   - 項目27 スコープから飛び出したいときにはraiseではなくthrowを使おう
 * 第5章 メタプログラミング
   - 項目28 モジュール、クラスフックを使いこなそう
   - 項目29 クラスフックからはsuperを呼び出そう
   - 項目30 method_missingではなくdefine_methodを使うようにしよう
   - 項目31 evalのさまざまなバリアントの間の違いを把握しよう
   - 項目32 モンキーパッチの代わりとなるものを検討しよう
   - 項目33 エイリアスチェイニングで書き換えたメソッドを呼び出そう
   - 項目34 Procの項数の違いに対応できるようにすることを検討しよう
   - 項目35 モジュールのprependを使うときには慎重に考えよう
 * 第6章 テスト
   - 項目36 MiniTest単体テストに慣れよう
   - 項目37 MiniTest仕様テストに慣れよう
   - 項目38 モックオブジェクトで決定論をシミュレートしよう
   - 項目39 効果的なテストを追求しよう
 * 第7章 ツールとライブラリ
   - 項目40 Rubyドキュメントの扱い方を覚えよう
   - 項目41 irbの高度な機能を使えるようになろう
   - 項目42 Bundlerでgemの依存関係を管理しよう
   - 項目43 依存gemのバージョンの上限を指定しよう
 * 第8章 メモリ管理とパフォーマンス
   - 項目44 Rubyのガベージコレクタの動作に慣れよう
   - 項目45 Finalizerでリソースリークを防ぐセーフティネットを作ろう
   - 項目46 Rubyプロファイリングツールを使おう
   - 項目47 ループ内ではオブジェクトリテラルを避けよう
   - 項目48 コストの高い計算をメモ化することを検討しよう

監訳者による紹介記事

Effective Ruby(L’eclat des jours)

以下、記事より引用

というわけで、結構Rubyを使ってわかっているつもりでも知らない(Structを使わなくても困らないから使っていなかったけど、なるほど確かに使ったほうが良い点が多いといったことを学べるとか。同様なことはコレクションの章にも強く言える)ことが見つかったり、reduceとか(今風な名前)実に参考になりました。しかも読んでいておもしろかった。1項あたりの短さから来る読ませるテンポが良いみたいです(長尾さんの訳に対する好き嫌いってのもあるだろうからそこは個人差はあるだろうけど)。

お勧めします。

おわりに

わたし (@takkanm) も本書をいただいて読みました。 Ruby の初心者の方向けではなく、ある程度 Ruby を書いたことのある人向けの本という印象を持ちました。 今まで Ruby を書いてきて気をつけていたり、ハマったことがあるようなポイントがちりばめられている印象を持ちました。 とはいえ、この著者の方による主張が強すぎるところもあります。たとえば、メソッド呼び出しに括弧は必須としていたり、項目 34 「Proc の引数の個数の違いに対応できるようにしよう」などは、わたしにはやりすぎな感じが否めませんでした。そのため、 読者が著者の意見を鵜呑みにせず考えながら読みすすめるとよいのではと思います。 この本のように Ruby を書くときにどうするとよいのかという考えとその説明が書かれている本は、あまり存在しません。 そのため、Ruby のコードをある程度書いたことがあるという人は、 この本を読んで自分の Ruby のコードの書き方について、ふりかえるってみるのも面白いでしょう。