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
130
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
Tweet
Share
More Decks by 菊本 久寿
See All by 菊本 久寿
モメンタムマーケティング
hisaju
1
140
人生を救ってくれたエンジニアという生き方
hisaju
1
2.5k
ワークシフト
hisaju
0
300
サラリーマンのススメ
hisaju
0
1.9k
つくらないキャリアの作り方
hisaju
0
1.5k
キャリアにつなげる副業のやり方
hisaju
2
2k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
550
Other Decks in Programming
See All in Programming
Ruby on cygwin 2025-02
fd0
0
120
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
160
Writing documentation can be fun with plugin system
okuramasafumi
0
110
チームリードになって変わったこと
isaka1022
0
170
GitHub Actions × RAGでコードレビューの検証の結果
sho_000
0
190
法律の脱レガシーに学ぶフロントエンド刷新
oguemon
5
670
Simple組み合わせ村から大都会Railsにやってきた俺は / Coming to Rails from the Simple
moznion
3
4.1k
AWS Lambda functions with C# 用の Dev Container Template を作ってみた件
mappie_kochi
0
230
ErdMap: Thinking about a map for Rails applications
makicamel
1
1.3k
【PHP】破壊的バージョンアップと戦った話〜決断と説得
satoshi256kbyte
0
120
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
200
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
170
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.2k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
45
2.3k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
The Cult of Friendly URLs
andyhume
78
6.2k
Designing Experiences People Love
moore
139
23k
For a Future-Friendly Web
brad_frost
176
9.5k
Navigating Team Friction
lara
183
15k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
20
2.4k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
530
Fantastic passwords and where to find them - at NoRuKo
philnash
50
3k
Docker and Python
trallard
44
3.2k
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 他の言語出身のエンジニアから 嫌われること間違いなしニダ