てめぇが使っておる MSYS のぁどこにヘルプるのぢゃ、の今更のメモ

ネタ初めそれ書いたならこれも書かねばねのもうひとつ。

最初ので「なぜ使うのか」は書いたつもりだけれど、推奨に対して消極的な理由ははっきりとは触れてない。無論インチキだからとか不十分だから、というのも理由とはなりうるけれど、本当に最も問題だと思っていることがある。

それは「ヘルプ・マニュアルの欠如」。「MSYS ユーザ向けヘルプ/マニュアル」のあらゆるものは欠落している。もっといえば「その整備はユーザからも特に望まれていない」ということでもある。それこそが「ミニマル」ということなのでもあろう。オフィシャルサイトにいったってなんの解決もしない。コマンドの解説はひとつとて見つからない。

「その整備はユーザからも特に望まれていない」のは無論そもそも MSYS を望むようなユーザが何者なのか、ということだ。「Unix ユーザであった記憶もないのに MSYS を選ぶことはない」であろうということ。つまり UNIX ユーザである記憶や手癖をそのまま「Windows でもっ!」として MSYS なり cygwin を選ぶのであって、「だったらマニュアルはその記憶ので良くね?」とまぁそういうノリ。のみならず、UNIX でそのかなり誕生初期から使われてきたオンラインマニュアルのシステムと、割とそれよりはずっと後(それでも今から数えるとおそろしく大昔)から GNU FSF で使われるようになったオンラインマニュアルのシステムはどちらもともに「考えるよりはずっと重量級システム」となってしまっていた、ということがおそらく理由である。

UNIX システムにおける伝統的なオンラインマニュアルのシステムは、たとえば FreeBSD とかが html ベースのオンラインマニュアルを始める前までは、ほとんど二択だった。

一つが「roff」に基づくもの。もう一つが(roff形式にも変換可能な)GNU info によるもの。後者は当時世界が望んだほどには GNU が世界にはならなかったこともあって、現存している GNU info 形式マニュアルはそう多くはない。が、当時としては結構な巨大なシステムで、「MSYS に組み込むべきか否か」に悩むのはなんとなく理解できる。前者の roff なのだが、元々の roff は(みんな大好き)TeX の元になったと思ってもいい、非常に「UNIX の歴史」そのものに大きく関係するもので、UNIX 関連の歴史がわかる書籍を読んでもらうとわかるのだが、「ベル研究所において UNIX を認めさせるために、UNIX はドキュメント作成システムである、と主張する必要があった、そのために整備されたのが roff である」要約すればそのようなこと。これ、「オンラインでコンソールにてマニュアルを参照出来る」に留まらず、実際には(そう、TeX 同様に)プリンタ向けに美しく整形することが出来るシステムになっている。(最初は PostScript もなかったのでデバイス依存の印刷制御をしてたらしい。PostScript と PostScript プリンターの誕生により roff は PostScript を生成出来るようになった。)

roff システム全体としての先天的な複雑さというだけなら、デベロッパも MSYS にこれを取り入れるのを躊躇しなかったかもしれない。けれども「Windows でこれを実現する」ために、もう一つ壁がある。もちろん「端末システム」の問題である。この実現のためにどうしてももう一つの大きなシステム、「端末制御」をクリアしなければならない。どうも MSYS デベロッパの閾値がちょうどここらへんにあるようで、termcap と less や vi(vim) は不可欠として整備しつつも、roff の方は除外、という決断になったらしい。エンドユーザ目線でいえば「そこまでやってくれてるならあと一歩なんだがなぁ」とは思うのだが、ただ、「/usr/share/man」という配布物が大きくなることや、大きくなるのが嫌だからという理由で別管理・別配布とするようなアプローチを考えたくなかった、とかたぶんそんな理由なんだと思う。

実際のところ、最近は試みてないし記憶もかなり薄いのだが、「cygwin で groff (GNU の roff) を野良ビルドするのは当然チョロいが、MinGW では困難もしくは出来なかった」だったかと思う。まぁ出来たとしてもマニュアルの方を別途なんらか入手しなければならんのだとしたら「やっとれん」てなると思うよ。だから試みようとしなくていいんじゃないかな。(man コマンドもないが、groff さえ使えるようになれば、シェルスクリプトで man コマンドのエミュレートは書ける。フルスペックだと結構大変だけれど、必要最小限のものだと5行くらいで書けるんじゃないかな。)

「ヘルプ・マニュアルの欠如」していない UNIX を使う場合というのはこれは「UNIX の基礎中の基礎」であり、おそらく「一番最初に学ぶべきこと」だ:

1 [me@host: ~]$ man ls
2 [me@host: ~]$ man 1 printf  # ユーザコマンドとしての printf のマニュアル(セクション1)
3 [me@host: ~]$ man 3 printf  # 標準Cライブラリの printf のマニュアル(セクション3)

これでコンソールでヘルプを参照できる。すなわち、「UNIX 初心者に MSYS を薦める」場合には、「ほんとは UNIX だと~なんだけどねぇ、ごめんねー」と謝らなければいけない、てことだわな。そして、「UNIX 初心者でない場合」、彼ら(ワシら)がどう考えているのか、だが、「ま、いっかー」。それだけの話。

どういう考えで整備するかにもよるけれど、一応 UNIX 流儀だと、「ヘルプ・マニュアル」は大きな分類でいえば二種類。一つがその man コマンドで参照される「完全(あるいは親切)な記述」。もう一つが、「簡単な要約だけをコマンド自身が出力する」:

1 [me@host: ~]$ ls --help

GNU 純正のものは全てこれで簡単なヘルプを参照できる。これが、MSYS で使える唯一のヘルプである。これで足りれば足りるし、足りなければ全く足りない。たとえば gawk の --help なんか一ビットも役に立たんであろうが、echo のヘルプなら 100% のヘルプであろう。それでいいならそれでいい、よくないなら…、そりゃインターネットに頼る、普通はそれだけである。一つ linux ディストリビュータなどの公式サイトをブックマークしておくといい、ということだろうが、もう一つは以前に紹介した explainshell.com は活用するといいんじゃないかな。