Unix 系のシステムを基礎に、Apple の覆面を被せて誕生した Mac OS X。表面だけを見ている限りそれによる恩恵を直接的に意識する場面はないが、「ターミナル」を開いてコマンドラインに触れることで Unix の素顔を視ることができる。Mac OS X には Unix としての基本的な環境が整えられているため、メニューやアイコンに対する操作では手間がかさむような作業も、コマンドラインで効率的にこなすことができる。
 しかし、Mac OS X 標準の環境だけでは、イマドキの Unix としては不十分な部分もある。ここを補強してくれるのが、Mac OS X に多くのフリー/オープンソースソフトウェアを追加する MacPorts だ。
 MacPorts は多数のフリー/オープンソースソフトウェアを収めたインターネット上のリポジトリ(倉庫)と、リポジトリからソフトウェアを導入ためのコマンド「port」を含むその基本部分から成る。最初に基本部分を Mac にインストールしておき、必要なとき、必要なだけのソフトウェアをインターネットを通じて手許に取り寄せることができるわけだ。

 ここでは、MacPorts の導入とごく基本的な使い方について述べる。


MacPorts のインストール

 MacPorts をインストールするには、まず MacPorts Project のウェブサイトにある『Download & Installation』のページから必要なファイルをダウンロードする。いくつかの形式で用意されているが、普通はおなじみ dmg 形式のディスクイメージを選べばよい。現在は Mac OS X 10.5 Leopard、10.4 Tiger、10.3 Panther 用に別のファイルが提供されているので、自分が使っている OS のバージョンに適合するものをありがたく分けていただく。
 ダウンロードしたら即インストール、と行きたいところだが、MacPorts には「Xcode Tools」というものが必要なので、先にこれをインストールする。Xcode Tools は、Mac OS X に付属している。製品によって違う場合があるが、OS X のディスクとは別の Xcode Tools CD、または OS X インストールディスクの Xcode Tools フォルダの中に Xcode Tools のインストーラがあるので、これを実行し、表示される画面の指示に従って導入する。
 次にいよいよ MacPorts の基本部分をインストールする。先ほどいただいてきた dmg ファイルの中にあるインストーラを実行しよう。これは通常の Mac OS X アプリケーションのインストーラと同じなので、画面の指示に従うだけだ。

MacPorts の初期設定

 MacPorts のインストーラが終了したら、今度は初期設定だ。Finder で「アプリケーション」フォルダの中の「ユーティリティ」フォルダを開き、さらに「ターミナル」を開く。

「環境変数 PATH」の確認

 「環境変数 PATH」とは、コマンドラインで各種のコマンドを手軽に呼び出すための設定だ。MacPorts はハードディスクの /opt/local フォルダ以下にインストールされる。一方 Mac OS X 標準のコマンド群は /bin や /sbin などのフォルダに入っている。標準のコマンドが入っているフォルダには「環境変数 PATH」があらかじめ設定されているので、コマンドの名前を入力するだけでコマンドを召還できる。MacPorts のコマンドが入っているフォルダへの「環境変数 PATH」が設定されていないと、「/opt/local/bin/port」のように全てのフォルダ名付きでタイプしないとコマンドを呼び寄せることができない。
 現在の PATH を確認するには、ターミナルに次のコマンドを入力する。最後にキーボードの Return をどんと叩くとコマンドが実行される。

echo $PATH

 このコマンドの実行後にターミナルに表示される内容に /opt/local を含む文字列がない場合は、MacPorts のフォルダへの PATH が設定されていない(これを、「パスが通っていない」と言う)。例えば以下のように。

/bin:/sbin:/usr/bin:/usr/sbin

 MacPorts のインストーラはユーザのホームフォルダにある「.profile」という隠しファイルに、自身のための PATH の設定を書き込む。次のコマンドで確認してみよう。

cat ~/.profile

 上記例のように .profile の内容が実際の PATH に反映されていない場合は、次のコマンドを実行する。

. ~/.profile

 もう一度先述のように PATH を確認してみよう。下記のような出力を得られれば、MacPorts へのパスが通っている。

/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin

 もしうまくいかない場合は、Mac OS X のデスクトップから一旦ログアウトするか、システムを再起動してからもう一度ターミナルを開いたときには、おそらくパスが通っているだろう。

MacPorts を最新の状態にする

 MacPorts を使い始めるために、まずは MacPorts を最新の状態に更新する。これには、次のコマンドを用いる。

sudo port selfupdate

 先頭の「sudo」は、プログラムのインストールなどシステムに変更を加えるような操作をする際に、「管理者として操作を実行する」ためのコマンドだ。sudo はその後に続くコマンドをシステムの管理者権限で実行する。通常の Mac OS X アプリケーションのインストール時にもパスワードの入力を求められることがあるが、それと同じように sudo は実行時にパスワードの入力を促す(この表示を「パスワードプロンプト」という)。ここでパスワードを入力しても画面には何も表示されないが、実際には受け付けられているので、しっかりとキーボードを叩き、最後に Return を叩くと、目的のコマンドが実行される(なお、一度 sudo を使った後、一定時間内に再び sudo を使うときは、パスワードは求められない)。
 「port」というのは MacPorts を管理するためのコマンドで、これの後に port に対して「かくかくの作業をせよ」という指示をする。「selfupdate」とは port への指示の一種で、「MacPorts の配布元に連絡し、MacPorts の基本部分の新しい版が出ていたら取得せよ。また、取得可能なソフトウェア一覧を更新せよ」という意味になる。これで MacPorts を使う準備ができた。

MacPorts を使ってみる

 準備が出来たところで早速 MacPorts を使ってソフトウェアを何か一つ取り寄せてみよう。まずは MacPorts の効能を実感するために、Mac OS X に標準で用意されているものでは機能的に不十分なコマンドの代替となるプログラムをインストールしてみることにしよう。

 Mac OS X には Unix 由来の様々なコマンドが付属している。その中に「sed」というものがある。sed とは「Stream EDitor」の省略である。このコマンドの大元は35年ほど前に開発されたという。その主な役割は、テキストファイルなどから内容を読み込み、指定した条件に合うある文字列を検索し、別の文字列に置き換えるというものだ。
 一方、MacPorts には sed と同じ役割を持つがもっと頼りになるコマンドがある。port に search という指示を与えて、「stream editor」を探してもらう。

port search "stream editor"

 すると「gsed」というコマンドがあることが分かるので、お取り寄せをお願いする。

sudo port install gsed

 だいたい察しがつくと思うが、「install」は指定したソフトウェアをダウンロードし、インストールせよということだ。指定したそれのために他のソフトウェアが必要であれば、port が気を利かせてそれらのものも探してきてくれる(これを「依存関係の解決」という)。

 gsed のインストールが完了したら、Mac OS X 標準の sed とその機能を比べてみよう。まずは sed の基本的な働きを見るために、次のコマンドを実行してみる。

echo "abcefg" | sed -e "s/abc/ABC/g"

 ここでは、echo コマンドによって sed に「abcefg」という文字列を手渡し(「パイプする」という)し、sed は渡された文から「abc」を検索し、それを「ABC」に置き換える。実行結果としてターミナルには「ABCefg」と表示されるだろう。これは sed でも gsed でも同じように処理できる。
 では次に以下のコマンドを実行してみよう。

echo "abcABC" | sed -e "s/abc\|ABC/iroha/g"

 ここでの sed への指示の中で、「\|」は特殊な意味を持ち、「s/abc\|ABC/iroha/g」は、「abc または ABC をどちらも iroha に置き換えよ」という意味になる…はずなのだが、Mac OS X の sed はこれが処理できない。echo から手渡した「abcABC」がそのまま出力されてしまう。
 そこで、gsed の出番だ。

echo "abcABC" | sed -e "s/abc\|ABC/iroha/g"

 gsed は「\|」を特殊な意味を持つ文字として解釈するので、abc と ABC をともに iroha に置き換え、「irohairoha」と出力する。つまり「\|」とは「または」という意味になる。これが使えるのと使えないのとでは、使い勝手に雲泥の差が出るのだ。

htslurp.sh を使ってみる

 当サイトで先日公開した htslurp.sh も Mac OS X 上での実行には MacPorts を必要とする。htslurp.sh はウェブから複数のウェブページのコピーを取って一つに結合するシェルスクリプトであり、シェルスクリプトとは何かといえば、コマンドライン上で実行する一連の操作をあらかじめファイルに書き込んでおき、いつでも繰り返し使用できるようにしたものだ。一つ一つのコマンドは単目的だが、このようにそれらを組み合わせることで複雑な作業を簡単にこなせるようになる。
 htslurp.sh を使うには、gsed に加え、その上記例のようにして、ダウンロードツール「wget」と文字コード変換フィルタ「nkf」をインストールする。

sudo port install wget
sudo port install nkf

参考リンク