- コマンドラインで日本語を - on Mac OS X 6(6)/14209 更新:2013/05/19

←日本語lessとlvのページへ


注意このページの内容については、何ら動作を保証するものではありません。使用するときは個人の責任でお願いします。

日本語man

さて、つぎは日本語表示できるmanページの話です。
Mac OS Xにはマニュアルページを表示するmanコマンドが元々インストールされています。でも、そのままでは日本語のマニュアルページは表示できません*1

(*1)もっとも、日本語manページは用意されていないので、日本語表示できたとしても、表示のためのネタ(表示対象)がないのですが...

ということで、次は日本語表示可能なmanコマンド(とmanページ)の話です。

日本語groff

manコマンドは実は幾つかのコマンドを組み合わせて実現されており、manコマンド本体だけを日本語化しても、日本語を表示できません。その幾つかのコマンド部品のうちで、日本語化するために重要なものの一つ*2が、文章の整形(フォーマット)を行うgroffコマンドです。

(*2)もう1つがページャなのですが、これは日本語lessとlsのページに書きました。

Mac OS Xにプレインストールされているgroffは日本語が通りません*3。日本語groffは、FreeBSD系とLinux系で少し違っているようですが、ここでは(Mac OS Xでは)実現しやすかったLinux系の日本語groffを使うことにします。以下、日本語groffの作り方です。

(*3)実はUTF-8は通るようですので、ちょっと工夫すればそのままでも日本語表示できそうではありますが...

  1. Debian GNU/Linux -- groffのページあたりから、groff_1.18.1.1groff_1.18.1.1-3.diffを拾ってくる。
  2. groff_1.18.1.1を展開し、パッチをあてる。
  3. multibyte指定でconfigureを実行する。
  4. libgroffのMakefileからgetopt, getopt1を削除する。
  5. makeして、インストールする。
% wget http://ftp.debian.org/debian/pool/main/g/groff/groff_1.18.1.1.orig.tar.gz
    :
% wget http://ftp.debian.org/debian/pool/main/g/groff/groff_1.18.1.1-3.diff.gz
    :
% tar xvfz groff_1.18.1.1.orig.tar.gz
    :
% cd groff-1.18.1.1
% zcat ../groff_1.18.1.1-3.diff.gz | patch -p1
    :
% env LDFLAGS="-liconv" ./configure --enable-multibyte
    :
% (viなどを使って、src/libs/libgroff/Makefile.subからgetoptとgetopt1の存在する行を削除)
    :
% make
    :
% sudo make install
    :
% rehash
%

例によって/usr/local/binをPATHに入れておく(/usr/binより前に)のを忘れずに。また、日本語groffが対応している日本語文字コードはEUC(とUTF-8)のみです。

さて、日本語groffの用意ができたら、いよいよ日本語manです/

日本語man

manコマンドはいろいろな実装形態があるようですが、これも比較的作成が楽なLinux用を使いたいと思います。ちょっと面倒ですが、以下のようにしてインストールすることができます。

  1. The Linux Kernel Archivesあるいはそのミラーサイトから、最新版のman(現在man-1.5o1)を拾ってくる。
  2. man-1.5o1を展開する。
  3. configureを修正する。(PREPATHとprefix)
  4. configureしてmakeする。
  5. インストールする。
  6. man.confを修正する。
  7. makewhatisを修正する。
% wget http://www.kernel.org/pub/linux/utils/man/man-1.5o1.tar.bz2
    :
% tar xvfj man-1.5o1.tar.bz2
    :
% cd man-1.5o1
% vi configure (viなどを使ってconfigureの以下の2カ所を修正)
    :
if [ -z "${prefix}" ]; then prefix="/usr/local"; fi
    (元は if [ -z "${prefix}" ]; then prefix="/usr"; fi)
    :
PREPATH=/usr/local/bin:/bin:/usr/bin:/usr/ucb:$PATH
    (元は PREPATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:$PATH)
    :
% ./configure -confdir /usr/local/etc +fhs +lang en,ja
    :
% make
    :
% sudo make install
    :
% sudo vi /usr/local/etc/man.conf (viなどを使ってman.confの以下の3カ所を修正)
    :
JNROFF  /usr/local/bin/mccc -ia -oe | /usr/bin/env LANG=ja_JP.eucJP /usr/local/bin/groff -Tnippon -mandocj | /usr/local/bin/mccc -ie
    (元は"JNROFF  /usr/local/bin/groff -Tnippon -mandocj")
    :
JNEQN   /usr/local/bin/mccc -ia -oe | /usr/bin/env LANG=ja_JP.eucJP /usr/local/bin/eqn -Tnippon | /usr/local/bin/mccc -ie
    (元は"JNEQN   /usr/local/bin/eqn -Tnippon")
    :
PAGER   /usr/local/bin/less -iseMR
    (元は"PAGER   /usr/local/bin/less -is")
    :
% sudo vi /usr/local/sbin/makewhatis (viなどを使って、255〜261行目を以下の2行に変更)
    :
  $2 ~ /[Nn][Aa][Mm][Aa][Ee]/ ||
  $2 ~ /\314\276\301\260/ || $2 ~ /\314\276\276\316/ )) ||
    :
% rehash
% 

man.confの変更に関しては、特に実施しなくても、manページが日本語EUCで書かれていて、端末(ターミナル)の文字コードが日本語EUCに設定されていれば、日本語を正常に表示することができます。でも、上記のように設定しておけば、manページの日本語文字コードが何であっても、また、端末の日本語文字コードが何であっても、日本語manページを正常に表示することができるので便利です。ただし、mcccを忘れずに(/usr/local/binに)インストールしておく必要があります。

さて、これで日本語manページを表示できるようにはなったのですが、肝心の日本語manページが存在しません。そこで、日本語manページもLinux方面から借りて来たいと思います。

日本語manページ

以下のようにして、Linux用日本語manページをインストールします。

  1. マニュアルアーカイブのダウンロード(Japanese)のページから、最新版のmanページ(現在man-pages-ja-20041115)を拾ってくる。
  2. man-pages-ja-20041115を展開する。
  3. make configを実行し、質問に答えて適切に設定する。
  4. インストールする。
  5. whatisデータベースを作成する。
% wget http://www.linux.or.jp/JM/man-pages-ja-20041115.tar.gz
    :
% tar xvfz man-pages-ja-20041115.tar.gz
    :
% cd man-pages-ja-20041115
% make config (以下の4つの質問には下記の通りに答え、あとは適当に*4^_^;)
    :
   Install directory   [/usr/share/man/ja_JP.eucJP] ?: /usr/local/man/ja
   compress manual with..
      0: none
      1: gzip
      2: bzip2
      3: compress
   select [0..3] : 2
   uname of page owner [root] ?: 
   group of page owner [root] ?: wheel
    :
% sudo make install
    :
% sudo mv /usr/share/man/man1/\[.1 /usr/share/man/man1/kakko.1 (一旦"["コマンドを退避*5)
% setenv MANPATH /usr/local/man:/usr/share/man:/usr/X11R6/man
% sudo makewhatis -w
% sudo mv /usr/share/man/man1/kakko.1 /usr/share/man/man1/\[.1 (元にもどす)
% 

(*4)LinuxとMac OS Xではコマンドの意味が微妙に違っているので、どのような設定にしても一致することはなく、まぁ、適当に設定すればよいかと...

(*5)"["という名前のファイルがあると、makewhatisスクリプトがエラーを起こし、うまくwhatisデータベースが作られないため、一旦退避しておく。(不要なら消してしまってもよいが...)

環境変数MANPATHは、(tcshを使っているなら).tcshrcあたりに(bashなら.bashrcあたりに)記述しておくと、便利でしょう。日本語manページだけでなく、元からもっている英語のmanページ(/usr/share/man)のwhatisデータベースも作りなおしているのは、manの入れ替えにより、そのままでは、man -kコマンドやwhatisコマンドが使えないためです。

実際にmanコマンドで日本語manページを表示させるときには、環境変数LANGを日本語に設定するのを忘れずに。たとえば以下のようになります。(tcshの場合)

% setenv LANG ja_JP.eucJP
%

以上で、日本語manページが表示されるようになりますが、そもそもこの日本語manページはLinux用ですから、微妙に間違っていることがありますし、実際には存在しないコマンドなどが表示されることもあります。こんなときは、環境変数LANGを英語に設定してmanコマンドを実行すれば、オリジナルの英語manページが表示されます。頻繁に英語manページを使うなら、以下のようにエイリアスをきって、.tcshrc(.bashrc)にでも書いておけば便利でしょう。

% alias eman "env LANG=C man"
% eman man
man(1)                                                                  man(1)

NAME
       man - format and display the on-line manual pages
    :