Upload
takuma-mori
View
2.397
Download
4
Embed Size (px)
Citation preview
RubyをつかったiPhoneアプリケーション開発
森 琢磨Takuma Mori / @takuma104UICoderz
Agenda
• 自己紹介
• iPhoneアプリケーション開発とは?
• Ruby for iPhone
• RubyCocoa for iPhone
• その他のRubyをつかった開発環境
• まとめ
自己紹介
自己紹介
• 森 琢磨 (もりたくま) a.k.a. takuma104
自己紹介
• 森 琢磨 (もりたくま) a.k.a. takuma104
• 仕事では映像関連システムの受託開発を行ってきました。モバイル関連開発も。
• 最近フリーランスのプログラマになりました
• iPhoneアプリ開発関連を中心に行っています。開発だけでなく、コンサルティングとかもやってます。
My OSS Projects
• flv2mpeg4 (2006)
• http://sourceforge.net/projects/vixynet/
• FLVからMPEG4への無劣化Codec変換
• RubyIzumi (2007)
• http://code.google.com/p/rubyizumi/
• Adobe Flash用映像ストリーミングサーバ。 Pure Rubyで書いたのも特徴
My OSS Projects (cont.)
• NatsuLion for iPhone (2008-)
• http://github.com/takuma104/ntlniph/tree/master
• iPhone用Twitter Clientアプリ。iPhone用 Twitter Client としては、おそらく現在唯一の Open Source アプリ(New BSD License)。
• 日本では現在2位*の使用率
• * http://ipodtouchlab.com/2009/05/twitter-client-iphone-ipod-touch.html
iPhone アプリ開発
ここでiPhoneSDKの開発者を聞く・すでに開発してる人・アプリをAppStoreで出してる人
iPhone?
• いわゆる組み込み系 (デスクトップではない的な意味で)
• OS/Frameworkはモダン (BSDをベースとしたOSXをベースとした iPhone OS)
• ハードウエア的には、10年ぐらい前のPCレベルになってきている (ARM11 400MHz程度)
• →じゃあ16歳のRubyは動くよね
iPhoneアプリ?
• iPhone / iPod touch用のiPhone OS上のネイティブアプリケーション
• 配布環境が特徴的で、Appleが公式に用意するAppStoreというのがある。開発用であればAppStore通さないでももちろんOK(ただしbinary配布が難しい)。
• AppStoreでは、無料でも配布できるし、有料でも販売できる (¥115-¥115,000)
• SDKがあって(Macで)簡単に開発を始められる
SDK(Xcode)による普通の開発
• ObjectiveCでコードを書く ← Rubyのがいい!
• シミュレーターである程度動作させる
• パフォーマンスの確認とか一部のハードウエアの確認とかはできない
• ある程度動いたら実機で動作確認
• 転送&アプリ起動に10秒程度かかる ← これが遅いのでなんとかしたい!
Ruby for iPhone
iPhone OS で Ruby を動かす
• RubyをiPhone実機で動かす歴史がすでに
• 検索すると、 初代iPhoneのころ (iPhone OS1.xの時代)に、Jailbreak環境にて動作させるのを試みた人がけっこう居た形跡がある
• が irb が動かないでクラッシュする → 捨ての方向 → もったいない!
iPhone OS で Ruby を動かす (cont.)
• パッチを書いたらすんなりSDKでBuildが通る
• テスト(samples/test.rb)も8割方通過
• なんか動いたっぽい
iPhone OS で Ruby を動かす (cont.)
• ところが irb がやっぱり実機で動かない
• どうやらsignalを内部で使用している部分 (sigsetmask(3)など) でそのまま落ちることが判明 (iPhone OSではSignalが一切使用不可)。
• signalを使わないようにしてbuild (パッチ当ても含めて)、irb (正確には IRBモジュール) も動作させることができた
irb for iPhone
http://github.com/takuma104/iphone-irb/tree/master
AppStoreで 審査通らず
orz
重要なAppStoreの話
AppStore審査
• AppStoreでアプリを配布(販売)するには、AppStoreでの審査を通過する必要がある
• 規約があり、その規約に従ってないものについてはRejectされる。(理由についての詳細は教えてもらえないことも多い)
• この規約の中には、スクリプト言語についても言及されている箇所がある。それは…
iPhone SDK Agreement 3.3.2章
An Application may not itself install or launch other executable code by any means, including without limitation through the use of a plug-in architecture, calling other frameworks, other APIs or otherwise. No interpreted code may be downloaded and used in an Application except for code that is interpreted and run by Apple’s Published APIs and built-in interpreter(s).
Rhomobile社のblogより
The most often-referenced issue is “no interpreted code may be downloaded“. Note the emphasis on “may be downloaded”. Sometimes this is misinterpreted as “no interpretors”. No.
http://www.rhomobile.com/blog/2009/05/29/iphone-app-store-rules-and-guidelines-on-use-of-frameworks/
Rhomobile社のblogより (cont.)
The issue is that if you download code to an interpretor then there is no way to know just what an application really does since it could change daily. Clearly there are many apps that are based on some form of interpretor. The important thing is to not download code to those interpretors, because this invalidates any attempt to test what the application does.http://www.rhomobile.com/blog/2009/05/29/iphone-app-
store-rules-and-guidelines-on-use-of-frameworks/
まとめると
• インタプリタ自体が禁止されている訳ではないはず。
• 申請時にすべてのスクリプトをアプリ内に内蔵し、スクリプトコードをダウンロードして解釈するような形にしなければOKなはず。
まとめると
• インタプリタ自体が禁止されている訳ではないはず。
• 申請時にすべてのスクリプトをアプリ内に内蔵し、スクリプトコードをダウンロードして解釈するような形にしなければOKなはず。
• ……あれ??
RubyCocoa for iPhone
RubyCocoa for iPhone
• Rubyがどうやら動いたので、普通のiPhoneアプリをRubyCocoaで書けないか?
• libffiが使われてない最も新しいversionである0.4.2 (5年ぐらい前のもの)をベースに移植作業を行った
• 移植作業:ObjC RuntimeまわりのAPIが変更になっているための対応を行うなど
• → UIKitを含むObjCのクラスをRubyから使用可能に
RubyCocoa for iPhone Demo
• HelloWorld
• RemoteIRB その1
• 上記のHelloWorldについて、動作中のアプリに、telnet接続し、挙動を動的に変更する
• RemoteIRB その2
• ObjCで書かれたアプリにRubyCocoa for iPhoneを組込み、挙動を動的に変更する
Demo
RubyCocoa for iPhone 問題点
• ObjCに比べてどうしても(構造上)遅い
• メモリ消費も実機環境 (~20MB) を考えると、けっこうきつい
• Rubyとは言ってもObjC用のCocoaFrameworkと似た記述になるので、記述がどうしてもRuby的にならない面がある
• AppStore審査通るかどうかは、 運次第?
RubyCocoa for iPhone の使い所
• Rubyのみでアプリを書く
• AppStore用アプリとしては、現時点ではいろんな意味で若干チャレンジングかもしれない
• ObjC + Ruby で書く
• パフォーマンスを重視する部分はObjCなど
• ObjCで書いて、デバック時だけ組み込んで使う
• これがもっとも現実的な使い所?
RubyCocoa for iPhone の今後?
• 想定使用ターゲットをデバック専用環境としてメンテ
• Rubyでのアプリ作成については、そもそも RubyCocoa for iPhone ではなく、MacRuby 0.5 (ARMバイトコードが吐ける予定) を移植したい
• → これなら文句無くAppStore審査も通るはず
そのほかのRubyをつかった開発環境
Rhomobile Rhodes
What’s Rhodes?
• Rhomobile社製
• ローカルで動くRoR(相当) for iPhone
• Rubyコードで開発する
• WebViewを用いて表示を行っている。Webアプリとネイティブアプリのハイブリッド
• iPhone以外でもWindowsMobile, Androidなどでも開発したコードをそのまま使える
• ライセンスは、LGPLv3 + 商用ライセンス
What’s Rhodes? (cont.)
• Ruby1.9.1ベースで、RubyVMをアプリ本体に内蔵し、あらかじめコンパイルしておいたInstructionを、実行時にRubyVMで解釈することで、動作させている。
• 実際にAppStoreアプリとしても審査を通過している
• 例) Issues To Go : lighthouseapp の Issue Tracker
Shinycocos
What’s Shinycocos?
• 作者は、 funkaster さん (http://rolando.cl/)
• Cocos2d ライブラリの Ruby binding
• Cocos2dは、iPhone用2DグラフィックライブラリとしてGameアプリなどで多用されている
• まずはプロトタイプ用と謳われているが、Rhodesと同じ手法でAppStore対応も計画中のようである
• ライセンスはLGPL
Rhodes, Shinycocos
• Rhodes
• Rhomobile社製
• ローカルで動くRoR(相当) for iPhone
• Shinycocos
• funkaster さん作 (http://rolando.cl/)
• Cocos2d ライブラリの Ruby binding
IssuesToGo
まとめ
まとめ
• RubyCocoa for iPhoneは、いまのところ、Rubyでのアプリ作成よりは、既存ObjCプロジェクトのデバックに向いている
• RhodesやShinycocosなどを含め、少しづつRubyでもiPhoneアプリ作成を作成できる環境が整いつつある
• Rubyでのアプリ作成は、次世代 MacRuby の移植版が本命と思われる。HotCocoa for iPhoneとかも作ると面白そう。
ありがとうございました
• Q&A
• Resources:
• My Blog: http://d.hatena.ne.jp/takuma104/
• RubyCocoa for iPhone: http://github.com/takuma104/iphone-rubycocoa
• Rhodes: http://github.com/rhomobile/rhodes
• Shinycocos: http://github.com/funkaster/shinycocos
CC Photos
• By shapeshift: http://www.flickr.com/photos/shapeshift/2384168299/
• By elliottcable: http://www.flickr.com/photos/elliottcable/2601558475/
• By eole: http://www.flickr.com/photos/eole/380316678/
• By ogcodes: http://www.flickr.com/photos/ogcodes/2095054686/
• By johanl http://www.flickr.com/photos/johanl/2968794599/
• By rubyran2626 http://www.flickr.com/photos/rubyran2626/2193374690/
• By sometoast http://www.flickr.com/photos/sometoast/1405380577/
• By cjscott69 http://www.flickr.com/photos/cjscott69/664149067/
• By cayusa http://www.flickr.com/photos/cayusa/2602616491/