Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rubicureに学ぶメタプログラミング
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
USAMI Kenta
September 12, 2014
Technology
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubicureに学ぶメタプログラミング
Rubyにおけるメタプログラミングの概要について
USAMI Kenta
September 12, 2014
More Decks by USAMI Kenta
See All by USAMI Kenta
学ばないDSL (渋谷.rb)
zonuexe
0
180
Other Decks in Technology
See All in Technology
OR学会2026年秋期大会_機械学習と数理最適化の融合による、配合レシピ最適化システム開発事例
brainpadpr
0
130
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
330
継続的なAIコスト最適化
bgpat
1
280
Claude Code本は、どのように執筆チームで書かれたか
oikon48
1
360
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
7
2.6k
FOSS4Gを活用した自治体業務DXの試み
470715
0
150
「事実」を「計測」して、「解釈」する 〜AWS Lambdaのメモリ最適解の見つけ方〜
maimyyym
0
140
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
610
分析AIエージェントを育てる、動く環境を育てる
codatum
1
950
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
7
2.9k
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
160
Execution in the Kingdom of Agents: Reflections on Abstraction and Complexity
bcantrill
0
940
Featured
See All Featured
Speed Design
sergeychernyshev
33
2.2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
4
1.2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
940
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
400
Darren the Foodie - Storyboard
khoart
PRO
4
4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
540
Transcript
Rubicureに学ぶ メタプログラミング @tadsan / 2014-09-12
お前 is 誰よ うさみけんた / @tadsan スマートフォン向けのAPIとか、pixiv.netの 細かいところの実装/修正を担当する屋さん PHPたのしい! 一番好きなテンプレートエンジンです
趣味ではRubyを書くことがあるよ! 最近社内ではGoとScalaの圧力が高まってつらい
_人人人人人人人人人人人人人人_ > たまには趣味の話をします <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
Rubyの文法 obj.meth と obj.meth() の意味は同じ PHPやPythonとは異なる振舞
Rubyの文法 クラスはオブジェクト class Obj def foo; :instance_foo; end def self.foo;
:class_foo; end end
メタプログラミングとは 誤解をおそれずにざっくり説明すると、 「プログラムを作るプログラムを作ること」 DRYを志向して重複を避け続けると、 人類はいつしかメタプログラミングに至る 常に最適な抽象化手法であるとは限らない Ruby on RailsはRubyにおけるDSLと メタプログラミング技術の粋を集めた結晶
趣味 _人人人人人人人人人人人人人_ > Rubyにおける代表的な < > プリキュア実装 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
_人人人人人人人人人人人人人_ > Rubyにおける代表的な < > プリキュア実装 <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
None
_人人人人人人人人人人_ > プリキュア実装?! <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
Rubicureとは sue445氏が開発したRuby gemライブラリ gem install rubicure で導入できる 起源は別にある Perl/Acme::PrettyCure and
Python/pycure APIはAcme::PrettyCureから強い影響を受けてる
経緯 昨年開催された「プリキュアハッカソン」で drillbitsさんがPythonで「Pycure」を実装 ハッカソン主催者のsue445氏がハッカソン後に Rubyで「Rubicure」を実装 今年のプリキュアハッカソン2で僕がPHPでry でも進捗でなかったので、とっととおうちに 帰ってからRubicureにPull Requestを送った
Rubicureとは 今のプリキュアってなんだっけと思ったとする ruby -rubicure -e'p Precure.now' ドキドキ!プリキュアの名前を知りたいとする p Precure.dokidoki.girls.map(&:name) ピカリンじゃんけん
Cure.peace.pikarin_janken
実装の特徴 データの処理は複雑なロジックを書かず、 参照で解決できるものはYAML側で解決してる (エイリアスなど) プリキュア(Girlオブジェクト)はシングルトン としてキャッシュされる 新しいプリキュアはYAMLにデータを追加する
method_missing Rubyの代表的なメタプログラミング手法 Cure.peace と書くとキュアピースを取得できる が、def peace みたいな定義がコード上に存在 するわけではない オブジェクトにメソッドが存在しなかったとき method_missing(name,
args) が呼ばれる
特異メソッド キュアピースとピカリンじゃんけんをしたい! オブジェクト固有のメソッドを定義できる プリキュアは全てGirlオブジェクトだが、 キュアピースのインスタンスのみに pikarin_jankenメソッドを定義する
変身 変身はプリキュア/シリーズごとに異なる デュアルオーロラウェーブ、メタモルフォーゼ 前述の通りAcme::PrettyCureのAPIを継承してる ので、デフォルトの変身メッセージ(メソッド) は transform! である
_人人人人人人人人人人_ > トランスフォーム! <  ̄Y^Y^Y^Y^Y^Y^Y^Y ̄
変身 そんなプリキュアは存在しない プリキュア5はメタモルフォーゼさせたいし、 フレッシュはチェインジさせたい プリキュアごとにYAMLで変身コールを定義 Girl#method_missing で呼ばれたメソッド名が 固有の変身コールと一致すればtransform!する
ruby -rubicure 普通は require "rubicure" で読み込む シェルからruby -rubicureやirb -rubicureで 起動することができる
ruby -r json で、JSONライブラリがロードさ れた状態になるので、ワンライナーに便利 -r jsonの間のスペースは省くことができる
ruby -rubicure あとは… わかるな? このアイディアは別に固有のものではない Ruby 2.1.0 - library un
標準的なUnix風ユーティリティ ruby -run -e rm './*.rb' 錯覚を利用した人間に対するメタプログラミング
むりやりなまとめ メタプログラミングで煩雑な避けられる …ことがある 検索性が低くなるので、ルールが掴めないと他 のひとがコードを読んだりしにくくなる ご利用は計画的に GitHubのプルリクエストには学びがある
None
None
None
_ \ヽ, ,、 `''|/ノ .|
_ | \`ヽ、| \, V `L,,_ |ヽ、) .| / ,、 / ヽYノ .| r''ヽ、.| | `ー-ヽ|ヮ | `| ヽ, ,r .| ヽ,r'''ヽ!'-‐'''''ヽ、ノ ,,,..---r'",r, , 、`ヽ、 ヾ ヽ、__/ ./ハレハ i`ヽ、 `''r`ミ_ .レ//r,,,、 レ'レハヾ, L,,_ `ヽ、 "レ, l;;;l l;;;l`i.リレ' リ ̄~~ ヽ、 ワ `"/-'`'`' `''''''''" ┼ヽ -|r‐、. レ | d⌒) ./| _ノ __ノ 使用フォント セプテンバーM・L Migu 2M