先週末と今日ガチャガチャやって、ようやく Ruby 3 にアップグレードすることができた。 Ruby 2.7.3 → Ruby 3.1.6 。ただ Ruby 3.1 は今年の 5 月に EOL を迎えるみたいなのでこちらもさっさと新しいバージョンの Ruby に上げないといけない。
やったことは一つ前の記事に加えて以下。
kaminari-sinatra の SinatraHelpers が Ruby 3 & ActionView v6 対応していなかったのでちょこちょこと修正した。
次に padrino-helpers が Ruby 3 と Haml v6 に対応していないのを対応させた。具体的には form_tag
の中身のタグが過剰に escape されてしまうので、あんまり良くないかもだが capture_html
したやつを html_safe
した。 form_tag
の内側に来るものはユーザー投稿コンテンツではないはずなのでエスケープはサイト管理者側でできるはず。
ドキュメントでは
= form_tag
を
!= form_tag
にしろとは言われているが、 form_tag
の中身で concat_contet してる片方( capture_html(&block)
の結果)が html_safe? => false
になるので、 View テンプレート側で何かやっても意味がない( Buffer が汚染されると View で html_safe
しても汚染された部分の文字列はエスケープ済みになっている)。
kaminari-sinatra も padrino-helpers も本家にパッチを送ると良いのだろうが、職業プログラマーではなくなったのでなかなか腰が重い。 kaminari-sinatra はテストが通らないし、 padrino-helpers は git clone で submodule の clone に失敗するのでテストが実行すらできないかもしれない。
心の余裕ができたらやってみる。
ちなみに Ruby 3 化するにあたり sinatra-cache を完全に捨てたので負荷が上がるかも。オリジナルの gem は 15 年くらいコミットされてなくて fork して使い続けてきたけど Sinatra や Haml の変更に追従できる気がしないのでいったん捨ててみる。