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