やってきました。
Kashiwa.rb #14 ワイガヤグループワーク会 - connpass
今回から数回は各自テーマを持ち寄って取り組む形式でやっていく試みです。個人でもくもく作業するのもいいけど、せっかくだからその場に集まった何人かで一緒に調べたり質問したりとインタラクションが発生して学習機会に繋がればいいなという狙いもあって「ワイガヤグループワーク会」としてみました。
それぞれが取り組んだテーマ
チームEがエントリーされた #kashiwarb pic.twitter.com/YAG1Jqkgmc
— Koji NAKAMURA (@kozy4324) 2025年8月18日
どれも面白そうなテーマですね。
自分が取り組んだテーマと内容
自分は Parser についてを hisakey さんと youchan さんの3人でグループワークしました。
Ruby の Parser 調べるぞ!と言っても現在の Ruby の Parser 周りの事情が色々ありそうだったので、まず事前にまとめた内容を持ち込みこれを見ながら会話したり、分からない部分は質問してみるところから入っていきました。
ざっと眺めた後に Ruby の Parser を深掘りするのにも色んな掘り方がありそうだよねっていうところで残っているメモは以下の通りです。
- Parser ごとに I/F や出力される AST に差異がある部分があるので、それがどういった点なのかを理解できると良さそう
- 例えば RuboCop において parser gem と Prism で差分があるらしいが、それが具体的に何なのか? RuboCop が Prism に移行していくというロードマップがあるとしたらその差分がどういった障壁になりうるのか(もしくは障壁にはならないのか)、とかちゃんと知っておきたいよね
- AST の Node の種類が本当にたくさんある、それを一つ一つ眺めて理解していくだけでも Ruby の言語仕様の豊かさ(複雑さ)に触れられそう
- https://github.com/rubocop/rubocop-ast/tree/master/lib/rubocop/ast/node
- https://github.com/ruby/ruby/blob/683dd92de82bd8c93eee6860ebcd3f6336ad0c04/ast.c#L404
csend_nodeのcってConditionalらしいけど、casgn_nodeのcはConstらしい、っていう小ネタとかdefined?は演算子でdefined_nodeになる、組み込みメソッドではなかったんだね、っていう小ネタとか
- Ruby の言語仕様のいくつかだけで構成されるサブセット言語を定義し、それに対して Parser を実装すると Parser の内部仕様や振る舞いが理解できそう
- 手書き Parser を作ってみる?
- Parser ジェネレータの Racc を触ってみるのも良さそう
などなど。で最後に出た Racc で Praser を作ってみようというトピックに対してズバリこれ!というコンテンツを発見していたのでみんなで取り組みました。
今回はこの lr-parser-101 の途中で時間切れとなってしまいましたが、Raccの実装の後に同じ対象に対して手書き Parser を実装してみてもいいかもしれませんねと最後に会話していました。次回以降の取り組むネタになりそうですね。
参加者のレポート記事
同じグループの hisakey さんが爆速でブログ記事を書いていてくれていたのでリンクしておきます。
終わりに
しばらく数回はワイガヤグループワーク会をやります。今回参加した人たちは同じようなテーマで取り組む予定ですし、それ以外の面白そうなテーマがあればぜひ持ち込んで一緒に何かできると良さそうですね。興味を持ってもらえたなら是非足を運んでもらえると嬉しいです。次回は 9/19(金) あたりに開催予定です。
以上、私からの参加レポートでした。