トップ 最新

ただのにっき

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はダメだという好例になってるという……。

*1 そもそもnpmコマンドにもinstallを意味する「i」一文字のaliasがあるのでisntallは完全なる蛇足だ。

*2 システムが強制的に提供するaliasがダメなのであって、自分でslをlsのaliasとして定義するのはかまわないのだから、slコマンドを入れてもなんの戒めにはならないのでは?