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
contributing-to-spinel
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yamasaki
May 13, 2026
Programming
790
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
contributing-to-spinel
RubyKaigi 2026 アフターイベント〜初参加LT・スポンサー4社のパネル〜
https://mybest.connpass.com/event/392055/
yamasaki
May 13, 2026
More Decks by yamasaki
See All by yamasaki
YJITのBenchmarksに貢献した話
sacckey
0
77
Other Decks in Programming
See All in Programming
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
280
AIに既存システムを理解させる技術 ~レガシーを見捨てないハーネスエンジニアリング入門~
ochtum
0
200
Can LLMs Replicate 4 Years of Compose Migration? Exploring the boundaries of automation with 279 XML files from a real product
makun
0
130
AIと壁打ちしながら進めるコスト管理
fufuhu
2
1.9k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
130
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
600
AIの中の人になってみる
htkym
0
150
My Marp Sample
sinoue0108
0
140
T3DD26: From RAGs to Riches
martinhelmich
0
130
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
490
不幸な GC
chencmd
0
870
Featured
See All Featured
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
A Soul's Torment
seathinner
7
3.5k
The Curious Case for Waylosing
cassininazir
1
490
Deep Space Network (abreviated)
tonyrice
0
290
RailsConf 2023
tenderlove
30
1.5k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
Spinelに貢献した話
note inc. ⾃⼰紹介 Yamasaki sacckey • 2020/04 note⼊社 • サーバーサイドエンジニア
◦ 最近は物語投稿サイトTALESの実装 • 個⼈開発/ピアノ/⿇雀 2
note inc. Matz Keynote 3
note inc. Spinel 4 • RubyのAOTコンパイラ • Ruby (.rb) →
parse → type inference → C (.c) → native binary • Rubyプログラムの実⾏速度とポータビリティの向上
note inc. さっそくSpinelを使ってみる % make deps % make % cat
> hello.rb <<'RUBY' def fib(n) n < 2 ? n : fib(n - 1) + fib(n - 2) end puts fib(34) RUBY % ./spinel hello.rb % ./hello # prints 5702887 (instantly) 5
note inc. Ruby Boy (https://github.com/sacckey/rubyboy) • Rubyで動くGame Boyのエミュレーター • ruby.wasmによってブラウザでも動く
◦ https://sacckey.github.io/rubyboy/ • 画⾯描画なしのベンチマークがある ◦ → Spinelでコンパイルしたい ◦ → コンパイル失敗 ◦ → 失敗箇所ごとにPR作成 6
note inc. Spinelに貢献する 7 Contributingを翻訳して抜粋 貢献を歓迎します。課題追跡システムはロードマップとしても機能します。未解決の問題であれば何でも 対象となります。最も有⽤なエントリーポイントは、再現⼿順を⽰すバグ報告(Spinelでは失敗するが CRubyでは成功する5⾏のRubyコードなど)と、そのような報告を解決するコード⽣成による修正です。 • コンパイルに失敗するコードを⼩さく切り出し、CRubyでは動くがSpinelでは落ちるテストを作る
• それを通るようにする
note inc. 貢献1: M::C.new対応 8 # コンパイルできるようになったコード module M class
C def initialize puts "init" end end end M::C.new M::C のような名前空間つきクラスに対して .new できなかった ConstantPathNode がレシーバーになる ケースに対応
note inc. 貢献2: インスタンス変数名とCキーワードの衝突回避 9 # コンパイルできるようになったコード class KeywordIvar def
initialize @if = 40 @iv_if = 1 end def value @if + @iv_if + 1 end end puts KeywordIvar.new.value @if をCコードに変換すると、 Cの if と衝突してしまっていた 生成されるCのフィールド名に iv_ prefixを付 けた 例: @if → iv_if @iv_if → iv_iv_if
note inc. その他の貢献 10 • nested ConstantPath reads • ConstantPath
receiverへのclass method dispatch • polymorphic returnのbox • constructor initialize pathのGC save重複排除
note inc. まとめ • SpinelでRuby Boyをコンパイルしようとしたら、まだ動かないRubyコードが⾒つかった ◦ ⼤きな機能追加ではなく、最⼩再現テストにすることが貢献になった • 「CRubyでは動くがSpinelでは落ちる5⾏のRuby」を⾒つけたら貢献のチャンス
◦ Spinelで遊んで、動かないコードを⾒つけたらPRを出そう! 11
note inc. 12 noteでは仲間を募集中です! https://note.jp/n/nc0fe1a230633 募集職種: • サーバーサイドエンジニア • サーバーサイドエンジニア
(次世代リーダー候補 / 第⼆新卒歓迎) • AIプラットフォームエンジニア 採⽤情報
None