RubyKaigi 2024 に登壇した

RubyKaigi 2024 に登壇した。

rubykaigi.org

当日の発表スライドは以下です。

発表について

今回は、RubyKaigi 2023 の帰り道に Justin Searls とばったり松本駅で遭遇してからの、362 日の Rubyist 活動をストーリーにしたものでした。

もともとは、LSP の話を中心にして Prism の話は少し出るくらいという『RuboCop Evolution with LSP』というプロポーザルを出して通過したところ、Rails/OSSパッチ会で松田さんから「Lrama の話が3本あって、Prism の話がないんですよ。」という感じでタイトルに Prism を入れてもらえないかという打診を受けて、「そのタイトルが悩ましいですね。」と返したところ、「『エマーソン・レイク・アンド・パーマー』みたいに並べるといいんじゃないでしょうか?」とアドバイスを受けて、結果として『RuboCop: LSP and Prism』というタイトルにしたという背景があります。

名は体を表すというか、タイトルがそうなると中身も Prism への言及が増えるわけで、JSON-RPC による仕様の話から、パーサーユーザー視点での Prism のいまみたいな振り幅のある構成になりました。さらに初日の kaneko さんの講演を聞いて、ストーリーの結末が変わるな。。。となって、ホテルに帰ってから当日の朝3時くらいに結末を若干変更して通訳さん向けに再アップロードしていた追加スライドは以下。

実際にどうなるかはわからないものの、if の世界としてこの図は示しておかないとダメだろうと、RubyKaigi 2024 Day 1 終了時点での自分の理解を図にしたものだった。もう少しいうと、図にしたくらいなので、個人的にはこのあたりが落とし所になるのでは?という予感はしている。

なお、本編のトークのランタイムスピーカーとしては RuboCop そのものというよりも、どんな人が RuboCop を作っているかという点を意識して話してみようとしていたけれど、そのあたりの表現はできた気はします。どうだったろう?

RuboCop から見た Ruby パーサーの世界の今後

正直なところ Prism も Lrama もパーサーユーザーとしては感謝しかなくて、できるだけ配慮した構成にしようとしていたものの、RubyKaigi 2024 で将来像というものが RubyKaigi 2023 のときよりも具体化してきたように感じています。以下、その根拠。

  • 前提として、Matz がクロージングキーノートで話されていた Prism のクオリティ向上のため1年は新構文を追加しない。これは結構重要な言葉だったと解釈している。
  • kaneko さんの発表にあった「Lrama (LR) は言語規則を元にパーサー実装ができるが、Prism (手書き) はパーサー実装を元に言語規則ができる」というのは、それぞれのパーサーのあり方を突いた胸に刺さる言葉だった。kaneko さん、完全に名言マイスターだった。
  • 自分から見て、Prism はエコシステムの処理系やツールと既存のコミュニティと連携することを先行して、Lrama は parse.y を含めたパーサージェネレータそのものクオリティを上げつつパーサーコミュニティを改めて形成した362日だったと思う。つまりパーサーの処理系の周辺への活動範囲としては重複していない部分が結構あるはずで、コミュニティとのつながりを持つ Prism と、魔境といわれた parse.y をパッチモンスター nobu に「過去10年で最高の parse.y」といわしめた成果を出している Lrama がいい感じに手を取り合う未来は選択肢の中のひとつのヴィジョンとしてあるように思える。

この先に見えているものもありますが、そのあたり興味のある方は、勤務先で公開イベントとしているパッチ会などで聞いてください。

廊下会議し損ねた気になり点

RubyKaigi の会期中に聞きそびれたところ。あとで地域コミュニティか何らかのオンラインで聞いてみたいところ。

  • parse.y と RubyVM::AbstractSyntaxTree と Prism API の関係について
  • Prism API について、せっかくゼロから設計されているのに、ノードによって then_keyword_locthen_loc といった命名に一貫ができていない部分があったように思える。 (e.g., https://github.com/ruby/prism/issues/2533) 。直すなら今のうちなんだろうけれど。

SmartHR さんのアフターイベントあたりで聞けると良いかなと思っています。

smarthr.connpass.com

RubyKaigi や Kaigi on Rails 本編ではない、こういったイベントに行くのも5年ぶりとかそんな感じな気がするので、楽しみにしています。

今後の 362 日

去年の Justin Searls との対話のときほど、今年は来年に向けたテーマというか目標がはっきりできたわけではないけれど、そのあたりはこれからの kaneko さんとのやりとりによって、、、という動きになるかもしれない。自分の中で、今年の RubyKaigi は Lrama がパーサーユーザーに向けた次のステージに行く準備ができたぞと言うメッセージを受け取った気がするので、構文解析器研究部していこうと思う。

LSP まわりの方では @vinistock や Justin と話したこのあたりを見ていくことになると思う。

登壇以外に得られた会話など

  • kaneko さんが Lrama から Prism AST へのトランスレーションレイヤーをやっていく気を伝えられたので、何か起きるかもしれない。このあたりについては、どこかで kaneko さんと話せると良さそう。書き残しておくと、RuboCop を Prism AST 対応するのは結構大事なので、そこは Prism の Prism::Translation::Parser を使いまわしできる形で、現状の Prism AST に即した AST に変換するレイヤーを設けるということになるかも?
  • Ruby LSP として、同一コードへのパース済みの AST をツール間で使いまわしたいという話。理屈としてそれはそうなので、止まってしまっている PR を進めましょうとなった。 (コメント済み https://github.com/Shopify/ruby-lsp/pull/1849#discussion_r1609244525)
  • これまた Ruby LSP の話として、フロントまわりを Standard と RuboCop あわせて統合できないか?という話。Standard に PR が出ているので後で読む。Justin からももう少し細かい話をあとでもらえるかも?今後の情報の動き次第で LSP まわりのプロダクトビジョンが変わるかもしれない?
  • 廊下で Matz に Prism AST (API) の位置付けを聞いたところ、もともとの Ruby の AST はユーザーに使われることを意図して設計したものを expose させたものではなかったところ、Prism AST (API) はユーザーを意識した設計になっていると伺ってなるほどとなりました。ありがとうございます。
  • rubocop-daemon の作者の Forte さんにご挨拶できた。お会いしたことがなかったので、とりあえず所属先の Wantedly さんのブースに行けば挨拶できるかな?となったので、1,000 人越えのイベントで固定座席になっているブースは便利でした。ご不在のところメンバーの方に言伝いただけたようでアフターパーティーでお会いできました。ありがとうございます。
  • 銀座.rb を再開するという話を @willnet さんから聞いたので、楽しみにしています。
  • 初日のオフィシャルパーティーは、成瀬さんが kaneko さんのフィクサーという点を満喫できるテーブルだった。kaneko さんが junk0612 と ydah さんに Lrama のコミットビットを付与する会に立ち会って、これがまた RubyKaigi っぽくて良かった。
  • はすみさんの発表の裏が通訳さんとの打ち合わせだったので、聞けなかったのは残念。台湾でのあの写真が使われていてびっくりでしたが、写真を撮られた際に、はすみさんが気に入ったフォトっぽかったので、活用してもらえて良かったです。ちなみに RubyKaigi 会場に向かうまでで最初に遭遇した Rubyist がはすみさんで「Rubyist 同士は引かれ合う」感ありました。
  • RubyKaigi 2022 はオンライン登壇、RubyKaigi 2023 では少人数での飲み会しか行かず、大阪Ruby会議03では野に放たれたならずものの一味になってしまったので、今回はじめて ydah さんとたくさん乾杯できました。ydah さんナイスガイだった (ビール的にも) 。

RubyKaigi からの帰路、国際通りA&W掲示板に出ていると言う、ぺんさんのコードを見てから空港に向かおうとシャッターチャンスを狙っていたところ、同じことを狙っていた @a_matsuda と @ffu_ と偶然に遭遇。実はこの2人は Ruby 業界で自分にとってメタルの師匠という位置付けなので、そういった感じで最後まで割と Rock な Okinawa ツアーになりました。

今回のRubyKaigiでの気づき

「RubyKaigi では明日から役立つものの Takeaways とかない」という感じで、まあ技術的なトピックとしてはそうかもしれないけれど、また1年間やっていこうという気持ちや、同僚 (自分だと @junk0612 や S.H.) の登壇をライヴ参加した体験や、パーサーのひとたち (kaneko さん、ydah さんや hasumikin さん) 始め多くの Rubyist と交流する体験は、参加しないと Takeaways できないし、参加したからこそ Takeaways できた体験だったと思う。なので、実は RubyKaigi は何を期待するかによっては、Takeaways しかないイベントなのだ!という気づきがありました。

つまり難しいこと考えずに、参加できる時に参加するが吉だと思う。そんな感じで、オンライン期間のうちに失われていた感情というか距離感の掴み方というか、いろいろと思い出せてきた点も本当に良かったです。オーガナイザーのみなさん、スタッフのみなさん、ありがとうございました。