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がないとか……などと試行錯誤を続けた末、ちゃんとiPhoneでdRubyが動くようになりました。
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に貼っておきました。
まったくもって、絵に描いたような力技です。
rubycocoa4iphoneのmain.rbを上記ファイルに置き換えれば、iPhone側をdRubyサーバにして遊ぶことができます。とはいえ、Cocoaの使い方がさっぱり分からないので、iPhone側の挙動はデバッグコンソールでしか分かりません。ううむ。Cocoa勉強しないと。