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
160
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
Tweet
Share
More Decks by 菊本 久寿
See All by 菊本 久寿
読まないコードリーディング術
hisaju
2
200
モメンタムマーケティング
hisaju
1
150
人生を救ってくれたエンジニアという生き方
hisaju
1
2.5k
ワークシフト
hisaju
0
310
サラリーマンのススメ
hisaju
0
1.9k
つくらないキャリアの作り方
hisaju
0
1.5k
キャリアにつなげる副業のやり方
hisaju
2
2k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
560
Other Decks in Programming
See All in Programming
custom_lintで始めるチームルール管理
akaboshinit
0
200
複数ドメインに散らばってしまった画像…! 運用中のPHPアプリに後からCDNを導入する…!
suguruooki
0
450
ベクトル検索システムの気持ち
monochromegane
30
9.6k
プログラミング教育のコスパの話
superkinoko
0
130
ノーコードツールの裏側につきまとう「20分岐」との戦い
oguemon
0
200
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
300
家族・子育て重視/沖縄在住を維持しながらエンジニアとしてのキャリアをどのように育てていくか?
ug
0
260
AHC045_解説
shun_pi
0
350
Devin入門と最近のアップデートから見るDevinの進化 / Introduction to Devin and the Evolution of Devin as Seen in Recent Update
rkaga
9
4.2k
Boost Your Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
750
Signal-Based Data FetchingWith the New httpResource
manfredsteyer
PRO
0
130
Go1.24 go vetとtestsアナライザ
kuro_kurorrr
2
770
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
118
51k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
A Tale of Four Properties
chriscoyier
158
23k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
31
4.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
135
33k
Agile that works and the tools we love
rasmusluckow
328
21k
Building Applications with DynamoDB
mza
94
6.3k
GraphQLの誤解/rethinking-graphql
sonatard
70
10k
Typedesign – Prime Four
hannesfritz
41
2.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
510
Writing Fast Ruby
sferik
628
61k
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 他の言語出身のエンジニアから 嫌われること間違いなしニダ