Madogiwa Blog

主に技術系の学習メモに使っていきます。

個人のWebサービスをRuby 3.0アップデートしたので対応したこととかMEMO

2020/12/25にRuby 3.0.0がリリースされました🎄🎅🎁✨

www.ruby-lang.org

Ruby on Rails(6.1.1)製の個人のWebサービスを今更ながらRuby 3.0にアップデートしました。

update後に一部CI等が落ちて対応した点があったので対応したことをMEMOしておきます📝

対応したこと

非推奨だったキーワード引数が動かなくなったので**で展開して渡すように

キーワード引数が通常の引数から分離されました。 原則として、2.7 で警告の出ていたコードは動かなくなります。詳細は別ドキュメントを参照してください。

# before
@feeds = Feed.preload(:last_entry, :tags).search(search_params).recent

# after
@feeds = Feed.preload(:last_entry, :tags).search(**search_params).recent

2.7に上げたときの対応漏れがあり、3.0.0で動かなくなるキーワード引数の挙動を使った実装が残っていたので対応しました。

対応方法はRubyの公式のドキュメントが出ていて、

www.ruby-lang.org

Here is the most typical case. You can use double splat operator (**) to pass keywords instead of a Hash.

今回は上記の通り典型的なケースだったので**を付与し展開して渡すようにしました。

標準添付ライブラリからbundled gemに変更になったのでGemfileに追加

Rssを読み込むような機能でRubyの標準添付ライブラリだったrssを利用していたのですが、

docs.ruby-lang.org

以下のライブラリが新たに bundled gems になりました。Bundler から利用する場合は Gemfile に明示的に指定してください。
rexml
rss

上記の通り、bundled gemに変更されGemfileに明示的に指定する必要があり、Gemfileに追記する対応をしました。

# Gemfile
gem 'rss' # add

また以下はbundled gemにならず標準添付ライブラリから削除されているので、同様にGemfileに追記したinstallするような対応が必要そうです。

以下のライブラリは標準添付ライブラリから削除されました。3.0 以降で使いたい場合は rubygems から利用してください。
sdbm
webrick
net-telnet
xmlrpc

ちなみにbundled gemとかdefault gemとかの話は以下がわかりやすかったです💎

blog.n-z.jp

おわりに

Rubyのメジャーアップデートということでしたが、個人の規模が小さいアプリケーションということもあり、そこまでハマるようなこともなくバージョンが挙げられました🙏✨

Ruby 3.0はrbsを始めとした静的型付け系の機能が入っていたり、パフォーマンス向上 etc...様々な改善がされているなか、利用者がスムーズにアップデートできるというのは非常にありがたいですね🙇‍♂️