RubyKaigi 2025 に参加してきました

RubyKaigi 2025
hshimoyama aka. _h_s_ です。
最初に、RubyKaigi 2025 最高でした。ありがとうございます。
自身としては、Ruby コミュニティから一時的に離れてしまっていて、津開催の RubyKaigi 2022 を最後に松本と那覇が不参加だったため、3年ぶりの RubyKaigi 参加になりました。 久しぶりの参加で少し不安なところもあったのですが、コミュニティに暖かく迎えていただけたような気がします。
道後温泉近辺に宿を取り、 day0 に道後温泉を堪能しつつ、会期中は大街道近辺で交流、day4 に道後公園や松山城などの観光をして帰宅という流れで参加しました。
もう少し滞在を伸ばして松山以外へも足を伸ばして観光したいなという気持ちもあったのですが、物足りないと感じるくらいで帰るようにしています。松山やその近郊にはまた旅行に行きたいですね。
参加テーマ
今回の RubyKaigi に際して、ある程度の予習をしてから参加しました。
定めたテーマは『Parser』です。
今回のセッションには、4.0 の目玉である namespace や ZJIT についての発表もありましたし、実用上の様々な工夫や、Ruby の楽しさを再確認させてくれる内容など、たくさんの興味深いトピックがあったと思います。そんな中で Parser を選んだのは、自分の目に Parser が…というより parse.y と lrama を取り巻く環境が、すごく誠実で熱意のあるトピックに見えたからです。
parse.y は、曰く『悪魔城』曰く『魔境』と、ひどい言われ方をされているのですが、その発言の裏側に確かなリスペクトを感じました。
Ruby の楽しい体験は、その柔軟な文法があるからで、その柔軟な文法は、parse.y がその恐ろしいほどの複雑さを自身の中で表現しきってくれているからこそ実現出来ているのだと思います。一方で、長年の Ruby の成長の中で parse.y が常人にはメンテナンスが困難なものになっているというのも、漏れ聞こえてくるものだけでも理解できてしまいます。
lrama の方々はそれらを一つ一つ解体して整理し、合理的でメンテナンス可能な形に一歩一歩進めていて本当に偉業だと思っていて、それをちょっとでも深く理解したいなと思ったのが、今回『Parser』に着目した理由でした。
前述の通り 3年程 Ruby の動向には疎い生活をしていたので、3年分の Parser 動向を浴びることになりました。刺激が強すぎた気もしますが、結果的にものすごく満足度の高い RubyKaigi になったなと感じています。動向を追い続けてきた方々からすると数年遅れの驚きかもしれませんが、今からでも追えて良かったです。
Parser sessions
というわけで、まずは Parser 関連セッションの感想です。
個別のお話の前に全体を俯瞰した感想なのですが、セッション内容やその順番が本当に見事なんですよね。
まず発表内容の領域が
- kaneko さんが俯瞰的な話と lexer の領域の話
- ydah さんが文法の話
- junk0612 さんが parser の領域の話
と、ある程度網羅的な内容になるようになっています。しかも、セッション順も実際に言語が処理される順というか、解釈の順番になっていて、セッションを聞いている Rubyist が書く Ruby コード = テキストが、どのように処理されていくのかがイメージしやすくなっています。
これが戦略的なものだとしたら、Parser Gang の方々や Organizer の方々の手腕に脱帽という感じです。
Yuichiro Kaneko (@spikeolaf) 『Ruby's Line Breaks』
改行の話をフックにして会場の Rubyist に違和感を抱かせ、更にいくつかの実例を挙げながら、Ruby を書く際の (本来当たり前でない) 当たり前がどのような構造なのか、そしてそれがどれだけ混沌・例外の中にあり、lex state というものを用いてどのように対処されているのかが滑らかに説明されていました。
lrama の方々 (kaneko さん) から感じる誠実さは、このセッションの『Language, Grammar, Automaton and Parser』の項目にも現れていると思っていて、Ruby という Language への聴衆の理解度がまちまちな中で、Language とは何なのか、Grammar として表現されることで無限が有限のルールで取り扱えるようになること、Automaton の概要と、Parser が Grammar を表現する Automaton であること、だからこそ Parser が無限である Language を解釈出来る、という言語についての一般論?をあの短時間で説明しているんですよね。凄い。
また、こうやって俯瞰的な説明をしてくれることで、各項目の掘り下げをしたくなった時のインデックスになりますし、特に理解の難しい Automaton については、掘り下げの際の参考文献の紹介までされているので導入として完璧だと思いました。参考文献は3冊とも買いました。読まなければ。
そして後半の内容については RubyKaigi に来たなという実感が得られる内容でした。途中の LR Parser の解説は Ruby Parser開発日誌 (14) - LR parser完全に理解した - かねこにっき あたりを読んでいたので理解しやすく、lex state についても Ruby Parser開発日誌 (6) - parse.yのMaintainabilityの話 - かねこにっき でふんわり存在することは知っていましたが、現実の実装やフラグの意味等は知らなかったので興味深かったです。
その後の内容については、Automaton の理解も不足しているし、個別の例外やそのアプローチについて理解出来たような気になりつつも、lex state があることによる複雑な構造を十分に理解できたとは言い難く、要勉強だなぁという感じでした。
セッションからは離れますが、Parser をテーマに予習する際、『Ruby Parser開発日誌』が本当に参考になりました。 RubyKaigi 2025 の Parser 関連セッションがある程度理解できた (ような気がする) のはこの記事のおかげです、ありがとうございます。
Yudai Takada (@ydah_) 『Dissecting and Reconstructing Ruby Syntactic Structures』
より Grammar に焦点を当てて parse.y を解体していく発表でした。
いきなり本筋から外れた感想になるのですが、最初に話されていた syntax と semantics の違いの話 Colorless green ideas sleep furiously - Wikipedia が面白くて、いきなり引き込まれた気がしました。
syntax としては問題ないが semantics として意味のない文は、grammar よりも詳細なルールが暗黙的に存在していることを示唆していそうな気がするのですが、それは有限ではあるものの膨大かつ主観によって変わるものなので、一般化が難しそうです。ただ、プログラミングで言えば無限ループのような定義しやすい semantics error がありそうで(意図的な無限ループもあるのでこれも 100% ではない)、そういったものを扱う分野もあるんだろうなぁ、等と考えたりしました。
閑話休題。
stmt と expr の各言語の比較という着目点で言語間の文法上の複雑さを比較しようという試みは面白いと感じました。各言語でこんなに違いがあるんですね。
また、Ruby には args と primary という Grammar rule があり、一見単純な expr が複雑になっているというのも、この概念を知っているかいないかで理解が変わりそうでした。様々な解説で当然のように primary が出てきていて、これが何なのかを知れたのは良かったです。
また、図がとても見やすいなと思っていたら Lightning Talks の『Ruby on Railroad: The Power of Visualizing CFG』に繋がっていて感服しました。以前から Query Language Understood by SQLite などを見て分かりやすいなと思っていたので、こちらも素晴らしい偉業だと思います。
一部の方々は無くても parse.y が読めるようなのですが 私達一般人にはこの図の存在がめちゃくちゃありがたいです。
後半は parse.y の改善に関する偉業の話でした。スライド 84 ページで当日タイミングを逃したので改めて👏👏👏
実際にバグも見つかっていて素晴らしいと思いました(文法のバグ=非互換なので大変そうですが)
スライドを振り返ってみると Ruby Parser開発日誌 (6) - parse.yのMaintainabilityの話 - かねこにっき で言及されていた Nonterminal attribute を思い出したのですが、今回の発表で話されていたものは generics に徹していて rule は変化していないので別物なんだろうなーと理解しました。
Junichi Kobayashi (@junk0612) 『The Implementations of Advanced LR Parser Algorithm』
まず前半の LR Parser についての解説がとてもわかり易くて、Parser の勉強を始める初手にこの解説を見たかった!という気持ちになりました。 もちろん kaneko さんの Ruby Parser開発日誌 (14) - LR parser完全に理解した - かねこにっき や、その中でも言及のある大堀先生の LR構文解析の原理 も詳細で厳密な理解には良いと思うのですが、身近な Ruby のコードをベースにして、LR Parser がどのように解釈していくのか、逐次処理として色分けされたものを見ながら理解することが出来る最高の資料だと思います。
後半の IELR Parser 実装の話は、去年の RubyKaigi の From LALR to IELR: A Lrama's Next Step - RubyKaigi 2024 の発表から一年を経て、実際に IELR Parser を実装しきったという発表だったと思います。偉業です。
IELR Parser 自体をあまり理解できていないので、解説を十分に理解できているとは言えないのですが、元々のモチベーションだった LALR Parser における lookahead sets が文脈を考慮せず conflict する問題というのは直感的にもおかしいと思えるもので、人間が文法を解釈する際にはきっと暗黙的に解消されているものなのだろうと思いました。そして、それを Parser として実装するためにはこれだけ面倒なことをしなければいけないというのは、人間の脳の凄さを感じるとともに、それが学術的に解析されて実装に落とし込まれているということの凄さを感じました。
(実装もそうなのですが、間にサラッと出てきていたループ解消やパフォーマンス改善も実は結構面白そうなので、どこかでもっと詳細を聞いてみたいです)
junk0612 さんとはランチや Official Party で話す機会もあり、Parser について色々と教えて頂きました。この場を借りて感謝します。 Ruby on Timeline ボードゲームも頂いたので、会社のメンバーで遊んでみるつもりです。こちらも重ねてありがとうございます!

Other sessions
全セッション面白かったのですが、全てに言及するのは無理そうなので、いくつかのセッションにだけ感想・言及をさせてください。
Koichi ITO (@koic) 『RuboCop: Modularity and AST Insights』
今回の内容で特に興味を惹かれたのは、ランチでご一緒させて頂いたときにも話に出ていた、AST の話です。
Parser gem や lrama や Prism といった複数の Ruby パーサー実装が存在する中で、今後もそれら Parser の modularity の価値は高くなりそうです。ですが、現状は AST が標準化されておらず、今後、Rubocop に限らず、Parser を切り替えることを前提とした機能実装をする際に Universal AST は求められるのではないかなと思いました。
Practical side の判断として、Prism API を使うことになるのかもしれませんが、現在の AST で実現できないことを CST で情報量を増やすことで実現するなど、今後の動向を見ていきたいと思います。
Satoshi Tagomori (@tagomoris) 『State of Namespace』
とてもとても期待されている namespace ですが、実現するとなると本当に大変であることの一端が分かる発表でした。
tagomoris さんがデータ構造や方針を示して、聞いている自分も行けそうだという気持ちになったところを、直後に『そう思っていました…』とへし折られる話が何度も続き、本当に厳しい気持ちになりました。
アイデアには価値はないという言葉がありますが、アイデアだけではなくそれを実現しようとしたときに本当の困難が現れ、それを一つ一つ解消しながら実現していくというところが素晴らしい価値を生むのだなと感じました。
Yuya Fujiwara (@asonas) 『How to make the Groovebox』
asonas さんは本当に Ruby を楽しそうに使っていて良いなぁと思いました。 自分のやりたいことを Ruby を使って実現していて、過程も楽しんでいるのが本当に健全で素晴らしいと思います。
曲が流れ続ける中クロージングを迎え、終わったら曲と共にフェードアウトしていくのが本当に最高でした。
最後に

RubyKaigi Organizer, Staff, Helper の方々、そして Rubyist の皆さんの熱意に久しぶりに触れて、やはり Ruby コミュニティは素晴らしいなと思いました。
松山も良い街でした。ある程度コンパクトな範囲に様々な観光地が凝縮されていて、行きたい場所の選択肢の多さに目移りしてしまうほどでした。会期中の天気にも恵まれたのもあり、現地はとても快適でしたね。Official Party で楽しんだり、DD4D に行って Rubyist に会ったり、松山城の堅牢さに驚きつつやっぱり Rubyist に会ったり。
次回の RubyKaigi は函館開催で絶対に行くぞという気持ちを新たにしたので、また次回現地でお会いできる方々よろしくお願いします。
直近、関西Ruby会議08にも参加する予定なので、そちらも楽しみです。