2015-03-06(金) [長年日記]
■ 安直なaliasを戒めるためにslコマンドをインストールした(いやしてない)
某所で「npmコマンドにはisntallというサブコマンドがある」という話でちょっと盛り上がった。
% npm -h : explore, faq, find, find-dupes, get, help, help-search, home, i, info, init, install, isntall, issues, la, link, list, ll, ln, login, ls, outdated, owner, pack, prefix, :
まぁようするにinstallと入力しようとしてisntallとタイプしてしまっても動くようにという配慮なんだろうけど、案の定というかnpmのissuesを見てみると「isntallがあるのにunisntallがないのはおかしい」とか「versionのaliasとしてverisonを追加してくれ」なんてのが見つかってカオス。
この問題の解法にはいくつか流儀があって、個人的にはrubyのThor gemが採用している候補が1つに絞り込まれるまでタイプすればOKというのが好きだけど(installの場合はたいてい「i」の1文字で済む)、typoから正しいサブコマンドをサジェストしてくれる(herokuコマンドとか)、自分でaliasを定義する(gitコマンドとか)などなど。コマンドがtypo対策のaliasを提供するnpmスタイルはなかでも一番ダメなタイプだよなぁ*1。
というわけで(?)、そんな安直なalias提供を(将来の自分が思いつくことを)戒めるべく、slコマンドをインストールすることにした*2。いや、slコマンドってネタとしては一瞬面白いけど、わざわざ入れとくようなもんじゃないと思ってたし、実際一度も入れたことないんだよね。
% sudo apt-get install sl : % sl zsh: command not found: sl
えっ。
% apt-file show sl | grep /sl$ sl: /usr/games/sl
gameなのか(笑)。PATHが通ってないからtypoしても動かないという。
% sudo apt-get remove sl
(結局いれてない)
追記
npmもThorスタイルだと@miyagawaから教わった。おお、ほんとうだ、「npm ins」でinstallが走るな。でもinstallは「i」がaliasされてるので「i」だけでいける一方、「in」だとinfoとかぶるので一意にならないという、やっぱりaliasはダメだという好例になってるという……。
git の「もしかしてこれ? あと n 秒したら実行するよ」機能もよいです。 (git-config(1) help.autocorrect 参照)
その機能は知らなかったが……なんかウザい気がするw