コマンドラインでやる「いつも処理」を Thor タスクとして定義しておくと便利だ。
私の場合,そういったたくさんの「いつもやる処理」のひとつに,「Ruby の公式リファレンスマニュアルをブラウザーで開く」というのがある。
たとえば,
thor ruby:doc String
と打てば,リファレンスの class String がパッと開く。
また,
thor ruby:doc String#each_byte
なら,上記ページの each_byte メソッドのところに飛ぶ。
ところが,Ruby 4.0.0 のプレビュー版を入れていろいろやっているとき,いつものように上記コマンドを打つとエラーが出た。
ええっ??? あっ,そうか!
Thor タスクの定義で
class Ruby < Thor
end
みたいに書いてたんだった……。
Ruby 4.0 で Ruby というモジュールが導入されたのでそれと名前がかぶってるんだ。
Ruby 4.0.0 のリリースノートには
このモジュールは Ruby 3.4 で予約されていましたが
とあるが,プレビュー版が出るまでそんなの知らなかったぞ。
予約ってどういう意味だ?
Ruby 3.4.8 で,
Ruby = 3
と書いても,エラーや警告は出ないが?
それはともかく,解決法は簡単で,
class RubyTask < Thor
namespace :ruby
end
などとすればよろしい。
これだけの修正で,いままでどおりに使える。