RubyKaigiに参加していた。
今回は自宅から車で松山まで行った。そのため、出張ではなく有給で完全に自費での参加となった(社内規定で業務上の車両の使用が禁止されているため)
今年は自分の登壇がなかったので、気楽だった。プロポーザルは出していたのだけど採択されなかったため。来年は話せるといいな。 採択されなかったことを特に表立ってつぶやいたりしていなかったため、会議中に何回か「今年は話すんですか?」と聞かれた。結果はつぶやいたほうが良い。
発表のなかで特に印象に残ったのは以下の3つ。
- Bringing Linux pidfd to Ruby - RubyKaigi 2025
- Performance Bugs and Low-level Ruby Observability APIs - RubyKaigi 2025
- Porting PicoRuby to Another Microcontroller: ESP32 - RubyKaigi 2025
1つ目の「Bringing Linux pidfd to Ruby」は、Linuxで導入されたpidfdというAPIの紹介。
子プロセスの管理にpidを使っていると、子プロセスが死んだあとpidが再利用されて意図しないプロセスを向くpidになってしまったり、直接の子プロセスしかwaitできないなどの問題がある。
pidfdを使うとこれらが解決される。pidfdはpidをFile Descriptorとして扱う機能で、pidを直に扱わないことで意図したプロセスのみをターゲットにできたり、直接の子プロセス以外にwait相当のことができたりするようになる。
これはちょうど最近私がSteepでやっている課題に対する解決策になるものだったので、とても興味深かった(そして自分がRubyKaigiに出したプロポーザルとテーマが被る部分があったなと思った)。しかしLinuxにしか対応していないAPIなので、macOS用には既存の実装が必要なことを考えると、Steepの実装をこれで置き換えるには微妙な感じがしている。
あまりに気に入ったので、人と話していてこのトークの話を5回ぐらいした気がする。
2つ目はday 2のキーノートで「Performance Bugs and Low-level Ruby Observability APIs」。TracePointなどのlow levelなAPIの話だった。
ここではpostponed jobという機能の紹介がされていて、それが特に興味深かった。TracePointのinternal eventではイベントハンドラの中で行えることに制約がある。例えばオブジェクトの解放時に呼ばれるRUBY_INTERNAL_EVENT_FREEOBJでは、GCを発生させてはいけない。つまり、Rubyオブジェクトを生成してはいけない。
この制約を満たしながらハンドラを実装するのは中々めんどうなのだけど、postponed jobという機能を使うと、登録した関数を"safe"な状態になるまで実行を遅延してくれる。つまり、オブジェクトの生成をしても良いタイミングでハンドラを実行できる。
以前作ったmajoというメモリプロファイラでこのTracePointのイベントを使っていたのだけど、postponed jobの存在は知らなかったので、苦労して実装していた。今回この機能を知れてよかった(majoの実装に手を入れるかはともかく)。
懇親会でスピーカーのIvoと少し話せて、感想と上記の話を伝えられてよかった。すごくニコニコと話してくれたのが印象的だった。
3つ目の「Porting PicoRuby to Another Microcontroller: ESP32」は、PicoRubyの移植をする話。
設計の意図を解釈した結果を丁寧にすごく分かりやすく説明されていてとてもいい #RubyKaigi #RubyKaigiC
— 🎹 (@p_ck_) April 18, 2025
感想は上記の通り。設計の意図を丁寧に解釈し、それをわかりやすく伝えていることにめちゃくちゃ価値があるなと思った。いまいち理解しきれていなかったPicoRubyのビルドの理解が少し深まった気がする。
正月にRaspberry Pi Picoを買ってLチカだけやって放置してしまっているので、今回は自分の熱を高めるためにPicoRuby関連のトークをなるべく聞きに行くようにしていた。このトークで熱が高まったのを感じる。
ほかのトークに関してよかったこととしては、金子さんに「lex stateをオートマトンにするのって機械的にはできないですよね?」みたいな質問をする機会があってよかった。(当然できないので、状態遷移を書き下すところは人間が頑張っていたっぽい。大変そう)
今回もいろいろな人と話せてよかった。いつも話す人はもちろん、初めての人や、5年以上ぶりの人とも多く話せたのはいい収穫だった。
普段参加しないRubyKaraokeに参加したのもよかった。カラオケは特に知らない人とゆるく顔見知りになれるいい機会だった(しかし全然名前を覚えてはいない...)。 ただ2時過ぎまでカラオケするのは体力的に考え直したほうが良いかもしれない。
今回は城の北の平和通り沿いに宿を取ったのだけど、歩くのが大変という意味では失敗、歩数を稼いで運動になるという意味では成功だった。
今回のRubyKaigiでは、大街道、会場である県民文化会館、道後の3つのエリアにアクセスする機会が多かった。 しかし今回の宿からだと、これらのどこにも微妙な行きやすさで、かつ路面電車をほとんど活用できなかった。
まず、路面電車の駅は平和通りより少し北にずれていて、微妙にアクセスが悪い。 そして会場と道後エリアは1回乗り換えをしないと路面電車で行くことはできない。
そのため、どこに行くにも基本的に徒歩で向かっていた。歩くのは好きなのでまあいいのだけど。
しかし、大街道まで歩いていくのがまっすぐ行けずにちょっとだるかった。松山城があるためにまっすぐ突っ切ることができず、遠回りになってしまう。
日曜に松山を出る。 帰りは今治に寄って、しまなみ海道を通って帰ろうと思っている。本州側はどっか寄り道しようか迷う、シュッと帰ろうかなあ
懇親会で安川さんにRails Upgrade Knowledgeをすごく褒めてもらえてよかった。(例: Rails 7.1 Upgrade Knowledge - ruby-jp)
社内のRails Upgradeでも活用してもらえていて、良い取り組みができたかなと思っている。編集してくれている方もたくさんいて、いい状態だと思う。