Manページ

**manページ**（マンページ）とは、UNIXおよびUnix系オペレーティングシステムの man システムのコンテンツであり、電子化されたドキュメントのこと。各ページは独立した文書として構成されている。ライブラリやシステムコールなどのコンピュータプログラム、標準や慣例、抽象的概念などに関するページがある。`man` コマンドを実行することでmanページを閲覧することができる。

## 使い方
マニュアル内のあるページを閲覧するには、以下のようなコマンドを使用する。

```
% man [<章番号>] <ページ名>
% man [-s <章番号>] <ページ名>
```


シェルのプロンプトで、たとえば "man ftp" と入力する（章番号は通常省略可能）。見やすくするため、ページャとして一般にlessをman内部で用いている。

ページを文章内で指す場合 "ページ名（章番号）" という書き方をする（たとえば、）。章番号は、同じ名前のページが複数の章に存在する場合、特定のページを指定するために使う。これはたとえば、システムコールの名前とコマンドの名前などが衝突する場合に必要となる。たとえば、 と 、 と  などがある。

多くの **<tt>man</tt>** のバージョンでは最近閲覧した数ページのフォーマットされた内容をキャッシュとして保存している。マニュアルファイルのパス設定は環境変数MANPATHにて定義・指定する。このパスの通っていない場所にあるマニュアルは表示されない。また、言語設定が “ja” または “japanese” になっていない場合に、日本語と英語両方のマニュアルが存在する場合は、日本語で表示されない可能性があるので注意が必要。

**<tt>man</tt>**コマンドのその他のオプションを知るには、

```
% man man
% man 5 man
```

というコマンドラインを入力・実行する。

## 歴史
*[https://man.cat-v.org/unix-1st/ UNIX Programmer's Manual]* は1971年11月3日に最初に出版された。オンラインのmanページは1971年、ダグ・マキルロイの命令でデニス・リッチーとケン・トンプソンが書いた。後にUNIX System IIIのマニュアルの主執筆者となったTed Dolottaが汎用的なtroff(:en:troff)マクロを書き、それをマニュアル向けに修正したものを使っている。当時、マニュアルページシステムによる文書のオンライン化は大きな特長と考えられていた。今日では、UNIX上のコマンドライン・アプリケーションには必ずそのmanページが付属しており、逆にmanページがないアプリケーションは品質が悪いと思われるようになった。実際、Debianプロジェクトなどでは、未だ書かれていないプログラムのmanページまで作っていた。

しかし、各アプリケーションについてひとつのページという形態は複雑で大きなアプリケーションやユーザとやりとりを行うアプリケーションには合わず、グラフィックスなども使えないフォーマット機能も時代遅れになりつつある。アプリケーションが複雑化し、ユーザーが文書がないことに文句を言わないことから、manページシステムは廃れつつあり、後継のシステムが開発されつつある。

基本的には全てのUnix系システムはmanページをサポートし続けているが、多くの場合それ以外のオンライン文書やヘルプを提供している。初期の後継システムのプロジェクトとしては、GNUプロジェクトの "info" システムがあり、これは素朴なハイパーテキストシステムであった。多くのUNIXのGUIアプリケーション（特にGNOMEやKDEの開発環境を使って作られたもの）は、ユーザー向け文書としてHTMLを採用し、`yelp`などのHTMLビューアーをアプリケーションに内蔵することが多い。

manページのデフォルトのフォーマットはtroff (:en:troff)で あり、troffマクロのman（見た目重視）またはシステムによってはmdoc（意味論重視）を使っている。これによりmanページはPostScriptやPDFに変換でき、様々なフォーマットで表示・印刷可能となっている。

最近のLinuxディストリビューションのmanパッケージには man2html というコマンドがあり、manページをHTMLブラウザで閲覧することも可能である。

2010年、OpenBSDはtroffの代わりにをmanページのフォーマットに採用した。mandocはmanページ専用のコンパイラ/フォーマッタで、PostScript、HTML、XHTML、端末向けの出力を自前で行える。

## マニュアルの章立て
マニュアルは一般に8つの章に分かれており、以下のように構成されている（BSD系とLinuxでの章立て）。

UNIX System Vでは章立てが少し異なっている。

いくつかのシステムではマニュアルに以下のような章もある。

章は後ろに文字を付与することでさらに分割されている。例えば、3CはCライブラリ、3Mは数学ライブラリなどといった具合である。これに関連して、8章のシステム管理コマンドを 1章の一部として1Mで表すこともある。以下のような文字は章を横断して同じ意味で使われる。

## レイアウト
manページのレイアウトは、単純なテキストとして表示するのに最適化され、何らかの強調やフォント制御も可能ならば行われる。1つのmanページ内の節構成は以下の通りで、常に以下の順序で配置される。

* NAME（名前） - コマンドや関数の名前とその機能を一行で説明する文。
* SYNOPSIS（書式） - コマンドの場合、コマンド行のオプションを含めた形式定義。関数の場合、定義のあるヘッダファイルの指定とプロトタイプ宣言形式の定義。
* DESCRIPTION（説明） - コマンドや関数についての具体的な説明。
* EXAMPLES（例） - 使用法の具体例。
* SEE ALSO（関連項目） - 関連するコマンドや関数のリスト。

他にも節はあるが、あらゆるマニュアルで共通化されているわけではない。例えば、OPTIONS、EXIT STATUS、ENVIRONMENT、KNOWN BUGS、FILES、AUTHOR、REPORTING BUGS、HISTORY、COPYRIGHTなどがある。

## manページの書き方
macOSやLinuxでは、*man*と*mdoc*という2つのgroffマクロのパッケージがmanページ執筆に使える。*man*の方が古く、UNIXの従来からのフォーマットのmanページを書くことができる。一方*mdoc*は新しく、文書の意味論的構造をよくサポートしている。macOSおよびLinuxでこれらの使い方を知るには、`man groff_man`および`man groff_mdoc`というコマンドを実行すればよい。

あるいは、システム内にある個々のmanページのソースコードを見て真似をすればmanページを書ける。macOSとLinuxの場合、通常`/usr/share/man`にmanページのソースファイルがある。ソースファイルの場所は、例えばコマンド名が`command`ならば`man -w command`を実行することで得られる。

manページはDocBookやフォーマットで書くこともでき、それをgroffにより変換すればよい。

## manページの変換
オンラインで（`man`コマンドを使って）manページを見る以外に、manページをPDFに変換して印刷することもできる。macOSとLinuxでは次のように入力する（`command`を適当なコマンド名に置き換えること）。

```bash
groff -mandoc command.1 >command.ps
 gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=command.pdf command.ps
```

1行目でmanページをPostScriptフォーマットでエクスポートし、2行目でPDFに変換している。これは*man*フォーマットでも*mdoc*フォーマットでも機能する。場合によっては、等幅フォントを使って印刷した方が読みやすい場合もある。その場合は上記の`groff`コマンドの`-mandoc`オプションの次に`-f C`オプションを追加すればよい。

フォーマッタは各種ファイルフォーマットで出力でき、PDFフォーマットも直接サポートしている。

```bash
mandoc -Tpdf command.1 >command.1.pdf
 mandoc -Tps command.1 >command.1.ps
 mandoc -Txhtml command.1 >command.1.xhtml
```


## 脚注

## 外部リンク
* ''Unix Programmer's Manual'' of November 3, 1971 （原本をスキャンし PSおよびPDFフォーマットにしたもの も参照）
* History of UNIX Manpages - UNIX manページの歴史に関する文献
* Online man pages 各種Unix、Linux、DarwinなどのOSの各バージョンのmanページを閲覧可能
* man - オープンソース版manコマンドの実装; Red Hat, Fedora, Gentoo, Slackware, Mac OS-X などで採用している。
* man-db - 別のmanコマンド実装; Debian/Ubuntu、SUSEなどで採用している。
* Practical UNIX Manuals: mdoc - *mdoc*でmanページを書くためのチュートリアル
* 
* Manpage of man - JM Project