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
すぎうり
June 23, 2026
Programming
0
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyのメソッド解決チェーン
すぎうり
June 23, 2026
More Decks by すぎうり
See All by すぎうり
お前はまだRubyの 型の強さを知らない
uproad3
0
0
動的型解析器 Ethotrace
uproad3
0
0
お前はまだRubyの 型システムを知らない
uproad3
1
44
UdonRubyの実現可能性について
uproad3
0
15
RubyKaja 2026
uproad3
0
7
VRChatでスライドを 表示する技術
uproad3
0
17
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
8
4.2k
AI 輔助遺留系統現代化的經驗分享
jame2408
1
970
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
170
OSもどきOS
arkw
0
590
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
140
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
400
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
610
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
スマートグラスで並列バイブコーディング
hyshu
0
260
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7.8k
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
1
300
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Marketing to machines
jonoalderson
1
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Ruling the World: When Life Gets Gamed
codingconduct
0
260
Balancing Empowerment & Direction
lara
6
1.2k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Speed Design
sergeychernyshev
33
1.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Transcript
Rubyのメソッド解決チェーン すぎうり
メソッド解決チェーンとは Rubyがメソッドを呼ぶとき、どこを探しに行くか MyClass 呼ばれたクラス SuperClass 継承元クラス Object BasicObject ← 先に探す
後で探す → obj.greet # MyClass に greet があれば → 使う # なければ → SuperClass を探す → Object → BasicObject この探索順序がメソッド解決チェーン( Method Resolution Order)
include するとチェーンの後ろに入る module Greetable def greet; 'Hello!'; end end class
MyClass include Greetable end 解決チェーン MyClass Greetable Object MyClass の後ろ(継承元の手前)に差し込まれる MyClass.ancestors # => [MyClass, Greetable, Object, ...] MyClass.new.greet # => 'Hello!' クラス自身にメソッドがなければ、 includeしたモジュールに委ねる
prepend するとチェーンの先頭に入る module Greetable def greet puts 'called!' super end
end class MyClass prepend Greetable end MyClass.ancestors # => [Logger, MyClass, Object, ...] MyClass.new.greet # => 'called!' include の場合(参考) MyClass Greetable Object prepend の場合 Greetable MyClass Object MyClass より前(先頭)に割り込む どのメソッドを呼んでも、必ず prependのGreetableを通る
元のメソッドを変えずに、呼び出しを横取りできる 呼び出しの流れ 呼び出し元 prepend モジュール ← 先に通る 元のメソッド super で呼ばれる
戻り値 引数を記録する module Tracer def greet(name) # 引数を記録する $log << { method: :greet, args: [name], class: name.class } super # 元のメソッドを呼ぶ end end MyClass.prepend(Tracer)