見出し画像

Rubyコミッター笹田さんとRubyKaigi2023の予習会&復習会を開催しました

はじめに

グロービスで業務委託勤務しています五十嵐(@igaiga555)です。グロービスではRubyKaigi2023をめいっぱい楽しむべく、前回の「Rubyコミッター笹田さんと学ぶRubyのウラガワ」 につづいて笹田さん(@koichisasada)をゲストにお迎えして社内でRubyKaigi2023の予習会、復習会を開催しました。

予習会

RubyKaigi2023開催前に行われた予習会では、タイムテーブルを見ながらいくつかピックアップして概要を解説してもらいました。笹田さんはRactorをはじめ、VM、GC、ruby/debugと幅広い範囲を実装しているので、関連する講演を説明してもらうだけでも盛りだくさんでした。
今回のRubyKaigiで熱くなりそうなネタの1つはパーサーでした。Yuichiro Kanekoさんの講演 "The future vision of Ruby Parser"のbisonベースのパーサーと、Kevin Newtonさんの講演 "Yet Another Ruby Parser" のYARP。事前に笹田さんの解説を聞いていたので心の準備をしてRubyKaigiへ向かえました。
Ivo Anjoさんの講演 "Understanding the Ruby Global VM Lock by observing it"はスレッドとの空きぐあいとGVLのロック具合を可視化するツールについての話。Ruby3.2でGVLのプロファイルをとれる口をRubyVMに入れておいた話を笹田さんから教えてもらいます。
また、「GVLはRubyの世界から見えたりいじったりできますか?」との質問に対して、「GVLはRubyの世界からは見えない。Linuxシステムプログラミングをつかっているあたりの世界で実装されている。」と笹田さんに解説してもらいました。
笹田さんからのお勧め講演の1つとしてJeremy Evansさんの"The Second Oldest Bug" を推してもらいました。2番目に古いバグは、メソッドの引数へ*をつけて配列をやりとりするケースでコピーが発生していたせいで、要素数が多い配列ではSystemStackErrorが投げられている件でした。Ruby3.3ではコピーしないよう修正されます。事前に予習しておいたので、当日のJeremyさんの講演では前提知識がある状態で聞けて、理解度を深めることができました。
(引数に*がついたときの基礎的な動作については五十嵐が書いた Railsの練習帳 Rubyの引数でつかわれる記法 でも解説しています。)
また、1番古いバグは?との質問に Ruby Issue Tracking Systemを開いて確認すると笹田さんが「あ、私が起票したやつだった」となるひとコマもありました。(このバグも2023/05/18にClosedになっています)

復習会

RubyKaigiを終えて、復習会を開催しました。
笹田さんの自分のRactor講演("Ractor" reconsidered)について深く話してもらいました。「昨年話したM:NスケジューラにRactorを対応させて速くしましたといった話をしたが、Ractorはまだまだいろいろやることがある。具体的にはGCが遅いので速くしたいと思っている」とのこと。
ここで「スレッドでもGCは走るが、Ractorで特に遅くなるのはなぜ?」という質問が出ました。
現在は1万Ractorつくったときに、GCで1万Ractor全てを止める処理になっているのが遅い理由だそうです。一方で、スレッドはRubyではたかだか1スレッドしか同時に動いていないので、その動いているスレッドがGCを起こしたらそのスレッドだけを止めれば全スレッドが止まっている保証ができるので、全スレッドを止める必要がなく、速い。現実にはRactorは1万あっても実際に動いてるのはたかだか10程(許容する並列数まで)なので、M:Nスケジューラをつかって本当に動いているRactorだけを止めることで、1万Ractor全てを止めずに済むようになり、高速化できるとのことです。
また、2日目にMasatoshi SEKIさんがRactorの話をされ("Learn Ractor")、「並行処理のうちの特別な一種が逐次処理」である旨の名言を残されていました。世の中のだいたいの処理は並行処理(それぞれが独立に走っている)で、逐次処理はたまたま特殊な例にあたるが、逐次処理をよく見ているので誤解しそうになること、また、RactorをつかうとCPUがN個あったらN個並行処理が走ることが実感できて良い、との話をSekiさんがされていたと思います。Sekiさんの話を挙げて、笹田さんはRactorをベースに物事を考えられるような世界が作れると良いという想いを話してくれました。

別の話では、Rubyの開発はどのように進んでいるのかという話題も出ました。「Rubyコアチームで開発されている様々な機能について、その流れをRubyユーザーが追う方法はありますか?」との問いには、Ruby Issue Tracking System上で議論をしたログを読んだり、または Ruby開発者会議のログ を追うのもいいかもと回答をいただきました。RubyKaigiの前日にも松本現地で開発者会議が開催されていて、海外の開発者たちと議論が交わされたとのことでした。
ほかにも、パーサー、JIT、GC、ruby/debugほかいろいろな話題が挙がり、大盛況の勉強会となりました。


まとめ

笹田さんをお呼びしてRubyKaigiの予習会、復習会を行いました。2回の勉強会では質問が多岐にわたりたくさん出ましたが、笹田さんは1つ1つ丁寧に回答、解説をしてくださいました。議論を通じて技術の理解を深めることができました。
また、RubyKaigiの講演を聞くときに、笹田さんの解説を思い出すことでRubyの各技術をよりたのしむことができました。復習会ではRubyKaigiのときに気になったことを深掘りすることができる良い機会でした。予習会、復習会と2回できたことで、技術知識を深め、また、RubyKaigiへの熱量を高めることもできました。
RubyKaigiのたのしさを増幅させてくれる、そんな勉強会になりました。また来年も計画できればと考えています。

グロービスはスポンサーとしてRubyKaigi 2023に協賛しました

RubyKaigi2023へ参加したたのしさはポッドキャストでも公開しています。

また、RubyKaigi2023での様子を書いた記事も公開していますので、よかったら読んでみてください。


グロービスで一緒に働く仲間を募集しています!

グロービスの開発組織では、一緒に働くエンジニアを探しています! まずは、カジュアル面談を通して、あなたに合う組織かどうか確かめてみませんか? ご応募お待ちしております!


この記事が気に入ったらサポートをしてみませんか?