ESM アジャイル事業部 開発者ブログ

永和システムマネジメント アジャイル事業部の開発者ブログです。

RubyKaigi 2024 に永和システムマネジメントから @koic @junk0612 の2人が登壇します

2024年5月15日(水) から17日(金) の3日間にわたって開催される RubyKaigi 2024 に永和システムマネジメントから @koic (Day 2) 、 @junk0612 (Day 3) の2人が登壇します。

rubykaigi.org

ここでは、それぞれの登壇者から講演内容について軽く紹介をします。

5月16日(木) 14:50-15:20 @koic 『RuboCop: LSP and Prism』

@koic です。今年は『RuboCop: LSP and Prism』というタイトルで話します。タイトルにあるように RuboCop をとおした LSP と Prism の話です。当初 LSP を主体にして、タイトルには Prism と出していなかったのですが、Rails/OSS パッチ会で RubyKaigi オーガナイザーでもある松田さんから「Lrama の講演が3つあるので、Prism もタイムテーブルに入れたい」といった雰囲気の話を受けてタイトルを更新したものになります。結果として思ったよりも Prism に関するボリュームは膨らむかもしれません。

LSP は Language Server Protocol の略称で、よく聞くところでは Ruby LSP などがあります。git hooks で rubocop コマンドを実行するようなエディタ連携の上位互換になる側面もあるので、LSP 未使用の方はぜひ使ってみると良いと思います。LSP の基本的な事柄について詳しくは RubyKaigi 2017 で @mtsmfm が話されている『Ruby Language Server』を予習しておくと事前知識に便利だと思います。

rubykaigi.org

もうひとつの大きなトピックは Prism です。RuboCop が Ruby のソースコードをパースするにあたって @whitequark プロダクトである Parser gem を使っていますが、RuboCop 1.62 で Prism のサポートを実験的に導入しました。そのあたりの裏側と今後の話を展開する予定です。Prism そのものについては、RubyKaigi 2023 で Kevin Newton が話されていた『Yet Another Ruby Parser』あたりは予習になると思います。

rubykaigi.org

そんな感じで LSP と Prism の話です。LSP は去年の RubyKaigi 2023 で Standard gem の作者である Justin Searls と話して RuboCop に組み込んだ機能です。LSP を入れたら Error Tolerance なパーサーのことを検討するわけで、そこで Parsing Ruby is Suddunly Managable の Prism に着目したというのは必然的な流れでした。加えて、昨年 RubyConf Taiwan 2023 で The Bison Slayer の金子さんと4日4晩パーサーそのものやその周辺ツールについて話す機会があって、その影響もそれなりに出ている活動の話になります。

このように RuboCop について、LSP と Prism といったテクノロジーを使ってどのような課題解決を目指しているのか、これからの Linter や Formatter について RubyKaigi する予定です。お楽しみに。

rubykaigi.org

5月17日(金) 14:10-14:40 @junk0612 『From LALR to IELR: A Lrama's next step』

@junk0612 です。RubyKaigi には初めての登壇です。『From LALR to IELR: A Lrama's next step』というタイトルのとおり、Lrama の話をします。Lrama について詳しくは昨年の @yui-knk さんの発表をどうぞ。

rubykaigi.org

言語処理系の分野では、Lexer と Parser は分離可能であると (基本的には) されています。しかし、例えば CRuby では < は比較演算子の役割に加えて、<< として Array の要素追加や、<<- として Heredoc の開始に使われるなどの用途があり、Lexer は状態を持ったうえで必要に応じて自身の状態を変えねばならず、特にこれまで読んできた内容、すなわち Parser の状態の影響を受けてしまうのが現実です。

CRuby ではその「Lexer の状態」を管理するための lex_state という変数があります。しかし現状では、さまざまな場所で状態が変更され見通しが悪くなっているうえ、人手によって管理されているためにある変更が他にどのような影響を与えるか機械的に知る術がなく、とても扱いづらいものになってしまっています。

そこで、パーサージェネレーター方面から「より良い LR アルゴリズムを用いたパーサー」の提供をすることで、lex_state にまつわる問題を解消しようという試みを行っています。具体的には PSLR というアルゴリズムを採用した Scannerless parser の提供です。ところが PSLR は、現在 Lrama に実装されている一般的な LR アルゴリズムである LALR からではなく、それを改良した IELR という別のアルゴリズムに立脚しています。そこで "Lrama's next step" として、IELR パーサーを Lrama が生成できるようにしよう、というのが講演の主軸となる内容です。Scannerless parser とは何なのか、IELR とLALR の違い、実装でつらかった点などについては当日の発表をお楽しみに。

rubykaigi.org

ところで @koic の文章にもあったとおり、今年は Lrama にまつわるトークが3本あります。どれか1つでいいか……と思っている皆さんにぜひお伝えしたいのが、内容的に被る部分はおそらくほぼないので、3本それぞれに聞く価値があるという点です。全部聞けばあなたも Lrama マスターになれること間違いなし。3日間に分散していて1日1本ペースなので、体力的にもやさしめです。ぜひお越しください。

rubykaigi.org rubykaigi.org


それでは本編をお楽しみに。沖縄の会場でお会いしましょう。

RubyKaigi 2024 に スポンサーとしても参加している永和システムマネジメントでは、Ruby とアジャイルソフトウェア開発や構文解析器の研究を通じてコミュニティと成長したいエンジニアを絶賛募集しています。

agile.esm.co.jp