MacRubyがCocoaプラットフォームと密に統合しているのは、JRubyやIronRubyが基礎としているプラットフォームと統合しているのと比べて、大きな強みのひとつだ。MacRubyは、Mac開発者がRubyを使ってクライアントアプリケーションを開発する最善の方法だろう。experimentalブランチにおける最近の作業により、Ahead of Time (AOT) コンパイルも改善されてきている。
macrubycというAOTコンパイラに対するコマンドラインツールのインターフェイスを導入
macrubycを使うと、指定されたRubyファイルをMach-Oオブジェクトファイルにコンパイルしたり、最終的な実行ファイルを生成することができます。
今でもRubyアプリケーションをMacRubyで書いてインストールすることは可能だが、MacRubyランタイムと一緒に配布する必要がある。AOTを実装する目的は、この問題を解決することだ。
生成されたMach-Oオブジェクトはオブジェクトファイルそのものです。MacRuby実行ファイルを作るのにも使えますし、MacRuby Objective-C APIを利用するObjective-Cプロジェクトで使うこともできます。
生成された実行ファイルには、コンパイルされたRubyコードはもちろん、MacRubyも静的に組み込まれます。これはそのまま配布することができ、実行時にMacRubyやLLVMに依存しません。Rubyソースコードはネイティブの機械コードにコンパイルされるのです(実行時にJITコンパイラでやるのと同様の処理)。そのため、ソースコードを難読化するよい方法でもあります。最終バイナリはObjective-Cバイナリと同じように見えます(サイズがずっと大きいことを除いて)。
MacRubyで書かれたユーティリティのひとつに、Chris Wanstrath氏のBacondropというツールがある。ツール自体は小さなものだが、MacRubyをバンドルしているため、15MBほどの大きさになっている。AOTコンパイルしたバイナリにすれば、もっと小さくなるはずだ。
Bacondropは、RubyによるツールがMac開発者に役立つことを示す例でもある。BacondropはMac DMGファイル形式で配布されているが、これはDr Nic氏により開発されたChocTopというユーティリティによって作成したものだ。ChocTopというツールはすべてのCocoaアプリケーションで利用することができ、Sparkleセットアップを備えた(Sparkleはソフトウェアアップデートに対応する)ちょっと退屈なDMG作成を自動化してくれる。ChocTopにはDSLのような設定のための仕組みがあり、rake
ファイルにいくつかのタスクを追加する。
MacRubyアプリケーションがすべてAOTコンパイルできるようになると、OS Xアプリケーション開発において、RubyはObjective-Cに対抗できる競争相手になりそうだ。(おそらくiPhoneではそうはならないだろう。iPhoneのObjective-Cランタイムはガベージコレクションをサポートしていないためだ)