Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby 3.0とRails 6.1の "サポート"マトリクス

Yasuo Honda
January 29, 2021

Ruby 3.0とRails 6.1の "サポート"マトリクス

Yasuo Honda

January 29, 2021
Tweet

More Decks by Yasuo Honda

Other Decks in Technology

Transcript

  1. • Maintenance Policy for Ruby on Rails • New Features

    / 新機能 ◦ mainブランチで追加される(現在は6.2.0.alpha) • Bug Fixes / 不具合修正 ◦ 6.1.Z • Security Issues / セキュリティ問題の修正 ◦ 6.1.Z, 6.0.Z, 5.2.Z • Severe Security issues / 重大なセキュリティ ◦ 6.1.Z, 6.0.Z, 5.2.Z Railsのメンテナンスポリシー
  2. • Ruby Maintenance Branches • Ruby 3.0, Ruby 2.7, Ruby

    2.6 ◦ normal maintenance • Ruby 2.5 ◦ security maintenance ◦ EOL date: 2021-03-31 • メジャー、マイナーバージョンのリリース日が決まっている • EOLの日付も事前に決まっている Rubyのメンテナンスポリシー
  3. • Rails 6.Y.Z ◦ Ruby 2.5.0以上(required_ruby_version) ◦ Require Ruby 2.5

    for Rails 6. #34754 ◦ 上限は定められていない • required_ruby_versionが変更されるのは ◦ すくなくともRails5以降は、Railsのメジャーバージョンアップ時のみ (X. Y. Zのうち、Xが上がるときのみ) Railsが必要とするRubyバージョン
  4. • Railsが必要とするRubyバージョンで動作するためにしていること • リリースされたRuby (2.5, 2.6, 2.7, 3.0) ◦ https://hub.docker.com/_/ruby

    でリリースされたら、自動的にCI に追加される ◦ パッチバージョンは指定されていないので、結果的に最新パッチバー ジョンが利用される Railsが必要とするRubyバージョン(続)
  5. • 開発中のRuby (現在は3.1.0dev) ◦ https://hub.docker.com/r/rubylang/ruby の rubylang/ruby:master-nightly-bionicでテストされる ◦ FailしてもCI自体はgreen ◦

    開発中Rubyによる非互換性はこの段階で発見され、RailsかRubyで 修正される ▪ 「再現ケース」の必要性とその難しさ 参照 ◦ Rubyの非互換をもたらす変更が「いつ」入るかによって、どのRails から新しいRubyで動作するようになるかが変わる Railsが必要とするRubyバージョン(続)
  6. • Ruby 3で、block内でblockを指定せずDir.chdirするとエラーになるよう に計画されていたが、2.7とほぼ同様に警告になるように戻った ◦ RailsにからRubyへのフィードバックの結果 • dir.c: chdir conflict

    should raise only when called in different thread #3990 ◦ Rubyに修正が入ったのが2020年12月24日 • この修正がないとRails 6.1で`rails app:update`が動かなかった ◦ railsコマンドの`inline: true`が必要としていた ◦ Avoid shelling out for generator `generate` action #37516 Bug #15661: Disallow concurrent Dir.chdir with block - Ruby master
  7. • Fully separate positional arguments and keyword arguments #2794 ◦

    2020年1月3日にRuby 3.0.0-devにマージされる ◦ Ruby 2.7のwarning段階で多くは修正されていた • Railsの対応は ◦ 当時はmasterブランチでRails 6.1.0.alphaが開発中 ◦ New FeaturesかBug Fixといえる、Security Issuesではない ◦ masterブランチ修正後、6-0-stableにバックポートされ、Rails 6.0.3としてリリース Feature #14183: "Real" keyword argument - Ruby master
  8. • キーワード引数分離対応への私見 ◦ New Features(master as 6.1.0.alpha)とはいえる ◦ Bug Fix?

    ▪ Rails 6.0.Z(6−0−stable)にバックポートされると思っていなかっ た ◦ Security Issuesとはいえない ▪ Rails 5.2対応をしていない ▪ Ruby 2.7 と Rails 6.0 / Rails 5.2 への展望と懸念 参照 Feature #14183: "Real" keyword argument - Ruby master
  9. • Make Module#prepend affect the iclasses of the module #3181

    ◦ 2020年7月19日にRuby 3.0.0-devにマージされる • Railsの対応 ◦ 2020年7月22日にRailsのmasterブランチに修正され、 6-0-stableブランチにbackportされる ◦ 2020年5月6日にRuby 2.7のキーワード引数対応警告に対応した Rails 6.0.3をリリースした後 • 12月25日にリリースされる Ruby 3.0 に備えよう! 参照 Use ActiveSupport::ToJsonWithActiveSupport Encoder#to_json for Ruby 2.8.0 #39697
  10. • Rafael (Rails core team memberのひとり)の回答 • Rubyバージョンの上限が示されていない理由 ◦ Railsからは、Railsに非互換性をもたらすRubyの変更がどのバー

    ジョンで入るかはわからない ◦ 上限を設定したら、非互換性がないとわかった時点で、毎回その上 限を変更したRailsをリリースすることになってしまう • Rails 5.2でRuby 3.0が対応されない理由 ◦ Ruby 3.0.0がリリースされた時点でRails 5.2のメンテナンスレベル はsecurity issue,severe security issueのみ Rails 5.2 doesn't work with Ruby 3.0 · Issue #40938 · rails/rails
  11. • Rails 6.Y.ZとRuby 2.5.0の組み合わせで`rails new`が`NameError: uninitialized constant URI::Generic` • Ruby

    2.5.1以上でこのエラーは回避されたとのこと • required_ruby_versionは2.5.0のままの理由 by Rafael ◦ プラットフォーム依存のようだ(真相は不明) ◦ 2.5.0で問題なく動作している人に強制的にアップグレードをさせたく ない • ユーザーとしては新しいパッチバージョンを使った方がいい Following the guides and create a new project with ruby 2.5.0 fails · Issue #38649 · rails/rails