Rubyはまつもと ゆきひろさん作のオブジェクト指向スクリプト言語です。Rubyそのものについては <http://www.netlab.co.jp/ruby/> などをご覧ください。
MacRubyはRubyをMacOSで使えるようにしたものです。MacRubyという名称は、MacOSで動作するRuby環境を表わす仮の名前でauthorizeされたものではありません。
MacRubyは、Ruby本体(共有ライブラリ)、Ruby本体を利用するアプリケーション、ライブラリ、拡張モジュールなどで構成されます。Ruby本体は共有ライブラリになっています。MacRuby本体(共有ライブラリ)を利用するアプリケーションを、MacRubyアプリケーションと呼びます。MacRubyのユーザは、通常、MacRubyアプリケーションを介してRubyを利用することになります。
現在のMacRubyはかなり実験的なものです。ここに書かれていることは予告なしに変更することがあります。動作させることにより何かしらトラブルが起こる可能性がありますが、その点ご理解ください。いまのところ68Kマッキントッシュでは動きません。
RubyCorePPC.shlb
Ruby本体を含む共有ライブラリです。
SimpleRuby PPC
もっともシンプルなMacRubyアプリケーションです。オリジナルのrubyコマンドと同じコマンドライン引き数をダイアログボックスを介して指定しRubyを動かすことができます。
:libフォルダ
Rubyのライブラリファイルを入れるためのフォルダです。
:lib:ppc-macosフォルダ
拡張モジュールを入れるためのフォルダです。
:sampleフォルダ
Rubyのサンプルスクリプトが入っています。
RubyAppleScriptI/F
AppleScript経由でRubyスクリプトを実行するためのMacRubyアプリケーションです。
RubyDropletBase
Rubyドロップレット(後述)のベースとなるMacRubyアプリケーションです。リソースレベルで簡単にカスタマイズ可能です。
MacRubyEval
eval.rbをリソースに組み込んだMacRubyアプリケーションです。リソースレベルで簡単にカスタマイズ可能です。
MacRubyRbc
rbc.rbのファイル位置をリソースに組み込んだMacRubyアプリケーションです。MacRubyEvalとほとんど一緒です。
RubyAppleScriptIFを終わらせる
単にRubyAppleScriptIFアプリケーションを終了させるためのアプリケーション(AppleScript)です。なんでこんなもんがあるかというと、RubyAppleScriptIFはときどきマウスやキーボードでQuit出来なくなるためです、原因不明 (^^;。
MacRubyアプリケーションを使うためには、Ruby共有ライブラリ、あるいはそのエイリアスを
- そのアプリケーションと同じフォルダ
- 機能拡張フォルダ以下のどこか
のうちのどこかに置く必要があります。
Rubyのライブラリや拡張モジュールは
- MacRubyアプリケーションのあるフォルダの下のlibフォルダ
- その下のppc-macosフォルダ
- 機能拡張フォルダの下のMacRuby:libフォルダ
- その下のppc-macosフォルダ
のうちのどこかに置く必要があります。
AppleScriptの中でRubyのスクリプトを実行する場合には、RubyAppleScriptIFアプリケーションを使います。スクリプト編集プログラムなどで簡単な用語説明を見ることが出来ます。
属性
args -- Rubyワールドの$macruby_args
open file -- Rubyスクリプトファイル
do script anything -- Rubyスクリプト、またはRubyスクリプトファイル
結果: anything -- Rubyワールドの$macruby_replyの値
AppleScriptワールドとRubyワールドでやり取りできるデータの型は、テキスト、真偽値、整数、実数、リストのみです。あまり意味のない例ですが例1、例2をご覧ください。
Finder上でファイルやフォルダをドラッグ&ドロップしたとき、それに対してRubyスクリプトを実行するRubyアプリケーションをRubyドロップレットと呼びます。AppleScriptのドロップレットのRuby版だと思ってください。前述のファイルRubyDropletBaseは、Rubyドロップレットのベースとなるアプリケーションです。(もちろん)必須AppleEventに対応しています。
RubyドロップレットのRubyスクリプトでは、$macruby_argsというグロバール変数に、ドロップされたファイル、フォルダ名のリストが入っています。(例、日本語テキストをjisコードに変換するドロップレットのrubyスクリプト)
Rubyドロップレットの作り方
今のところ、簡単に作る方法は用意していませんが、ResEditなどの使い方やアプリケーションのリソースについてある程度理解している方は、次の手順で作ることが出来ます。
- RubyDropletBaseをコピーして適当な名前を付ける
- 'TEXT'リソースID=1000にrubyスクリプトを作る、あるいは書き換える
これでドロップレットとして機能します。必要に応じて'BNDL'、'FREF'などのリソースを適当にいじるとよいでしょう。
MacRubyEvalやMacRubyRbcも、Rubyドロップレットと同様にリソースレベルでカスタマイズすることが可能です。次のような仕様になっています。
また、'SIOU'リソースID=1000で、コンソールウィンドウの振る舞いやフォントなどを多少変更することが出来ます。ResEditではなくResourcerer用ですが'TMPL'リソースもついています。
困ったことにオリジナルとの違いはたくさんあるのですが... (^^;
オリジナルと違ってよく落ちます (^^;。sample以下のスクリプトの中には、動かすとエラーになったり、ひどい場合は爆弾を出したりフリーズしたりするものがあります。すみませんが、まだまだ完成度は低いです。
Processモジュール、IOクラスの一部など、processやpipeなどによるprocess間通信に関する部分はまともに実装されていません。もともとMacOSにはバイトストリームによるプロセス間通信という考え方がなく、プロセス間通信(というかアプリケーション間通信)はAppleEventという構造を持ったデータを介して行われます。MacOSとUNIXとではモデルがあまりにも違い過ぎます。
AppleEvent、AEOMを扱う拡張モジュール、簡単に言うとRubyをAppleScriptのように使うための拡張モジュール。RubyレベルでAppleEventハンドラを組み込む方法。ファイルタイプ、クリエータなどを扱うためのしくみ。Frontier ODB Engineの拡張モジュール。などなど...
藤本尚邦 hisa@imasy.or.jp