こんにちは、YOUTRUST Webエンジニアの寺井(YOUTRUST/X)です。
今年もRubyKaigiに参加してきたので、参加レポートを書きたいと思います!
- 1. はじめに
- 2. セッションのレポート
- Keynote:Ruby Taught Me About Under the Hood (@ima1zumi)
- Introducing Type Guard to Steep (@tk0miya)
- Goodbye fat gem 2025 (@ktou)
- Automatically generating types by running tests (@sinsoku_listy)
- State of Namespace (@tagomoris)
- RuboCop: Modularity and AST Insights (@koic)
- Making TCPSocket.new "Happy"! (@coe401_)
- Ruby Committers and the World
- On-the-fly Suggestions of Rewriting Method Deprecations (@ohbarye)
- Matz Keynote (@yukihiro_matz)
- 3. その他
- 4. 終わりに
1. はじめに
RubyKaigi 2025
- 開催日時:2025/4/16(水)~2025/4/18(金)
- 場所:愛媛県県民文化会館
- 参加者数:1518人(過去最多)
私はRubyKaigiには2021年から参加していて、今回が5回目の参加でした。
YOUTRUSTに入社してからは3回目の参加になり、今年も会社に費用を負担してもらって業務として参加させてもらいました。
2. セッションのレポート
Keynote:Ruby Taught Me About Under the Hood (@ima1zumi)
今泉さんのKeynoteでは、ASCII、EBCDIC、Unicodeといった文字エンコーディングの歴史と、RubyにおけるUnicode対応の課題や改善についての発表でした。
EBCDICでは8ビットで日本語を表現するためにSIやSOの制御文字を使用して切り替えを実現していて、SIやSOをエディタで消してしまうとそれ以降の表示に不具合が生じるため、コード中のコメントは半角カタカナで表記することが多かったという話や、IRBで家族の絵文字を入力しBackspaceキーを押すとクラッシュした体験からIRBにパッチを作成した話がされていました。
Keynoteでは「好奇心を大切にしてください」というメッセージで締めくくられていて、FBC時代の自身の体験からIRB、そしてRubyのcommitterになった今泉さんだからこその重みがあり、多くの人の心を動かすKeynoteだったと感じました。
Introducing Type Guard to Steep (@tk0miya)
Steepでは組み込みメソッドではType GuardとType Narrowingをサポートしているが、ActiveSupportのメソッドではサポートされていないことに着目して、Type GuardのためのUnion Typesを提案する発表でした。
発想はシンプルですがとても便利な機能で、Steepがさらに便利になっていました。
また、加えてユーザー定義型のType Guardの仕組みも提案されていて、発表内の具体例で取り上げられていたAdminの絞り込みはまさに本番コードでも何度も見たことがある例だったので、とても実用的な機能の追加だと感じました。
Goodbye fat gem 2025 (@ktou)
ビルド済みバイナリを含むfat gemを使い続けると、メンテナンスコストが大きいためにgemのメンテナが減ってしまい、Rubyエコシステムにとって負の影響があるのではないかという課題を提案した発表でした。
fat gemの問題点として、最新のRubyへの対応が遅れて最新版のRubyを使えないことや、脆弱性への対応が遅れてしまうこと、gemのメンテナンスコストが大きくなることが挙げられていました。
いちgemユーザーとしてできることは少なさそうですが、gemをメンテナンスしている人たちがRubyエコシステムのためにどんなことを考えているのかを知ることができて良かったです。
Automatically generating types by running tests (@sinsoku_listy)
神速さんが開発された、テストコードの実行から型情報を自動生成するgem rbs-traceのお話でした。
rbs-traceを使うことで、手動で型を記載していく手間を省き、テストに実直な型情報を収集することを実現されていました。
rbs-traceを有効化することでテストの実行時間が約1.5倍ほどに大きくなったり、スタブやモックを含んだテストに対する結果など、今後の改善がとても楽しみでした。
State of Namespace (@tagomoris)
去年のRubyKaigiで「Namespaceが実装されればRuby 4.0になる」とMatzも言っていた注目の機能のNamespaceの、去年からの進捗に関する発表でした。
この1年間はデバッグをし続けていて、make checkまで通るようになったとのことでした。
tagomorisさんはBuriKaigiでさくらインターネットのガバメントクラウドのセッションを聞いていて、そちらの仕事だけでもものすごく大変なことをされていることを知ったので、それに加えてNamespaceの方も進められているのは本当にすごいなと感じました。
Matzの最後のKeynoteでRuby 4.0では実験的なNamespaceが含まれるとのことだったので、引き続き注目機能のNamespaceの動向を確認していきたいです。
RuboCop: Modularity and AST Insights (@koic)
koicさんによる、拡張性と責務分離のためにRuboCopのモジュール化を進めている話と、parser gemからPrismへの移行に関する話でした。
YOUTRUSTでもRuboCop関連gemのバージョンを上げたときにrequireからpluginsに移行するように警告が出ているのを見て対応していたのですが、その背景を発表を聞いて知ることができて良かったです。
Making TCPSocket.new "Happy"! (@coe401_)
しおいさんによる、昨年に引き続きHappy Eyeballsについての発表でした。
Rubyで書かれているSocket.tcpに対する実装を、Cで書かれているTCPSocket.newに適用させようとしたタイミングで、実装をステートマシンに寄せ過ぎていたために問題が見つかり、Socket.tcpの再実装を行ったという発表でした。
後半では、しおいさんがRubyのCommitterになって自身でPRをmergeしたことや、多くの修正を継続的に入れられていたこと、Ruby3.4のリリース超直前まで修正をされていたことが話されていました。
余談ですが、RubyKaigiから帰った翌日に受けたネスペの試験で思いっきりHappy Eyeballsに関する問題が出てきて、これしおいさんの発表でやったところだ!となっていました。
Ruby Committers and the World
今年のRuby Committers and the Worldでは、「できるならRuby4で何をdeprecatedにしたいか?」「後方互換性を無視しても良いのであれば何を変えたいか?」「AIを使っているか?」などの質問に対してディスカッションが行われていました。
「後方互換性を無視しても良いのであれば何を変えたいか?」の議論では、/が文脈によって意味が変わる挙動をやめる案や、SymbolとStringをさらに曖昧にして区別しないようにする案などの話が出ていましたが、行の途中にコメントを入れられるようにする案では最終的に後方互換性の観点の議論に行き着いていて、金子さんが言われていた通り普段RubyのCommitterがどれだけ後方互換性を意識されているのかが分かるディスカッションでした。
AIの活用については、ドキュメントの作成やcommitメッセージの作成やコードリーディングでは役に立っているが、Rubyを作る際にはまだあまり実用レベルには達していないという話を聞くことができました。
On-the-fly Suggestions of Rewriting Method Deprecations (@ohbarye)
大場さんによる、プログラム実行によって非推奨メソッドの書き換えを実現する方法の提案の発表でした。
大場さんの発表は他の方の発表と比べてより実務に近い発表で、実際に使うシチュエーションをイメージしながら聞くことができました。
静的解析や統合開発環境で書き換える従来の方法とは異なり、書き換えルールを定義してプログラムを実行するだけで非推奨メソッドの書き換えを実現する方法を、Pharoという言語から着想を得てRubyで実現させたお話でした。
Matz Keynote (@yukihiro_matz)
最後はMatzのKeynoteでした。
今年は「Programming Language for AI age」というタイトルで、AI時代であるまさに今のプログラミング言語との向き合い方に関する発表でした。
AIができる(楽しい)仕事はAIがやり、AIができないような(楽しくない)ことばかりを人間がやるようになってしまうと、あたかもAIが「主」で人間が「従」のように錯覚してしまう逆アルファシンドロームを懸念されており、もう一度改めて考え直す必要があると話されていました。
また、AI時代に重要な要素として簡潔さと表現力と拡張性を挙げてRubyはそれらを兼ね揃えている、これから必要な要素としてデータとツールとパフォーマンスが挙げられていました。
最後に、実験的なNamespaceと実験的なZJITを含んだRuby 4.0を2025年にリリースするという全rubyistにとって嬉しい発表で締めくくられていました。
3. その他
3-1. スポンサー
スポンサーブースも3日間ともすごく盛り上がっていました!
RubyKaigiが成り立っているのは、運営や発表者のみなさんだけでなく、協賛してくださっている数多くの企業のおかげでもあるので改めて感謝しつつ、YOUTRUSTもRubyコミュニティのためにさらに貢献できることを探していきたい気持ちが強まりました。
3-2. 廊下
今年も会場の廊下でSpeakerの方に気持ちを伝えたり、去年のRubyKaigiぶりに会った人と話したりと、廊下を思う存分楽しめました!
Drinkup後に大街道に行くと常にrubyistが居て、お店に入って話したりRubyKaigiの垂れ幕を背景にして写真を撮ったりもできました。
4. 終わりに
今年のRubyKaigiも本当に充実した期間を過ごすことができ、RubyKaigiでしか得られない栄養を取ることができました!
気持ちが高まっているうちにKaigiEffectで行動に移したいです。
来年もRubyKaigiには参加するので、またみなさん函館でお会いしましょう!