Macでもmanコマンドの出力を日本語/英語切り替え出来るようにする

公開:2020/12/23
更新:2020/12/24
6 min読了の目安(約5600字TECH技術記事

はじめに

manコマンドとは『コマンドのレファレンスマニュアルを表示する』ためのコマンドです。(Linux基本コマンド [man]コマンド(基本編より))

例えばlsというコマンドの意味を知りたければ、

$ man ls

これでマニュアルページがターミナル上に表示されます。
(qキーで抜ける、vimと同じくjキーで下にkキーで上にスクロールする。また/文字列パターンで文字検索も出来ます。)

Linux/Unix力を伸ばすにはこうしたドキュメントを読んでコマンドを身に染み込ませる必要があると筆者も常々思っているのですが、英語で知らないことを学ぶのは中々ツライものです。

これに対してJMプロジェクトというLinux 関連のマニュアルページの日本語ページを翻訳・公開してくれているサイトがあります。
※日本語されていないコマンドも多々あります。(T_T)

本記事では

  • (1)JMプロジェクトの日本語リファレンスをjmanという新しく作ったコマンドで読めるようにする
  • (2)manコマンドでは同じ環境下でも英文リファレンスを変わらず読めるようにする

ということをやっていきたいと思います。

ちなみにMacOSのバージョンは下記の通り

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.7
BuildVersion:   19H15

groffのインストール

groffとは雑に言えば「テキストを処理して整形するプログラム」のこと。
下記のようにMacに最初から入ってはいるが、

$ groff -v
GNU groff version 1.19.2
$ which groff
/usr/bin/groff

最新版にしましょう。

$ brew install groff
$ groff -v
GNU groff version 1.22.4
$ which groff
/usr/local/bin/groff

manの設定を変更

設定ファイルはMacでもLinuxと同様に/etc配下に

$ sudo vi /etc/man.conf

# 95-96行目あたりの下記をコメントアウトして
JNROFF		/usr/bin/groff -Tnippon -mandocj -c
# 代わりにこれを
JNROFF /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E

# 105-106行目あたりの下記2つをコメントアウトして
PAGER		/usr/bin/less -is
BROWSER		/usr/bin/less -is
# 代わりにこれを
PAGER /usr/bin/less -isr
BROWSER /usr/bin/less -isr

JM Projectから日本語manページをダウンロードしてくる

※最新版はここでチェックの上、curl[1]コマンドでダウンロードしてみてください。

ちなみにcurlコマンドとは様々なプロトコル(HTTPやFTPなど、標準はHTTP1.1)でファイルをダウンロード/転送するコマンド。今回はダウンロードに使用しています。

$ cd ~/Downloads
$ curl -O http://linuxjm.osdn.jp/アーカイブ名
-- 例
$ curl -O http://linuxjm.osdn.jp/man-pages-ja-20201215.tar.gz

※-oは標準出力に代わって、出力をファイル file へ書き込むことオプション
※-Oも標準出力に代わって、出力をファイル file へ書き込むことオプションだがリモートファイルと同じ名前でローカルのファイルが作られます。今回はこちらを使用。

ファイルを解凍します。

$ tar xfz アーカイブ名
-- 例
$ tar xfz man-pages-ja-20201215.tar.gz
-- ちゃんと解凍されてますネ
$ ls | grep man
man-pages-ja-20201215
man-pages-ja-20201215.tar.gz

tarとは「アーカイブファイルを作成/展開するコマンド」です。[2]

続いて、解凍したディレクトリに移動して、makeを実行します。[3]

$ cd man-pages-ja-20201215
$ ls
INSTALL  Makefile README   manual   script
$ make config
Install directory   [/usr/share/man/ja_JP.UTF-8] ?: /
=> /usr/local/share/man/ja_JP.UTF-8(/usr/local/share/manを見ればわかるがすでにmanの説明ファイルが置かれている)
compress manual with..
      0: none
      1: gzip
      2: bzip2
      3: compress
=> 0(圧縮方法を効かれているので圧縮しないを選択)
uname of page owner [root] ?: 
=>Macのユーザー名(homebrewを使っていないならrootで良い)
group of page owner [root] ?: 
=>admin(homebrewを使っていないならwheelで良い)

All OK? (Yes, [C]ontinue / No, [R]eselect) : 
=>c(問題なければc、やり直ししたければrを回答。)

[INSTALL PACKAGE SELECTION]
->全てYしてEnterでおk
All OK? (Yes, [C]ontinue / No, [R]eselect) :
->c
[RESOLVE CONFLICTS]
->全て0してEnterでおk
All OK? (Yes, [C]ontinue / No, [R]eselect) :
->c
creating installation script...done
now you can "make install" as user root.

$ make install

日本語、英語のman記事を同じ環境で

~/.bashrcに下記を追記

alias man='env LANG=C man'
alias jman='env LANG=ja_JP.UTF-8 man'

これでmanを日本語にしたい時はjmanコマンドを使用することが出来る。またmanコマンドを使えば従来どおり英文リファレンスを読むことが出来ます。
ただし、日本語化されていないコマンドはjmanでも英文リファレンスが出ます。
※LANG=Cの意味については【Linux入門】ローカライゼーションのためのロケール情報設定方法を参照すること。

ちなみにデフォルトでの表示を日本語で、英語表示はemanという風にするには、

alias eman='env LANG=C man'
alias man='env LANG=ja_JP.UTF-8 man'

こぼれ話

  • gitのようなhomebrewで後から入れた方を使っているコマンドの場合
    /usr/local/share/manに入っていることに注目。ユーザーはMacのユーザー名、グループはadminとなっている。
$ which git
/usr/local/bin/git
$ man -w git
/usr/local/share/man/man1/git.1
$ ls -l /usr/local/share/man/man1/git.1
lrwxr-xr-x  1 Macのユーザー名  admin  47 12 10 02:03 git.1 -> ../../../Cellar/git/2.29.2/share/man/man1/git.1

※gitは元から入っているがhomebrewで入れたものをPATHを通して使っている場合上記のようになる。treeコマンドとかでも一緒。
※vimは元から入っているがhomebrewで入れれば、日本語manページが表示されるようになる。

  • lsやcdのような元から入っているコマンドの場合
    いずれも/usr/share/下のディレクトリにあります。またユーザーはroot、グループはwheelとなっている。
$ which ls
/bin/ls
$ man -w ls
/usr/share/man/man1/ls.1
$ ls -l /usr/share/man/man1/ls.1
-rw-r--r--  1 root  wheel  17047  2 29  2020 /usr/share/man/man1/ls.1
$ which cd 
/usr/bin/cd
$ man -w cd
/usr/share/man/man1/builtin.1
$ ls -l 
-rw-r--r--  1 root  wheel  8714  2 29  2020 /usr/share/man/man1/builtin.1

参考

脚注
  1. curlについては下記を参照
    ->Client URL What does curl stand for?(カールとは何の省略なのか?)
    ->curlコマンドの使い方15選 ↩︎

  2. ディレクトリ圧縮はtar cvf、解凍はtar xvfです。 ↩︎

  3. プログラムをコンパイルするためののコマンド。どのソースコードをどのようにコンパイルすれば良いかを判断し、コンパイルに必要なコマンドを実行してくれます。makeを使うにはMakefileと呼ばれるファイルが必要となります。
    Makefileはコンパイルされるソースコードの依存関係や、コンパイルに必要なコマンドなどの情報が書かれています。 ↩︎