Rubyistとして次のステップに進みたい方、Ruby初心者からRuby中級者になりたいという方には、是非オススメします。
Rubyベストプラクティス
Rubyベストプラクティス -プロフェッショナルによるコードとテクニック
著者:Gregory Brown
オライリージャパン(2010-03-26)
販売元:Amazon.co.jp
内容は「実践Ruby」という感じです。実際のRubyプロジェクトを元に、その実践と、関連したサブトピックの詳細が書かれています。各トピックは相互に関連してる部分も多いですが、独立しているので、好きなところから読んで構いません。内容は難しい部分、取っ付きにくい部分(テスト駆動開発、動的機能など)もあります。しかし、テキスト/ファイル処理やデバッグ方法、文字コードに関してはRubyを始めたばかりの人も難なく読み進めることが出来ます。Rubyの基本的な文法が分かってる人なら、手に取ってみてはいかがでしょうか。Rubyを愛してる人は本当に楽しく読める本だと思います。因みに、全てRuby1.9をベースとして書かれてることもポイントです。
1.テストでコードを駆動する
テスト駆動開発に関しての基礎。また、テストし易いようにするためのアプリケーションの設計の仕方について。TestUnitは一度TDDBCで触ったことがあるので基礎は知っていました。日々のアプリケーション開発で実践したいです。
優れたテストケースがあれば、顧客とのコミュニケーションももっと簡単になると主張する人もいるようだ。しかし、私はそうは思わない。ただ、はっきりしていることは、他の開発者に問題を説明するのにテストは最高だということだ。
2.美しいAPIを設計する
Rubyのメソッドの設計について。引数能力、ブロックやEnumeableの使い方など。
3章.動的な機能を使いこなす
Rubyの魅力とも言える黒魔術的な動的なテクニックについて。少し内容は難しいですが、Rubyを使う上では外せないトピックです。少しずつでも自分のモノにしたい。
4.テキスト処理とファイル管理
正規表現によるテキスト処理の実践と、プラットフォームに依存しないファイル処理のやり方について。
ファイル処理には標準ライブラリのpathname, fileutils, tempfileを活用しましょう。
5.関数型プログラミングのテクニック
無限リストなどの関数型言語のテクニックを使い、そこからエッセンスを得る。Rubyは関数型言語じゃありませんが、関数型言語からヒントを得たコードは興味深く面白いです。Rubyを別の角度から見てみるための、手助けになると思います。
6.うまくいかないとき
Rubyコードのデバッグの仕方とそのツールについて。
yamlライブラリのKernel#yはinspectやppの代替としてとても便利です。僕も日常的に使ってます。
7.文化の壁を取り払う
文字コードと、国際化(ローカライズ)について。国際化についてはこれからのWebアプリケーションではどんどん使われるようになるんじゃないでしょうか。
8.上手なプロジェクトメンテナンス
実際のRubyプロジェクト(rubygemsのhaml)を元に、プロジェクトでの慣習や、RDoc、Rakeの基礎的な使い方について。まさにrubygemsライブラリを作りたいなと思ってた僕にはぴったりの章で学べる部分がたくさんありました。
付録A.後方互換性のあるコードを書く
Ruby1.8と1.9の違いと、両方をサポートする書き方について。1.9のコードを1.8サポートする場合も、1.8プロジェクトを1.9に以降する場合も、役立ちます。
最初からRuby 1.8と 1.9 の両方をサポートするようにしよう。ただし、あまりレガシーなコードを書きたくないなら、必ず最初に Ruby 1.9向けのコードを書いて、それから 1.8 にバックポートしよう。
付録B.Rubyの標準ライブラリを活用する
標準ライブラリの紹介。
open-uriは便利ですね。よく使います。
pretty-printerは恥ずかしながらこの本を読むまで知りませんでした。yamlとお好みで使えば良いと思います。
付録C.Rubyワーストプラクティス
Rubyコードを書く上で、やるべきではないこと。必要以上に難しくせず、わかりやすさとメンテナンスのしやすさを重視しましょう。
英語版PDFが全文公開
実は英語版のPDF、更には原稿まで公開されています。
sandal’s rbp-book at master – GitHub
https://github.com/sandal/rbp-book/
http://majesticseacreature.com/rbp-book/pdfs/rbp_1-0.pdf
でも、やはり僕は紙の本が好きです。
(それに、英語より日本語の方が良いよね!僕日本人ですから。)