Macintosh Developer Online (MDOnline)


2001年12月13日発行号 - XでCD-R



昨日にお伝えしたプレゼント企画ですが、希望品を5つまで順位をつけて指定できますので、よろしくお願いします。ちなみに、一番人気はXのTシャツとJavaOneノートですね(などと牽制してみる〜笑)。
2002年1月のMacworldのキーノートは、もちろん、スティーブ・ジョブズCEOということで発表がありましたが、展示会前日ではあるもののコンファレンスはこの日からですね。Webキャストについては何もまだ発表されていませんが、きっとあるのでしょう。日本時間では1月8日の午前2時からですね。それから、11日にQuickTime 4.1.2が新規公開となっていますけど、これは昨年にリリースされたものです。Knowledge Baseの文書で、配付ファイルの文書が大量に更新されていたのですが、きっと整理しているうちにないことに気が付いて作ったのじゃないかと想像していたりします。
今日の記事ではfs_usageなんてコマンドをちらっと出していますが、ファイルへのアクセスがあると、コンソールに情報を出します。これを見ていると、SNAXってひっきりなしにディレクトリのリストを取りに行っているので、それでリストが素早くアップデートされるのが分かりますね。それからClassic環境からもファイルアクセスはしょっちゅうあります。これらを落としていると、fs_usageの出力もだいぶんと大人しくなるという感じです。ちなみにCD-R書き込みで使っているシャドウファイルについて、どなたか御存じの方がいらっしゃったら、教えて下さい。リストしても見られないようにファイルを作るなんてできるのでしょうか…。インターネットでシャドウファイルを検索すると、/etc/shadowのことばっかりでて来てよく分かりませんでした。
(新居雅行 msyk@mdonline.jp


【MacWIRE配信予定】REALbasic 4の正式発売は2002年1月

開発ツールのREALbasicの次期バージョンVer.4が、2002年1月に正式にリリースされることが発表された。すでにREALbasic 4はベータ版が公開されている。2001年12月1日以降に購入したユーザには無償でのVer.4へのアップデートが行われる。なお、このスケジュールは、英語版に関することで、日本語版については現時点ではアナウンスはない。
REALbasicはMac OS 8/9およびMac OS Xで利用できるアプリケーション開発ツールで、ウインドウを実際に表示される形式で画面表示させながら設計でき、プログラムをBasic言語で記述するという形態の開発ツールである。開発環境や作成したアプリケーションの実行エンジン部分はMac OS Xネイティブで動作する。また、Windows向けの実行アプリケーションの生成もできる。新しいバージョンでは、シェルでのコマンド実行でインタラクティブなコマンドの実行ができるようになった他、リストボックスやテキスト編集コンポーネントの刷新をはじめとしたユーザインタフェースコンポーネントの強化などが行われている。

関連リンク:REALbasic
カテゴリ:REALbasic


Browsing Mac OS X》Mac OS X 10.1で追加されたCD-R作成機能を試してみる(1)Finderでのディスクへの書き込み

Mac OS X 10.1では、CD-Rを作成する機能が追加された。Mac OSではDisc BurnerとかAuthoring Supportなどと名前がついていたが、Mac OS Xではもはやそうした名前も使われない位の「当たり前の機能」のようにも見える。いずれにしても、ある程度の特殊な目的なら専用アプリケーションは必要だが、普通のCD-Rの使い方だと専用アプリケーションは不要になってしまった。その手のアプリケーションを開発していたサードパーティは市場は失ったとは言え、ユーザにとってはより手軽に使えるようになったという点は確かだろう。ちなみに、Windows XPでも、OSサポートによるCD-Rへの書き込みができるようになっている。

ではさっそくMac OS Xでの書き込み方法を説明したいが、CD-RWドライブあるいはコンボドライブを装備している機種以外は、サードパーティのドライブを利用することになる。もちろん、対応しているドライブかどうかを判断する必要がある。これから購入するのなら、対応しているかどうかをチェックしたいところであるが、いまだにDisc Burner対応ないしはMac OS X標準対応かどうかをしっかり明記していないドライブも、残念ながらまだまだショップでは見られるところだ。Appleは対応ドライブ一覧を公開はしているものの、海外で販売されているモデルが中心だ。御存じのように、製品として売られている型番よりも、その中のドライブユニットのメーカと型番が重要なので、なんとか対応を付けることは可能かもしれない。ショップによってはそうした情報を持っていて適切に教えてもらえるということもあるだろう。ただ、量販店でショップに並んでいる箱を見ているだけだとドライブユニットまでは分からないということもあるので、買うときにはそれなりに緊張を強いられるしまうというところかもしれない。

◇iTunesの対応ドライブ一覧
 http://www.apple.co.jp/itunes/notes.html

仮に、すでにドライブを持っているのなら、とにかくMac OS Xが稼働しているマシンに接続してみることだ。そして、Apple System Profiler(Utilitiesフォルダ)や、iTunes 2を起動して確認してみる。iTunes 2で認識できるのなら、おそらくCD-R書き込みには対応していると判断できるだろう。筆者は、BUFFALOのCRWiU-B1610Hを使っているのだが、次のようにApple System Profilerでは製品自体の型番が認識され、iTunes 2ではその中のドライブが認識されていた。

◇Apple System ProfilerではMelco製のFireWireドライブであることが分かる
 

◇iTunesでの環境設定でドライブユニットの対応が分かる(このドライブはPlextor製のユニットのようだ)
 

CD-Rをどういった用途に使うかということは、つきつめれば「バックアップ」の一言につきるのではないだろうか。もちろん、大きなデータを人に渡すようなときにも使うけど、要は、Finderにあるファイルをどっさりコピーできる大量記憶メディアなのである。音楽CDを作るのはiTunesでOKだ。ブートディスクを作りたいというニーズもあるかもしれないが、そうした一部の業界の方々は、いろいろとカスタマイズできるアプリケーションを利用するのが一般的だろう。多くのユーザにとって、要は、ファイルを手軽にディスクに書き込めればそれでいいのである。
実際にデータを書き込むのはFinderを使う。というか、使い方を説明するほどのものでもなかったりするほど簡単だ。CD-Rディスクがあたかも1つのドライブのように存在するので、ドラッグ&ドロップでコピー等を行えばいいのである。他のドライブとの違いは、「書き込み」の作業を最後に行うことだ。以下、操作の流れとしてポイントを説明しておこう。

◇CD-RWドライブに生のCD-Rディスクを入れてしばらく待つと、次のようなダイアログボックスが表示される。ここで付けた名前は、後からCD-ROMとして使うときにもボリューム名となるので適切な名前を入力する。日本語でもかまわない。なお、フォーマットは3種類あるが、通常は「標準」を選択しておけば十分だろう。
 
 

◇「準備」ボタンをクリックして少し待つと、デスクトップにCD-Rディスクがマウントされる。アイコンにCDRマークがある。名前は前のダイアログボックスで付けたものになっている。
 

◇FinderでCD-Rに書き込みたいフォルダやファイルをドラッグ&ドロップ等でコピーすればいい。単に普通にコピーをすればいい。何回かに分けて行ってもかまわない。コピー中もハードディスクへコピーするのとまったく同じだ。
 
 

◇CD-Rドライブにコピーした結果(といっても物理的にはまだ書き込まれていない)は、通常とおりFinderでの参照で中身を見ることができる。
 

◇ディスクに書き込みたいファイルやフォルダをコピーし終わったら、実際にディスクへの書き込み作業を行なう。CD-Rのアイコンをcontrolキーを押しながらクリックして、メニューから「CDを作成」を選択する。あるいは「ファイル」メニューから「CDを作成」でもかまわない。
 

◇次のようなダイアログボックスが表示されるので、「CDを作成」ボタンをクリックする。(なお、CD-RディスクのアイコンをCommand+Eで取り出そうとすると、このダイアログボックスが表示される。)ちなみに、ここで「取り出し」ボタンをクリックすると、CD-Rは無傷で取り出せるようだ。
 

◇書き込み中は次のような感じで、準備、書き込み、検証の作業が行なわれ、経過が表示される。なお、この間もMacを使って他の作業していても概ね問題はないようだ。
 
 
 

こうして、書き込みが終わると、CD-ROMとして書き込まれたディスクはマウントされる。必要ならそこで内容を確認できるが、なんか気持ち悪いからいったん取り出して(Command+Eでいいだろう)、CD-ROMドライブに挿入して確認するとよい(古くからのユーザの悪い癖かもしれない)。

ここで、筆者の場合には、書き込みは終わっているのにマウントされないという状況に出くわすことが多かった。というか、3回に2回はそうなのであるもののマウントされるときもある。その場合、次のように、/VolumesディレクトリをFinderで無理やり表示すると、そこにCD-ROMとしてマウントされたボリュームがあるので、それをダブルクリックすればデスクトップにCD-ROMとしてマウントされ、後は取り出すなどの作業は通常とおり行えるようになる。

◇Finderで「移動」メニューから「フォルダへ移動」(Command+~)を選択すると、表示するディレクトリを指定するダイアログボックスが表示されるので、「/Volumes」と入力して「移動」ボタンをクリックする。
 

◇アイコンはさておいて、できあがったボリュームがあるので、それをダブルクリックすると、デスクトップにアイコンが出てくる。
 
(この項、続く)

カテゴリ:メディア制作, Mac OS X


Browsing Mac OS X》Mac OS X 10.1で追加されたCD-R作成機能を試してみる(2)便利さと動作原理

以上のように、あたかも、CD-Rドライブが普通のディスクドライブのように扱えるのがとても便利なところである。たぶん、ファイルのバックアップを取るだけなら、CD-R書き込みアプリケーションというものはもう使うことはないと思われる。また、書き込み中に他の作業をしていてもほとんど問題はないようだ。もちろん、筆者としてそうした動作を「保証」はできないが、書き込みをしながら、プロセスをチェックして、自分の環境での動作を調べて判断してほしい。筆者は、500MHzのPowerBook G4を使っているが、書き込み中にTermialでtopコマンドを使ってCPUの負荷を見ていると、Finderとカーネルでだいたい40%ほどとなっている。まだ、CPU的には余裕があると判断できる。だから、書き込みをしながら、メールを読んだり返事を書いたりしても、今までに失敗をしたことは1度もないくらいである。また、FireWireの外付けハードディスクから、外付けのCD-Rへの書き込みでも問題なく処理ができた。
これは、マルチタスク化した恩恵と言っていいだろう。Mac OS時代は、書き込みを始めると何にもできなかった。それに、うまく行ったと思ったら、スリープに入って失敗したり、書き込み速度も遅かったので、とにかくCD-Rへの書き込みはひと仕事以上の面倒臭さがあった。しかしながら、Mac OS X上で、そして12倍速といったスピードが実現した今となっては、毎日バックアップをとっても気にならない(ほんまかいな〜笑)…といっていいくらいの環境の差になっている。
上記の手順で、ファイルをCD-Rドライブのアイコンにコピーしている間も、後で説明するように、実際には、起動したハードディスク上に書き込んでいるだけで、その間はCD-RWドライブにはまったくアクセスをしていない。ファイルコピー中にMacintoshをそっとしておくという必要もないわけだ。ネットワークからコピーしてもいっこうにかまわない。それに、CD-Rディスクの容量を超えそうになるとエラーがその場で出る。以前だと書き処理をしてからエラーが出るなどとにかく手際が悪くなりがちであったが、そうした心配もない。

それでは、実際に背後でどんな動きになっているかは興味あるところだ。ただ、完璧に分かったわけではないのであるが、解析した範囲での動作を説明してみたい。動作を見る限りは、どこかにファイルを作っておいて、CD-Rの中身を覚えておいて、それを書き込みの指示でディスクに書き込むと言う感じかなというあたりは想像できるところだろう。
まず、CD-Rディスクを入れると、hdidという名前のプロセスが1つ起動する。そのプロセス情報を見ると、次のようになっている。

/usr/bin/hdid /System/Library/CoreServices/Finder.app/Contents/Resources/cdr74-proxy.dmg -shadow /tmp/burndisk000342 -plist -drivekey

このhdidの詳細はmanコマンドで参照できる。基本的には、ディスクイメージファイルをマウントしたりするのに使うコマンドなのであるが、1つ目の引数がマウントするディスクイメージファイルだ。すると、なんとFinderアプリケーションのパッケージ内にあるcdr74-proxy.dmgというイメージファイルをマウントしていることになる。ところが、該当するディレクトリを見てみると次のようなものだ。書き込み処理は12月に行っているのに、なぜかファイルの日付けは「OSをビルドした日」のような感じである。

-rw-r--r-- 1 root wheel 131957 Sep 8 16:29 cdr21-proxy.dmg
-rw-r--r-- 1 root wheel 31650 Sep 8 16:29 cdr4-proxy.dmg
-rw-r--r-- 1 root wheel 388039 Sep 8 16:29 cdr63-proxy.dmg
-rw-r--r-- 1 root wheel 417511 Sep 8 16:29 cdr74-proxy.dmg
-rw-r--r-- 1 root wheel 439791 Sep 8 16:29 cdr80-proxy.dmg

実は、hdidは、単にマウントするだけなら、マウントをしてプロセスを終えてしまう。ここで-shadowというオプションがある場合には、実際に書き込みを行った場合、指定したイメージファイルのcdr74-proxy.dmgではなく、シャドウとして指定した/tmp/burndisk000342というファイルの方に書き込みが行われると言う動作になる。つまり、マウントしたドライブに対する書き込み処理が、-shadowで指定したファイルにリダイレクトされるのである。その後に読み出しを行うと、やっぱりリダイレクトされたファイルから行う。cdr74-proxy.dmgが生ディスクのイメージだとすると、実際の読み書きは/tmp/burndisk****ファイルに対して行われるということになるだろう。
つまり、cdr74-proxy.dmg等のファイルは、ディスクのふりをするだけのためのものだろう。たとえば、ここでは620MBのディスクのふりをしておけば、それ以上のファイルのコピーをしてもFinderで警告が出るようにできるという具合だ。従って、Finderでファイルをコピーした結果は/tmp/burndisk****ファイルに残され、実際にCD-Rに書き込みを行うときには/tmp/burndisk****ファイルから読み出されるということになると考えられる。
ただ、そうなると、/tmpディレクトリでlsコマンドを入れると「burndisk000342」なるファイルが見えると思うのだが、それが見えないのである。これについては理由は分からない。fs_usageコマンドでファイルシステムの読み書きを見たところ、確かにCD-Rをマウントするときなどに/tmp/burndisk****ファイルへのアクセスがあるので、ファイルは作っているとは思われるが、いろいろなタイミングで見てみたものの実際に見ることはできなかった。ただ、もし、CD-Rの書き込みが失敗したり、カーネルパニックなどが発生すると、/tmp/burndisk****ファイルが残っている可能性がある。tmpディレクトリごと削除して再起動するとクリアできるのではないかと思うのだが、これは実際に試したわけではなく想像の範囲である。

引き続いて、CD-ROMのコピーを手軽に行う方法を説明しよう。
(この項、続く)

カテゴリ:メディア制作, Mac OS X


今から始めるCocoaプログラミング》文書ファイルを扱うアプリケーションを作る(2)Application Kitの機能

Cocoaフレームワークの大きな特徴である、文書ファイルを伴うアプリケーションを作成する機能についての解説にさっそく入ろう。文書ファイル、たとえばテキストエディタとか、画像編集ソフトのように、アプリケーションとは別にデータをファイルに保存し、そのファイルをウインドウに開いて編集するという形式のアプリケーションは、もはや定番というのもおかしなくらい、パソコンでは当たり前になっている。そうしたアプリケーションを作るためには、オブジェクト指向以前(その意味では現在のCarbonも含む)のAPIでは、ウインドウを画面に出すだけでもけっこうなプログラミングが必要であった。10年くらい前のマックのプログラミング本だと、延々とプログラミングを行って、やっとシンプルなテキストエディタができました…という感じであった。
しかしながら、オブジェクト指向が一般的になったことで、差分だけを与えるというやり方がうまく機能するようになった。つまり、どのアプリケーションにも共通するような機能については、あらかじめフレームワークで作り込んでおく。たとえば、ウインドウを表示し、ウインドウの大きさを変えたりウインドウの位置を変更するといった動作は、ワープロでも画像ソフトでもほぼ共通だ。そうした機能はすでにフレームワークで用意しましょうというわけである。そして、ウインドウに表示する中身は、アプリケーションごとに作って下さいという具合である。もちろん、その中身を作る上でもオブジェクト指向によって部品が容易に使えてさらにはカスタマイズもできるなど、フレームワークの機能はふんだんに利用できる。そして、ウインドウといったコンポーネントだけでなく、「文書ファイルを扱うアプリケーション」という機能もフレームワークに含まれることが多い。いくらか複雑な仕組みになってしまうのであるが、それでもこうした機能を使えば、従来のやり方に比べて遥かに容易にアプリケーションができてしまうのである。なお、PowerPlantでも文書ファイルを扱うクラスは存在している。一方、SwingなどのPure Javaでは明確には存在していない。その意味では、Mac OS Xのネイティブ環境であるCocoaで対応があるということは、Cocoaの魅力であると言ってもいいだろう。ちなみに、Cocoaではこうした種類のアプリケーションを「Document Based Application」と呼んでいるので、以下「ドキュメントベースのアプリケーション」などと呼ぶことにする。

Cocoaでドキュメントベースのアプリケーションを実現するために、いくつかのクラスが用意されているが、その中心となるのはNSDocumentである。最低限、このクラスのサブクラスを定義するということが必要になる。それ以外のクラスについては、基本的には特にいじらなくてもとりあえずはアプリケーションは作成できる。しかしながら、フレームワークで定義されている機能を変更したりあるいは追加したいとなると、そうしたクラスを自分で作り直したりといったこともできるようになっている。今回は、NSDocumentクラスだけを詳しく説明するが、その他のクラスは名前と動作の概要だけはとりあえず理解しておきたいところだ。
このNSDocumentを利用する上では、nibファイルの動作を理解しておきたい。nibファイルはInterface Builderで作成できるもので、そこには、ウインドウやその中のボタン、メニューといったユーザインタフェース要素、そしてクラスの定義やそのインスタンスの定義、インスタンス間でのリンクといった参照関係の定義など、さまざまな情報が記録される。通常、アプリケーションは、NSApplicationというクラスで実現されており、そのクラスをインスタンス化するところからアプリケーションは始まる。もっとも、main.mというObjective-Cで書かれたソースが最初からプロジェクトに組み込まれているので、あまり意識はしたことがないかもしれない(この部分の解説は、Objective-CのNSApplicationのクラスの部分で見ることができる)。しかしながら、そこでは、プロジェクトの「アプリケーション設定」にある「メインnibファイル」に指定したnibファイルを自動的にロードするといった動作を行う。通常は、ここも最初から用意されているnibファイルであるMainMenuが設定されているので、MainMenu.nibに設定されたメニューがアプリケーションのメニューとして表示されるという動作になるわけだ。
一方、ドキュメントベースのアプリケーションの場合、必ずしもそのやり方しかできないわけではないものの、一般にはドキュメントの定義に対応したnibファイルを定義する。nibファイルは、ファイルとして存在するときには「クラス」という意味合いが強いが、それがロードされることによって「インスタンス化」されると考えればよい。だから、アプリケーションで使うnibファイルとは別に「文書ファイル」を定義するnibファイルを用意しておく。通常は、アプリケーションの中でドキュメントを複数開くことが多い。したがって、文書を開くたびに、その文書ファイルに対応したnibファイルを利用してプログラム上で利用するインスタンスを生成するという方法が、いちばん素直なやり方なのである。

Applicationクラスにあるドキュメントを関するクラスをまとめておこう。動作から考えると、文書ファイルがいくつかあり、さらに1つの文書ファイルで複数のウインドウということもあり得るというあたりを想像してもらいたい。そうした状況を実現できるようにCocoaは作られている。以下の図は、クラス階層ではなく、実行した段階でのインスタンスの階層であるので注意してもらいたい。

◇ドキュメントを管理するクラス
 

まず、いちばん根底にNSDocumentControllerというクラスがある。これはマルチドキュメントをサポートするクラスで、アプリケーションでは1つだけインスタンス化されている。このクラスはけっこういろいろな仕事をこなすが、何もしなくてもインスタンス化されていて使える状態にあると考えて良い。ここでは、文書を新規に作ったり、文書を開いたり、さらには終了時に閉じるかどうかを訪ねるとか、Finderでのドラッグ&ドロップとの連動といったことまでも行う。また、そうした動作を変更したいときには、このサブクラスを定義して利用することもできてしまう。今回のサンプルはとりあえずそのまま利用することにする。
次にNSDocumentクラスがあり、1つの文書ファイルに1つのインスタンスを用意する。ただし、文書のデータ処理に関しては、やはりどうしても共通に動作するものは無理なので、実際に作成するアプリケーションに合わせた部分を作らないといけない。そのため、通常はサブクラスを作ってそれを利用する。この動作については、一連の原稿で詳しく紹介しよう。
さらに、NSWindowControllerクラスがある。1つの文書ファイルに対して1つ用意し、1つの文書に対するマルチウインドウをサポートする。これも、基本となるクラスは定義されていて、通常はNSDocumentないしはそのサブクラスを作ると自動的に用意されるものと考えて良い。ただし、サブクラスを作ってカスタマイズすることも可能となっている。
そして、NSWindowクラスがあるが、これはウインドウそのものである。1つのウィンドウに対して、1つのインスタンスを使うことになるが、もちろんこれもサブクラスでもかまわない。単に通常のウインドウの動作をさせて、その中にコントロール類があるだけなら、通常はそのままを使う。また、言い換えれば、このNSWindowsクラスはnibファイルで定義しているものをそのまま使うのが一般的である。プロジェクトの初期状態がそうなっているので、まずはそうした使い方からマスターするのがいいだろう。つまり、nibファイルで作成したユーザインタフェースに基づくウインドウを作成するという具合である。
このようにいくつかのクラスがあって、それらが連係を取りながら動いて行く。しかも、自動的にいろいろ行われてしまうので、結果オーライとするのなら何も説明することはなくなってしまうのであるが、なるべく背後でのフレームワークでの動きを筋道を立てて説明していきたいと考える。
(この項、続く)

カテゴリ:ユーザインタフェース, Cocoa, 今から始めるCocoaプログラミング