43
Rubyをつかった iPhoneアプリケーション 開発 森 琢磨 Takuma Mori / @takuma104 UICoderz

RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Embed Size (px)

Citation preview

Page 1: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyをつかったiPhoneアプリケーション開発

森 琢磨Takuma Mori / @takuma104UICoderz

Page 2: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Agenda

• 自己紹介

• iPhoneアプリケーション開発とは?

• Ruby for iPhone

• RubyCocoa for iPhone

• その他のRubyをつかった開発環境

• まとめ

Page 3: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

自己紹介

Page 4: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

自己紹介

• 森 琢磨 (もりたくま) a.k.a. takuma104

Page 5: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

自己紹介

• 森 琢磨 (もりたくま) a.k.a. takuma104

• 仕事では映像関連システムの受託開発を行ってきました。モバイル関連開発も。

• 最近フリーランスのプログラマになりました

• iPhoneアプリ開発関連を中心に行っています。開発だけでなく、コンサルティングとかもやってます。

Page 6: RubyKaigi2009 - Rubyをつかった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で書いたのも特徴

Page 7: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

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

Page 8: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhone アプリ開発

ここでiPhoneSDKの開発者を聞く・すでに開発してる人・アプリをAppStoreで出してる人

Page 9: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhone?

• いわゆる組み込み系 (デスクトップではない的な意味で)

• OS/Frameworkはモダン (BSDをベースとしたOSXをベースとした iPhone OS)

• ハードウエア的には、10年ぐらい前のPCレベルになってきている (ARM11 400MHz程度)

• →じゃあ16歳のRubyは動くよね

Page 10: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhoneアプリ?

• iPhone / iPod touch用のiPhone OS上のネイティブアプリケーション

• 配布環境が特徴的で、Appleが公式に用意するAppStoreというのがある。開発用であればAppStore通さないでももちろんOK(ただしbinary配布が難しい)。

• AppStoreでは、無料でも配布できるし、有料でも販売できる (¥115-¥115,000)

• SDKがあって(Macで)簡単に開発を始められる

Page 11: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

SDK(Xcode)による普通の開発

• ObjectiveCでコードを書く ← Rubyのがいい!

• シミュレーターである程度動作させる

• パフォーマンスの確認とか一部のハードウエアの確認とかはできない

• ある程度動いたら実機で動作確認

• 転送&アプリ起動に10秒程度かかる ← これが遅いのでなんとかしたい!

Page 12: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Ruby for iPhone

Page 13: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhone OS で Ruby を動かす

• RubyをiPhone実機で動かす歴史がすでに

• 検索すると、 初代iPhoneのころ (iPhone OS1.xの時代)に、Jailbreak環境にて動作させるのを試みた人がけっこう居た形跡がある

• が irb が動かないでクラッシュする → 捨ての方向 → もったいない!

Page 14: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhone OS で Ruby を動かす (cont.)

• パッチを書いたらすんなりSDKでBuildが通る

• テスト(samples/test.rb)も8割方通過

• なんか動いたっぽい

Page 15: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

iPhone OS で Ruby を動かす (cont.)

• ところが irb がやっぱり実機で動かない

• どうやらsignalを内部で使用している部分 (sigsetmask(3)など) でそのまま落ちることが判明 (iPhone OSではSignalが一切使用不可)。

• signalを使わないようにしてbuild (パッチ当ても含めて)、irb (正確には IRBモジュール) も動作させることができた

Page 16: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

irb for iPhone

http://github.com/takuma104/iphone-irb/tree/master

Page 17: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

AppStoreで 審査通らず

orz

Page 18: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

重要なAppStoreの話

Page 19: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

AppStore審査

• AppStoreでアプリを配布(販売)するには、AppStoreでの審査を通過する必要がある

• 規約があり、その規約に従ってないものについてはRejectされる。(理由についての詳細は教えてもらえないことも多い)

• この規約の中には、スクリプト言語についても言及されている箇所がある。それは…

Page 20: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

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).

Page 21: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

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/

Page 22: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

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/

Page 23: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

まとめると

• インタプリタ自体が禁止されている訳ではないはず。

• 申請時にすべてのスクリプトをアプリ内に内蔵し、スクリプトコードをダウンロードして解釈するような形にしなければOKなはず。

Page 24: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

まとめると

• インタプリタ自体が禁止されている訳ではないはず。

• 申請時にすべてのスクリプトをアプリ内に内蔵し、スクリプトコードをダウンロードして解釈するような形にしなければOKなはず。

• ……あれ??

Page 25: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone

Page 26: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone

• Rubyがどうやら動いたので、普通のiPhoneアプリをRubyCocoaで書けないか?

• libffiが使われてない最も新しいversionである0.4.2 (5年ぐらい前のもの)をベースに移植作業を行った

• 移植作業:ObjC RuntimeまわりのAPIが変更になっているための対応を行うなど

• → UIKitを含むObjCのクラスをRubyから使用可能に

Page 27: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone Demo

• HelloWorld

• RemoteIRB その1

• 上記のHelloWorldについて、動作中のアプリに、telnet接続し、挙動を動的に変更する

• RemoteIRB その2

• ObjCで書かれたアプリにRubyCocoa for iPhoneを組込み、挙動を動的に変更する

Page 28: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Demo

Page 29: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone 問題点

• ObjCに比べてどうしても(構造上)遅い

• メモリ消費も実機環境 (~20MB) を考えると、けっこうきつい

• Rubyとは言ってもObjC用のCocoaFrameworkと似た記述になるので、記述がどうしてもRuby的にならない面がある

• AppStore審査通るかどうかは、 運次第?

Page 30: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone の使い所

• Rubyのみでアプリを書く

• AppStore用アプリとしては、現時点ではいろんな意味で若干チャレンジングかもしれない

• ObjC + Ruby で書く

• パフォーマンスを重視する部分はObjCなど

• ObjCで書いて、デバック時だけ組み込んで使う

• これがもっとも現実的な使い所?

Page 31: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

RubyCocoa for iPhone の今後?

• 想定使用ターゲットをデバック専用環境としてメンテ

• Rubyでのアプリ作成については、そもそも RubyCocoa for iPhone ではなく、MacRuby 0.5 (ARMバイトコードが吐ける予定) を移植したい

• → これなら文句無くAppStore審査も通るはず

Page 32: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

そのほかのRubyをつかった開発環境

Page 33: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Rhomobile Rhodes

Page 34: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

What’s Rhodes?

• Rhomobile社製

• ローカルで動くRoR(相当) for iPhone

• Rubyコードで開発する

• WebViewを用いて表示を行っている。Webアプリとネイティブアプリのハイブリッド

• iPhone以外でもWindowsMobile, Androidなどでも開発したコードをそのまま使える

• ライセンスは、LGPLv3 + 商用ライセンス

Page 35: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

What’s Rhodes? (cont.)

• Ruby1.9.1ベースで、RubyVMをアプリ本体に内蔵し、あらかじめコンパイルしておいたInstructionを、実行時にRubyVMで解釈することで、動作させている。

• 実際にAppStoreアプリとしても審査を通過している

• 例) Issues To Go : lighthouseapp の Issue Tracker

Page 36: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Issues To Go

http://www.issuestogo.com/

Page 37: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Shinycocos

Page 38: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

What’s Shinycocos?

• 作者は、 funkaster さん (http://rolando.cl/)

• Cocos2d ライブラリの Ruby binding

• Cocos2dは、iPhone用2DグラフィックライブラリとしてGameアプリなどで多用されている

• まずはプロトタイプ用と謳われているが、Rhodesと同じ手法でAppStore対応も計画中のようである

• ライセンスはLGPL

Page 39: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

Rhodes, Shinycocos

• Rhodes

• Rhomobile社製

• ローカルで動くRoR(相当) for iPhone

• Shinycocos

• funkaster さん作 (http://rolando.cl/)

• Cocos2d ライブラリの Ruby binding

IssuesToGo

Page 40: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

まとめ

Page 41: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

まとめ

• RubyCocoa for iPhoneは、いまのところ、Rubyでのアプリ作成よりは、既存ObjCプロジェクトのデバックに向いている

• RhodesやShinycocosなどを含め、少しづつRubyでもiPhoneアプリ作成を作成できる環境が整いつつある

• Rubyでのアプリ作成は、次世代 MacRuby の移植版が本命と思われる。HotCocoa for iPhoneとかも作ると面白そう。

Page 42: RubyKaigi2009 - Rubyをつかった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

Page 43: RubyKaigi2009 - RubyをつかったiPhoneアプリケーション開発

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/