osax 作成の現場

Last Modified: August 29, 2003


はじめに

私は HyperTalk (HyperCard) で osax を作成しています。こういうことをやっている人間は珍しいでしょうし、今後も現れることはまずないでしょう。それに、いまだに 68K のコードしか開発できない環境で、OS X にはまるっきり対応しないものですので、私自身も、やがてはこんなことはしなくなるとは思います(とはいえ、サイトを MacOS で運用し続ける限りは、自分のサイトの CGI のために作り続けるつもりですが)。

そこで、自分自身に思い出を残すのを兼ねて、現時点の私の osax の開発の様子をページにしてみました。Tanaka Extra に MT Cut Off という新しい osax を追加するという作業の過程のスクリーンダンプに説明を付けたものになっています。Web で他の人に見てもらうことを考慮せずに、てきと〜なサイズでダンプした画像になってますので、画面には収まらない画像もあるかもしれませんが、すべて実寸で表示するようにしました。

HyperCard 2.4.1

私の開発の環境ですが、G3 B&W 400MHz + MacOS 9.2.2 上において HyperCard 2.4.1 (最終版)を使っています。以下が現在の私の HyperCard のフォルダの中身ですが、osax あるいは XCMD の開発にしか HyperCard を使わないという状況ですので、関連するスタックしか入っていません。

HyperCard フォルダ

コーディング

CompileIt 2.6.1

HyperTalk で osax を作るためのコンパイラとして Compileit! を使用しています。これは HyperTalk で XCMD が作れるという開発ツールです。XCMD に限らず、コードリソース一般の作成が可能になっています。

CompileIt!

この Compileit! 自体がスタックですので、当然のことながら、自分で好きなようにカスタマイズできます。CompileIt! 2.6.1 を osax 作成専用にカスタマイズしたものを使っています。過去に書いたコードをポップアップですぐに呼び出せたり、BBedit で開いたり、あるいはコードの入ったフォルダを BBedit のブラウザで開いたりするためのボタンを追加してあります。また、コンパイルの時には、必ずコードをテキストファイルに保存するようにスクリプトを書き足したりもしています。

CompileIt 編集カード

ABE

CompileIt では、コードはスタックのフィールドに書き込む仕様になっています。しかし、HyperCard のスタックのフィールドは、コード書きには適していません。そこで、HyperTalk のスクリプトエディタでコーディングが行えるようにスタックに細工を行ったうえで、ABE というサードパティー制のスクリプトエディタで作業を行っています。ABE は HyperCard 関連のツールの販売で有名(まぁ、知る人ぞ知るってところですかね)だった Royal Software で購入したものです(CompileIt! もそうです)。私はずいぶんと Royal Software からはツールを購入しました。ちょっとした HyperCard (HyperTalk) 開発環境のコレクションを持ってます(笑)。

ABE

BBEdit

かれこれなんだかんだとたくさんの osax を作ってきましたので、最近では全くのゼロからコードを書くことはありません。過去に書いたコードから色々なパートを抜き出してかき集めて仕上げるというパターンで作業を行っています(たまに変数名の変更を忘れてバグったりしちゃうんですが)。そのため、コードを書いているときには、BBEdit のブラウザで osax のソースを保存してあるフォルダを開いておいて、あれこれと探し回っては、コピー&ペーストしてます。

BBEdit

コンパイル&ビルド

osax-keeper

コーディングが済んだら CompileIt! の Compile It ボタンをクリックすると、コンパイルが行われます。基本的なコーディングのミス等がなければ、コードリソースが作られ、予め設定しておいたスタックに貼り付けられます(CompileIt! は XCMD 作成用のツールなので、基本的には、でき上がったリソースはスタックに貼り付けられるようになっています)。

私の場合は、osax を作るときには osax-keeper というスタックに貼り付けられるように設定しています。CompileIt! はコンパイル終了時に、テスト用の HyperTalk スクリプトをメッセージボックスに表示する仕様になっています。osax のように HyperCard で実行できないコードリソースの場合には、リソース名が [] で囲まれて表示されます。そこで、これを取り込んで、osax の本体にコピーし、さらにその osax を ResEdit でオープンするというボタンを作ってあります。

osax-keeper

[Copy to Extra] ボタンをクリックすると、作成された osax リソース(この場合は cutOff )が Tanaka's Extra ファイルにコピーされ(この処理は CompileIt で自作したリソースコピーの XCMD を使用)、その後、以下のように ResEdit で Tanaka's Extra ファイルをオープンするようになってます。

ResEdit

ResEdit でリソース名と属性の変更を行います。

ResEdit1

AppleScript の osax として機能するためには、osax コードリソースは AEVT + クラス名 + ID という規則で名前を付ける必要があります。私が作る osax はすべてクラスは XUVJ にしています。また、ここで作成している cutOff の場合、rdcf という ID を付けることにしましたので、ファイルにコピーされている cutOff リソースを AEVTXUVJrdcf という名前に変更します。

ResEdit2

CompileIt! でコードを書く段階で、この AppleEvent の仕様に合わせた名前にしておけば、この ResEdit での作業は不要になる(属性の変更ぐらいは自作の XCMD でできますから、すべてをスタック内で処理が可能になる)のですが、ソースの名前から中身が分かりにくくなってしまいますので、コードを書く段階では自分に分かりやすい名前をリソース名に付けておき、あとで ResEdit で作業を行うようにしています。場合によっては、でき上がったリソースのサイズから「なんか変だぞ?」と気がつくこともあるので、確認を行うという意味もあります。

EightyRez 1.0

リソースの作成が終了したら、辞書情報の記入を行います。これには Conceptual Design 社の EightyRez というソフトを使っています。もともとは製品として販売されていたものですが、その後、フリーウェアとして公開されたツールです。

辞書情報というのは、ようは aete リソースの編集ですので、テンプレートを入れれば ResEdit で行える作業です。私もかつては ResEdit で作業を行っていたのですが、やはり専用のツールの使い易さと安定感は素晴らしいものがありますので、今は EightyRez しか使っていません。パラメータなんかをコピー&ペーストできる、似たような osax を作っている私には、これだけでもずいぶんと助かるのです。

EightyRez

以上の作業で osax のビルドは完了ということになります。


デバッグ

ZoneRanger 2.2

デバッグ(テスト)は、実際に AppleScript のスクリプトエディタでスクリプトを書いて動かしてみるという方法でやっています。XCMD でしたら CompileIt! はソースコード・デバッグが行えるんですが、osax ではそれが無理ですので、実際に osax を動かしてみるしかないのです。動かなければ ComileIt! に戻ってコードを調べ、修正し、上で述べたコンパイル&ビルドを再び行って、それからもう一度動かしてみる、という泥臭い(?)方法でやってます。

パラメータの値を変えてみたりして、色々な条件でスクリプトを動かしてみて、計画通りに動くことが確認できたら、ZoneRanger を立ち上げて、これでメモリーの使用状況を確認しながら、ループの中で osax を動かし、問題がないかどうかを調べるようにしています。ポインターやハンドルの開放し忘れなんかがあればこのテストで確実に捕まえられますので、このテストは必ず行うようにしています。1000 〜 10000 回のループでメモリーのリークの気配がなければ、実際にサーバ上で利用しても大丈夫だと判断して、osax の完成としています。

Debugging

後片づけ

Voodoo 1.8.1

osax が完成したら、Voodoo のプロジェクトにソースや osax を登録します。Voodoo で管理することで、もし過去の状態に戻したければいつでも戻せますので、バックアップも兼ねて、必ず登録作業は行っています。もっとも、osax では Voodoo で履歴をさかのぼるようなことは今まで一度もやってません(UVJ Mailer のような REALBasic で開発しているソフトの時には、あれこれさかのぼったり複数のバージョンの平行開発をしたりと Voodoo を重宝してるんですが)。

Voodoo1

まぁ、ソースの管理というよりも、開発の日誌を付けるようなもんですね。

Voodoo2

おわりに

まぁ、こんな感じで Tanaka's osax を作ってきたわけです。


Web Scripter's Meeting

田中求之のサイトのトップページ