Terminalといえばギークの道具……確かにその一面はあるが、開発者が求める機能であることは確か。コマンドを実行できるからというより、CUIで効率的に命令を実行できる「シェル」が利用できるからだ。OS Xでもお馴染みのシェル「bash」がWindows 10でネイティブ動作するようになったいま、状況は変わりつつある。

CUI環境はWindowsのほうが充実する時代に?

Windows 10でLinuxのネイティブ動作が可能になった。仮想マシンでもエミュレータでもない、カーネル直下にLinuxサブシステムを設けることで、LinuxのシステムコールをWindowsのものにリアルタイム変換する方法を採用している。システムリソースの消費を抑え、かつパフォーマンスを大きく損なわずにLinuxのELFバイナリを直接実行できるため、仮想マシンの利用に対してもアドバンテージがある。

Channel 9にアップロードされているシェル(bash)のデモ映像を見たが、/procディレクトリに直接アクセスできるなど、Linuxそのままのディレクトリ構造にアクセスできる。かつてWindowsに存在したPOSIX/Interixサブシステムとは一線を画しており、Cygwinの書籍を出すなどWindowsでUnix/Linuxライクな環境を追い求めた時期もある筆者にとってこの変化は驚きだ。

デモ映像では確認できなかったが、Linuxの主要ディストリビューションは国際化対応が概ね行き届いており、Windows 10でサポートされるUbuntu Linuxもおそらくそうだ。エラーメッセージやオンラインマニュアル(man)など、要所要所はユーザが使用する言語にあわせて表示してくれるはず。一方、我らがOS Xはというと……「cal」や「date」など一部のコマンドは国際化されているが、英語のままのコマンドが多い。/usr/share/localeディレクトリ以下に、GNU gettextが参照する言語リソースファイル(*.mo)が少ないことを見れば明らかだ。

bashもまた然り。きちんと日本語ロケールを設定していても(LANG=ja_JP.UTF-8)、日本語メッセージは表示されない。HomebrewやMacPortsを導入すれば容易いことだが、手を出すユーザは少数派だろうし、Ubuntu Linuxが採用されるというWindows 10のほうが初期設定段階で国際化の対応が進んでいる可能性は高い。ベースがBSD UNIXだからと胡座をかいていては、CUI環境においてWindowsに差を付けられかねない時代がやってきたのだ。

Windows 10のコマンドプロンプトでbashが利用可能に。驚くほどLinuxそのままだ(リンク)

OS X El Capitanで/usr/share/locale以下の言語リソースファイル(*.mo)を検索したところ、texinfoのものしか発見できなかった

El Capitanのbashに日本語メッセージを表示させる

では、OS X El Capitanのbashは日本語メッセージを表示できないか、というとそうではない。言語リソースファイルを適切なディレクトリに保存すれば、一部のメッセージは各国語で表示されるようになる。話の流れということもあり、その手順を紹介しておこう。

まず、言語リソースファイル(*.mo)の元となるPOファイルを入手しよう。bashなどのオープンソースソフトウェアを対象に展開されている「Translation Project」では、OS X El Capitanに収録されているbash(v3.2)のPOファイルを公開しているので、こちらからそれを入手する。

入手したPOファイルは、以下の手順で文字コードをEUCからUTF-8に変換したあと、こちらのWEBサイトでMOファイルに変換する。OS X El Capitanには収録されていないmsgfmtコマンドを使い変換することが本来の方法だが、この作業のためだけにHomebrewやMacPortsを導入することもないだろう。

$ iconv -f EUC-JP -t UTF-8 bash-3.2.ja.po > bash.po

POファイルをMOファイルに変換する(事前に文字コードを変換しておくこと)

次に、El Capitanから導入された「System Integrity Protection」(rootlessモード)を解除する。解除しなければ、MOファイルを/usr/share/localeディレクトリ以下にコピーできないからだ。Macの電源オン後にCommand + Rキーを押し続けリカバリーモードで起動したあと、メニューバーから「ユーティリティー」→「ターミナル」を選択し、以下のコマンドを実行すること。

# csrutil disable

「csrutil enable」を実行すれば、初期設定(rootlessモード有効)に戻すことができる

これで、次回システムを起動するとrootlessモードが解除される。WEBサイトで変換したMOファイル(ここでは「rxyok1a_bas.mo」)がDownloadフォルダにあるとき、以下のとおりコマンドを実行しよう。シェルを起動して存在しないコマンドを実行し、ふだんは「command not found」のはずが「コマンドが見つかりません」と表示されればOKだ。

$ sudo cp ~/Downloads/rxyok1a_bash.mo /usr/share/locale/ja/LC_MESSAGES/bash.mo

英語だったbashのエラーメッセージ(左)が、MOファイルのコピーにより日本語化された(右)

このようなメッセージの国際化/ローカライズは、一見些細なものに思えてしまうが、ユーザエクスペリエンスの改善と作業効率アップに多少なりとも貢献する話であり、手を打たないことにはコマンドやシェルに苦手意識を持つ層をさらに遠ざけてしまいかねない。筆者としては、Linuxなど他のPC-UNIXでは当然のように日本語で表示されるメッセージやオンラインマニュアルが、OS Xでも日本語で表示されるに越したことはないと考える。少なくとも、Windows 10はこの点でOS Xの先を行きそうな気配だが……いかがだろう?