Macintosh Developer Online (MDOnline)


2001年5月21日発行号 - Macなコマンド



アメリカに来ています。今は、日曜の昼過ぎです。昨日にすでにレジストレーションをしてきました。例によって特製の革ジャンは手に入れました。背中にシングルCDよりちょっと大きなサイズで「X」って文字が刺繍しています。頃合いを見計らって写真を送りましょう。今日の夜にパーティがあるので、誰か着てくればいいのですが、そこそこ暑いので、あまり期待できないかもしれませんが…。やはり、基調講演以外はとりあえずは機密ですが、基調講演で話されたことや、すでに事実として出ていることなどは記事にしていいので、なるべくいろいろとまとめたいと思っています。レジストレーションでは毎年鞄をもらえるのですが、今年も去年とほぼ同型の鞄がもらえました。去年はアップルマークは5色でしたが、今年は一律に白のようです。CodeWarrior 7のEarly Release CDも入手できました。それから、オライリーのCarbon、Cocoaの書籍は、WWDC 2001期間中に入手できそうです。WWDC参加者にはどちらか1冊はもらえる模様です。昨年のように、ツアーのトラブルの話も聞きません。個人的にとらぶっている人もいるようですが、無事にWWDCは開始されそうです。
(新居雅行 msyk@mdonline.jp


Browsing Mac OS X》Teminalやシェルスクリプトで使えるMacなコマンド

Mac OS XのコアOSはBSDが採用されており、Terminalアプリケーションを使うことで、さまざまなコマンドを入力して処理ができることは良く知られている。そのコマンドは、もちろんUNIXで一般的に使われているコマンドが大半である。たとえば、ファイルのコピーや移動は、cpだとかmvだとかいったコマンドが用意されているのである。それらを使って手作業での処理はもちろん、シェルスクリプトとして、一連のコマンド処理を連続的に行うという手法も使える。シェルスクリプトでは、単に連続してコマンドを実行するだけでなく、変数を使ったり条件分岐や繰り返しができるなど、プログラミング言語と言ってもよい。もちろん、一般ユーザがシェルスクリプトの作り方までを知っておく必要はないのであるが、開発者やシステム管理をする場合には、今までのMac OSでは使えなかったこうしたシェルスクリプトが使える点は多いに活用すべきだろう。
コマンド入力やシェルスクリプト作成では、Mac OS X独自の事情を考慮しないといけないということもあるのだが、実は大半はOSに依存しない内容であると言ってもよい。つまり、市販の書籍でUNIXコマンドの使い方とか、シェルスクリプトの書き方などの情報が得られるが、それらの書籍などの情報は大方はそのまま使えると言っても過言ではないのである。だから、UNIXコマンドやシェルスクリプトをあまり知らないという場合には、そうした書籍などを購入して、ひととおり勉強しておいて決して損はしない。パスやカレントディレクトリといった考え方を含むファイルの指定、コマンドやその引数の指定方法、シェルによるさまざまな展開処理、標準入出力やパイプといった基本概念を知り、そしてどんなコマンドがあるかを勉強していくことになる。シェルスクリプトはちょっと独特の書き方をする(end ifではなくfiだったり)が、C言語に慣れていればそれほど難しいものではないだろう。
だが、UNIXコマンドだけしか使えないというわけではない。Mac OS X独自のコマンド、あるいはMac OS Xでしか意味のないコマンドなど、いわばMacなコマンド群があり、これらを活用することで、よりOSの機能をうまく使いこなすことができる。たとえば、開発をしている人だと、配布用のディスクイメージファイルをシェルスクリプトで作ったりということをしたいかもしれない。そのときにはもちろん、UNIXの標準コマンドだけで何とかなる場合もあるかもしれないが、Mac OS Xの独自コマンドを使う必要も出てくるかもしれない。以下、そうしたMacなコマンドを紹介するが、各コマンドは記述がない限りは、「man コマンド名」というコマンドをTerminalの画面で打ち込むことで詳細を参照することができるので、実際に使う上ではmanコマンドによるマニュアルを一度は目を通しておくことをお勧めする。

まずは、openコマンドだ。「open ファイル」によって、要はFinderでダブルクリックしたのと同じ効果になり、そのファイルを開く。ファイルが文書ファイルなら、アプリケーションを起動して文書を開く(ただし、関連づけられているアプリケーションがある場合)。ファイルがアプリケーションなら、そのアプリケーションを開くが、パッケージになっているアプリケーションでは、ルートのディレクトリを指定する。これは、このコマンドに限らず、「パッケージ化されたアプリケーションはルートのパスを指定する」というのが原則だ。たとえば、TexitEditはディスク上では/Applications/TextEdit.appというディレクトリをルートにしたパッケージであり、.appまで含めた指定が必要だ。
また、-aオプションを知っておくと便利だ。これはさしずめドラッグ&ドロップに対応すると言えばよいだろうか。-aオプションで、開くのに利用するアプリケーションを指定できる。たとえば、

open -a /Applications/TextEdit.app ~/original

というコマンドで、ログインしているユーザのホームディレクトリ(~だけで指定できる)にあるoriginalというファイルを、TextEditで開くのである。

ファイルのコピーや移動は、cpやmvを使うという点は、一般的なUNIXと変わりはない。ただし、パッケージ化されたアプリケーションなどのバンドル形式のものは、Finder上では一見すると1つのファイルに見えるが、その成り立ちはディレクトリだと思わないといけないのでそれも注意が必要だ。たとえば、TextEditをコピーする場合「cp /Applications/TextEdit.app /Volumes/disk2」ではいけない。TextEdit.appがディレクトリだからだ。その場合は、「cp -R /Applications/TextEdit.app /Volumes/disk2」のように、-Rオプションを付けて、ディレクトリごとコピーするという手法を使う。ちなみに、小文字の-rでも同じように動作するようだ。なお、ハードディスクの別のパーティションや別のディスクは、Finderではあたかもルートに存在するように見えるが、コマンドの世界(ディレクトリ階層)では、/Volumesというパスの下に存在する。マウントを解除すればその存在はなくなる。
cpコマンドはファイルのコピーはできるが、リソースを含むファイルをコピーした場合は結果的に正しくコピーはされない。データフォークしか正しくコピーできないようなのだ。UFSの場合にはリソースフォークとデータフォークがいわば別ファイルのようになっているので何とかなるのかもしれないが、もし、リソースまで含みでコピーをしたいのなら、CpMacというコマンドを使うのがより確実だろう。これは、manによるマニュアルはないものの、Inside Mac OS Xでも解説されているもので、単に

/Developer/Tools/CpMac 元ファイル コピー先ディレクトリ

という記述で利用可能だ。CpMacのパスにあるように、このコマンドは、DeveloperToolsのインストールを必要とする。また、コマンドの存在するパスは一般にはコマンド検索対象になっていないため、フルパスを指定するなどの方法で稼働させる必要があるだろう。
(続く)

カテゴリ:Mac OS X, Browsing Mac OS X


Browsing Mac OS X》Teminalやシェルスクリプトで使えるMacなコマンド(続き)

ファイル関連では、SetFileとGetFileInfoも知っておくとよい。いずれも、DeveloperToolsのインストールが必要で、インストール後には、/Developer/Toolsディレクトリに存在する。SetFileはmanコマンドでマニュアルは表示できるが、GetFileInfoはマニュアルは出てこない。GetFileInfoについては、Terminalで「/Develoer/Tools/GetFileInfo」だけを入力して、使用方法を表示させSetFileのオプションと対比させればだいたいのことは分かるだろう。
SetFileは、ファイルの情報を設定するのだが、Finder関連情報が設定できる。ファイルタイプ、クリエイタ、作成日、修正日、そしてさまざまな属性の設定が、このコマンドでできるのである。GetFileInfoはそれらの情報を標準出力に書き出すものだ。おそらくSetFileの方が一般にはよく使うものと思われる。
ちなみに、/Developer/Toolsには他にもUNIXには存在しないリソースコンパイラなどといったいろいろコマンドがあるが、使い方が分からないものもいくつかある。

ちょっと変わったコマンドとしては、AppleScriptプログラムを実行するosascript、AppleScriptのコンパイルを行うosacompileがある。osascriptは引数に指定したテキストファイルやあるいは標準入力から、テキストで与えたAppleScriptプログラムを実行するのである。たとえば、スクリプトを書き込んだファイルtest.txtを実行する場合、そのファイルのありかがカレントパスであるなら、

/usr/bin/osascript test.txt

というコマンドで実行できる。osascriptの位置をフルパスで指定しないといけないのは、現状ではバグであるということで、パスを省略すると実行はするけどもエラーになってしまう。おそらくはシェルスクリプトで使うことになると思われるが、そのあたりは事情が分かっていれば問題はないだろう。ここで、text.txtのファイルの内容は、TextEditで作るとすれば、MacRomanあるいはShift-JISでファイルを保存する。UNICODEやutf-8で保存はしないようにする。そうすれば、漢字で指定したファイル名など日本語文字列は問題なく使える。ただ、AppleScriptの世界でのパスは、ディレクトリ階層ではなく、最初にディスク名を書きコロンで区切るタイプである。プログラムでパスを生成して処理をさせる場合には、他のコマンドとの整合性を取るためには少し苦労することになるだろう。
osacompileは、テキストで記述されたスクリプトから、Script Editorの文書を作る。基本的な利用ではコンパイル済みスクリプトが作成できる。AppleScriptのアプリケーションまで作成できるかと思っていろいろ設定をやってみたけど、きちんと動くアプリケーションは作れなかった。

次は、ディスクイメージファイルだ。ディスクイメージファイルを作成するhdiutil、ディスクイメージふぃあるのマウントやアンマウントを行うhdidというコマンドがある。これらのコマンドの使い方は、Stepwise.comに以前に詳しいものが掲載されていたので、そちらをごらんいただくことにしよう。

◇Creating .dmg images on Mac OS X 10.0
 http://www.stepwise.com/Articles/Technical/2001-03-29.01.html

hdidコマンドでマウントでき、マウントした結果は、「/Volumes/ボリューム名」というパスで利用できるのが基本だ。だから、マウントした結果にファイルをコピーするなどは、このディレクトリに対して行えばいいのだが、hdidコマンド終了直後はまだマウントが完全に行われていない。だから、すぐにcpコマンドなどを実行してもエラーになってしまう。とりあえず考えられる対応策としては、すぐにコピーをしないで別の作業をするということだ。数秒もあれば十分にマウントできる。あるいは「read x」など入力待ちのコマンドをシェルスクリプト中に記述し、マウントされるのを目で確認してreturnキーを押して続きを実行するという手段もあるだろう。

Mac OS Xのアプリケーションなどの開発では、Project Builderを使うことも多いだろう。Project Builderでのコンパイルなども、コマンドラインからコントロールできる。これは、manによるマニュアルでは参照できないが、Project Builderのヘルプで参照できるが、pbxbuildというコマンドが利用できる。プロジェクトの存在するフォルダをカレントフォルダにして、pbxbuildコマンドを入れるだけで、そのプロジェクトの再ビルドを行う。「pbxbuild clear」ならクリアを行うといった具合だ。このコマンドを利用すると、ビルドから配布ファイルまでの作成を自動的にできるようになる。

最後にシェルスクリプトの作り方だが、TextEditなどのアプリケーションを使ってファイルを作成し、そうして作ったファイルに、「chmod a+x ファイル名」などとして、実行権限を付与すればよい。あとはパスを指定して、実行することができる点は、他のUNIXの場合と同じだ。コマンドのファイル名に日本語文字列が入っている場合には、スクリプトのファイルをUTF-8で保存しなければならない。UNICODEで保存するのではなく、UTF-8で保存する。そうすれば、TextEditで日本語のファイル名などを記述して作ったシェルスクリプトもきちんと稼働する。
ファイル名自体はボリュームにはUTF-8で保存されているのだが、濁点や半濁点のあるキャラクタは、元のキャラクタと濁点・半濁点をそれぞれ別のキャラクタで保存している。だから「か」は3バイト使うが「が」なら6バイトを使っている。こうした形式のUTF-8もあるようなのだ。一方、TextEditでUTF-8で保存すると、「が」でも3バイトとして記録する形式になっている。従って、UTF-8ファイルの中身と、ファイル名の文字列は、バイト単位では一致していないことになってしまう。しかしながら、シェルスクリプトの実行はそれでも正しく行えるようになっている。とりあえず、結果はオーライというところだろうか。

カテゴリ:


TIL》Mac OS Xの現在のバージョンはターゲットディスクモードは非サポート

PowerBookなどのMacintosh本体を、ターゲットモードで起動すると、Macintosh自体がFireWire接続のハードディスクのように利用できる。こうして、別のMacintoshにあるファイルなどを直接、ターゲットモードに起動したマシンのハードディスクにコピーすることができる。ただし、Mac OS X 10.0ではターゲットモードはサポートしていないため、ターゲットモードを利用するには、Mac OS 9で起動しなければならない。なお、将来のリリースのMac OS Xではターゲットモードをサポートする予定となっている。

関連リンク:Mac OS X 10.0: Target Disk Mode Not Available
カテゴリ:周辺機器, Mac OS X


REALbasic日本語版マニュアルをPDFで販売開始

アスキーは、REALbasic 3の日本語マニュアルのPDF販売を始めた。REALbasic 3日本語マニュアルは、現在製作中のユーザーライセンスパックに含まれる予定のものだ。「言語リファレンス」「チュートリアル&開発者ガイド」の2つのファイルが提供される。PDFファイルを含む圧縮ファイルはダウンロードできるが、1500円を支払うことで、ダウンロードしたファイルの解凍パスワードを入手することができるようになっている。マニュアルはAcrobat Readerなどで参照できる。

関連リンク:REALbasic日本語版
カテゴリ:REALbasic


Open FirmwareでPCIデバイスの

Technical Q&Aで、Open Firmwareを使ってPCIデバイスのConfigration Registerを順番に表示する方法についての記事がTechnical Q&Aに掲載された。PCI Configurationヘッダの構成と、Open Firmware上での実際のコマンド入力方法が詳細に記載されている。デバイスツリーから目的のデバイスを探し出し、そのデバイスを選択する。そして、そのデバイスのプロパティを表示し、レジスタのアドレスを見つける。そして、16進表示するためのワードを定義し、それを利用してレジスタを16進表示するといった流れになっている。

関連リンク:Displaying PCI Configration Register contents in Open Firmware
カテゴリ:Technical Q&A, 周辺機器