I Would Prefer Not To.

He is (maybe) ydah.

Ruby構文解析器 開発日録#3 - RubyKaigi 2024に登壇してきました

私は2024年5月15日から17日まで、沖縄の那覇で開催されていたRubyKaigi 2024に参加し、登壇をしてきました。 RubyKaigiへの参加はRubyKaigi 2022からなので今年で3年目です。

もう2週間が経とうとしていますが、少しずつ気持ちを整理してようやく現実に戻ってきました。 この記事自体は帰りの飛行機の中で書き始めたのですが、つらつらと書いていると凄まじい長文となってしまいました。(6/2現在までずっと書いているとは思いもしませんでした。)

本文章内に、他の方の旧Twitterでのポストを引用していますが、もし問題がございましたらお手数ですがお知らせください。

これはゆいレールのはじまり

発表では、Lramaに新たな文法を拡張するというアプローチでparse.yのメンテナンス性を向上させるというお話をしました。

rubykaigi.org

言葉にするのは非常に難しいのですが、今年のRubyKaigiは"業を生きる"ための一歩を歩み始めたのだと感じています。 自分の内なる力に基づいて、突き動かされるという感覚になったのははじめてかもしれません。

未だ現実から戻れていない部分もありつつこの文章を書いているので、読みづらい部分もあるかと思いますがお付き合いいただけますと幸いです。

Lramaとの出会い

タコライス with 南の島感があるジュース

「どういう経緯でParserやLramaに興味を持ったのですか?」というご質問を会期中によくいただいたので、そこから順に書いていこうと思っています。 思い返せば私のRubyKaigi 2024はRubyKaigi 2023のDay1から始まっていたのだと思います。

その日は金子さんの「The future vision of Ruby Parser」の発表があった日でした。 私はRubyKaigi 2023は当日スタッフとして参加しており、私は大ホールの担当でした。大ホールへの誘導も終えてからだったので途中から聞いたことを覚えています。

その時の私はというとParserのことについては何も分からないという状態だったので、果たして理解できるだろうかと思い聞いていました。 しかし、金子さんの発表は「Parserがこういう問題を抱えている」から「このように解決して倒した」という構造になっていて、またそれぞれが短編集のように構成されていたので、途中から聞いた上に知識のない私だった訳ですが、分からないなりにも何だかワクワクしたことを覚えています。

そして、Lramaと関わることを決定的にしたのがDay4です。一日特に予定もなくゆっくり過ごしてから帰路につく予定だったので、松本ブルワリーに行きビールを楽しんでから帰阪しようかと考えていました。すると、たまたま松田さんが一人でビールを飲まれていた訳です。

私はRubyKaigi 2023では30分のトークもLTもプロポーザルを出していて、LTのみ採択されたという経緯もあって、それぞれのプロポーザルについてのフィードバックをもらいたいと思っていたので、尋ねてみたところ「OSSにパッチを送っているという点は良いですが、ydahさんはまだ誰でもやれることしかやっていないじゃないですか〜」というフィードバックをいただきました1

また、「今回のセッションの中でydahさんと親和性がありそうなものでいうと、RuboCopにもよくパッチを送っているので、RuboCopでASTを扱っているんだからLramaとか見てみるといいんじゃないですか。Lramaはとても面白そうですよ。」という話をしていただきました。

そこで、私はDay1の金子さんのトークを聞いた時のワクワクを思い出して、「確かに楽しそうだなあ」と漠然と思いパッチを送り始めたというのが私がLramaに関わるきっかけでした。

RubyKaigi 2023 後から 2023年がおわるまで

Official Partyにて

そこからは定期的にLramaにパッチを送っていました。しかし、私は住んでいるのが大阪なこともあって中々その後すぐにオフラインのイベントでLramaの関係者と直接お会いしたことなかったように思います。

そして確かはじめて金子さんとお話ししたのは、大阪Ruby会議03でした。私はスタッフだったので、あまりゆっくりとお話しできなかったのですが、確か一部のセッションがすべて終わった後に「Lramaにパッチを送ってくれてますよね?今後もよろしくお願いします」と声をかけてもらったを覚えています。そして、前日に紹介したスタンドうみねこでの体験がよかったという話もしていましたね。

そこから、その後はKaigi on Rails 2023のDay1の2次会でこばじゅんさんとはじめてお話ししました。 大人数で向かったはずが、二人席で日本酒を飲みつつずっと話していたことを覚えています。日本酒が美味しすぎて飲み過ぎて話した内容は曖昧ですが、次はどこをやっていきます?という話をしていたので、我々はこの頃から実は変わらずparserの話を無限に生成していたのかもしれません。

そして、その後のKaigi on Rails 2023のオフィシャルパーティでお酒も飲まずにステージの辺りでparserの話をずっとしていたりしましたね。 これが #LR_parser_gangs の片鱗だったのかもしれないと思っています。金子さんからロードマップの話を聞いたりしつつ、当時はまだブログ記事になっていなかったLRパーサーを完全に理解した話を聞いていたのを覚えています。

yui-knk.hatenablog.com

yui-knk.hatenablog.com

そして、その後はRubyWorld Conference 2023S.H.さんとも初めてお会いして、あの例のお店の前で金子さんから#12: Action is a local variableなどのRubyKaigi 2023のLTで時間が足りず話せなかったAdvanced Courseの話を聞いて笑っていたことを思い出します。

RubyWorldで言うと金子さんの思いを聞けたのもすごく良かったなと思っています。その話を聞いて、今後も私はLramaに関わっていくのだろうなと思ったことを覚えています。

そして、#LR_parser_gangsの正装こと大構文解析時代! Parser age Tシャツのリリース。このTシャツは確か3色展開だったという記憶があるのですが、金子さん、こばじゅんさん、私と何も事前に示し合わせていないのにもかかわらず、全員が赤を選んでいたのですよね。#LR_parser_gangs は惹かれ合うという訳ですね(?)

なお、今回のトーク時の服装は事前の打ち合わせを行なっています。  

そして、2023年最後のイベントがRuby 3.3 リリースパーティーです。確か一番前の方の席に座っていたことを覚えています。皆、#LR_parser_gangsの正装を着ていて凄く良かったですね。

ここで金子さんから「RubyKaigiのプロポーザルのレビューをしますよ」という話をいただいて、プロポーザルのレビューをしていただけることになりました。 この時期はgihyo.jp Ruby 3.3 特集の記事を書いている頃の時期だったと思うのですが、本当に丁寧にレビューをして下さってありがとうございました。

TitleやAbstractでRubyKaigiに参加している人に向けて、自分のトークに対して興味を持ってもらえるように考えるという観点は今後も大事にしたいと思っています。 また、想定読者層だけでなく、真の想定読者を具体的に決めるというのも今後のプロポーザルを書くにあたってやっていきたいと思います。

何度も書き直したものをレビューしていただいて無事にプロポーザルを書き切って提出しました。 そして、採択されたことを知った時は本当に嬉しかったです。

発表の話

Photo by @hsbt san

スライドはこちらです:

発表の内容としては、parse.yに生成規則のパラメーター化という概念を導入したという話をしました。 私たちがプログラミング言語を用いてプログラムを書くとき当たり前のように使える文法も誰かがそこに実装したからそこにあるわけです。

実はparse.yはかなりプリミティブな文法という厳しい制約の中で書くしかなかったということ、そしてLramaの誕生によってそこに新しく文法を拡張することで、parse.yのメンテナンス性が向上していくんだということ、そしてparse.yが悪魔城や、地獄や、魔境と呼ばれていた場所ではなくなっていくんだという、そんな未来の一片を感じていただけたのであれば幸いです。

私のトークは複数の異なる層の方に向けてそれぞれメッセージが伝わるように設計していました。 なので、ブログで様々な感想をいただいて非常に嬉しく思っています。Lramaやparse.yは本当に楽しいので、楽しそうだという印象を持ってもらえただけでも成功だと思っています。

また、私の発表の後にParameterizing Rulesのことや提案したことについて成瀬さん、akrさんのお話が聞けたのは非常に嬉しかったです。 いくつか方針も決まったのがあるので、やっていきます。

ブログ記事でのフィードバックでも頂いていたのですが、発表で扱ったParameterizing RulesやInliningについての記事についてはここにまとめていこうと思っています。 随時書いていくつもりですので少々お待ちください。

聞きにいけた発表について

Day0のなはーと近影

今回はDay2に登壇ということもあって、登壇まではソワソワしていたりスライドを直していたりで見たかったトークを観にいけなかったのが心残りでした..... 観たいトークがたくさんあるので、動画がアップロードされるのを楽しみにしています。

感想は書くと長くなり過ぎてしまって大変なことになるので、簡潔に書きたいと思いながら書いています。

Day1

Writing Weird Code

drive.google.com

本当に最高のKeynoteでした。WeirdなCodeの書き方を聞いていたら、突然Self TRICKが始まるの凄くよかったです。

こう、奥行きがあって様々な人が楽しめるトークで、例えば私が新卒の頃に戻って見たとしても楽しめますし、あと何十年先の私が見ても楽しめるのだろうなと思いました。

他の誰にもできない素晴らしいKeynoteでした。実際に会場で観ることができて本当に良かったです。

github.com

The grand strategy of Ruby Parser

speakerdeck.com

昨年は"私の"future visionだったのが、今年は"私たち"のgrand strategyという対比があるなと思っていました。 おそらくそれは去年から考えていたことで Ruby Parser開発日誌 (9) - RubyKaigi 2023で発表してきた ~ 世はまさに”大パーサー時代” ~ - かねこにっき

"去年は一人でBisonを倒しました、今年はこれだけの仲間と一緒にこのボスを倒してきました"という話ができるといいな。

ということを書かれていて、本当にその通りになりましたね。 なぜLR Parserが良いのか、Lramaなのか、私"たち"はこの一年で何を成し遂げて私"たち"はどこに向かうのか、その大戦略を掲げた凄く良い発表でした。

また、これは昨年掲げたBisonを置き換えてparserをCRubyの内部からUniversal Parserとして独立させるということに対して、「金子さん以外の人にそれらのコードのメンテナンスをする人がいないのではないか?」という問いに対する強烈なアンサーだったのではと思っています。

1年前に何も分からなくて、ただワクワクするしかなかった私は金子さんの話の内容を理解出来ているんですよ。それもとても感慨深い発表でした。

Long journey of Ruby standard library

speakerdeck.com

default gemsをbundled gemsにしていく取り組みはとても尊いことで、更にとても大変そうに見えており...本当にありがとうございます。 ただ切り分ければいいだけでは勿論なくて、どのようにユーザーに伝えるかをケアするかを考えるのも大変そうだと思いながら聞いていました。 Rubyのバージョンを上げなくても問題を、問題を修正したバージョンのbundled gemsを利用することが出来るというのはとても良い世界だなと思いました。

Namespace, What and Why

speakerdeck.com

C++の文化圏に元々いたのでNamespaceの発表は非常に気になっていました。 Namespaceが入るとRubyが大きく変化するという機能なので、未来を感じて凄くワクワクしていました。 Ruby4.0の目玉機能になるかもしれないとのことで、非常に楽しみにしています。

Day2

Unlock The Universal Parsers: A New PicoRuby Compiler

slide.rabbit-shocker.org

parse.y is no longer a labyrinth!! まさか言及いただけると思っていなかったのでとても驚きました...! メモリ消費量が大きいVALUE/IMEMO/GCを着実に倒していき、凄まじい変化を定量的に見せるというのはやはり技術者としてカッコいい姿だと思っています。

Lrama-gen parserが真にUniversalなparserになっていくとともに、PicoRubyやmrubyのparserがCRubyと同じになっていくという未来って改めて凄いことだなと思いました。

RuboCop: LSP and Prism

speakerdeck.com

koicさんの362 日の Rubyist 活動が込められたトークでとてもよかったです! LSPの到来によってコミット前にRuboCopを実行することから解放されるのは本当に素晴らしい変更だと思っていて、大変お世話になっています。ありがとうございます。

一日目の金子さんの講演によって結末が変わって、追加のスライドを作ったと仰っていたスライドもとてもよかったです。 次の "362 日" には、どういう未来を信じてやっていけば良いかを改めてじっくりと考えるきっかけになりました。

Lightning Talks

Rearchitect Ripper

speakerdeck.com

Ripper has longstanding bugs like Bug #10436. The root cause of the bug is the limitation of Bison. However we can fix the issue now. Only on the Lrama.

このAbstructから良すぎるんだよな.....と思っていました。速度はPodcastを2倍速で聞いていた勢からだと聞き取れない早さではなかったです。 本当に楽しそうに話すんですよねと思いながら聞いていました。

Contributing to the Ruby Parser

speakerdeck.com

parse.yへのパッチを送るお話で、出来ることをやってみるという向き合い方に凄く共感していました。 最後、時間切れによって言葉としては聞けなかったのですがparse.y is Not Hell! We can hack parse.y!! ですね。

Drive Your Code: Building an RC Car by Writing Only Ruby

speakerdeck.com

Kyobashi.rbのPareja2ことhachiさん。Demoとてもよかったです。 電子工作がRubyで出来てラジコンがRubyで動くって凄く夢があっていいなと思いました。

こんな素敵なKyobashi.rbというコミュニティもあるので是非皆様のご参加をお待ちしています。

kyobashirb.connpass.com

Day3

From LALR to IELR: A Lrama's Next Step

speakerdeck.com

LR_parser_gang 締めくくりのトーク。完全に初見の気分で楽しむためにIELRの論文は読んでこなかった3のでとても新鮮で楽しく聴いていました。 論文から実装に落とし込む様というのは、やはりかっこいいなと思います。

トークを聞くまでは思っていたよりも小さい変更でIALRに対応できるの凄いなと驚いていたのですが、LALRで構文解析表を作った後に再計算すると知ってなるほど!と思いました。"Mysterious conflicts"になる実ケースが気になっています。どういうときに発生するのだろう...?

発表内で一緒に頑張っている仲間がいたから頑張ろうと思えたと仰ってましたが私も同じです。こばじゅんさんの存在があったから私も頑張れました。本当にありがとうございます。

Matz Keynote

Ruby4 へのバージョンアップがとうとう見えてきているのかという気持ちになりました。 Parserは今後どうなるのかというところですが、私は自分が信じているところでやっていくしかないのでやっていくぞというお気持ちです。

参加したイベント

これは唐突なやちむん通りのシーサー

以下のイベントに参加させていただきました。非常に楽しい時間をありがとうございました!

Day0

esminc.doorkeeper.jp

koicさんにRuboCop RSpecのv3.x系へのメジャーバージョンアップにあたって、色々と相談させていただきました。

また、この時にkoicさんの発表でも紹介されていたAutoCorrect: contextualのお話をお聞きしてRuboCop RSpecでも対応していきますという話をしていました。 ブログや大阪Ruby会議のあれそれで全然進められていないので、引き続きやっていきます。

koicさんと乾杯して、ゆっくりお話できたのは今回がはじめてで、この後の2次会でもDay1もDay3でもたくさん乾杯ができました。とても楽しかったです!

私のOSS活動しぐさはkoicさんとのRuboCopでのパッチ上でのやり取りで、その多くが形作られたものだと思っていて本当に感謝しています。ありがとうございます。

Day3にて直接話した記憶がありますが、私の初めてのOSSへパッチを送ったのはRuboCop Peroformanceへのパッチでした。

ドキドキしながらパッチを送ったのを今でも覚えています。そして、マージされた時の得も言われぬ高揚感も。 その時の体験が良すぎて、その体験がなければ今のようなOSSとの関わりはなかったのだと思います。

本当にありがとうございます。 そして、RuboCop RSpecはydahさんがいるから安心できると仰って貰えたのは非常に嬉しかったです。

またどこかでお会いした時は乾杯しましょう。(次は大阪ですかね。)

さて、話はNight Cruiseでの会話の話に戻り、ここからすでにずっとParserの話をしていました。

金子さん「型推論欲しい〜〜」、こばじゅんさんと僕「わかる〜〜」の図ですね。

パーサー三銃士を連れてきたよ!の例のコラが作成される時にはこの写真が使われるのでしょうね。

また、中田さんにもParameterizing Rulesの件でフィードバックいただいてありがとうございましたとご挨拶できてよかったです。 「過去10年で最高の parse.y」という言葉はここでParser gangsなテーブルでの話の中で聞いた記憶があるのですが、これを来年からも更新していかねばならないですねと思っていました。

Day1

ti.to

一回ホテルに荷物を置いていたらバスに乗り遅れてしまい、そのことに気づかずになはーと方面に向かっていたら合流したやんちゃさんとタクシーを探しながら会場に歩きつつ向かうというイベントから始まりました。お名前を聞きそびれてしまったのですが、途中で合流したお二人のRubyistの方と4人で無事タクシーに乗ることができて間に合ってよかったです。

そんなOfficial Partyでの一番の印象に残っているイベントはLramaのコミットビットをいただいたことですね。 これがRubyKaigiか.....と凄く感慨深い気持ちになりました。

そして、この後のn次会ではどんどん発表が迫ってきて精神的におかしくなっていて、おかしくなっていました.....。 この辺りから緊張により記憶が飛んでいるところもあってかなりおかしくなっていました..... 本当にご心配をおかけしました.....。

どうやって行ったか覚えていないステーキ

3時頃に寝たはずが翌日の午前5時に目が覚めてしまってそこから覚醒してしまって寝れなくて、スマホを眺めると上記の写真がカメラロールにあったのですが、本当にどうやって行ったか覚えていなくて限界状態だったんだなあと思いました。

身体も異常事態だったのか、ステーキの味が本当に感じられなくって焦っていたことは覚えています。また、酔いを覚まさないと.....!と思って深夜にライスを大盛りでおかわりして食べるという奇行に走っていたことも.....。そしてそのおかげで今胃が異常なまでにもたれていることも.....。

狂気の沙汰とはまさにこのことだなと思いました。

Day2

leanertechnologies.connpass.com

rubykaigikaraoke.doorkeeper.jp

様々な話をしていました。普段あまり話さないことについても話していましたね。 自分のトークも終わり解放感がありましたが、終わってしまったなあと喪失感もありました。

Day3

美味しいお肉をご馳走になったあと、シャークになりました。Follow The Sun, Catch The Sun.

connpass.com

After Partyでも様々な方とお話ができて本当によかったです。そして私の印象に残っていることは、jokerさんに感想を聞くことが出来たことです。つまり以下のjokerさんのブログの私の視点でのお話です。

joker1007.hatenablog.com

私のトークについて金子さんと戦略を立てていた時から、真の想定リスナーとしてjokerさんを想定して作成していました。 なぜかというと以下のjokerさんの記事にあるように、jokerさんはparser熱にあてられて自分でparserを実装してみるくらいには気持ちがある方だからです。

joker1007.hatenablog.com

そして、jokerさんを私も真の想定リスナーとしたいと思ったのは、実は私にとってjokerさんは私をRubyの世界に引き込んだRubyistなのです。 というのも、私は新卒で入社した会社では主に組み込み系や制御系のシステムを開発する仕事をしていて、業務で主に使用していたのはC言語C++でした。

そして、新入社員だった頃の私がたまたま見つけて参加した、関西Ruby会議06そして、関西Ruby会議2017で登壇されていたのがjokerさんでした。

Rubyのことは「たのしいRuby」を読みつつざっと使い方を知っているぐらいだった当時の私には何も分からないという状態だったのですが、jokerさんの話はテックな話をjokerさん自身が誰よりも楽しそうに話しているのが凄く印象的で、「ここまで熱中して話せるRubyって楽しそうだなあ」「この人の話が分かるようになりたい」と思ったわけです。

特に関西Ruby会議2017ではgemの開発についてのお話で、自分が作ったライブラリを公開していろんな人に使ってもらえるのって凄く楽しそうでは...?というOSSの開発への興味もjokerさんのお話を聞いて感じたのでした。

その頃からかなり時間は経ってしまいましたが、現職への転職をきっかけにRubyを仕事として使うようになって、OSSの開発が趣味となり今に至るわけです4。そんな私にとっての憧れのRubyistでして、その人を想定聴衆としてトークを組み立てているというのは非常に感慨深いものがありました。

そして、ブログ記事で言及までしてもらった上に、Day2で特に印象に残ったと言ってもらえた訳です。この言葉をいただけたなら大成功だったなと思い、感無量でした。

さいごに

首里から街を眺めるシーサー

まだまだ話したいことはあるのですが、終わりが本当に見えなくなるので、この辺りで終わりにしようと思います。 本当に楽しすぎて、まだ終わらせたくない気持ちもありますが、そろそろ現実に戻っていく時間だなと思います。

#LR_parser_gangs の皆様へ、これからもよろしくお願いします。これからもやっていきましょう。 次の "362 日の Rubyist 活動" のテーマも決まったので私も後は進んでいくだけなのでやっていきます。

RubyKaigi中にお会いしたりお話しさせていただいた皆様、とても楽しい時間を過ごせました。本当にありがとうございました。 そして、今年のRubyKaigiも本当に最高でした。オーガナイザーの皆様、スタッフの皆様ありがとうございました。

それでは、次のパッチでお会いしましょう。Adiós!


  1. この話をするたびに、松田さんが「そんなひどいことをいう人がいるんですか〜?」と言うところまでがお決まりの流れになっています
  2. 文脈 https://en.wikipedia.org/wiki/Tetsuya_Naito
  3. そもそも読む時間が捻出できなかったとも言いますね.....はい.....
  4. Kaigi on Rails 2023のn次会のビアパブで突然jokerさんにこのような話を突然して、驚かせてしまったことを覚えています.....