🐈

【Ruby 4.0 Advent Calender】cgi ライブラリが default gem から削除される【9日目】

に公開

Ruby 4.0 Advent Calender 9日目の記事です。

これはなに

今年 2025年12月25日にリリースされる予定の Ruby 4.0 の新機能や変更点などを1つずつ紹介していく Advent Calender になります。
基本的には NEWS に載っている機能を紹介すると思うんですがここにない機能についても書くかもしれません。
また、記事を書いてる時点ではまだ Ruby 4.0 はリリースされる前なので Ruby 4.0 がリリースされた時点で機能が変わっている 可能性があるかもしれないので注意してください。
記事のまとめは ここを参照 してください。

cgi ライブラリが default gem から削除される

Ruby 4.0 から cgi ライブラリが Ruby 本体から削除され、意図的に cgi ライブラリを追加しないと利用できなくなります。

# require すると警告が出る
# これ自体はエラーにならない
require "cgi"
# Ruby 3.4 => no warning
# Ruby 4.0 => warning: CGI library is removed from Ruby 4.0. Please use cgi/escape instead for CGI.escape and CGI.unescape features. If you need to use the full features of CGI library, Please install cgi gem.

# CGI の機能を利用しようとするとエラーになる
cgi = CGI.new("html3")
# Ruby 3.4 => no error
# Ruby 4.0 => error: wrong number of arguments (given 1, expected 0) (ArgumentError)

また以下の cgi/escape 関連の機能は引き続き利用することができます。

  • `CGI.escape``C GI.unescape
  • CGI.escapeHTML CGI.unescapeHTML
  • CGI.escapeURIComponent cGI.unescapeURIComponent
  • CGI.escapeElement CGI.unescapeElement

cgi/escape を使用する場合は require "cgi/escape" することで引き続き警告が出ることなく利用することができます。
Ruby 4.0 でも require "cgi" をすれば警告は出ますが "cgi/escape" 関連自体は使えますが今後は "cgi/escape" を利用する必要があります。

# CGI.escape 等は require "cgi" をしても利用できる
# ただし、今後は "cgi" ではなくて "cgi/escape" を利用する必要がある
require "cgi"

# no error
pp CGI.escape("https://bugs.ruby-lang.org/issues/21258")

今後は以下のような使い方を想定しています。

# 以下のような利用の仕方は今後も OK
require "cgi/escape"
pp CGI.escape("https://bugs.ruby-lang.org/issues/21258")

# 以下のような require や利用の仕方は NG
require "cgi"
cgi = CGI.new("html3")

上記以外の CGI ライブラリを引き続き使用したい場合は Gemfile で明示的に gem "cgi" を追記する必要があります。

今回 cgi が削除された背景としては脆弱性対応に対してコストをかけたくない、ということみたいですね。

関連

GitHubで編集を提案

Discussion