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

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

Avatar for Yasuo Honda Yasuo Honda
January 29, 2021

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

Avatar for Yasuo Honda

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