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
21
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 すぎうり
BareRuby ~組み込み向けRubyAOTコンパイラ~
uproad3
0
21
AIコードアポカリプス
uproad3
0
44
負債解消という仕事は儲かる
uproad3
6
4k
RaspberryPi Picoの表現力の拡張 ~アナログコンピュータとの出会い~
uproad3
0
32
お前はまだRubyの 型の強さを知らない
uproad3
0
29
動的型解析器 Ethotrace
uproad3
0
16
お前はまだRubyの 型システムを知らない
uproad3
1
64
UdonRubyの実現可能性について
uproad3
0
32
RubyKaja 2026
uproad3
0
26
Other Decks in Programming
See All in Programming
Introducing Stack Pull Request in GitHub
kkamegawa
0
110
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
530
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
580
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
5
550
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
ソフトウェアラスタライザ
fadis
1
720
「人を評価する AI」の設計と実装
ryoyanara
0
260
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
430
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
120
ALB ログから Trace を気合で繋げる技術
fohte
7
770
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
290
So, you think you're a good person
axbom
PRO
2
2.1k
Paper Plane
katiecoart
PRO
2
53k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Docker and Python
trallard
47
4.2k
New Earth Scene 8
popppiees
3
2.5k
The Language of Interfaces
destraynor
162
27k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
How to build a perfect <img>
jonoalderson
1
5.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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)