Rubyメタプログラミング事始め その1

授業でRubyメタプログラミングをプレゼンすることになったので、簡単にまとめてみた。

参考した資料としては株式会社ネットワーク応用通信研究所 前田 修吾さんの作ったスライドを参考にさせていただきました。(ほとんど同じじゃないかという意見もある)

そもそもメタプログラミングって何?
そこでいつものようにwikipediaに頼ってみることにしてみた。

メタプログラミング (metaprogramming) とはプログラミング技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。主に対象言語に埋め込まれたマクロ言語によって行われる。
出典: フリー百科事典『ウィキペディアWikipedia)』

で上のように書かれていたんだけど、やっぱりわかりにくいなぁというのが率直な感想。

分からないならとりあえず、トップダウン的に分けて考えてみる。

メタって何?

メメタァならわかるんだけどという人は多いと思いますが、メタってなんだろう?

普段聞き慣れない言葉ですね。聞いたことがあるとすれば、メタルギアとかメタルスラッグとかになってしまいます。

でここでもおなじみのwikipedia君に相談してみます。

メタ(meta-)とは、「高次な−」「超−」「−間の」「−を含んだ」「−の後ろの」等の意味の接頭語。ギリシャ語から。
出典: フリー百科事典『ウィキペディアWikipedia)』

これでもまだ良く分からない。なので、下にある項目を読んで概要をつかむしか無い。

狭義のメタ

ある対象を記述したものがあり、さらにそれを対象として記述するものを、メタな○○、あるいは単にメタ○○と呼ぶ。

* 言語を記述する言語 - メタ言語
* 文法を記述する文法 - メタ文法
* 理論を解釈するための理論 - メタ理論
* 自己の認知を認知すること - メタ認知

例えば、WWW上の文章は主にHTMLによって記述されているが、この場合、元の文章に対してHTML がメタな言語であるといえる。また、HTMLそのものは英語によって仕様が規定されている。この場合、HTMLにとって英語がメタな言語であるといえる。


ここまで読めば、大体言いたいことはわかった気になる。

何かを書くためのに必要な言語がメタ言語なんだから、つまり今回の場合はプログラミングを書くためのプログラミングと言うことになる。

ふむ、難しいな。多分実際のコードを追えば楽にわかるんだろうな。

見てる人いないと思うけど、間違っていたら修正をお願いします。

おすすめの本(24章にメタプログラミングが追加されてます。)