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
ふん…おもしれぇ Parser。RubyKaigi 行ってやるぜ
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Kai
February 03, 2026
Programming
0
63
ふん…おもしれぇ Parser。RubyKaigi 行ってやるぜ
Kai
February 03, 2026
Tweet
Share
More Decks by Kai
See All by Kai
Rubyが好きな話
aki_pin0
0
18
Other Decks in Programming
See All in Programming
CSC307 Lecture 01
javiergs
PRO
0
680
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.3k
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
680
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.9k
Fluid Templating in TYPO3 14
s2b
0
130
CSC307 Lecture 09
javiergs
PRO
1
830
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
0
880
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
410
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
Rust 製のコードエディタ “Zed” を使ってみた
nearme_tech
PRO
0
130
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
ThorVG Viewer In VS Code
nors
0
760
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.2k
BBQ
matthewcrist
89
10k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
36k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
So, you think you're a good person
axbom
PRO
2
1.9k
The browser strikes back
jonoalderson
0
360
AI: The stuff that nobody shows you
jnunemaker
PRO
2
240
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.2k
Code Reviewing Like a Champion
maltzj
527
40k
The Curious Case for Waylosing
cassininazir
0
230
Transcript
Kai ふん…おもしれぇ Parser。 RubyKaigi 行ってやるぜ
None
楽しみですね!
いろんなトピックのセッションがある and more…
中でも…
Parserのセッションが多い!
他言語のカンファレンスと比較 カンファレンス 総セッション数 Parser 関連 割合 RubyKaigi 2025 57件 4件
7.01% PyCon US 2025 75件 1件 1.30% GopherCon UK 2025 22件 0件 0% RustConf 2025 23件 0件 0% ※ Claude調べ 間違ってたらごめんなさい
こんな画像も落ちてた
一方で
よくわからない …
• おもしろポイントがまだ見えていない • アプリケーションの実装から離れている • 学術理論に基づく部分はハードルが高いかも Parser に興味持つのむずいかもしれない問題
利用者間 ⇔ 言語開発者でギャップがあるかも? Parser 言語開発者 利用者
利用者間 ⇔ 言語開発者でギャップがあるかも? Parser 言語開発者 利用者 もったいない!
とはいえ、難しいものは難しい
• おもしろポイントがまだ見えていない • アプリケーションの実装から離れている • 学術理論に基づく部分はハードルが高いかも Parser に興味持つのむずいかもしれない問題 しゃーない
• おもしろポイントがまだ見えていない • アプリケーションの実装から離れている • 学術理論に基づく部分はハードルが高いかも Parser に興味持つのむずいかもしれない問題 しゃーない それはそう
• おもしろポイントがまだ見えていない • アプリケーションの実装から離れている • 学術理論に基づく部分はハードルが高いかも Parser に興味持つのむずいかもしれない問題 しゃーない それはそう
見えてほしい!
• 私:私の考える Ruby Parser おもしろポイントを喋る • 皆さん:Parser 関係のセッションに興味が湧く • 技術的な話はほぼしません!
• 厳密に正しくない説明もします! 目的:
おもしろポイント
おもしろポイント 言語の思想に基づく 内部実装の複雑性の解消
Ruby の思想:A Programmer's Best Friend https://www.ruby-lang.org/ja/
Ruby の思想:A Programmer's Best Friend https://www.ruby-lang.org/ja/
Ruby の思想:A Programmer's Best Friend https://www.ruby-lang.org/ja/
他言語との比較:実装 → 完成まで 簡単: 複雑: 他言語: SyntaxError RuntimeError RuntimeError SyntaxError
SyntaxError
他言語との比較:実装 → 完成まで 簡単: 複雑: SyntaxError RuntimeError RuntimeError 簡単: 複雑:
他言語: SyntaxError RuntimeError RuntimeError SyntaxError SyntaxError ※ この辺はトレードオフなので、他言語を貶める意図はありません
• 動的な型付け • 自然言語に近い書きやすい文法 • エラーよりも実行可能側に倒す ◦ 許容される文法が多く、SyntaxErrorを起こしづらい ◦ 実行時もエラーを値で返すものが多い
文法における Ruby の思想
自然言語に近く人間に優しい wakate.rb は楽しいイ ベントでした ◎ イベント楽しい wakate.rb サイコー wakate.rb で
したイベントは ◯ ?
自然言語に近く人間に優しい wakate.rb は楽しいイ ベントでした ◎ イベント楽しい wakate.rb サイコー wakate.rb で
したイベントは ◯ ? つまり錬金術の基本は等価交換 !! 何かを得ようとするなら それと同等の対価が必要って事だ — 鋼の錬金術師 エドワード・エルリック
自然な文法の対価 Parser 内部実装の複雑性
その前に:① lexer と parser lexer parser スクリプト トークン列 構文チェック •
lexer:構文チェックの前処理としてスクリプトをトークン列に変換 • parser:トークン列を読んで構文を確認 ◦ OK:以降の処理に移る ◦ NG:SyntaxError ◦ ※ 本当はASTの構築をしていますが今回は省略
その前に:① lexer と parser wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞
名詞 助動詞 句点 楽しいはイベントです wakate.rb。 形容詞 接続詞 名詞 助動詞 名詞 句点 lexer parser スクリプト トークン列 構文チェック
その前に:① lexer と parser 1 + 2 * 3 NUMBER
OPERATOR NUMBER OPERATOR NUMBER 1 +* 2 3 NUMBER OPERATOR OPERATOR NUMBER NUMBER lexer parser スクリプト トークン列 構文チェック
その前に:② parser の構文チェック方法 wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞 名詞
助動詞 句点 tokenize
その前に:② parser の構文チェック方法 wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞 名詞
助動詞 句点 [主題句] 形容詞 名詞 助動詞 句点 [名詞 接続詞] 形容詞 名詞 助動詞 句点 tokenize 還元
その前に:② parser の構文チェック方法 wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞 名詞
助動詞 句点 [主題句] 形容詞 名詞 助動詞 句点 主題句 [名詞句] 助動詞 句点 [名詞 接続詞] 形容詞 名詞 助動詞 句点 主題句 [形容詞 名詞] 助動詞 句点 tokenize 還元 還元
その前に:② parser の構文チェック方法 wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞 名詞
助動詞 句点 [主題句] 形容詞 名詞 助動詞 句点 主題句 [名詞句] 助動詞 句点 [名詞 接続詞] 形容詞 名詞 助動詞 句点 主題句 [形容詞 名詞] 助動詞 句点 主題句 [述語句] 句点 主題句 [名詞句 助動詞] 句点 tokenize 還元 還元 還元
その前に:② parser の構文チェック方法 wakate.rb は 楽しいイベントです。 名詞 接続詞 形容詞 名詞
助動詞 句点 [主題句] 形容詞 名詞 助動詞 句点 主題句 [名詞句] 助動詞 句点 [名詞 接続詞] 形容詞 名詞 助動詞 句点 主題句 [形容詞 名詞] 助動詞 句点 主題句 [述語句] 句点 主題句 [名詞句 助動詞] 句点 [主題句 述語句] 句点 [文] 句点 tokenize 還元 還元 還元 還元
その前に:② parser の構文チェック方法 1 + 2 * 3 NUMBER OPERATOR
NUMBER OPERATOR NUMBER NUMBER OPERATOR [EXPRESSION] [EXPRESSION] NUMBER OPERATOR [NUMBER OPERATOR NUMBER] [NUMBER OPERATOR EXPRESSION] PROGRAM EXPRESSION tokenize 還元 還元 還元
ruby の複雑性 同じ文字列でも tokenize の結果が異なる場合がある
同じ文字列でも tokenize の結果が異なる例 I read the book. 名詞 動詞 冠詞
名詞 I book it. 名詞 動詞 名詞 前の品詞や周囲の文字列によって次の tokenize の結果が異なる
同じ文字列でも tokenize の結果が異なる例 I read the book. 名詞 動詞 冠詞
名詞 I book it. 名詞 動詞 名詞 手前の単語を先に 還元しておかないと、次の単語の品詞を決定できない ➢ lexer の処理 (tokenize) に parser の処理結果が必要になる The people to run book it. [名詞句] 動詞 名詞
同じ文字列でも tokenize の結果が異なる例 前のトークンや周囲の文字列によって次の tokenize の結果が異なる ➢ 前のトークンが確定するのは …? ➢
parser による還元が終わった後 tOR として tokenize それぞれ tokenize
lexer と parser の密結合 他言語: lexer parser スクリプト lexer parser
スクリプト トークン列 構文チェック
• 他にも様々な要素によって tokenize の結果が変わる • Ruby ではそれを 状態 として構造化 lexer
と parser の密結合 lexer parser tokenize 状態の更新 還元 状態の更新 スクリプト
魔境爆誕
• メンテナビリティ • エラー許容性 • 移植性 • パフォーマンス 他にも様々な課題 https://techracho.bpsinc.jp/hachi8833/2023_07_10/131808
➢ これらの課題に立ち向かうため、 2つの Parser() が誕生!
• 手書きの再帰下降 parser • 現在のデフォルト • 高いエラー許容性 • ASTへの豊富なAPIの提供 •
高い移植性 • parser プログラムを生成する ruby ライブラリ (parser ではない) • 保守性を大きく改善 • これまでと異なるアルゴリズムの採用 2つのParser の誕生 Prism Lrama
• 魔境と呼ばれた parse.y に2つの全く異なるアプローチでアタック ◦ 手書きの再帰下降 parser ◦ parser generator
• Prism:過去と全く異なるモダナイゼーション • Lrama:革新的な parser アルゴリズムの実証 魔境の開拓 ➢ CS/構文解析の歴史においても鮮烈な状況がたのしい!
興味出た?まずは過去セッションをチェック! Prism Lrama https://youtu.be/3vzpv9GZdLo?si=_jWMZBGsDNAUYhnP https://youtu.be/CjYLcnlXO2Y?si=TgrMXn-OuFDJ8_qI
他にもチェックチェック • https://yui-knk.hatenablog.com/entry/2023/11/01/082815 • https://yui-knk.hatenablog.com/entry/2023/12/06/082203 • https://gihyo.jp/article/2024/01/ruby3.3-lrama • https://gihyo.jp/article/2024/01/ruby3.3-prism •
https://techracho.bpsinc.jp/hachi8833/2023_07_10/131808
• Ruby は自然言語的に書ける楽しい言語 • 文法を実現するために、Parserの内部実装は複雑化 • 保守性以外にも様々な課題 • それに立ち向かうため、PrismとLramaという異なるアプローチ まとめ