Rubyの壁シリーズその2です。
正直、ジャズフェス直前なので、どっぷりミュージシャン・モードに浸ってたかったんですが、どうにも書かずにいられなくて・・・。
今回の壁は、ワタシにとっては致命的というか本質というか、とにかくまずい予感がします。旧世代のプログラマの皆さん、要注意ですよ。
そもそもの発端は、Railsで、「Controlerで生成したインスタンス変数(@Hoge)が、なんでViewで参照できんだろう? 」という素朴な疑問でした。
やはり、我々のように一親方としてチームに参戦している場合、Railsを導入するためには、現場の技術リーダーも納得するように仕組みを解説する必要がありまして、「どういうカラクリで実現してんだ?」という部分は理解しておかないといけないのです。
ググったら、こちらの記事が、仕組みの解説としては分かりやすかったです。
この中で
view の中では controller のインスタンス変数を文法上そのままアクセスできるが、これはリフレクションのような手法を使って巧みに作り込まれた物らしい。
との記述が。
リフレクション?う~ん、これだけじゃまだ分からん!・・・と更に掘り下げると、どうもメタプログラミングなる技法で実装しているらしい。うっ・・・、聞いたことはあるけどよくわからない。どっちかというと、あえて避けて通ってきたような気がしないでもない。難しいんですもの。
で、メタプログラミングで検索すると、「Railsによるメタプログラミング入門」(PDF) なる記事を発見。プレゼン資料なので、きれいにまとまっております。
(途中に、METAの間違った例として出てきた”METALLICA”のKILL ‘EM ALLのジャケはツボでしたw 。Master of Puppetsなら尚ヨシw)
こちらを読む限りでは、Railsは、このリフレクションをガンガン使って実装されていることがわかりました。evalもガシガシ・・・。
なんと・・・。
これは避けて通れない気がしてきました。
メタプログラミングの知識なしにRuby(OnRails)の習得は進まないです。少なくともワタシの場合は。
単に「こういうもんだ」と割り切って使い倒す分には、深く考えなくともいいかもしれませんが、仮に企業のシステムに導入するとなれば、仕組みの理解は必須だと思われますので。
あぁ、気が重い。でもがんばるよ!(来週から)
・
余談。こちらの記事も参考までに。
Railsの仕組みの解説はこちらもいいですよ。
http://techno.hippy.jp/rorwiki/?Rails%A4%CE%A5%BD%A1%BC%A5%B9%A4%F2%C6%C9%A4%F3%A4%C7%A4%DF%A4%EB
Railsをはじめるとまず気になる部分のソースが解説してあって、僕はとっかかりとして重宝しました。
> tech noteさん
情報ありがとうございます!
早速、覗いてみます。
私もRubyに移行するとき、厳密には違うかもしれないけど、
シンボル→java.lang.String.intern()
メタプロ→docletやアノテーション
という風に、アタマの中でRuby→Java変換して理解しました。
リフレクションは、RubyとJavaで指してる領域が全くちがうので、
ここはスクリプト慣れするしかないですね。
(tech noteさんはモト同僚。ここにいて驚いたw)
> takeda-softさん
ご無沙汰しております。
> ここはスクリプト慣れするしかないですね。
そのようですね・・・。が、がんばります。(来週から)
> tech noteさんはモト同僚。
ええぇー!
takedaさん、どんだけ人脈広いんすか!!
うおっ、そういうことか。
そうか、たけだそふとのほうに登場していたkobaさんだったんですね。
digiDriveって響きをどっかで見たことあるような気はしてたんです。
今後ともよろしくお願いします。
>takeda-softさん
こっちも驚いたヨ。。(気づけよって話かw)
東北は情熱をもった方々が多くてすばらしいですね。