皆様こんにちは、メドピアのサーバーサイドエンジニアの内藤(@naitoh)です。
RubyKaigi 2025に参加されていた皆さん、お疲れ様でした。
今回、内藤がRubyKaigi 本編に登壇しました。 発表内容の詳細は以下の記事にまとめておりますのでよろしければご覧ください。
セッションレポート
RubyKaigi のセッションの中で特に印象に残ったセッションをご紹介します。 タイムテーブルは下記から確認ください。
Make Parsers Compatible Using Automata Learning
オートマトン理論は理解していなかったのですが、「オートマトンと正規表現は相互に変換できる」とのことなので、正規表現が数学的にオートマトンで表現できるのは美しく非常に良いですね!
RubyKaigi に来るたびに、自分の知らないコンピュータサイエンスの知識を思い知らされます。
聞きたいセッションがあれば、タイムテーブルに書かれている説明を予習しておくとセッションをもっと楽しめるんですよね。 続きものであれば、同じ人の昨年以前のセッション動画を見ておくのもお勧めです。
Goodbye fat gem 2025
様々な gem をメンテナンスされている須藤さんの公演で、fat gem*1の辛みを面白おかしく共感を呼ぶ形でお話されるトークでした。 自分のトークもこのように、会場の反応を楽しみながらできれば良いのですが、なかなかハードルが高いです。
公演の内容は、fat gem はユーザー視点だと利用するだけなら楽で良いけど、これって実は開発者側に多大なコストがかかっているので、持続可能性の意味で厳しいんですよね。 例えば nokogiri gemの場合、Ruby 3.4 がリリースされたその日に、対応する11プラットフォーム(内部的にサポート対象の Ruby のバージョンは4つ)が用意されています。ユーザーとしては非常にありがたいのですが、開発者目線で見ると nokogiri は頑張りすぎだと思います。 自分の gem でこんな事求められたら無理ですと断るレベル。
なので、須藤さんの提案は、
- C拡張 gem でもユーザー自身にビルドしてもらいましょう
- ビルド環境を用意するのが手間(よくビルドエラーになる)なので、ビルド環境を自動で準備できれば良さそう
- Windows 環境には RubyInstaller2という先駆者がいる
- Devkit というビルド環境がセット
- パッケージマネージャもセット
- 依存パッケージを自動インストール
- 依存パッケージが存在せずインストールに失敗するということはない
- インストール時に自動で外部依存もインストールする rubygems-requirements-system gemを用意
このように、ユーザー自身でビルドする世界になれば持続可能性が高まり、みんなハッピーになるだろうということです。
ユーザーの環境で毎回ビルドのコストがかかる
点と、ユーザーの環境に依存パッケージをインストールする必要がある
点がデメリットですが、前者は許容できるコストで、後者はローカル環境を汚染したくない場合、Docker 上で実施するのが良いのではないでしょうか。(この gem がもし主流になれば、Dockerfile に依存パッケージ名を記載する手間がなくなる可能性もあるかもしれません。)
RuboCop: Modularity and AST Insights
精力的に開発が続いている RuboCop のモジュール性のお話です。
これまで RuboCop は公式のプラグイン API を提供していなかったため、inject
と呼ばれるモンキーパッチを利用する形で実現されており、それがデファクトスタンダードだったそうです。末恐ろしい状況ですね。
体系的なプラグインシステムが提供されるとユーザーとしても安心して使えるし、開発者としても貢献しやすくなりますよね!
また、RuboCop のバックエンドパーサーとして機能してきた Parser gem の代わりに、今後は Prism が採用されるとのことで、Ruby エコシステムの世代交代が進んでいますね。 Ruby の最新の機能が実用段階に来ているということで、どんどん最新版を使っていきましょう!
おわりに
3日間にわたる RubyKaigi 2025が終了しました。 非常に魅力的な公演が目白押しでしたが、3トラックのため、視聴できるセッションが限られていた点と、自身の発表の裏番組だった ZJIT を聞けなかったのが残念です。
次回のRubyKaigiは 2026年4月22日から4月24日、場所は北海道函館市です。
是非読者になってください!
メドピアでは一緒に働く仲間を募集しています。
ご応募をお待ちしております!
■募集ポジションはこちら medpeer.co.jp
■エンジニア紹介ページはこちら engineer.medpeer.co.jp
■メドピア公式YouTube www.youtube.com
■メドピア公式note
style.medpeer.co.jp
*1:事前にビルド(コンパイル)された C拡張バイナリを同梱した gem。新しい Ruby が出るとその Ruby のバージョンにあわせた対応バイナリが必要。