The Mega March 2012 Ruby and Rails News and Release Roundup のメモ

以前は頻繁に更新があったRuby Insideですが最近めっきり更新されてなくて、収束しちゃうんじゃないかと心配していました。先日久しぶりの更新があり、3月のRuby界、Rails界についてのまとめ記事があがってたので、気になった記事をメモしています。

トップニュース(Headlines)

RailsのViewについてまとめた本がPragmatic Bookshelfから出版されました。Viewはよく設計において後回しにされがちですが、一番工数がかかるところです。そこにフォーカスをあてて全体の設計からViewを最適化する方法を解説しています。あと、Rails3の新機能であるasset pipelineについても詳しく解説しているのでまだよく理解してない人は一読したほうがいいです。

OOの技術や考え方をRailsアプリにどうやって使っていくかを解説した本。Webから全部読めるようになってるのでRailsで仕事している人は全部読むことをお勧めします。TDDで進んでいくのでTDDの勉強にもなります。いつでも読みたい人は電子書籍でも販売(5$で)しているのでどうぞ。

いろいろ細かいbug fixがメインだけど、重要な更新としてが、config.active_recode.whitelsit_attributesオプションがデフォルトtrueになったこと。これは、Githubの例のmass assignment問題が発端になっています。

VirtualBoxを使って仮想的な本番環境を作るツール。デプロイツール作ってて実験したいとかに役に立ちそう。

高速化したらしいです。確かに前の版と比べるとbundle installが速くなった気がします。

このTutorialは読みやすいし、僕もこれで勉強しました。

いろいろ物議を読んだ話題です。僕個人的に切り離すことによるメリットはまだ実感できてないのですが、切り離せるところは切り離してもいんじゃなかろうかと思います。

読み物(Reading)

鬼車(Oniguruma)の正規表現がどうやってパースされて解釈されるのかを図示しながら教えてくれます。Thompson NFAとかも勉強したほうがいいんじゃろうか... 余談ですが、Ruby 2.0からまたエンジンが変わって鬼雲になります。

正規表現記事と同じ筆者の記事。2.0からはbitmap markingが導入されメモリ使用量が減ります。nariさんのコミットのおかげです。

Github社のRubyのコーディング規約です。自分がRubyのコードを書くときに気をつけていることとほぼ似ていいて、会社でもこれを参考に取り入れたいと思います。ただ、ブロックの

[1, 2, 3].map { |e| e * 2 }

という書き方は好きじゃないんですよね。

[1, 2, 3].map {|e| e * 2}

{}の前後に空白を入れずに書く方が好きです。TomDocのコメントスタイルは書きやすくかつ、理解しやすいので会社でも採用したいです。

Threadを使ってむりぐり末尾再帰を実装しています。

capybaraを使ってどうやってテストを書いていけばよいか簡単かつわかりやすくまとめられています。

待望のEnumerator::Lazyですね。たとえば

[1,2,3,4,2,5].map {|e| e * 10}.select {|e| e > 30}

関数型言語をたしなんでる人だとこう書くけど、これだとコレクションを2回パースすることになり遅くなる。Enumerator::Lazyを使って

let = [1,2,3,4,2,5].lazy.map {|e| e * 10}.select {|e| e > 30}
let.to_a #=> [40, 50]

と書くと途中の計算は展開されずに評価するときに計算されるのでパースは1回だけですむので配列は作成されず、メモリ消費量を抑えられる。

最近ちらほらMiniTest::Specを見かけるようになってきて盛り上がってるのかな。

時間のかかる処理の間にチェックしておかしければcleanup処理を書いて終了させる方法。

ビデオと聞き物(Watching and Listening)

Viewの修正をクライアント側でWebから編集できるようにするRailsアプリ。RailsCastsは2月くらいからproを購読するようになり英語のリスニングの勉強がてら毎日聞いています。

Railsアプリにおいてlib以下の使い方がなっていないので、こう使いなさいというスピーチ。スピーカーがキアヌ大好きっぽいので、発表の40%くらいがキアヌ成分ですが、割と無視されがちな部分なので勉強になります。

ライブラリとコード(Library and Code)

依存関係をグラフ化してくれるツール。こういうのは地味に便利です。

僕は自作のlocalportというもので管理しています。rvmはやりすぎな感あるし、シンプルなものがいいです。

これ面白い。ためしに今のプロジェクトに引っ掛けてみるといろいろひっかかる。