なにこれ
ruby3.0で「hashをキーワード引数に自動変換する機能」を削除する予定だったけど、延期もしくは中止する
と、Matzがrailsのフォーラムでコメントしていたので、その経緯とかを把握するために記事にしました
そもそも、hashをキーワード引数に自動変換する機能って?
def a(hoge:) p hoge end a(hoge: 'a') a({hoge: 'b'})
こんな感じに、メソッドがキーワード引数の場合、hashを引数に渡しても良い感じに解釈してくれる機能
なんで自動変換機能が削除されるの?
この機能のために、バグが発生したり、機能の追加が面倒という欠点があったので、2017年頃には、ruby 3.0.0 からは削除されるという話が出ていた
また、その前準備の期間として、ruby 2.7では、非推奨の機能とされ、Warningが出るように変更された
上のコードをruby2.7.1で実行すると警告が出る
01.rb:6: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call 01.rb:1: warning: The called method `a' is defined here
なんで自動変換機能が削除が延期されたの?
Railsフォーラムで、上記の警告が大量に出過ぎて鬱陶しい & 対応がすごい大変という話が上がった(らしい)
それに対して、Matzが以下のようにフォーラムにコメントした
- 多すぎるWarningがノイズになっているのを認識している。2.7.2ではWarningを消すか減らす
- 移行コストを低く見積もりすぎていた
- 上記のために、ruby3.0でキーワード引数をどうするか(延期/中止)検討する
👇リスケに関しての記事
今後どうするの?
Ruby側は、以下のissueで議論するらしい
感想
- Rails使っていて、rubyのアップデート考えている人は、Ruby側の結論と、それに対してのRails側の反応を見てから、どうするか決めたほうが良いんじゃないですかね
- ruby2.7系については、APIレベルでの非互換性がある変更は無いはずなので、特に慌てることは無いのでは