Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyの黒魔術
Search
菊本 久寿
September 21, 2024
Programming
0
250
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
Tweet
Share
More Decks by 菊本 久寿
See All by 菊本 久寿
読まないコードリーディング術
hisaju
2
280
モメンタムマーケティング
hisaju
1
200
人生を救ってくれたエンジニアという生き方
hisaju
1
2.6k
ワークシフト
hisaju
0
330
サラリーマンのススメ
hisaju
0
2k
つくらないキャリアの作り方
hisaju
0
1.7k
キャリアにつなげる副業のやり方
hisaju
2
2.1k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
600
Other Decks in Programming
See All in Programming
[AtCoder Conference 2025] LLMを使った業務AHCの上⼿な解き⽅
terryu16
6
1k
Python札幌 LT資料
t3tra
7
1.1k
AI Agent Dojo #4: watsonx Orchestrate ADK体験
oniak3ibm
PRO
0
120
.NET Conf 2025 の興味のあるセッ ションを復習した / dotnet conf 2025 quick recap for backend engineer
tomohisa
0
110
チームをチームにするEM
hitode909
0
440
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
4.8k
Basic Architectures
denyspoltorak
0
170
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2.1k
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
560
Vibe codingでおすすめの言語と開発手法
uyuki234
0
160
CSC307 Lecture 01
javiergs
PRO
0
660
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
470
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
94
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
115
100k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Un-Boring Meetings
codingconduct
0
170
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
360
Applied NLP in the Age of Generative AI
inesmontani
PRO
3
2k
We Are The Robots
honzajavorek
0
130
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
45
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Transcript
推しメソッド&Gem LT 会 Rubyの黒魔術
自己紹介 HN:ひさじゅ Ruby歴: 13年くらい 好きな書き方:メタプロ 好きなRubyの機能:mixin 得意技:モンキーパッチ、concern 座右の銘:可読性よりワンライナー 2
Rubyが 黒魔術と 呼ばれる理由 3
Rubyが黒魔術と呼ばれる理由 定義されたメソッドが見当たらない 4
とりあえずenumのソースを読んでみる 5 すべてを改造可能にする 「module_eval」 ブロックをあたかもクラス 定義やモジュール定義の中 のコードであるかのように 実行する ※ class_evalと同じ
module_evalでGemを魔改造 6 Faker::JapaneseMedia::Conan これだけじゃ足りない 映画タイトルも欲しいニダ
module_evalでGemを魔改造 7 コナンの映画タイトルを 取得できるように 改造するニダ
module_evalでGemを魔改造 8 config/initializers/faker_extend.rb 実験するニダ config/locale/faker_ja.yml rails c
Fakerのソースも読んでみる 9 無限にメソッドを増殖 「method_missing」 メソッドが見つからなかった時 に呼ばれる。method_missing を用いて呼ばれるメソッドを 「ゴーストメソッド」と呼ぶ。
method_missingで無限ゴーストメソッド 10 method_missing.rb kaiouken_◦◦bai を全部ゴーストメソッド化 するニダ
method_missingで無限ゴーストメソッド 11 成功ニダ
method_missingで無限ゴーストメソッド 12 method_missing.rb すべてをゴーストメソッド化 するニダ
method_missingで無限ゴーストメソッド 13 これで何のメソッドを 呼んでも エラーは出ないニダ
sendで文字からメソッドを実行 14 文字列からメソッド呼び出し 「send」 引数に指定された文字列をメソ ッドとして実行。2つ目以降の引 数は対象メソッドの引数に 合成した文字列から メソッドを実行するニダ
まとめ module_eval • Gemやライブラリを魔改造出来る悪魔のメソッド method_missing • メソッドが存在しないエラーを無効化し、ゴーストメソッドを量産 send • 動的に合成した文字列からメソッドを呼び出せる黒魔術メソッド
15 他の言語出身のエンジニアから 嫌われること間違いなしニダ