RubyKaigi 2022 に登壇した

RubyKaigi 2022 に登壇した。

rubykaigi.org

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

今回はリアルタイムでのリモート登壇でした。

本編

概ねサーバーモードなしの RuboCop のブートと、サーバーモードありの RuboCop のブートの違いと中身の概略について話せたかと思います。

今回話した高速化は、rubocop のブートに関わるモジュールローディング部分であり、解析自体が速くなったわけではないですが、起動時間の高速化ということで繰り返し起動することの多いツール特性に対しては有用な高速化だったかなと思います。

ふつうに使っている分には rubocop --server としてオプションありで使って問題ないと思いますが、RuboCop Performance や RuboCop Rails といったサードパーティー gem への bundle update があると、現状ではそれらを検知できないので rubocop --restart-server が必要になります (RuboCop 本体のアップデートは検知して、自動再起動するようにしています) 。Spring のように起動しているとハマったときに面倒みたいなことを減らせるよう、このあたりは早めに対応しようかなという気持ち。

ちなみに .rubocop.yml の構成を変えた場合は rubocop --restart-server は不要です。これは現状だとサーバー側で実行のたび設定読み込まれ、構成変更が都度反映されるためです。ただ、これは予期せず実装がそうなっていたというもので (!) 、将来的にこのあたりへのキャッシュ導入 (と変更検知導入) とのベンチマーク次第で少し動きが変わるかもしれません。

サーバーモードの実装で一番どうするか悩んだのはコマンドラインインタフェースをどうするかでした。そのあたりの話はコードとしては残っていませんが、決定を下した経緯として話しておこうと思って私の頭の中にしか残っていないことと、プルリクエストで行った議論をベースにしてコンテンツに含んでおきました。完全にうなすけくんの言ってくれているこれ。

また、本編で話していないプロセスの基礎的な話は『なるほどUnixプロセス ― Rubyで学ぶUnixの基礎』がおすすめなので、参考図書として記しておきます。

tatsu-zine.com

サーバーモードについては公式ドキュメントにも記載していますので、どうぞお試しください。

docs.rubocop.org

(おまけ) 放送事故

バーチャル会場の音声をつけっぱなし (というのにあとで気づいた) のままヘッドホンをしていたので、話すのに集中するためヘッドホンを外したら同期されていたらしいマイクも切れて、無音放送になるという放送事故の登壇実績を解除してしまいました。読唇術の技術を求めてしまってすみません。

タイムキープ用に手元に置いていたスマホに、勤務先の事業部長の @m_pixy から電話があって気づきました。おかげで本題では音声復旧できました (無音になった導入部分は時間の都合であきらめて先に進みました) 。音声トラブルで電話をくれた @m_pixy は m_pix "y" だったので、まさか matz のキーノートが自分にとってこういった伏線になるとは。@m_pixy ends with "y".

放送事故中、メンションしてくれた方々ありがとうございました。のちのリアルタイムリモートスピーカーに伝えられる教訓としては、ヘッドホン、イヤホンを外すときは連動してマイクオフにならないか気をつけましょう (気を付けます) 。

最後に、RubyKaigi チームのみなさん、通訳のみなさんありがとうございました。また、@yahonda さんに、昨年に引き続き事前に英文や構成レビューをしていただきました。いつもありがとうございます。

そして、miwa さんのツイートによると、だいたい満席だったようでありがとうございました!RubyKaigi はドラマがあって良いですね。

2022年9月12日(月) 追記

同僚で登壇者でもある @fugakkbn が、Togetter でこの登壇のまとめを作ってくれていました。ありがとうございます!

togetter.com

2022年9月13日(火) 追記

さっそく VS CodeServer モードの連携を試してくれた結果を文書にまとめていただけたようです。cumet04 さん、ありがとうございます!

zenn.dev