【FreeBSD】日本語のマニュアル(man)を読みたい(Web版)

確認環境

PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.0-RELEASE-p5
w3m w3m version w3m/0.5.3+git20190105
wget GNU Wget 1.20.3 built on freebsd12.0.

課題

日本語のmanが読みたい。

対策

きっと、ja-manをインストールするのが一般的だと思う。

しかしここでは、こちらのサイトで提供されている日本語マニュアル検索サービス(以降、サービス)を、コマンドラインから利用するシェルスクリプトを作ってみる。
このスクリプトには、非標準コマンドであるwgetw3mを利用する。

メリットとしては、w3mでリンクが貼られている他のマニュアルページへ楽々アクセスできる。
また、他のバージョンのドキュメントも読めちゃう。

以下について説明する。

  1. シェルスクリプトの使用例
  2. wgetw3mのインストール
  3. コード

1. シェルスクリプトの使用例

普通にマニュアルを読む

manのように引数に読みたい項目の名前を指定する。

> jm freebsd-version  

セクションを指定して読む

manコマンド同様、セクション番号の指定もできる。

> jm 2 read  

バージョンを指定して検索

manを読みたいFreeBSDのバージョンも指定できる。
以下は、FreeBSDバージョン10.2sedのマニュアルを読む例。

> jm -v 10.2 sed  

2. wgetw3mのインストール

もし、wgetw3mをインストールしていない場合は、下記コマンドでインストールしておこう。
(root権限で実行してね)

> pkg install wget ja-w3m  

3. コード

今回作成したシェルスクリプトはこちら。

処理の流れとしては、下記となっている。

  1. オプション・引数からクエリを作成
  2. wgetでサービスにクエリを送り、結果を一時ファイルに保存
  3. sedでマニュアルの内容でないページ冒頭部分を削除
  4. w3mでマニュアルを表示
  5. 一時ファイルを削除

wget-kオプションは、ダウンロードしていない他ページへのリンクを、相対パスから絶対パスに変換してくれる。
これで他のマニュアルページにも楽々アクセスできる。
(sedで削除しているページ冒頭部分はアクセス先では表示されちゃうけど)

作成したスクリプトは、パスの通ったディレクトリ(echo $PATHで確認)に置くことと、実行権限を追加(chmod +x ファイル名)することをお忘れなく。

補足1) 記号の指定について

下記のように記号指定しちゃうとエラーになっちゃうみたい。
素直にtestを指定しましょう。

> jm [     # NG  
> jm test  # OK  

記号のページなんて、[くらいだと思っている。

補足2) 指定できるバージョンについて

コードの14〜32行目に記載しているバージョンを指定可能。
このヒアドキュメント行をgrepで検索して、最初にマッチした行を対象バージョンとして表示する。
バージョンが増えたらここに追加すればいいだけ。

GetManVer(){  
    cat <<- VEREND | grep "^$1" | head -n 1  
  13.0.2  
  12.1.2  
  12.0.2  
  11.3.2  
  11.2.2  
  11.1.2  
  11.0.2  
  10.5.2  
  10.4.2  
  10.3.2  
  10.2.2  
  10.1.2  
  10.0.2  
  9.4.2  
  9.3.2  
  9.2.2  
  9.1.2  
  9.0.2  
  8.4.2  
VEREND  
}  

例えば、-v 12と指定した場合、一番最初に12にマッチする12.1.2が対象バージョンとなる。

もし、デフォルトのバージョンを変えたい場合は、コードの39行目の下記変数に指定してね。

VERSION=12.0.2

ちなみに、grep-mオプションを使えば、head -n 1は要らない。
ただ、POSIXのマニュアルには無さそうだったので、今回は使っていない。

あーPOSIXのマニュアルも日本語版が欲しい。。

補足3) apropos / whatis について

サービスのUIを見た感じ、man-f-kオプションみたいなキーワードによる検索もできそう。
コードの66行目のcmd=に、fkを指定すれば良さげ。

wget -k -q -O "$TMP_FILE" "${BASE_URL}${FIX_QUERY}&cmd=${CMD}&man=${TARGET}&dir=jpman-${VERSION}%2Fman&sect=${SECTION}"  

なのだけれども、firefoxなどのWebブラウザから操作しても現状は動いているようには見えない。。。

ひとまず現状のコードでは、常にmanページを開くように$CMDに空文字を指定している。

最後に

いくつか課題はあるものの、実用には事足りると思っている。

ネットにつないでないと使えないとか、サービスが終了したら使えなくなるリスクとかはあるけど、まぁ使えるうちはありがたく使わせて頂きましょ。

とにかく、母国語である日本語で情報が読めるって幸せ。

日本語万歳。

参考

以上。