RubyKaigi 2019 参加記録(2日目)
RubyKaigi 2019 2日目のメモ
1日目 autopp-tech.hatenablog.com
Keynote: All bugfixes are incompatibilities
CRuby 安定版のメンテナで ruby trunk changes を書いている @nagachika さんのキーノート。安定版メンテナとはどんな仕事で、何に気をつけないといけないかについて。
trunk のバグ修正を backport する……と書くだけなら簡単だが、実際にはバグ修正なのか、それとも(対象外である)機能追加/仕様変更/パフォーマンス改善なのかを見極める必要があり、その境目は時として曖昧という。
そして影響度の小さなバグの修正が影響度の大きい新たなバグを生み出してしまうこともあることから、トリアージと場合によっては取り込まないという判断も必要になることがある。Ruby の開発にかかわらず、あらゆるソフトウェアやサービスの開発に通じる話だと思う。
How RSpec works
RSpec のメインメンテナによる RSpec のライブラリ構成と動作モデルの解説。
matcher の仕組みについては 以前 RSpec の独自マッチャーを書いた時になんとなく理解した(つもりになっていた)が、rspec-core が担っている全体の実行フローや、rspec-mock の receive
などがどうやって動いているかはきちんと追ったことがなかったので大変勉強になった。今度がんばって読んでみるか……
Yabeda: Monitoring monogatari
Sidekiq を例に Metrics のセオリー、Prometheus で可視化するための方法、そして汎用的なソリューションである Yabeda の紹介。
prometheus-client
を使った Sidekiq の Metrics のエクスポートするコードを見て「これいい感じにライブラリ化できないのかなー」と思ってたところで Yabeda が紹介され、ですよねー、という。Java で言うところの Micrometer 的な立ち位置の gem という捉え方でいいんだろうか。
State of Sorbet: A Type Checker for Ruby
Ruby 3 の静的解析に関わるとされている Sorbet の現状について。
現時点で既に Stripe のコードを対象に十分な結果を残しおり、有益な VS Code Extension も作れるとのことで期待が高まる。今年の夏には OSS になる予定とのこと。
ライブラリの型定義は sorbet/sorbet-typed に集約予定らしく、この方針が上手くいくのかは気になるところだが、とりあえず first commit のメッセージがかっこいい。
A light weight JIT compiler project for CRuby
昨年の「Three Ruby performance projects」で触れていた MIR の設計と現状のパフォーマンス、そして展望について。
新たな中間表現 MIR から機械語への変換では効果の大きい最適化のみを採用することで、gcc -O2
と比べて実行速度をそこまで落とすことなく、コンパイラの起動速度・コンパイル速度・バイナリのサイズを削減。C から MIR への変換には既存コンパイラはあえて使わずにフルスクラッチでフロントエンドを作ったとのこと。
まだまだ ongoing でやることもやりたいこともたくさんあるみたいだが、今後の進捗に期待。
Building Homebrew in Ruby: The Good, Bad and Ugly
Ruby のキラーアプリである Homebrew について。Mac に直接 bundle する故の難しさ、そして Homebew が提供する API を利用した Fomula の作り方など。