RubyKaigi 2022 で動的に RBS を生成してみた話をする

前日の宣伝になってしまうんですが明日の RubyKaigi 2022 で動的に RBS を生成してみた話をします。

内容としては上に書いてある通りなんですが Ruby の実行中に型情報を収集して RBS を生成してみたって内容の話になります。 やったことに対する先出しをすると以下のように Ruby を実行しつつ RBS を出力するような gem をつくりました(つくっています)。

# sample.rb
class FizzBuzz
  def initialize(value)
    @value = value
  end

  def value; @value end

  def apply
      value % 15 == 0 ? "FizzBuzz"
    : value %  3 == 0 ? "Fizz"
    : value %  5 == 0 ? "Buzz"
    : value
  end
end

p (1..20).map { FizzBuzz.new(_1).apply }
# sample.rb を実行して、その結果を元にして RBS を出力する
$ rbs-dynamic trace sample.rb
# RBS dynamic trace 0.1.0

class FizzBuzz
  private def initialize: (Integer value) -> Integer

  def apply: () -> (Integer | String)

  def value: () -> Integer

  @value: Integer
end
$

内容的には苦労話メインになりそうなんですが、RBSRuby の型について気になる人がいればぜひぜひ聞きに来てくださいー。 参加されない方も後日スライドは公開するのでぜひ読んでもらえるとー。