雀巽の日記帳

雀巽が綴る日常の記録

「メタプログラミングRuby 第2版」を読んだよ

諸事情による帰省の道中、メタプログラミング Ruby 第2版を読みました。

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

新幹線って快適ですよね。LCC のほうが安いんですが、新幹線のほうが好きだし楽なので新幹線をついつい使ってしまいます。

快適すぎてめっちゃ眠くなりますが、片道4時間を全部寝て過ごすのも勿体無いので寝落ちを繰り返しながら読書をしてきました。

以前から、会社の同僚に「プログラミング3大神書籍 for Rubyists」として、リーダブルコード、リファクタリング Rubyメタプログラミング Ruby を薦められていたのですが、やっと全部読み切ることができました。

necojackarc.hatenablog.com

necojackarc.hatenablog.com

読んでみて、Effective Ruby と重なる部分が意外とあるなと思いました。

necojackarc.hatenablog.com

ただし、やはり方向性の違いはあり、

といった印象を個人的には受けました。

メタプログラミング Ruby が教えてくれるもの

実は、メタプログラミング Ruby の優先順位は元々低めでした。

その理由ですが、

「これまでメタプログラミングと呼ばれる類のものをした記憶はあるが、それは単にコードを綺麗にするためにした単なるプログラミングだったし、特別にメタプログラミングを優先して学ばなくても良いと感じる」

といったものでした。

ただ、同僚が熱心に薦めてくるので話を聞いてみたところ、「Ruby という言語が深く理解できる」という予想外の返答*1がきました。

そういう本ならば面白そうだと早速読んでみたのですが、まさにそういった本でした。 Ruby を深く知るための、Ruby という言語を極めるための本だなぁと読んでいて感じました。

また、I 部のエピローグに、

メタプログラミングというものなど存在しない。すべてはただのプログラミング

という、自分が思っていた通りの言葉が書いてあって嬉しくなりました。

メタプログラミング Ruby は、メタプログラミングを題材にして、Ruby の深い部分を教えてくれる本なんじゃないかと思います。

もちろん、メタプログラミングについてもみっちり学べます。

予想通り面白かったです。

Rails メタプログラミングコードリーディング

先ほど、ぽろりと I 部と言いましたが、この本は I 部と II 部の二部構成になっています。

II 部では Rails を題材にメタプログラミングのライトサイドとダークサイドが学べます。

めっちゃ面白いです。ActiveSupport::Concernが何をしてるかとか、alias_method_chainの衰退話とか、ActiveRecordの変遷とかについて書いてあります。

alias_method_chainRails 4.1 ではほぼ撲滅されてるなんて知らなかったです。

Rails のコードを読むための最初の一歩としても良さそうなパートでした。

印象に残ったフレーズ

良いなぁと思ったフレーズを紹介します。

  • 設計原則(疎結合、シンプリシティ、重複の排除)は変わらないが、設計技法は絶対的なものではなく言語によって異なる
  • メタプログラミングは賢くなるためのものではない。柔軟になるためのものである
  • メタプログラミングというものなど存在しない。すべてはただのプログラミング

メタプログラミング Ruby でも、「変更しやすく可読性の高いプログラム書くこと」や「適宜最適なものに作り変えていくこと」が重要であるという考え方が根底にあると感じました。その上で、Ruby が提供する魔術とも称される強力なメタプログラミングを効果的に活用すべきだと教えているんだと思います。

まとめ

Ruby 慣れてきた頃に Effective Rubyメタプログラミング Ruby を読んでおくとよさ気!

Ruby の柔軟性が持つ可能性が半端ない!

*1:単なるメタプログラミング狂なんじゃないかと正直少し疑っていました。笑