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
100
Rubyの黒魔術
RUNTEQ内のイベントで発表した初学者にはほぼ役に立たないけど、知っておくと面白いメソッドをご紹介してます。
菊本 久寿
September 21, 2024
Tweet
Share
More Decks by 菊本 久寿
See All by 菊本 久寿
モメンタムマーケティング
hisaju
1
120
人生を救ってくれたエンジニアという生き方
hisaju
1
2.4k
ワークシフト
hisaju
0
290
サラリーマンのススメ
hisaju
0
1.9k
つくらないキャリアの作り方
hisaju
0
1.4k
キャリアにつなげる副業のやり方
hisaju
2
1.9k
若手や未経験者を育てるときのメンターの心構え
hisaju
0
530
Other Decks in Programming
See All in Programming
CPython 인터프리터 구조 파헤치기 - PyCon Korea 24
kennethanceyer
0
240
Tuning GraphQL on Rails
pyama86
2
1k
外部システム連携先が10を超えるシステムでのアーキテクチャ設計・実装事例
kiwasaki
1
220
qmuntal/stateless のススメ
sgash708
0
120
現場で役立つモデリング 超入門
masuda220
PRO
12
2.9k
Sidekiqで実現する 長時間非同期処理の中断と再開 / Pausing and Resuming Long-Running Asynchronous Jobs with Sidekiq
hypermkt
6
2.7k
デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~
techouse
52
32k
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
7
430
gopls を改造したら開発生産性が高まった
satorunooshie
8
240
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
CSC509 Lecture 08
javiergs
PRO
0
110
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
240
Featured
See All Featured
Become a Pro
speakerdeck
PRO
24
5k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Git: the NoSQL Database
bkeepers
PRO
425
64k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
A Philosophy of Restraint
colly
203
16k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
7
150
How to Ace a Technical Interview
jacobian
275
23k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
790
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
3
370
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 他の言語出身のエンジニアから 嫌われること間違いなしニダ