@IT編集部の西村賢がRuby/Rails関連を中心に書いています。

MacRubyがiOSに来た!RubyでiOSのネイティブアプリ開発ができる「RubyMotion」登場

»

 Rubyを使ってiOS向けアプリが開発できる開発環境「RubyMotion」が登場しました。MacRubyプロジェクトの生みの親であるLaurent Sansonetti氏は7年間勤めたアップルを2011年暮れに退社して、新たにHipByteというスタートアップを立ち上げていたようです。

Rubymotion

Cli

Codesample

Fig01

 FAQや動画ビデオを見て分かったRubyMotionの特徴を列挙します。

  • Rubyを使ったiOSアプリの開発が可能
  • ツールは有償で199ドル(現在キャンペーンで149.99ドル)
  • 無償版やオープンソース版はない
  • 作成したアプリはAppStoreでの流通が可能
  • iOSのAPIの全てにアクセス可能
  • C/C++/Objective-Cで書かれたRuby処理系のMacRubyベースで1.9対応
  • Rubyコードをネイティブコードにコンパイル。AOTなどの最適化も
  • 標準的なアプリなら1MB程度のサイズになり、元のRubyコードはアプリ本体に残らない
  • リファレンスカウントによるGCを実装。メモリ管理が不要
  • iOSのスレッドは「バーチャルマシンオブジェクト」と呼ぶものでラップされていて、並列実行も可能
  • Grand Central Dispatchも利用可能
  • サードパーティ製のObjective-CライブラリもCocoaPodsを使って利用可能
  • ターミナルベースで開発。好きなテキストエディタが使える
  • 「motion create Timer」などとすることでアプリのひな形が作れるのはRailsっぽい
  • iOS向けに拡張されたRSpecによる単体テスト、統合テストが可能
  • Rakeコマンドでアプリをビルドしたり、デバイスに転送したり、TestFlight(ベータユーザー向け配布プラットフォーム)での配布が可能
  • REPL環境で動的にアプリに入っていってデバッグできる。例えば画面上のテキストラベルというオブジェクトがselfになる

 iPhoneシミュレータを立ちあげて、そこで実行しているアプリに「入っていって」、インタラクティブに環境とやり取りできるあたりが動的言語っぽくてステキです。

Debug

 もう1つ、Rubyっぽいところとしては、gemベースで機能を追加・拡張している点です。CoreData向けのDSLや、Objective-Cライブラリの依存管理ツールであるCocoaPodsをRubyMotionから利用するライブラリなどもgemとして提供しています。この辺、うまくRubyコミュニティを巻き込めれば、gemのエコシステムが出てきそうです。逆にCRubyを想定して作られているRubyのgemは動かないそうです。Pure Rubyのシンプルなものは動きそうなものですけど、どうでしょうね。

 エコシステムといえば、すでにCoCoaTouchのAPIをラップして、Ruby風のAPIにする「BubbleWrap」というようなライブラリもあるようです。使いやすいシンプルなAPIやDSLがどんどん進化してくるのがRuby文化だとすれば、こういう動きは期待できるのではないでしょうか。ArsTechnicaのインタビューでSansonetti氏も、画面設計を行うUIkitに対してDSLを使ったレイアウトシステムを薄いレイヤとして実装したと言いますが、こうした抽象化による開発生産性の向上こそRubyの真骨頂です。

 RubyMotionは、Rubyといわず、最近の軽量言語系のWeb開発者文化をiOSに持ち込んでいるように見えます。使い慣れたツールチェインが使えるというときに、テキストエディタとしてviを例に出していたりするわけですが、RubyMotionはXcodeに対してもちょっと否定的です。FAQには、アップル標準の開発環境「Xcode」は利用可能であるものの非サポートだとあります。それどころか、XcodeはRubyによる開発だけでなく、開発一般に適さないと考えているとまで書いています。

Rake

 すでに解説記事、動画、コードサンプルが大量にあって、とてもチェックしきれません。具体的な詳細は、以下が参考になりそうです。

  • RubyMotionのオブジェクトモデルやObjective-Cのインターフェースなどを解説したドキュメント「RubyMotion Runtime Guide
  • RubyMotionで書かれたアプリのサンプルコード集のGitHubのレポジトリ
Comment(0)

コメント

コメントを投稿する