iPhoneでdRubyが動きました

今週ようやくiPhone Developer Program の認証手続きが完了し、iPhoneシミュレータアプリ開発者からiPhoneアプリ開発者になりました。

まずはhello world的なサンプルアプリが実機で動いたのを確認し、さて次は実機で何を動かそうかと思っていたら、ちょうど id:takuma104 さんがrubycocoa4iPhoneを公開されていたのでした。

http://d.hatena.ne.jp/takuma104/20090225/1235584788

これはもう動かしてみるしか、というので試したところ、無事に動くではないですか。すごい。って、先日のデブサミ2009でもirb版を見せていただいてはいたんですが。

で、こうなったらさらにいろいろ動かしてみたくなります。そこで思いついたのがdRuby。さっそく試してみたところ……動かない。

まず、require 'drb/drb' ができません。これって要するに、このままではmain.rbだけがRubyのコードとして許される、ということなんでしょうか? ううむ、じゃあmain.rbにdrb/drb.rbのコードを全部貼付ければいいのか。と思いきや、今度はdrb/eq.rbがないとか……などと試行錯誤を続けた末、ちゃんとiPhonedRubyが動くようになりました。

class DrbSample
  def time
    Time.now
  end
  def version
    "ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
  end
end
###(略)
  serv = DRb.start_service('druby://0.0.0.0:23456', DrbSample.new)

こんなコードをiPhone側で実行し、クライアント(普通のPC)側で以下のようにdRubyの呼び出しを実行すると、

>> drb = DRbObject.new_with_uri('druby://192.168.1.26:23456')
=> #<DRb::DRbObject:0x5ca530 @ref=nil, @uri="druby://192.168.1.26:23456">
>> drb.version
=> "ruby 1.8.7p72 (2008-08-11) [arm-darwin9]"
>> 

こんな風になるのです。すばらしい。「[arm-darwin9]」ってのがすごいです。

コードはgistに貼っておきました。

http://gist.github.com/72067

まったくもって、絵に描いたような力技です。
rubycocoa4iphoneのmain.rbを上記ファイルに置き換えれば、iPhone側をdRubyサーバにして遊ぶことができます。とはいえ、Cocoaの使い方がさっぱり分からないので、iPhone側の挙動はデバッグコンソールでしか分かりません。ううむ。Cocoa勉強しないと。