このブログは Ruby 2.7 でずっと動かしていた。コミットログをたどると 2020 年の 1 月から Ruby 2.7 のようだ。 Ruby 2.7 は 2023 に EOL を迎えている。
さすがにまずいと思ったので Ruby 3 にしようと一日頑張ってみたが、なかなかうまくいかない。Ruby 3 の キーワード引数の仕様変更はかなり対応がきつい。どこで ArgumentError が起こっているのかが極めて追いかけづらい。他のメソッドに委譲している場合などは特に。
ガチャガチャやってトップページと個別記事ページまでは Ruby 3 化できたので Ruby 3 でデプロイしてみたが、動かない画面があることに気がついたので Ruby 2.7 に戻した。 Kaminari がちゃんと動かない(具体的には kaminari-sinatra と actionview v6 系の互換性がない)のが原因でページネーションするページがちゃんと動かなそうだったので Ruby 3 化は諦めた。 kaminari-sinatra の ActionViewTemplateProxy#initialize
を actionview v6 対応させないと無理っぽい。
kaminari のような有名な gem の派生 gem ならきちんとメンテされてるかなーと思っていたが、 kaminari-sinatra の最終コミットは 4 年前だった。
Ruby で View まで作る人たちはほとんどいなくなってるのだろう。
なお動かないところのデバッグは ChatGPT と対話しながらやった。めっちゃ便利。一人だと気がつかないような部分のコードを見てみろと ChatGPT が言ってくれて、そこにデバッグコードを入れてみるとビンゴだったりする。便利な世の中になった。
忘れないようにやったこと・気づいたことをメモっておく。
- sinatra は v4 にあげないといけないのでパスの正規表現から
^
と$
は消さないといけない - better_errors の REPL がちゃんと動かないので Backtrace を見たいときはログを開くか better_errors を使うのをやめる
- fork していた sinatra-cache は sinatra 4 では動かないので外した(キャッシュできない部分をどうするかは要検討)
- capistrano-puma も Ruby 3 対応させないといけない(期待される systemd のフォーマットが変わっているので単にデプロイするだけではだめで一部手作業が必要)
- tilt は v2.1.0 に固定(
Tilt::ErubisTemplate
クラスが消えるため、 padrino-helper がエラーを出す) - concurrent-ruby は 1.3.5 未満に固定
- compass は 1.0.3 に固定
- SESSION_SECRET は 64 文字以上にする
- haml の過剰な escape を抑制
- kaminari-sinatra の
ActionViewTemplateProxy#initialize
を actionview v6.1.7.8 のActionView::Base#initialize
に対応させる