本記事は,thor という gem のバージョン 1.3.0(2023-10-19 リリース)の仕様変更でコマンド名の指定の仕方に変化が起こったらしいことについて書く。
詳しく調べていないので,起こった現象だけを書く。
Thor とは
Thor は Rake のように,コマンドラインで行いたいタスクを定義ファイルに記述して実行させることができるもの。
この gem を
gem install thor
で,インストールしておいて,たとえば,
class Text < Thor
desc "codepoints STRING", "Show codepoints of STRING"
def codepoints(string)
puts string.chars.map{ "U+%04X %s" % [_1.ord, _1] }
end
end
みたいなファイルをどこかに置いておく(拡張子は .thor
)。
そして,それを置いたディレクトリー(もしくはその下位ディレクトリーで)
thor text:codepoints 寒い
などと打てば
U+5BD2 寒
U+3044 い
のように,引数として指定した文字列のコードポイントがずらずらっと表示される。
コマンド名の短縮
さきほどの例で,text:codepoints
というコマンド名はちょっと長い。
しかし,最後まで書く必要はなく,たとえば
thor text:cod 寒い
みたいに codepoints
の部分を途中まで書いただけでも実行できていた。
(text
の部分は短縮できない)。
短縮したときに他のコマンドと被ってさえいなければよいので,たとえば他に c
で始まるコマンドが無いなら
thor text:c 寒い
でも OK。
このへんが Rake より便利なところ。
バージョン 1.3.0 でできなくなった?
2023-10-19 にバージョン 1.3.0 がリリースされたので,さっそく
gem update thor
で最新版を入れた。
すると,この短縮ができなくなった。
試しに
thor text:codepo 寒い
などと打つと,
Could not find command "寒い" in "text" namespace.
とエラーが出る。
ん〜?
「codepo
ってコマンド見つからん」ならともかく「寒い
ってコマンド見つからん」と言っている。
むちゃくちゃ変。
コマンド名を全部書けば今までどおりに動作する。
また,バージョン 1.3.0 をアンインストールして,以前のバージョン(一つ前は 1.2.2)に戻しても今までどおりに動作した。
おわりに
なんでこうなったのかよく分からない。
1.3.0 のリリースノートみたいなもの を見ても,それらしい記述が見つからない。
(英語ができないから見つけられないだけかもしれないが)