あきろぐ

いろいろめもするよ🐈🐈🐈

RubyKaigi2025@愛媛に参加しました

RubyKaigi2025@愛媛に参加してきました!RubyKaigiは自分がRubyistになった翌年から参加しており、今回で3回目です。少しずつ分かることや知り合いも増えてきて、RubyKaigiでの再開を約束していたりするので、年々楽しみ度が高まっている気がします。

また、松山市は私が3歳になる頃まで住んでいた、ゆかりのある場所だったので、久しぶりに訪れることができるのも楽しみでした。

印象に残ったセッション

他にもたくさんセッションを聞いてどれも興味深かったのですが、ブログ書き終わらなさそうなので割愛します;;

Day1. Ruby Taught Me About Encoding Under the Hood

speakerdeck.com

ima1zumiさんのkeynoteから始まったRubyKaigi。Day1の朝イチの飛行機で会場に向かったので、ギリギリでしたが間に合いました。ima1zumiさんが文字コードに興味を持ったのは、igaigaさんが家族の絵文字(🧑‍🧑‍🧒)がIRBクラッシュすること教えてくれたことがきっかけだそうです。きっかけは些細なことだけど、ここから文字コードに興味を持ち、自分自身でクラッシュをfixし、そしてRubyコミッターになられているなんて...!とてもかっこいいなと思いました。

keynoteでは文字コードの歴史から遡り、Unicodeによって全世界的に統一された文字コードが発明されたことから話されていて、文字コード1つとっても長い歴史の中で変遷があったのだなととても興味深く話を聞いていました。 そして、家族の絵文字(🧑‍🧑‍🧒)は、ユーザーからすると1文字だけど、7つのコードポイントで構成されており、バックスペースを2回実行すると、途中に挟まっているZWJ(Zero Width Joiner)との兼ね合いでカーソル位置がズレてしまうことでクラッシュしているとのことでした。 この発表で、Unicodeには書記素クラスタという概念があることを初めて知りました。RubyのStringクラスにも書記素クラスタを扱うメソッドがあるんですね。

docs.ruby-lang.org

また、Rubyが持つUnicodeのデータベースを更新するお話をされてました。Unicode15.1.0では、インド系文字の処理に関わる新たなプロパティ「Indic_Conjunct_Break」が追加され、複雑な子音の組み合わせ(子音クラスター)も正確に扱えるようになったそうです。*1 このプロパティ追加の影響で、既存のパース処理が失敗し、テストが落ちるようになったため、パースロジックの修正も行われたとのことでした。

Unicodeは年に1度の頻度で更新されており、Rubyでも内部のデータベースを継続的にアップデートしているそうです。こうした地道なアップデートによって、私たちが日々Rubyを使って多様な言語や文字を扱えるのだなと感じました。

Day2. Speeding up Class#new

speakerdeck.com

@tenderloveさんの発表は今回のRubyKaigiで楽しみにしていたセッションの1つでした。Class#newがCで実装されていることに興味を持ち、内部実装を調べてみたことがきっかけで、RubyだけでClass#newを実装し高速化することを試みたそうです。Class#newRubyC言語を行き来していることで、そのタイミングに時間がかかっているとのことでした。どのタイミングで話されていたか忘れてしまったのですが、親クラスが増えるほどメソッド探索に時間がかかるので、インラインキャッシュでメソッド探索を効率化させているというお話もされていました。

最適化を実施した結果、Ruby3.4とRuby3.5で比較すると1.8倍早くなり、キーワード引数を使う場合でも3.2倍速くなったとのことでした(3つのキーワード引数の場合)。速くなった分、消費メモリが増えたとのことで、そこはトレードオフだよなと思いました。 発表の中で、キーワード引数を持つメソッドは内部的に並び替えが発生するから遅いという話もされており、キーワード引数の挙動も知れて面白かったです。

Day2. Making TCPSocket.new "Happy"!

speakerdeck.com そして、しおいさんの発表!しおいさんの話はいつも面白くて、聞き入ってしまいます。 しおいさんは、ネットワークの接続効率を上げるために、IPv6IPv4の名前解決を同時実行することが可能なHappy Eyeballs Version 2(HEv2)アルゴリズムRubyのSocketライブラリに対応させる取り組みをされており、昨年はRubySocket.tcpメソッドのHEv2対応が完了したので、Ruby3.4でリリースされています。 *2

今回は、RubySocket.tcpの問題点を解決するために再実装した話とCで実装されたTCPSocket.newをHEv2対応させた話でした。 Socket.tcpの問題点として挙げられていたのは、IPv6IPv4の名前解決がほぼ同時に完了した場合、キューから先にIPv4アドレスを取り出したとするとIPv6の名前解決を待つために無駄なIO.selectが呼ばれてしまっていたそうです。そのため、状態管理をやめて1ループの中で行うことができる処理は全て実行するアプローチに変更されたとのことです。

TCPSocket.newをHEv2対応するにあたって、解消しなければならない課題がいくつかあったそうです。例えば、socketライブラリはpipeとselect(2)で待機可能な名前解決関数が存在しないことなどです。 これらを解決するために、既存の関数を拡張するのではなく、HEv2対応した新しい名前解決関数を追加して対応したとのことでした。

200ページを超える発表でしたが、しおいさんの今まで努力とどんな問題に直面しても乗り越えていくかっこよさが詰まっていてとても素敵でした。改めてコミッター就任おめでとうございます!

Day3. On-the-fly Suggestions of Rewriting Method Deprecations

speakerdeck.com

@ohbaryeさんの発表は、非推奨になったメソッドを動的に書き換えることができるDeprewriterというツールを開発したお話でした。 非推奨の警告自体はよく目にしますが、対応はどうしても後回しになりがちで、置き換え作業にもかなりのコストがかかると感じていたので、こうしたツールがあると移行作業がぐっとスムーズになりそうだなと思いました。

github.com

Rubyのエコシステムでは、ドキュメント(READMEなど)、ランタイムでの警告表示、静的・動的解析ツールなどを通じて、ユーザーに非推奨化を通知しています。 発表では、他の言語における非推奨化のアプローチについても紹介されていて、言語によって対応がかなり違うこともとても興味深かったです。

特にPharoという言語では、ランタイムで自動的にコードを書き換える仕組みがあり、そのアプローチに着想を得て、Ruby向けに移植する形でDeprewriterを開発したとのことでした。

Deprewriterは本番環境ではなくローカルやテスト環境での利用を想定しており、用途に応じて使い分けができるように、log・diff・rewriteの3つのモードが提供されているそうです。

Day3. Programming Language for AI age

最後は、Matzさんのkeynoteでしたが、まさか迫り上がって登場してくるとは思わなかったので、衝撃的でした。笑

MatzさんのAI時代において、逆シンドロームに気をつけなければならないという話が印象的でした。AIの進化が速くて日々キャッチアップするのは大変ですが、あくまで人間が主導権を握るべきで、うまく付き合っていく必要があるなと思いました。

また、Ruby4.0のリリースを考えているとおっしゃっており、ZJITやNamespaceが実験的に含まれるとのことだったので楽しみです。

その他

みきゃんになった

わかなさんの発案で手作りカチューシャ作って、愛媛のご当地キャラクターのみきゃんになりました。笑 はじめ、頭に葉っぱつけよ?と言われた時は、ちょっと戸惑いましたが、面白かったです。いい思い出。笑

みかん堪能した

ANDPADさんのブースでは、蛇口からみかんジュース出てきたり、食べチョクさんのブースでは、日替わりで品種の異なるみかんを配布していたり、休憩中もみかんが食べれたり、Kaigi中みかんを堪能できて満足でした。

個人的に、松山城の近くにあるみかんやさんでは3種のみかんを選んでブレンドジュース作れて飲めるのですが、それがめっちゃ美味しかったです。道後温泉近くのみかんジュース飲み比べも行きたかったけど、混んでて断念;;

酸味強めのいよかんを選んだのがミソ

道後温泉近くにあるみかんおにぎりもすごくおいしかったな〜

意外とおいしかった

RubyKaraoke楽しかった

あまりカラオケ得意じゃないので、今まで参加してなかったんですが、幹事のふーがさんや仲の良いRubyistに誘われて初参加しました。

盛り上がりすごかったし楽しかったので、行ってよかったです!途中力尽きて完走はできなかったですが、来年も参加したいなと思いました笑

松山城 && 道後温泉最高だった

Day.4に松山城行きましたが、かなりの堅牢な城で見応えもすごくありました。建設に四半世紀もかかったとのこと。難攻不落と言われるだけあるなと思いました。

念願の道後温泉の本館にも行けてよかったです。個室を取ったのでゆっくりくつろげて、夏目漱石の坊ちゃんの部屋も見学できたしとても満足でした。スタッフのおもてなしもすごく手厚くて感動しました...!

締め

今年もRubyKaigi楽しかったです。運営スタッフ && スポンサーの皆さんありがとうございました! 久しぶりに会えたRubyistと美味しいご飯とお酒を堪能できて、わいわいできて本当に楽しかったなとしみじみしてます。

来年の函館も楽しみ〜〜!(来年は前乗りしていきたい!)