ruby 2.7 で動いているアプリケーションを ruby3で動くようにする。
といってもやることは
RUBY_OPT="-W:deprecated"
として テストを走らせて、出てくる警告をつぶしていくだけの簡単な作業です。
多かったのは warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
です。
def func(arg1, keyword_arg1:, keyword_arg2) ... end
のようなものを呼び出すときに
opts = { keyword_arg1: "arg1", keyword_arg2: "arg2"} func("arg1, opts)
と呼んでいるものについて、 optsを **opts と展開してわたしなさい。
というもので、これは出た個所を淡々と書き換えていけばよいです。
似たようなものに warning: Passing the keyword argument as the last hash parameter is deprecated
というのがあり、こちらは逆に
def func(arg1, hash_arg1) hash_arg1["arg2"]... end
を呼び出す際に
func("arg1", arg2: "arg2", arg3: "arg3")
のように呼んでいるものについて、 {arg2: "arg2", arg3: "arg3"}
のようにkeyword parameter ではなくちゃんとhash parameter にしてわたしなさい。
というものです。これも出た個所を淡々と書き換えてくだけです。
最後は warning: '_1' is reserved for numbered parameter; consider another name
というやつで、
ruby 2.7から numbered parameter が導入され、 ruby3 で 1...9 が定義できなくなるというものです。
object.each { |_1,_2, arg, _3| arg ... }
というように、 ほしいところ以外を _num で埋めていたらそれが使えなくなっていました。 これは
object.each { |_arg1,_arg2, arg, _arg3| arg ... }
のように書き換えていくだけです。