MacRubyとLLVMを導入してRubyでネイティブGUIアプリを作る

  • 2011年1月23日 17:16
  • ruby

(2011/1/23 23:00追記) macrubycはLLVMから入れなくてもmacrubyをインストールするだけで一緒にインストールされます。下記内容は誤りを含んでいますのでご注意ください。ご指摘いただいたwatson1978さん、ありがとうございました。

最近Macアプリケーションが気になっていて、Cocoa周りの話を調べています。その一環でRubyでMacアプリを作る方法についての話です。

MacRuby

Mac上でRubyでアプリケーションを作る場合、最初からインストールされてあるRubyCocoaと、最近盛り上がっているMacRubyの2通りの手段があります。 どちらもCocoaを含むいろんなフレームワークをRubyから直接叩けるのですが、RubyCocoaはプロキシオブジェクトを介してCocoaフレームワークを叩くのに対して、MacRubyはプロキシを必要とせずに直接Objective-Cのメソッドにアクセスできるのが大きな特徴です。 実装方法として、MacRubyはRubyランタイムからObjective-Cのランタイム関数を直接呼び出すことで実現しているようです。 感覚的に考えてもRubyCocoaと比べて、MacRubyの方がパフォーマンスが大きく改善されていることが期待できるので、MacRubyで遊んでみたいと思います。

rvmの利用

MacRubyの本家サイトにはインストーラのpackageファイルがあるのですが、もっと手軽に試してみるにはrvmの利用がおすすめです。rvmは複数のRubyを共存させるツールで、いろんなバージョンのRubyを切り替えて使いたいときは必須ツールです。 同僚のmirakuiさんが詳しい記事を書いているので、rvm自身のインストールなど詳細な情報はそちらを参照ください。

ではMacRubyをrvmでインストールしてみます。MacRubyの最新バージョンは2011年1月22日現在で0.8なのですが、rvmのバージョンを最新にしないとバージョン指定でインストールできないようです。

$ rvm update --head
$ rvm reload
$ rvm install macruby-0.8
$ rvm use macruby-0.8

バージョンを確認してみて、次のような出力が得られるとインストール成功です。

$ ruby -v
MacRuby 0.8 (ruby 1.9.2) [universal-darwin10.0, x86_64]

あとGUI系のライブラリを利用するためにHotCocoaのgemもインストールしておきます。

$ gem install hotcocoa

Hello World!

まずは簡単なHello Worldアプリをつくってみます。「ruby hello_world.rb で」ウィンドウ上にボタンを表示し、ボタンクリックでHello Worldをputsさせます。

1st MacRuby App

MacRubyはKernelモジュールにframeworkメソッドを追加しているので、このメソッドでCocoa機能を呼び出します。 あとのコードも大体読めばわかる程度のレベルだとおもいます。Objective-Cだと抵抗あるRubyエンジニアもこれだとMacアプリも怖くないですね!

MacRubyコンパイラを利用してネイティブアプリ化する

このままだとただのRubyスクリプトなので、これをネイティブアプリ化します。 (2011/1/23 23:00追記、macrubycはmacrubyに梱包されているので、LLVMからインストールする必要はありません。一応、備忘録のために導入方法だけ残しておきます。) ネイティブアプリ化を行うためには、LLVMが提供するツールのmacrubycを利用します。macrubycはMacRubyをインストールするだけだと使えないので、LLVMのビルド、インストールが必要です。

LLVMはバージョンに依存するようで、僕の場合はrvmのサイトの内容を参考にして、次の手順で導入できました。

$ svn co -r 106781 https://llvm.org/svn/llvm-project/llvm/trunk llvm-trunk
$ cd llvm-trunk
$ env UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" CC=/usr/bin/gcc CXX=/usr/bin/g++ ./configure --enable-bindings=none --enable-optimized --with-llvmgccdir=/tmp
$ env UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" CC=/usr/bin/gcc CXX=/usr/bin/g++ make -j2
$ sudo env UNIVERSAL=1 UNIVERSAL_ARCH="i386 x86_64" CC=/usr/bin/gcc CXX=/usr/bin/g++ make install

makeのときに追加しているj2オプションの「2」の値はビルドを行うCPUのコア数に合わせて最適化を行ってみてください。なお、このビルドは1時間近くかかるので、時間があるときに試すのをおすすめします。

$ which macrubyc
/usr/local/bin/macrubyc

のようにエラーがなく結果が返ってくればインストール成功です。

では、早速先ほどつくったhello_world.rbをコンパイルしてみましょう。コンパイルは簡単で次のコマンドでコンパイルできます。

$ macrubyc hello_world.rb -o hello_world

これでhello_worldという名前の実行可能ファイルができるので、

$ ./hello_world

で、実行できます。無事、ウィンドウが表示されましたね!

まとめ

rvmでMacRubyは簡単に導入することができるので、Objective-Cを諦めていて人もRubyで手軽にMacアプリの作成を試すことが確認できました。 また、LLVMを導入することでネイティブアプリも作成することができるので、RubyでのMacアプリケーション開発の可能性の大きさも伺えますね!

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/227
Listed below are links to weblogs that reference
MacRubyとLLVMを導入してRubyでネイティブGUIアプリを作る from blog.katsuma.tv

Home > ruby > MacRubyとLLVMを導入してRubyでネイティブGUIアプリを作る

Search
Feeds

Return to page top