私は2024年5月15日から17日まで、沖縄の那覇で開催されていたRubyKaigi 2024に参加し、登壇をしてきました。 RubyKaigiへの参加はRubyKaigi 2022からなので今年で3年目です。
もう2週間が経とうとしていますが、少しずつ気持ちを整理してようやく現実に戻ってきました。 この記事自体は帰りの飛行機の中で書き始めたのですが、つらつらと書いていると凄まじい長文となってしまいました。(6/2現在までずっと書いているとは思いもしませんでした。)
本文章内に、他の方の旧Twitterでのポストを引用していますが、もし問題がございましたらお手数ですがお知らせください。
発表では、Lramaに新たな文法を拡張するというアプローチでparse.yのメンテナンス性を向上させるというお話をしました。
言葉にするのは非常に難しいのですが、今年のRubyKaigiは"業を生きる"ための一歩を歩み始めたのだと感じています。 自分の内なる力に基づいて、突き動かされるという感覚になったのははじめてかもしれません。
未だ現実から戻れていない部分もありつつこの文章を書いているので、読みづらい部分もあるかと思いますがお付き合いいただけますと幸いです。
Lramaとの出会い
「どういう経緯で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。
day4 #rubykaigi w/@a_matsuda ずっと伝えたかった感謝を伝えられて良かったです〜🙌 pic.twitter.com/WiQs536SQR
— Yudai TAKADA / ydah (@ydah_) May 14, 2023
また、「今回のセッションの中でydahさんと親和性がありそうなものでいうと、RuboCopにもよくパッチを送っているので、RuboCopでASTを扱っているんだからLramaとか見てみるといいんじゃないですか。Lramaはとても面白そうですよ。」という話をしていただきました。
そこで、私はDay1の金子さんのトークを聞いた時のワクワクを思い出して、「確かに楽しそうだなあ」と漠然と思いパッチを送り始めたというのが私がLramaに関わるきっかけでした。
RubyKaigi 2023 後から 2023年がおわるまで
そこからは定期的にLramaにパッチを送っていました。しかし、私は住んでいるのが大阪なこともあって中々その後すぐにオフラインのイベントでLramaの関係者と直接お会いしたことなかったように思います。
そして確かはじめて金子さんとお話ししたのは、大阪Ruby会議03でした。私はスタッフだったので、あまりゆっくりとお話しできなかったのですが、確か一部のセッションがすべて終わった後に「Lramaにパッチを送ってくれてますよね?今後もよろしくお願いします」と声をかけてもらったを覚えています。そして、前日に紹介したスタンドうみねこでの体験がよかったという話もしていましたね。
美味しいビールが飲みたい!!となった場合でした難波でしたらスタンドうみねこもしくは、北新地まで行きクラフトビアベースBUDという選択肢があります。https://t.co/k6evF6bQZahttps://t.co/PqLyuz9S4N
— Yudai TAKADA / ydah (@ydah_) September 8, 2023
そこから、その後はKaigi on Rails 2023のDay1の2次会でこばじゅんさんとはじめてお話ししました。 大人数で向かったはずが、二人席で日本酒を飲みつつずっと話していたことを覚えています。日本酒が美味しすぎて飲み過ぎて話した内容は曖昧ですが、次はどこをやっていきます?という話をしていたので、我々はこの頃から実は変わらずparserの話を無限に生成していたのかもしれません。
パーサーってたのしいね! #kaigionrails https://t.co/IsmbfN4NpZ
— D-Swordman (@junk0612) October 27, 2023
そして、その後のKaigi on Rails 2023のオフィシャルパーティでお酒も飲まずにステージの辺りでparserの話をずっとしていたりしましたね。 これが #LR_parser_gangs の片鱗だったのかもしれないと思っています。金子さんからロードマップの話を聞いたりしつつ、当時はまだブログ記事になっていなかったLRパーサーを完全に理解した話を聞いていたのを覚えています。
そして、その後はRubyWorld Conference 2023でS.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 は惹かれ合うという訳ですね(?)
Ruby3.3 リリースが目前に迫りました!
— OSS-Vision Official (@OssVision) December 14, 2023
リリースに向けまつもとさんから
「大構文解析時代! Parser age」
のキーワードを頂きTシャツにアレンジしました。
多くの皆さんで Ruby3.3 リリースを祝し、関係各位に感謝しましょう。
当コレクションも、収益の一部を… pic.twitter.com/uTv3kxJ0Hz
打ち合わせしていないのに色が揃うの良すぎますね
— Yudai TAKADA / ydah (@ydah_) December 26, 2023
なお、今回のトーク時の服装は事前の打ち合わせを行なっています。
赤いパーサーTシャツにスピーカーのシャツを羽織る予定です
— kaneko.y (@spikeolaf) May 15, 2024
承りました。
— D-Swordman (@junk0612) May 15, 2024
そして、2023年最後のイベントがRuby 3.3 リリースパーティーです。確か一番前の方の席に座っていたことを覚えています。皆、#LR_parser_gangsの正装を着ていて凄く良かったですね。
どうぞー pic.twitter.com/60lCHHMc7t
— tomog (@tomog105) December 26, 2023
ここで金子さんから「RubyKaigiのプロポーザルのレビューをしますよ」という話をいただいて、プロポーザルのレビューをしていただけることになりました。 この時期はgihyo.jp Ruby 3.3 特集の記事を書いている頃の時期だったと思うのですが、本当に丁寧にレビューをして下さってありがとうございました。
TitleやAbstractでRubyKaigiに参加している人に向けて、自分のトークに対して興味を持ってもらえるように考えるという観点は今後も大事にしたいと思っています。 また、想定読者層だけでなく、真の想定読者を具体的に決めるというのも今後のプロポーザルを書くにあたってやっていきたいと思います。
何度も書き直したものをレビューしていただいて無事にプロポーザルを書き切って提出しました。 そして、採択されたことを知った時は本当に嬉しかったです。
発表されたのでご報告ですが、"Your proposal for RubyKaigi 2024 has been accepted"でした。頑張ります https://t.co/U4Ln2Xk4Ld
— Yudai TAKADA / ydah (@ydah_) March 1, 2024
発表の話
スライドはこちらです:
発表の内容としては、parse.yに生成規則のパラメーター化という概念を導入したという話をしました。 私たちがプログラミング言語を用いてプログラムを書くとき当たり前のように使える文法も誰かがそこに実装したからそこにあるわけです。
実はparse.yはかなりプリミティブな文法という厳しい制約の中で書くしかなかったということ、そしてLramaの誕生によってそこに新しく文法を拡張することで、parse.yのメンテナンス性が向上していくんだということ、そしてparse.yが悪魔城や、地獄や、魔境と呼ばれていた場所ではなくなっていくんだという、そんな未来の一片を感じていただけたのであれば幸いです。
私のトークは複数の異なる層の方に向けてそれぞれメッセージが伝わるように設計していました。 なので、ブログで様々な感想をいただいて非常に嬉しく思っています。Lramaやparse.yは本当に楽しいので、楽しそうだという印象を持ってもらえただけでも成功だと思っています。
また、私の発表の後にParameterizing Rulesのことや提案したことについて成瀬さん、akrさんのお話が聞けたのは非常に嬉しかったです。 いくつか方針も決まったのがあるので、やっていきます。
場所を移動しての ParserKaigi だ。 #rubykaigi https://t.co/AV4kxzCfI5 pic.twitter.com/CR6AhFD2pa
— 齋藤甚六 (@jimlock) May 16, 2024
ブログ記事でのフィードバックでも頂いていたのですが、発表で扱ったParameterizing RulesやInliningについての記事についてはここにまとめていこうと思っています。 随時書いていくつもりですので少々お待ちください。
聞きにいけた発表について
今回はDay2に登壇ということもあって、登壇まではソワソワしていたりスライドを直していたりで見たかったトークを観にいけなかったのが心残りでした..... 観たいトークがたくさんあるので、動画がアップロードされるのを楽しみにしています。
感想は書くと長くなり過ぎてしまって大変なことになるので、簡潔に書きたいと思いながら書いています。
Day1
Writing Weird Code
本当に最高のKeynoteでした。WeirdなCodeの書き方を聞いていたら、突然Self TRICKが始まるの凄くよかったです。
こう、奥行きがあって様々な人が楽しめるトークで、例えば私が新卒の頃に戻って見たとしても楽しめますし、あと何十年先の私が見ても楽しめるのだろうなと思いました。
他の誰にもできない素晴らしいKeynoteでした。実際に会場で観ることができて本当に良かったです。
The grand strategy of Ruby Parser
昨年は"私の"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
default gemsをbundled gemsにしていく取り組みはとても尊いことで、更にとても大変そうに見えており...本当にありがとうございます。 ただ切り分ければいいだけでは勿論なくて、どのようにユーザーに伝えるかをケアするかを考えるのも大変そうだと思いながら聞いていました。 Rubyのバージョンを上げなくても問題を、問題を修正したバージョンのbundled gemsを利用することが出来るというのはとても良い世界だなと思いました。
Namespace, What and Why
C++の文化圏に元々いたのでNamespaceの発表は非常に気になっていました。 Namespaceが入るとRubyが大きく変化するという機能なので、未来を感じて凄くワクワクしていました。 Ruby4.0の目玉機能になるかもしれないとのことで、非常に楽しみにしています。
Day2
Unlock The Universal Parsers: A New PicoRuby Compiler
parse.y is no longer a labyrinth!! まさか言及いただけると思っていなかったのでとても驚きました...! メモリ消費量が大きいVALUE/IMEMO/GCを着実に倒していき、凄まじい変化を定量的に見せるというのはやはり技術者としてカッコいい姿だと思っています。
Lrama-gen parserが真にUniversalなparserになっていくとともに、PicoRubyやmrubyのparserがCRubyと同じになっていくという未来って改めて凄いことだなと思いました。
RuboCop: LSP and Prism
koicさんの362 日の Rubyist 活動が込められたトークでとてもよかったです! LSPの到来によってコミット前にRuboCopを実行することから解放されるのは本当に素晴らしい変更だと思っていて、大変お世話になっています。ありがとうございます。
一日目の金子さんの講演によって結末が変わって、追加のスライドを作ったと仰っていたスライドもとてもよかったです。 次の "362 日" には、どういう未来を信じてやっていけば良いかを改めてじっくりと考えるきっかけになりました。
Lightning Talks
Rearchitect Ripper
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
parse.yへのパッチを送るお話で、出来ることをやってみるという向き合い方に凄く共感していました。 最後、時間切れによって言葉としては聞けなかったのですがparse.y is Not Hell! We can hack parse.y!! ですね。
Drive Your Code: Building an RC Car by Writing Only Ruby
Kyobashi.rbのPareja2ことhachiさん。Demoとてもよかったです。 電子工作がRubyで出来てラジコンがRubyで動くって凄く夢があっていいなと思いました。
これは #kyobashirb 裏話なんですが、こういう本を書こうと思ってるんですよーって kyobashi.rb で話してたらそれ RubyKaigi LT にしましょうと @ydah_ san に背中を押されて LT 出したので背中を押してくれる人がいるというのはありがたいことだなと思っております https://t.co/LcxfifTnQK
— hachi (Hayao Kimura) @技術書典16 く10 (@hachiblog) May 23, 2024
こんな素敵なKyobashi.rbというコミュニティもあるので是非皆様のご参加をお待ちしています。
Day3
From LALR to IELR: A Lrama's Next Step
LR_parser_gang 締めくくりのトーク。完全に初見の気分で楽しむためにIELRの論文は読んでこなかった3のでとても新鮮で楽しく聴いていました。 論文から実装に落とし込む様というのは、やはりかっこいいなと思います。
トークを聞くまでは思っていたよりも小さい変更でIALRに対応できるの凄いなと驚いていたのですが、LALRで構文解析表を作った後に再計算すると知ってなるほど!と思いました。"Mysterious conflicts"になる実ケースが気になっています。どういうときに発生するのだろう...?
発表内で一緒に頑張っている仲間がいたから頑張ろうと思えたと仰ってましたが私も同じです。こばじゅんさんの存在があったから私も頑張れました。本当にありがとうございます。
Matz Keynote
#rubykaigi pic.twitter.com/RWDqzD4w7G
— Yudai TAKADA / ydah (@ydah_) 2024年5月17日
Ruby4 へのバージョンアップがとうとう見えてきているのかという気持ちになりました。 Parserは今後どうなるのかというところですが、私は自分が信じているところでやっていくしかないのでやっていくぞというお気持ちです。
参加したイベント
以下のイベントに参加させていただきました。非常に楽しい時間をありがとうございました!
Day0
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の話をしていました。
金子さん「型推論欲しい〜〜」、こばじゅんさんと僕「わかる〜〜」の図ですね。登壇時ではないがいい笑顔のやつはあった@spikeolaf @ydah_ pic.twitter.com/vpGa5ASRXY
— katsyoshi (@katsyoshi) 2024年5月23日
パーサー三銃士を連れてきたよ!の例のコラが作成される時にはこの写真が使われるのでしょうね。パーサー三銃士に見えてきた https://t.co/L83TNzv0yv
— はしもと (@hasimoto1009) 2024年5月14日
また、中田さんにもParameterizing Rulesの件でフィードバックいただいてありがとうございましたとご挨拶できてよかったです。 「過去10年で最高の parse.y」という言葉はここでParser gangsなテーブルでの話の中で聞いた記憶があるのですが、これを来年からも更新していかねばならないですねと思っていました。
Day1
一回ホテルに荷物を置いていたらバスに乗り遅れてしまい、そのことに気づかずになはーと方面に向かっていたら合流したやんちゃさんとタクシーを探しながら会場に歩きつつ向かうというイベントから始まりました。お名前を聞きそびれてしまったのですが、途中で合流したお二人のRubyistの方と4人で無事タクシーに乗ることができて間に合ってよかったです。
そんなOfficial Partyでの一番の印象に残っているイベントはLramaのコミットビットをいただいたことですね。 これがRubyKaigiか.....と凄く感慨深い気持ちになりました。
RubyKaigiはじまった #rubykaigi pic.twitter.com/stQrhdEqCR
— Yudai TAKADA / ydah (@ydah_) 2024年5月15日
そして、この後のn次会ではどんどん発表が迫ってきて精神的におかしくなっていて、おかしくなっていました.....。 この辺りから緊張により記憶が飛んでいるところもあってかなりおかしくなっていました..... 本当にご心配をおかけしました.....。
3時頃に寝たはずが翌日の午前5時に目が覚めてしまってそこから覚醒してしまって寝れなくて、スマホを眺めると上記の写真がカメラロールにあったのですが、本当にどうやって行ったか覚えていなくて限界状態だったんだなあと思いました。
身体も異常事態だったのか、ステーキの味が本当に感じられなくって焦っていたことは覚えています。また、酔いを覚まさないと.....!と思って深夜にライスを大盛りでおかわりして食べるという奇行に走っていたことも.....。そしてそのおかげで今胃が異常なまでにもたれていることも.....。
狂気の沙汰とはまさにこのことだなと思いました。
Day2
leanertechnologies.connpass.com
rubykaigikaraoke.doorkeeper.jp
これから一晩中パーサの話をする青かりゆしの人たち #rubykaigi pic.twitter.com/eQEThKaJI0
— Making a Universal Parser of Ruby 🇺🇦 (@hasumikin) May 16, 2024
濃ゆい #rubykaigi pic.twitter.com/4Xx6kV727L
— Making a Universal Parser of Ruby 🇺🇦 (@hasumikin) May 16, 2024
この人たち #rubykaraoke でも無限にパーサの話ししてる https://t.co/FHDCaeQUDD
— ふーが (@fugakkbn) May 16, 2024
様々な話をしていました。普段あまり話さないことについても話していましたね。 自分のトークも終わり解放感がありましたが、終わってしまったなあと喪失感もありました。
Day3
😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂😂 #rubykaigi pic.twitter.com/wcclaAieuX
— Making a Universal Parser of Ruby 🇺🇦 (@hasumikin) May 17, 2024
美味しいお肉をご馳走になったあと、シャークになりました。Follow The Sun, Catch The Sun.
After Partyでも様々な方とお話ができて本当によかったです。そして私の印象に残っていることは、jokerさんに感想を聞くことが出来たことです。つまり以下のjokerさんのブログの私の視点でのお話です。
私のトークについて金子さんと戦略を立てていた時から、真の想定リスナーとしてjokerさんを想定して作成していました。 なぜかというと以下のjokerさんの記事にあるように、jokerさんはparser熱にあてられて自分でparserを実装してみるくらいには気持ちがある方だからです。
そして、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!