Software Design 2018年8月号

サポートページ

この記事を読むのに必要な時間:およそ 0.5 分

ダウンロード

P.140 連載「scikit-learnで学ぶ機械学習アルゴリズム」

記事で紹介した機械学習システムの構築における「データ加工」「モデリング」を試すためのサンプルコードを以下からダウンロードできます。ダウンロードファイル「iris.zip」は圧縮ファイルです。解凍したうえでご利用ください。

圧縮ファイル内の「iris.ipynb」をGoogle Colaboratoryにアップロードすることで機械学習を試せます。Google Colaboratoryへのアップロード方法は,圧縮ファイル内の「Readme.txt」を参照してください。

ダウンロード
サンプルコード(iris.zip)

免責:本サンプルを使用することによって,使用者が受けたあらゆる不利益に対して,原著者および技術評論社はその責任を負いません。

補足情報

P.162 連載「Unixコマンドライン探検隊」

manで空のページや文字化けしたページが表示される場合の対処方法

macOSに導入したコマンドは,空のページが表示されたり,場合によっては文字化けしたページが表示されるなど,日本語Localeのmanpageが表示できないことがあります。ここでは,そうした場合の対処方法を紹介します(manコマンドについては,連載の第1回で解説しました。必要に応じてこちらの記事も参照してください)。

【nmapのmanpageが表示できない】

macOSでは,本家からnmap-7.60.dmgからインストール,brewでnmapをインストールした場合など,man nmapで空のページが表示されることがあります。この状態は,manが呼び出しているgroffコマンドが指定のロケールに対応していないことに問題がある可能性が考えられます。

  • manpageのソースの確認

/usr/share/man,/usr/local/share/manなどのmanpageのソースを確認ましょう。manpageのセクションごとにman1 …… man8などのように(日本語ロケールのものだとjaというディレクトリの中に同様にセクション別に)ソースが格納されています。対応ファイルが存在しなければ,manは表示できません。

まずは,日本語のmanpageの問題なのか,そもそもmanpage(が存在しないなど)の問題なのかを,POSIXロケールを明示的に指定して判別します。

C:POSIXロケールで,英語のページが正しく表示できるか確認する


$ LANG=C man nmap

 

これで,英語のmanpageが確認できて,
/usr/local/share/man/ja/man1/nmap.1も存在している(macOSのnmap-7.60,nmap-7.70などでは,
/usr/local/share/man/ja/man1/nmap.1が存在していて,内容も日本語のUTF-8です)なら,manが内部で呼び出しているgroffコマンドが日本語ロケールに対応していないのが原因と考えられます。続く,対応を試みてみましょう。

  • 1. 日本語に対応したgroffの導入

$ brew install groff


  • 2. 導入したgroffをmanが使うようにする

/etc/man.confを編集して,/usr/local/bin/groffを使うように変更します。編集するには,(sudoなどで)管理者権限が必要です。

/etc/man.confのJNROFFの記述部分


TROFF       /usr/local/bin/groff -Tps -mandoc -c
NROFF       /usr/local/bin/groff -Wall -mtty-char -Tascii -mandoc -c
#JNROFF		/usr/local/bin/groff -Tnippon -mandocj -c  (←ここをコメントアウト,以下の行を追加)
JNROFF      /usr/local/bin/groff -Dutf8 -Tutf8 -mandoc -mja -E  (←入力,出力ともUTF8を前提に,andocとjaマクロを使い,troffのエラーを表示しない,という指定)

 
  • 3. pagerの動作を制御する

同じく/etc/man.confの内容を編集して,groffがコントロールキャラクタを出力しますので,これをlessがうまく処理できるように-rオプションを追加してやります。

/etc/man.confのPAGERの記述部分


#PAGER       /usr/bin/less -is  (←ここをコメントアウト)
#BROWSER     /usr/bin/less -is  (←ここをコメントアウト)
PAGER       /usr/bin/less -isr  (←この行を追加)
BROWSER     /usr/bin/less -isr  (←この行を追加)


これで,man nmapで,日本語が表示できるはずです。

【manpageが文字化けして表示される場合】

筆者の環境では,nkf(文字コード変換コマンド)を導入しています。このmanpageは前節の対応をしても文字化けして表示されます。このケースでは,/usr/local/share/man/ja/man1/nkf.1の文字コードが,日本語UTF-8でないことが原因なので,ソースの文字コードをUTF-8に変換して解決します。

nkfで文字コードをUTF-8に変換する


$ sudo nkf -w --overwrite /usr/local/share/man/ja/man1/nkf.1

 

【まとめ】

ここでは,manpageにあまり日本語ページがないmacOSにフォーカスして解説しましたが,ほかのUnix環境でも,ロケールがきちんと対応していないコマンドや,ロケールに合ったフォントや文字コードテーブルなどの情報が導入されていない場合に,同様の問題が生じることがあります。きちんとしたロケール対応をすることができない場合,まずはCのPOSIXロケールでの表示を試してみて,原因を絞り込み,解決していきましょう。

【今回の(追加)チェック】

man(1), groff(1), less(1)

(本誌に掲載しきれず)Linuxで確認するコマンド

ufw(8), systemctl(1), samba(7)