このサイトについて

Pythonな人だけど「メタプログラミングRuby」を読んでみた

Pythonな人だけど「メタプログラミングRuby」を読んでみた

僕は公私ともにPythonな人なんだけど,「メタプログラミングRuby」を読んでみた。

一言で感想を言うと,すごい良い本だから「みんな読むべき」。

本書では,まずRubyのオブジェクトモデルについて,ストーリー形式で分かりやすく解説をするパートが最初に来ている。途中にちりばめられる「ジャッジメントですの」とか「絶望した!」とかいった粋な翻訳ににやりとしながら読んでいると,すんなりとRubyのオブジェクト指向機能について理解できてしまうはず。

その後,メタプログラミングのさわりを解説,メタプログラミングの実践的な例としてRuby on Railsで使われているActiveRecordを例に解説をしている。後半はその後もベストプラクティスやイディオムの紹介など内容が盛りだくさんで,Rubistはもちろん,そうでない人でもためになるし,読んでいて楽しいと思う。

プログラミング言語の仕様は覚えたけど,どうも効率的な開発ができないな〜,と悩んでいる人。初級から中級にレベルアップしたい人が読むといいと思う。

 

さて,Pythonでもメタプログラミングはできるし,実際僕もフレームワーク作ったりするときにメタプログラミング的手法の一種であるメタクラスなんかを使うことがある。

Pythonのメタプログラミングでは,「__metaclass__=AttrFieldsMetaclass」のようにアンダースコアが2つついたクラスアトリビュートを使ったり,__new__()という得区別なメソッドを使ったりする。Pythonのメタクラスは,Rubyより見た目泥臭く映るかも知れない。Rubyの場合は,純粋なオブジェクト指向言語であることを標榜しているだけあって,一見よりスマートに見える。Pythonはオブジェクトの情報を問い合わせるのにグローバル関数を使ったり特別なモジュールを使ったりするので,一見すっきりしないように見えるかも知れない。Rubyでは,オブジェクトの情報はオブジェクトが知っているので,記述もすっきりしているように感じる。

ただし,Pythonの実装が泥臭く見えるのは,実は「できるだけ少ないルールでいろいろな処理が実現できるようにしよう」という思想から来ているようにも思う。Pythonの場合もRubyの場合もメタプログラミングに対するモチベーションは同じで,表現の仕方が微妙に違うだけなのかも知れない。Pythonistaは「新機能を追加するときに文法やルールを増やしたくない/後方互換性はできる限り守りたい」と思う。どちらが良いかとか,どちらが悪いかという議論をここでするつもりはないけれど,本書を読んでRubyのすばらしさに触れ,翻ってPythonのステキさも再認識した,とだけ言っておこうと思う。

さて,初めに「みんな読むべき」と書いたけど,ここでいう読むべきな「みんな」というのは,RubistだけでなくPythonistaもJavaな人とか他の言語を使っている人も「みんな」。メタプログラミングとはどんなもので,なにが美味しくて,どうすればいいかについて,分かりやすくかつノリ良く解説してあって凄く役に立つ書籍だと思う:-)。

2010-09-29 08:37