iOSでMacRubyを使う–RubyMotionとは?

2012年5月3日、RubyMotionがリリースされました。

RubyMotionは、Objective-Cに代わる最高の選択肢です。

RubyMotionはMacRubyをベースにしており、iOSでのアプリ開発をターゲットにしています。

MacRubyでは、iOSを開発する事はできませんでした。なぜなら、MacRubyはObjective-CのGarbage Collectorに依存しており、それはiOSでは用いる事ができなかったからです。

新しいランタイムは軽量で効率的でなかればなりませんでした。さらに、コードがiOS上で動くだけではなく、コンパイラーとやり取りできたり、デバッグやパッケージを作成したりするツールが必要でした。

RubyMotionがすばらしい製品であることは、誰も疑わないでしょう。しかし考えるべきなのは、「資金や時間や労力を投じてまで、Appleの言語やツールに取って変えるだけの価値があるのだろうか」ということです。

この記事では、良い点とそうではない点を、できる限りバランスよく紹介して、RubyMotionについての理解を深めてもられればと思います。


RubyMotionの長所


Rubyであるということ


Objective-Cもよい言語だと思います。日々改良されてきました。でも、それはRubyではないんです。ヘッダーが必要ですし、Xcodeの設定に縛られながらコンパイルが必要で、テストが面倒で、構文がくどいんです。それにくらべてRubyは柔軟性があり、Mixinを使ってコードを再利用できたり、簡単にクラスを再利用できたり、、。


MacRuby


RubyMotionはMacRubyをベースにしています。ですので、MacRubyに投じてきた時間やエネルギーを、RubyMotionでも生かす事ができるのです。ネイティブAPIについてのワークアラウンドを探しまわる必要もないですし、RubyオブジェクトはObjective-cオブジェクトなので、パフォーマンスも良いです。AppleがMacRubyをiOS向けに採用していないことが残念です。


REPL/インタラクティブシェル


RubyMotionは現状ではデバッガーを備えていません。しかし、Objecgtive-C開発者には使えない、REPLというシミュレーターが使えます。これはアプリケーションのデバッグを簡単に行えますし、Cocoa API を学ぶのにも良いでしょう。ビジュアルで要素をクリックでき、編集するとターミナルウィンドウの中でリアルタイムに反映されていきます。html/cssを編集するのにfirebugを初めて使った時のようなあの感動がよみがえってきます。


Xcodeに依存しない


XcodeはObjective-Cを書くためにはとてもよいのですが、よくクラッシュしますし、UIが複雑で、Objective-CとRubyが異なる要素を必要とするので、MacRubyの開発でうまく動いたためしがありません。それに、Xcodeはオープンソースではありません。完全にAppleのコントロール化にあり、サードパーティ製のAPIも使えません。


メモリー管理


ARCはObjective-Cの開発においてメモリ管理を容易にしてくれますが、RubyMotionを使えば、そもそもメモリの心配をする必要がありません。Objective-Cでは未だに自動でメモリ管理をしてくれないのですが、RubyMotionでは自動でメモリ管理をしてくれるCoreFoundationが含まれています。メモリ管理はとても明快で、たいてい素晴らしい働きをしてくれます。



RubyMotionの短所


Rubyであるということ

Rubyが完璧で、唯一の選択肢という訳ではありません。例えば、低レベルなAPIを用いる時や、C++とやり取りしなければならない時などは、とても重いということがあります。救いなのは、同じプロジェクト内で、Objective-CとRubyMotionを共存させることができるということです。他にも少々悩まされていることとしては、iOS向けにRubyのコードを書いていると、引数のタイプを強制することができないので、Clangで提供されるObjective-C向けの機能が利用できないということです。そのうち実装されることを夢見ていますが、それは別問題ですね。

Rubyを使う上で他のネガティブな要素としては、Rubyの開発者はすべての標準的なライブラリが、RubyMotionで利用できると思い込むだろうということです。RubyMotionではRubyの構文が使えるだけだということを覚えておかなければなりません。率直に言って、ほとんどの標準的なRubyのライブラリは、iOSのアプリを作る上では役に立ちません。
MacRubyでアプリを作るときでさえも、ノンブロッキングやマルチスレッドの環境向けに作られたライブラリはほとんど役に立ちません。大抵はObjective-Cのライブラリを使います。


Cocoa Touch


すでにiOSやOS Xの開発をしておられるならお分かりだと思いますが、言語の構文がハードルになるのではなくて、Cocoa APIが問題になるのです。これらのAPIはアプリとのやり取りをする上で必要になってきます。Cocoa APIは他のPythonやRubyやJavaと比べて簡単に思われがちです。確かにCocoa APIはとても一貫性があるのですが、学ぶのは容易ではありません。iOSでアプリを作るには、Rubyを知っていたとしても、やはりCocoaも学ぶ必要があります。


Xcode/IDEがない


IDEは新しいAPIを学ぶ上でとてもためになります。コードを完成させ、素早くドキュメントにアクセスでき、デバックし、インターフェースを作り、再構築する際に、Objective-CからRubyに移行した人は苦労するでしょう。もしRubyやCocoaを知らないのであれば、RubyMotionを始めるのは非常に難しいですので、まだやめた方がいいと思います。


UIの作成


もしかするとUIを作成するのが簡単になるかもしれません。DSL上でLaurentを動かせるなら、UIの作成が簡単になるので、そうできるようになる事を期待しています。しかし今はまだ、Cocoa APIの複雑さもあり、それは非常に面倒な作業でしょう。Xcodeのインタフェースビルダーやストーリーボードで、RubyMotionの開発ができるようになることを皆が望んでいます。


デバッガーがない


デバッガーがないことは、現状ではやはり問題になります。分かりやすいバグではない場合、特にそうです。


だれをターゲットにしているのか明確ではない


明確なターゲットが存在しない事を、新しい製品に対して責めても仕方ないのですが、開発者としては、「どんなときにRubyMotionを使えばいいのか、どんな弱みがあるのか」という疑問がやはり生じます。RubuMotionを使えば、素早いプロトタイプを作れるようになるのでしょうか、それとも、プロトタイプが不要になるのでしょうか。それともFlash Liteアプリケーションに取って代わるものなのでしょうか。新しいアプリを作るために時間を割くべき価値があるのでしょうか。Titaniumで作ったアプリを書き換えるべきなのでしょうか。Objective-Cの代わりにいつもRubyMotionを使うべきなのでしょうか。

まずはRubyMotionで作ったアプリがAppストアに並んで、それらを試してみるまで、様子を見たいところだと思います。


ドキュメント


すべてのiOS向けのドキュメントはObjective-Cで書かれており、Appleが提供しているAPIやサンプルコードは
すべてObjective-Cです。幸い、2つほどMacRubyの本が書かれておりますが、RubyMotionに関しては、初心者向けのドキュメントとは言えません。じきに増えてくると思うんですがね。


独占的なソリューション


RubyMotionはオープンソースではなく、Laurentという1人の男にかかっています。もし彼が辞めてしまったら、またアプリケーションをObjective-Cに書き直さなければなりません。RubyMotionを本格的な製品に使うには、リスクが伴います。

私はオープンソースが好きですが、iOSのアプリを作る上ではいつもそれが可能という訳ではありません。いまは選択肢がないのです。LaurentがRubyMotionをオープンソースで運営してもマネタイズできることを願っております。でももし一攫千金したら心が変わってしまうかもしれないですけどね。


結論


RubyMotionをとりあえず試してみる事を強くお勧めいたします。アプリを作る上で何時間も節約できる事は保証できます。モバイル開発をステップアップしたくてもリスクが気になる方は、金銭的なメリットがあることを考えると動かされるかもしれません。

RubyMotionは私の中で、Objective-Cに代わる選択肢です。しかし、まだリリースから48時間しか経っていないので、何とも言えません。言語の壁を超えられるでしょうか、そしてPython,PHP,Java,Objective-C,Javascriptの開発者を引きつけるだけのものがあるでしょうか。RubyMotionアプリの魅力はなんでしょうか。ネイティブアプリとWebアプリの競争に影響を与えるでしょうか。より大勢の人をiOSの開発に誘うものとなるでしょうか。時が経たねば分かりません。

あなたはどう思いますか?


http://merbist.com/2012/05/04/macruby-on-ios-rubymotion-review/(出典)

MacRubyでアプリを作るべき7つの理由

MacRubyは、まだバージョン1.0にもなっていませんが、それでもMacのデスクトップアプリを作るのにはMacRubyが最善の選択肢です。その理由は以下の7つです。

1.MacRubyがOS X Lionに含まれている

アップルはOS X LionのプライベートフレームワークとしてMacRubyを採用しています。まだMacRubyはパブリックフレームワークとしては採用されていませんが、それでも、MacRubyを含めたことはAppleの強い意気込みを感じる安心材料です。

2.フレームワークの埋め込み。MacRubyフレームワークを.appにバンドルして配布することがより効率的になった

我々のアプリケーションは、MacRubyのフレームワークを埋めこんでも10.9MBまで圧縮されています。以前のバージョンのMacRubyでは18MB以上になっていたことを考えると、非常に大きな進展です。

3.商用アプリケーションの配布

アプリを配布する前に、MacRubyコードをコンパイルすることができますので、ソースを公開する必要がありません。商用のアプリを開発しているなら、これは非常に重要なことでしょう。

4.Xcode4

Xcode 4でMacRubyを開発することができます。Xcode3と比較すると飛躍的に機能が向上しています。

5.コミュニティ

MacRubyを開発していると、Railsが登場した初期のころを思い起こします。皆、その生産性の高さに気付き始めています。少数ながらも情熱的な支持者がいます。そのコミュニティーには力強いエネルギーがみなぎっています。

6.タイミング

優秀なRubyプログラマーがすでに大勢いるので、間もなくMacRubyはデスクトップアプリに次々採用されていくでしょう。勢いのあるアプリ制作により、素晴らしいMacアプリが生み出されていくに違いありません。Railsのように、有益で楽しいアプリの新しい波が来るに違いありません。

7.Rubyの互換性

Rubyは驚くべき機能を持っていますが、MacRubyはそれを無料で利用できるのです。互換性はますます高まっています。NokogiriやSQLiteなどなど、すでに利用することができます。


参照:MacRuby for the Desktop: Seven Reasons

Xcode4で”Build Succeeded”と表示されるも何も起こらない場合の対処法

Xcode4を使い始めて間もない場合、サンプルなどのアプリを動かそうとしてビルドしても、何も起こらない場合があります。

“Build Succeeded”と表示されているのに何も起こらない場合は、スキーマを変更する必要があるかもしれません。

画面左上の、Deploymentから、Edit Schemeをクリックします。

Runの項目の中にExecutableという項目がありますので、そこから作成中のアプリを選択してLaunch Automaticallyにチェックを入れると、ビルド時にアプリも実行されます。