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
ラーメン界の Basic Object を食べに行った話
Search
Hiroyuki Kuromiya
December 09, 2023
77
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ラーメン界の Basic Object を食べに行った話
Hiroyuki Kuromiya
December 09, 2023
More Decks by Hiroyuki Kuromiya
See All by Hiroyuki Kuromiya
誤算からはじまった小さなOSS貢献
khiroyuki1993
0
440
博士卒エンジニア キャリアの選択と 就活について
khiroyuki1993
0
580
SQLクエリの組み立てを 自動化するSlack Bot
khiroyuki1993
2
410
notion-to-slides: convert notion page to presentation slides
khiroyuki1993
0
2.4k
R で Github Repository をきれいにする
khiroyuki1993
0
670
Paper Introduction: The Recon Approach: A New Direction for Machine Learning in Criminal Law.
khiroyuki1993
0
190
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
540
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
610
Believing is Seeing
oripsolob
1
160
Prompt Engineering for Job Search
mfonobong
0
350
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
170
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Embracing the Ebb and Flow
colly
88
5.1k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
1.8k
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Leo the Paperboy
mayatellez
7
1.9k
Transcript
ラーメン界の Basic Object を食べに行った話 GMOペパボ株式会社 黒宮寛之
自己紹介 あだ名:くろみー 新卒エンジニアです 京大で博士号を取得しました! 3度の飯よりラーメン
ペパボのいいところ
社内のSlack に #ラーメン部 がある
ラーメン帰り 「なんかおすすめのラーメンありますか?」 「東京だと大勝軒は有名ですよね」 「大勝軒・・・あー池袋のあそこですか?」
「池袋も有名ですけど大勝軒といえば永福町ですよ」 「永福町ってなんかありましたっけ?」 「まさか行ったことないんですか?」 「はい」 「くろみーさん、大勝軒を知らないなんて Basic Object を知らずに Ruby 使ってるよう
なもんすよ」
大勝軒のラーメン 現代ラーメンの生みの親(S氏談) 1955年創業 王道の 煮干し豚骨醤油 関東近郊に数多くのれん分け
Ruby の Basic Object クラス 全ての Object の生みの親 class Hoge
end puts Hoge.superclass # => Object puts Hoge.superclass.superclass # => BasicObject puts Hoge.superclass.superclass.superclass # => nil
ドキュメントを見てみる
Object クラス 全てのクラスのスーパークラス。オブジェクトの一般的な振舞いを定義します。このク ラスのメソッドは上書きしたり未定義にしない限り、すべてのオブジェクトで使用する ことができます。 https://docs.ruby-lang.org/ja/latest/class/Object.html
Basic Object Class について 特殊な用途のために意図的にほとんど何も定義されていないクラスです。Objectクラス の親にあたります。Ruby 1.9 以降で導入されました。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
なんだこれは?
実際に動かして違いを見てみる
Object クラスを継承 結果はどうなる? class Fuga < Object def initialize(target) @target
= target end def method_missing(message, *args) @target.__send__(message, *args) end end fuga = Fuga.new(1) print fuga.eql? 1
BasicObject クラスを継承 結果はどうなる? class Fuga < BasicObject def initialize(target) @target
= target end def method_missing(message, *args) @target.__send__(message, *args) end end fuga = Fuga.new(1) print fuga.eql? 1
正解 Object クラスを使った場合:false BaiscObject クラスを使った場合: true
なんでこんなことが起こるのか? Object クラスでは eql? メソッドがすでに定義されている Fuga のインスタンスと 1 が一致しているかがチェックされる BasicObject
クラスは eql? メソッドが定義されていない method_missing が呼び出され結果的に @target 変数に入っている eql? メソ ッドが呼び出される 1 と 1 が一致しているかがチェックされる
何が嬉しいのか? いわゆるメタプログラミング的な用途に便利 基本的にはほぼすべてのクラスの親は Object と考えて差し支えありません。しかし、 ある種のクラスを定義する際には Object クラスは持っているメソッドが多すぎる場合 があります。 例えば、
BasicObject#method_missingを利用して Proxy パターンを実装する場合には Object クラスに定義済みのメソッドはプロクシできないという問題が発生します。こ のような場合に Object ではなく BasicObject から派生して問題を解決できます。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
とはいえ BasicObject を使わないといけない機会は少ない 通常のクラスは Object またはその他の適切なクラスから派生すべきです。真に必要な 場合にだけ BasicObject から派生してください。 https://docs.ruby-lang.org/ja/latest/class/BasicObject.html
トリビアの一つとして覚えて帰ってください😎
後日談
この話をS氏にしてみたところ 「知らなかった」 Basic Object を知らずに Ruby を使っていたことが判明した ラーメンの勉強と同じくらい Ruby の勉強もしないといけない
蛇足 私の大勝軒のレビューについてはこちらのブログをお読みください https://blog.kuromiyahiroyuki.tech/entry/2023/10/15/205502