Lint Night #1 に登壇した

Lint Night #1 に登壇した。

lintnight.connpass.com

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

今回は Kuniwak さんの方でそもそも「Lint とは?」といった前段の話をしていただけるというのと、"Lint" を冠したイベントを考えて、ここなら事前に求める前提知識をいくつか端折って話して良いだろうと RuboCop の内部構造に踏み込んだ話にしてみました。

今回内部のしくみに踏み込もうと思った時に思い出したのが『Ruby のしくみ』で、表紙はこのパロディになっています。

私の発表の構文解析パートで出てきた書籍はこちら。YaccRuby 版である Racc については『Ruby 256 本 無道編』が構文解析のしくみもろもろと一緒に紹介されていて、文体も読みやすくお薦めです。

本題の静的解析パートですが、RuboCop の内部を表現するのに久しぶりに UML のクラス図を使おうと思ったのですが、相互作用も表現したくなってコラボレーション図的なものも混ざった感じのものになり、Unified されていない Modeling のダイアグラムになったのがこちら。厳密性よりも伝えることが重視ということで、まあいいかとした。こういった RuboCop 内部のまとめをしている図は知る限りないと思うので、おもしろいものかなと思います。

本編では伝えたのですが、構成の設定や自動修正周りは割愛していますが、このあたりのクラスを中心に読んでいけると思うので、今後 RuboCop をソースコードリーディングしてみたいときの手がかりなんかにご活用ください。

RuboCop の内部構造を知ると、RuboCop というプロダクトの内部構造が警察のお仕事をメタファーにしたモデリングをしているのがわかり、RuboCop という作品名が映画のタイトルのように映る。そんなコードリーディングの景色もあわせて伝えられると良いかなと思って話したところ、Twitter の反応を見た限りだと良い感じに伝わったようでよかったです。

最後に付録的に書いている Ruby と RuboCop のサポートマトリックスは当初今年の RubyKaigi 2022 向けに作って入れていたものだったものの、ストーリーの流れで外したスライド。今回少し強引ではあるものの流れで伝えられそうなので足し込んでおいた。ついでに言うと、表紙パロディの元ネタである『Ruby のしくみ』のサブタイトルは『An Illustrated Guide to Ruby Internals』で、図を使った説明を意識してされていたことから、今回の私の発表は図を多めにと意識していたので、このマトリックスも入れてしまおうといった部分もある。

最後のスライドに使ったの引用元書籍である『Code Readng』は、監修にまつもとさんも入っているので、Ruby 関係の発表の締めにもなるかなというのもあって選んだもの。テキスト自体は書籍帯にも使われていて印象に残っているものの引用でした。

イベント全体としては、さすが Lint Night というテーマがくっきりしているイベントだけあって、発表を通しても Kniwak さん、azu さんとの 3 人の話で大きな緩いストーリー性が出ていて面白かったです。今回はオンライン登壇を選んでいたので、azu さんに JS 周辺の情報をいつもありがとうございますと直接伝えられなかったのが心残りですが、それは今後の人生のまたの機会ということで。

お誘いいただいた Kniwak さん、運営いただいた DeNA スタッフのみなさんありがとうございました!