おそらくはそれさえも平凡な日々

「UNIXという考え方」における「沈黙は金」は常に正しいか

みんな大好き「UNIXという考え方」に「沈黙は金」という項目があって「コマンドが成功した場合には余計な出力をすべきではない」ということが書いてあります。

ユーザーに会話調で話しかけることがユーザーを助けることだ、と考えているプログラマが多すぎる。UNIXは一般に「ドライ」で、ただ「事実」だけを伝える。

まず、この項目はこの本の中では「10の小定理」というものの中に含まれるもので、小定理については必ずしも常に正しいとは限らないというような注意書きが書かれていることを先に断っておきます。

コマンドラインツールはデフォルトでは余計な出力をすべきではないというのは基本同意です。詳細な途中経過のログを流したいのであれば、 --verbose オプションが実装され、それが利用されるべきでしょう。それに最近作られたツールは出力を出し過ぎで煩わしく感じることも多くなってきました。

ただ、それは少し偏屈な技術者の思考じゃないのかとも思うようにもなりました。とっつきやすさのために、少しだけフレンドリーなログを出してあげるのもアリなのではないでしょうか。実際、初めてコマンドラインを触ったとき、あまりにもぶっきらぼうでとっつきづらいと感じる人がほとんどでしょう。 svc とか初めて触ったときビビりませんでしたか?

なので、標準ではログを吐きつつ、 --silent オプションで出力を抑制するようなパターンもありだと思います。

ただ、ここで大事なのは「ログ的な出力には必ず標準エラー出力を使う」ということです。標準出力は他のプログラムに受け渡されうるデータを出力する目的のみに利用すべきだからです。これは、定理9の「すべてのプログラムをフィルタにする」にも書かれていることで、これは完全に正しいです。

ところで、最近Go製のツールによくあるんですが、 --help の出力が標準エラー出力に出るのはページャーに渡しづらくてめんどくないすか? 2>&1 | less とかやるのがダルい。これは「明示的にヘルプ出力が望まれているのだから標準出力に出すべき」派です。

UNIXという考え方

created at
last modified at

2018-08-15T01:34:31+0900

comments powered by Disqus