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
Rubyの黒魔術
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
菊本 久寿
September 21, 2024
Programming
280
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
More Decks by 菊本 久寿
See All by 菊本 久寿
読まないコードリーディング術
hisaju
2
340
モメンタムマーケティング
hisaju
1
260
人生を救ってくれたエンジニアという生き方
hisaju
1
2.7k
ワークシフト
hisaju
0
360
サラリーマンのススメ
hisaju
0
2.1k
つくらないキャリアの作り方
hisaju
0
1.8k
キャリアにつなげる副業のやり方
hisaju
2
2.1k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
640
Other Decks in Programming
See All in Programming
조합이폭발하는디자인시스템이걸눈으로도테스트하라고요
giljongyu
0
580
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
420
3回つくってわかった、 定期実行ジョブ基盤の本質情報
takai
4
3.2k
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
320
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
300
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
1
200
contenteditable と日本語入力に向き合う
colorful12
0
220
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
1.9k
AmebaブログはKMPから卒業します
kmars0605
0
240
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.4k
Event is what happens
moro
2
1.6k
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
540
Unsuck your backbone
ammeep
672
58k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
How to make the Groovebox
asonas
2
2.5k
Typedesign – Prime Four
hannesfritz
42
3.2k
Agile that works and the tools we love
rasmusluckow
331
22k
Un-Boring Meetings
codingconduct
0
460
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Making Projects Easy
brettharned
120
6.8k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
350
Writing Fast Ruby
sferik
630
63k
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 他の言語出身のエンジニアから 嫌われること間違いなしニダ