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
210
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
Tweet
Share
More Decks by 菊本 久寿
See All by 菊本 久寿
読まないコードリーディング術
hisaju
2
240
モメンタムマーケティング
hisaju
1
170
人生を救ってくれたエンジニアという生き方
hisaju
1
2.6k
ワークシフト
hisaju
0
320
サラリーマンのススメ
hisaju
0
2k
つくらないキャリアの作り方
hisaju
0
1.6k
キャリアにつなげる副業のやり方
hisaju
2
2k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
580
Other Decks in Programming
See All in Programming
WindowInsetsだってテストしたい
ryunen344
1
240
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
160
ruby.wasmで多人数リアルタイム通信ゲームを作ろう
lnit
3
440
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
640
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
340
すべてのコンテキストを、 ユーザー価値に変える
applism118
3
1.2k
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
5
1.5k
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
280
VS Code Update for GitHub Copilot
74th
2
620
XP, Testing and ninja testing
m_seki
3
230
ISUCON研修おかわり会 講義スライド
arfes0e2b3c
1
410
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
950
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Testing 201, or: Great Expectations
jmmastey
42
7.6k
Building an army of robots
kneath
306
45k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
We Have a Design System, Now What?
morganepeng
53
7.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
The Straight Up "How To Draw Better" Workshop
denniskardys
234
140k
Become a Pro
speakerdeck
PRO
28
5.4k
Visualization
eitanlees
146
16k
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 他の言語出身のエンジニアから 嫌われること間違いなしニダ