見出し画像

RubyKaigi2024 セッション編

RubyKaigiのセッションはRubyや、プログラミング言語の実装にまつわるありとあらゆるトピック(例えば、シンタックスパーサー、パーサジェネレータ、RubyVM(YARV)、YJITのような実行時最適化技術)を含んでいるので、じっくり理解するためには大変多くの予備知識が必要という特長がある。ざっくり個人的な所感を示してみよう。

Remembering (ok, not really Sarah) Marshal

RubyにはMarshalというRubyオブジェクトをバイナリファイルにシリアライズするための古のライブラリが付属しており(Pythonでいうところのpickle的なやつ)、type付きの固定長のデータでオブジェクトを表現する形式(tag-length-value)なのでJSONなどと違ってずいぶんわかりづらかったり、Rubyにある型の中でも対応していないデータがあるらしい。バイナリファイル -> Ruby オブジェクトに戻す際のセキュリティにも課題があり、これを解決するために、Ruby標準のYAMLライブラリのPsychにある#safe_loadのアイデアを拝借し、安全なオブジェクトへの復元を実現したということらしい。

所感

psychの#safe_load はホワイトリスト方式で、復元可能なオブジェクトのクラスを列挙することで、突然怪しいオブジェクトに復元されないようにしている。Marshalって誰がつかってるんだろうというのは思ったが、スピーカーの方のモチベーションとしてみんな使ってるRubyGemsでMarshalが一部使われているということらしく、コミュニティの力で古の仕組みも維持されていくんだというみんなで直す感いいね。

Namespace, What and Why

Rubyにはnamespaceやパッケージの仕組みというのはなく、moduleしかないので、例えば誰かが他のgemでHogeというmodule名を使用していて、自分のアプリでもHoge moduleを定義したら、同じHoge module配下にクラス(など)が定義されてしまう。gemの依存関係を「隔離」する仕組みもないので、Hoge module が依存するgemのバージョンと、自分のアプリが依存するgemのバージョンが違うとすぐに動かなくなってしまう。これを解決するために、Rubyコアに本格的なnamespace機能を導入するプロポーザルを出しているよという話。 

所感

はやくだしてれ(懇願)

Keynote: Leveraging Falcon and Rails for Real-Time Interactivity

スピーカー作のasync gemをベースにしたWeb Serverと、いい感じの画面をつくるライブラリでFlappy bird をつくるやつ。

所感

async gem はfiberを簡単に使えそうで気になった。Thread、Ractor、Fiber、open3など、その処理の粒度に違いはあれど、Rubyには並列・並行処理に関するライブラリがたくさんあり、いわゆるおまかせ的なのはないので、よく理解してチョイスすることが初心者にも求められそう。

Getting along with YAML comments with Psych

先ほども出てきたYAMLをRubyオブジェクトに復元できるPsych gemだが、YAML -> Rubyオブジェクト -> YAML した時に元々YAMLにあったコメントが消えてしまう(YAMLをパースする時のComment Nodeのパースに対応していない)。短いコードで、コメントも対応できるようにした。

所感

yaml gem(実体はPsychを利用している)でそういえばコメント消えてたな〜というのをアハ体験した。神。libyamlが対応してないとかそっち系の話でもあると思うのだが、libyaml本体をいじらなくてもいけるんだという驚き。

Running Optcarrot (faster) on my own Ruby.

Rubyのベンチマークでよく利用されるOptcarrot(ファミコンのエミュレータ)向けに性能を発揮するRubyインタプリタ(JITもあり)をRustで実装する話。7~8割くらい機械語の話をしていたような気がするのは気のせいだろうか。

所感

RubyKaigiだからといってRubyの話が多いとは言ってない。こういった試みがRuby本体の性能改善に役立ったりするんだなって。

Using "modern" Ruby to build a better, faster Homebrew

みんな大好きHomebrewの改善の歴史を辿る発表。macOSにデフォルトでバンドルされるRubyは大体古いので、最新のRubyの機能が使えなくて困るということ。昨晩portable-ruby対応をマージしたらしく、リアルタイムで改善が進んでいた。

所感

いつもお世話になっていますという感じで、作者的にもHomebrew FormulaのDSLのよさを自慢してたけど、ほんとそう思う。

Ruby and the World Record Pi Calculation

y-cruncherという円周率計算システムとGCP上に構築した計算機クラスタで円周率計算を実行したいが円周率の計算は非常に時間がかかるため、少しでも計算時間を短縮するために計算機クラスタのためのパラメータ(ネットワークIOなど)を最適化したい。そのパラメータチューニングのプログラムにERBを利用したという話。

所感

円周率のワールドレコード達成したというのはもちろんすごいのだが、設定ファイルのテンプレートエンジンとしてのERBはめっちゃいいなと思った。あとgrepしてsedで実験ログファイルを置換しまくるみたいなのを、研究室時代によくやっていたので懐かしい気持ちになった。

Ruby Mixology 101: adding shots of PHP, Elixir, and more

Ruby NextというRubyに新構文を追加したバージョンのインタプリタで、どのように新構文を考えるのか(例えば、他の言語を参考にする)、実ユースケースを洗い出すのかを、実例をもとに解説していた。

所感

プログラミング言語の構文は一度新しく追加したらそうそう簡単には消せないので、Ruby NextのようなRuby本体外部のインタプリタである程度テストしてから本体にマージできるのはよいなと思った。大シンタックスパーサー時代ということだが、Ruby Nextも大シンタックスパーサー時代に乗っかってるのかどうかが気になった。どういう仕組みなんだろう。

The state of Ruby dev tooling

Rubyはコミュニティの力で、Ruby開発者が楽しくコーディングできるツールがたくさん出回っているが、いわゆるデファクトなツールは定まっていないので、例えば初学者がRubyを始めようとした時に困ったり、Rubyプログラマであっても1つ1つのツールの良し悪しや、設定を理解しているわけではないからどうやっても大変になるよねという発表。これをFragmentation(ツールの断片化)と表現していて、ソリューションとしてLSP(スピーカーはShopifyの方なので、ruby-lsp)に拡張機能を搭載して、デバッガなどを統合していくというアプローチを提案していた。

所感

PsychとMarshal、namespace、非同期処理、Homebrewなどの話を聞いた後だと、Ruby開発体験を取り巻く環境の課題とソリューションが身近に感じられるというか、要はみんなFragmentationに対応しようとしているんだなという神妙な気づきがあった。





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