「UNIXという考え方」における「沈黙は金」は常に正しいか
みんな大好き「UNIXという考え方」に「沈黙は金」という項目があって「コマンドが成功した場合には余計な出力をすべきではない」ということが書いてあります。
ユーザーに会話調で話しかけることがユーザーを助けることだ、と考えているプログラマが多すぎる。UNIXは一般に「ドライ」で、ただ「事実」だけを伝える。
まず、この項目はこの本の中では「10の小定理」というものの中に含まれるもので、小定理については必ずしも常に正しいとは限らないというような注意書きが書かれていることを先に断っておきます。
コマンドラインツールはデフォルトでは余計な出力をすべきではないというのは基本同意です。詳細な途中経過のログを流したいのであれば、 --verbose
オプションが実装され、それが利用されるべきでしょう。それに最近作られたツールは出力を出し過ぎで煩わしく感じることも多くなってきました。
ただ、それは少し偏屈な技術者の思考じゃないのかとも思うようにもなりました。とっつきやすさのために、少しだけフレンドリーなログを出してあげるのもアリなのではないでしょうか。実際、初めてコマンドラインを触ったとき、あまりにもぶっきらぼうでとっつきづらいと感じる人がほとんどでしょう。 svc
とか初めて触ったときビビりませんでしたか?
なので、標準ではログを吐きつつ、 --silent
オプションで出力を抑制するようなパターンもありだと思います。
ただ、ここで大事なのは「ログ的な出力には必ず標準エラー出力を使う」ということです。標準出力は他のプログラムに受け渡されうるデータを出力する目的のみに利用すべきだからです。これは、定理9の「すべてのプログラムをフィルタにする」にも書かれていることで、これは完全に正しいです。
ところで、最近Go製のツールによくあるんですが、 --help
の出力が標準エラー出力に出るのはページャーに渡しづらくてめんどくないすか? 2>&1 | less
とかやるのがダルい。これは「明示的にヘルプ出力が望まれているのだから標準出力に出すべき」派です。