ついに300回到達!! 早いもので連載開始から7年、締め切りに遅れることはあっても休載は一度もなし、と気合いを入れて頑張って参りました。引き続きご支援のほどよろしくお願いします。

さて、記念すべき第300回は「Terminal」について。ここ数年は出番が減っていたが、Terminalが当コラムに欠かせない存在であることは確か。その機能の変遷を振り返りつつ、懸案だったbashの入れ替えを行おうという趣旨で進めてみよう。

Terminalは進化した

最初にハッキリしておきたいのは、「Terminalは進化した」ということ。まずは300回記念企画 (?) として作成した表をご覧いただきたい。NEXTSTEP / OPENSTEP時代に誇った完成度の高さがキレイサッパリなくなっていたv1.0当時は、さすがに落胆したが、やがてユーザ有志による「JTerminal」や「iTerminal」という代替品が登場。しばらくは、Terminalと併用する時代が続いたと記憶している。

表: Terminal.appの変遷
OSバージョン Terminalのバージョン 説明
10.0 (Cheetah) v1.0 マルチバイト文字非対応。端末ソフトというよりはコマンド実行用アプリに近い?
10.1 (Puma) v1.1 マルチバイト文字非対応。文字列のエンコーディング形式を選択可能になった
10.2 (Jaguar) v1.3 文字が重なるなどの問題が多いものの、マルチバイト文字のサポートを実現した。ただし標準装備のtcshがマルチバイト非対応のため、自力でリコンパイルする必要があった
10.3 (Panther) v1.4 デフォルトのシェルがtcshからbashに変更。マルチバイト文字サポートが改善され、日本語の表示も支障なく行えるようになった
10.4 (Tiger) v1.5 マルチバイト文字のサポート改善。設定ファイルを追加すれば日本語入力にも対応できた
10.5 (Leopard) v2.0 描画速度が改善。タブのサポートや背景イメージの変更が可能になった

日本語を母語とするユーザにとって、それなりに使えるレベルに達したのは、Tigerのときだろう。マルチバイト文字のサポートはJaguarのときに実現されたが、文字が重なって表示されるなど不具合があり、自力でページャ (lvやjless) を導入し日本語テキストを閲覧することさえままならなかった。

Leopardの現在、ターミナルエミュレータとしての機能にかぎっていえば、問題はほぼ解決されたといえる。文字が重なるなど表示に関するトラブルは減り、vimなどのエディタで日本語の文章を編集する用途にも十分使える。CoreText APIの利用により、表示速度も改善された。タブ機能が追加され、背景や文字色の設定も容易になっている。ようやく熟成の域に到達した、といえるのではないだろうか。

いまさら? bashを入れ替える

Leopardに収録されているコマンド群は、正式なUNIXとして認定されるために必要だったのか、TigerまでのBSDテイストが抑えられ、AT&T風に変化している。cpやgrep、psなどのコマンドの用法が変化したことは、こちらに説明があるとおりだ。

しかし、マルチバイト文字対応には少々不満が。lessはUTF-8を理解するものの、jlessのような文字コードの自動変換機能は持たないため実用にならない。デフォルトのシェル「bash」に使用されるGNU readline互換のライブラリ「libedit」は、UTF-8およびマルチバイトキャラクタを通さないため、日本語ファイル名の扱いに支障がある。日本語を含むファイル / ディレクトリが入力補完の対象にならないのは、libeditが原因だ。

lessについてはlvで代替できるとして、bashで日本語を扱おうとすればGNU readlineが必要になり……ということで、久々にbashをビルドしてみた。その具体的な手順は以下のとおり。

$ curl -O http://ftp.iij.ad.jp/pub/gnu/gnu/bash/bash-3.2.tar.gz
$ curl -O http://ftp.iij.ad.jp/pub/gnu/gnu/readline/readline-5.2.tar.gz
$ tar xzf readline-5.2.tar.gz
$ cd readline-5.2
$ ./configure
$ perl -i -pe "s/darwin\[78\]/darwin\[789\]/g" support/shobj-conf
$ make ; sudo make install
$ cd .. ; tar xzf bash-3.2.tar.gz ; cd bash-3.2
$ ./configure --with-installed-readline --enable-multibyte --with-curses
$ make ; sudo make install

起動タブにインストールしたbashのパスを入力する

これで、GNU readlineを使用したbashが/usr/local/binにインストールされるので、あとはTerminalの環境パネルを開き、起動タブにフルパスを指定すればOK。試したところ、日本語を含むファイル / ディレクトリの入力補完もバッチリ。実際に利用する機会は少なそうだが、ヒストリ検索に日本語を使えるのもうれしい。面倒がらずにLeopard導入と同時にインストールしておけばよかった、と今さらながら感じた次第だ。

GNU readlineを使用しているので、日本語を含むファイル /フォルダが入力補完の対象になる。これが結構便利なんですよ