Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RubyKaigi2025事後勉強会_JITがRubyを高速にする
Search
Taira Komai
March 25, 2026
Programming
4
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RubyKaigi2025事後勉強会_JITがRubyを高速にする
RubyKaigi2025に参加した際の社内事後勉強会にて発表したスライドです。
Taira Komai
March 25, 2026
More Decks by Taira Komai
See All by Taira Komai
Figma to STUDIOやってみた
komaitaira
0
4
とある2年目エンジニアの転職体験記
komaitaira
0
81
Other Decks in Programming
See All in Programming
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
180
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
110
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
300
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
JIS keyboard support in Omarchy
lef237
0
110
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
200
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
13k
The Language of Interfaces
destraynor
162
27k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
570
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Code Reviewing Like a Champion
maltzj
529
40k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
brightonSEO & MeasureFest 2025 - Winning Strategies for Black Friday CRO & PPC - Christian Goodrich
cargoodrich
3
870
We Are The Robots
honzajavorek
0
400
Transcript
JITが Rubyを高速にする 駒井 平
駒井 平(こまい たいら) プロダクト本部プロダクト開発1部プ ラットフォーム開発1グループ RubyKaigi参加歴 • 2023年 長野県 松本 • 2025年 愛媛県 松山
自己紹介
Today’s Topics 1. JITって何? 2. RubyにおけるJIT 3. YJITで本当に速くなるのか(簡単デモ) 4. なぜYJITで速くなるのか、LBBVについて
5. ZJITについて 6. まとめ
JITって何?
JITとは • JIT(Just In Time Compilation)、実行時コンパイル • プログラムを実行中に機械語(CPUが直接実行できるコード)に変 換して、実行を高速化する技術 JITって何?
プログラムの実行方式の比較 JITって何? 種類 説明 特徴 インタプリタ ソースコードを1行ずつ解釈し ながら実行 コードをすぐに実行できるが 遅い
コンパイラ(AOT) 事前に全部機械語に変換し てから実行 高速だがコンパイルの手間 がかかる JIT 実行時に必要な部分だけコ ンパイル 両者の中間、良いとこ取り
JITの仕組み 1. プログラムが実行される 2. JITは、何度も使われる「ホットなコード」を検出 3. その部分だけ機械語にコンパイルしてメモリに保持 4. 次からはそれを直接使って高速に実行 5.
つまり「使われるところだけ最適化して速くする」スマートな方式 JITって何?
RubyにおけるJIT
JITが導入される前の Ruby Rubyにおける JIT
• Ruby 1.8以前 1. Rubyのコード を字句解析と構文解析により 構文木(AST) に変換 2. C言語で書かれたプログラムが
構文木 を解釈して実行 Rubyにおける JIT 引用:https://qiita.com/wataru86/items/ab2d1b507c8d67c73281
• Ruby 1.9以降 1. Rubyのコード を字句解析と構文解析により 構文木(AST) に変換 2. 構文木を
YARV命令列(バイトコード) にコンパイル 3. YARV 命令をYARVが実行 Rubyにおける JIT 引用:https://qiita.com/wataru86/items/ab2d1b507c8d67c73281
JITが導入されてからの Ruby Rubyにおける JIT
MJIT • Ruby 2.6で導入 Ruby の JIT である MJIT はYARV命令列に変換する点は
Ruby 1.9 以降と同じですが、YARV 命令の一部をC言語に 変換、Cコンパイラに渡してコンパイル & 実行する、という特徴があります。 Rubyにおける JIT 引用:https://qiita.com/wataru86/items/ab2d1b507c8d67c73281
YJIT(Yet Another Ruby JIT) • Ruby 3.1から一部導入され、Ruby 3.3から安定化 MJIT は
YARV 命令を C言語に変換しているのに対し、 YJIT は 中間表現 (IR)を経由して機械語にまで変換を行いま す。また中間表現を経由することで様々な環境で動作するようになりました。 Rubyにおける JIT 引用:https://qiita.com/wataru86/items/ab2d1b507c8d67c73281
YJITで本当に速くなるのか (簡単デモ)
なぜYJITで速くなるのか、 LBBVについて
YJITで速くなる理由は LBBVにある • LBBV(Lazy Basic Block Versioning) ◦ JITコンパイラにおける最適化技法の1つで、「実行時の型情報 に応じて
Basic Block を複製・最適化する」手法 • Basic Block(基本ブロック) ◦ 入口が1つ、出口が1つの内部に分岐を含まない直線的な命令 列。 なぜYJITで速くなるのか、 LBBVについて
なぜYJITで速くなるのか、 LBBVについて • Rubyのような動的型付け言語では、 x.to_iという単純なコードの中にも、 xの型によって処理 の分岐が発生 • この型のコンテキスト毎に Basic
Blockを複数バージョン生成して保持すれば、そのブロックの 中では特定の型であることを前提したコードを生成し型検査を削除できる。また、この型コンテ キストは後続のBasic Blockにも引き継ぐことができる。
実行時に必要になったタイミングで新 しいBasic Blockのバージョンを生成 するように、生成タイミングを遅延 (LBBV) なぜYJITで速くなるのか、 LBBVについて • 有り得るすべてのバージョンのBasic Blockをあらかじめ生成しようとすると、組み合わせ
爆発が起きてとんでもない量のバージョンが生成される危険 組み合わせ 爆発 そこで
ZJITについて
ZJITについて https://rubykaigi.or g/2025/presentatio ns/maximecb.html
5/14に新しいRubyコンパイラ 「ZJIT」がRubyに統合された https://codezine.jp/article/ detail/21585 ZJITについて
まとめ
まとめ • RubyはJITを導入したことにより高速化を実現してきた • YJIT は、実行時によく使われる部分を効率的にコンパイルし、賢く 高速化するJITコンパイラ! ◦ LBBV等の技術により、状況に応じた最適なコードを生成 ◦
導入は簡単! --yjit オプションや環境変数でOK • 新しいZJITにも期待大! まとめ