Rubicureに学ぶ 
メタプログラミング 
#WDGVDQ
お前 is 誰よ 
żƋƵƇljƕ#WDGVDQ 
ǢȇÁDZǾǒȜ܃ƇƤ$3,ƞƁ§SL[LYQHWƤ 
ޚƁźƞƉǃƤ࠿ੈࡿপLjૃுƏǁҁƋlj 
3+3ƕƤƍźЁ಻܈ƃƠǯȜȀȕÁDZǑȜǡȜƝƏ 
࡮฀Ɲƥ5XELj࣌ƅƉƞƂŸǁƾ¯ 
ވتࡏఋƝƥ*Rƞ6FDODƤϊ໨Ƃ݅ƴƙƜƚƿź
·।।।।।।।।।।।।।।· 
é¦ƕƴơƥ࡮฀Ƥ༺LjƍƴƏ¦è 
¶AAAAAAAAAA¶
Rubyの文法 
obj.methƞobj.meth()ƤϪ฀ƥ௚Ǝ 
3+3ƺ3WKRQƞƥϰƠǁ्ഴ
Rubyの文法 
ǘȒǢƥǓǿǡǐǘDZ 
class Obj 
def foo; :instance_foo; end 
def self.foo; :class_foo; end 
end
メタプログラミングとは 
۲ӃLjƀƓǂƐơƌƙƅǀৗฝƏǁƞ§ 
ÛȀȖǙȒȉLjޯǁȀȖǙȒȉLjޯǁƉƞÜ 
'5Ljߵ܃ƍƜࢠൄLj೗Ƈ੤Ƈǁƞ§ 
।໹ƥźƚƍƁȊǨȀȖǙȒȈȜǙơࠉǁ 
नơވ୷ƠૹखҎࡧචƝŸǁƞƥۇƿƠź 
5XERQ5DLOVƥ5XEơƀƇǁ'6/ƞ 
ȊǨȀȖǙȒȈȜǙ֦ࢬƤॿLj࢓Ʒƕڒࣶ
趣味 
·।।।।।।।।।।।।।· 
é¦5XEơƀƇǁખഀ୵Ơ¦è 
馦ȀȓǖȎNj࠿ੈ¦¦è 
¶AAAAAAAAA¶
·।।।।।।।।।।।।।· 
é¦5XEơƀƇǁખഀ୵Ơ¦è 
馦ȀȓǖȎNj࠿ੈ¦¦è 
¶AAAAAAAAA¶
·।।।।।।।।।।· 
é¦ȀȓǖȎNj࠿ੈ¦è 
¶AAAAAAA¶
Rubicureとは 
VXHࠀƂӚಔƍƕ5XEJHPȒǍǿȒȓ 
gem install rubicureƝ௜ధƝƃǁ 
֚ۀƥ൭ơŸǁ 
3HUOAcme::PrettyCureDQG3WKRQpycure 
$3,ƥAcme::PrettyCureƁƿ׸źй؊LjࡲƇƜǁ
経緯 
޳శӚކƋǂƕÛȀȓǖȎNjǸǬǔǦȜÜƝ 
GULOOELWVƋljƂ3WKRQƝÛ3FXUHÜLj࠿ੈ 
ǸǬǔǦȜࡤކࡑƤVXHࠀƂǸǬǔǦȜ۪ơ 
5XEƝÛ5XELFXUHÜLj࠿ੈ 
ݤశƤȀȓǖȎNjǸǬǔǦȜĻƝ෌Ƃ3+3ƝU 
ƝƸॡପƝƠƁƙƕƤƝ§ƞƙƞƞƀżƗơ 
֍ƙƜƁƿ5XELFXUHơ3XOO5HTXHVWLj੊ƙƕ
Rubicureとは 
ݤƤȀȓǖȎNjƙƜƠljƖƙƇƞ߶ƙƕƞƏǁ 
ruby -rubicure -e'p Precure.now' 
DzǖDzǖ¯ȀȓǖȎNjƤปਃLj૝ǀƕźƞƏǁ 
p Precure.dokidoki.girls.map(:name) 
ǽǔȓȜƎƹljƇlj 
Cure.peace.pikarin_janken
実装の特徴 
ǰÁǨƤࣃຸƥൄ߇ƠȖǡǬǘLj࣌ƁƐ§ 
ߑँƝӃڏƝƃǁƸƤƥ$0/੗ƝӃڏƍƜǁ 
ǑǍȓNjǢƠƟ
ȀȓǖȎNjGirlǓǿǡǐǘDZ
ƥǠȜǙȔDZȜ 
ƞƍƜǖȌǬǠȎƋǂǁ 
ॎƍźȀȓǖȎNjƥ$0/ơǰÁǨLjଶҔƏǁ
method_missing 
5XEƤખഀ୵ƠȊǨȀȖǙȒȈȜǙࡧච 
Cure.peaceƞ࣌ƅƞǖȎNjǽÁǢLjࡥ௩Ɲƃǁ 
Ƃ§def peaceƵƕźƠୗ֬ƂǜÁDzञơ੩ޠ 
ƏǁDžƇƝƥƠź 
ǓǿǡǐǘDZơȊǦǬDzƂ੩ޠƍƠƁƙƕƞƃ 
method_missing(name, args) ƂۋƦǂǁ
特異メソッド 
ǖȎNjǽÁǢƞǽǔȓȜƎƹljƇljLjƍƕź¯ 
ǓǿǡǐǘDZی๨ƤȊǦǬDzLjୗ֬Ɲƃǁ 
ȀȓǖȎNjƥਇƜGirlǓǿǡǐǘDZƖƂ§ 
ǖȎNjǽÁǢƤǍȜǢǨȜǢƤƵơ 
pikarin_jankenȊǦǬDzLjୗ֬Əǁ
変身 
൲य़ƥȀȓǖȎNjǠȓÁǣƊƞơϰƠǁ 
ǰȎNjȔǓÁȖȒǏǐÁǿ§ȊǨȋȔǾǒÁǥ 
ਃࢭƤହǀAcme::PrettyCureƤ$3,Ljٸ࣮ƍƜǁ 
ƤƝ§ǰǾǒȔDZƤ൲य़ȊǬǤÁǡȊǦǬDz
ƥtransform!ƝŸǁ
·।।।।।।।।।।· 
é¦DZȒȜǢǾǒÁȉ¯¦è 
¶AAAAAAA¶
変身 
ƓljƠȀȓǖȎNjƥ੩ޠƍƠź 
ȀȓǖȎNjƥメタモルフォーゼƋƑƕźƍ§ 
ǾȕǬǠȎƥチェインジƋƑƕź 
ȀȓǖȎNjƊƞơ$0/Ɲ൲य़ǜÁȔLjୗ֬ 
Girl#method_missingƝۋƦǂƕȊǦǬDzปƂ 
ی๨Ƥ൲य़ǜÁȔƞЁ૦ƏǂƦtransform!Əǁ
ruby -rubicure 
തହƥrequire rubicureƝ௲Ƶݡƶ 
ǠǐȔƁƿruby -rubicureƺirb -rubicureƝ 
֚௙ƏǁƉƞƂƝƃǁ 
ruby -r jsonƝ§-621ȒǍǿȒȓƂȖÁDzƋ 
ǂƕमઇơƠǁƤƝ§ȘȜȒǍdzÁơ൹ຳ 
-r jsonƤգƤǢȃÁǢƥःƅƉƞƂƝƃǁ
ruby -rubicure 
ŸƞƥÉDžƁǁƠ 
ƉƤNjǍǰnjNjƥ൭ơی๨ƤƸƤƝƥƠź 
5XEOLEUDUXQ 
೻ࢻ୵Ơ8QL[ഺȏÁǯnjȓǯnj 
ruby -run -e rm './*.rb' 
޹ӿLjຳຌƍƕ।գơઁƏǁȊǨȀȖǙȒȈȜǙ
むりやりなまとめ 
ȊǨȀȖǙȒȈȜǙƝಶ߇Ơ೗Ƈƿǂǁ 
ÉƉƞƂŸǁ 
ڦ޸ঢƂ୐ƅƠǁƤƝ§ȔÁȔƂ଼ƷƠźƞ੯ 
ƤƨƞƂǜÁDzLj௲ljƖǀƍơƅƅƠǁ 
Ɗຳຌƥپҹ୵ơ 
*LW+XEƤȀȔȓǘǑǢDZơƥԇƩƂŸǁ

Rubicureに学ぶメタプログラミング