書いた人 : 海老沢 聡 (@satococoa)
この記事は RubyKaigi 2013 前日の 5/29(水) に開催された RubyMotion Kaigi 2013 のレポート記事です。
RubyMotion Kaigi 2013 は日本では初めて開催された RubyMotion のカンファレンスです。
Usteam 上で 動画 が公開されています。そちらも合わせてご覧頂けると幸いです。
日本の RubyMotion ユーザのコミュニティである RubyMotion JP では月に 1 回 “RubyMotion もくもく会” と称し、RubyMotion に関することを自由に実践する勉強会を開催しています。
そのもくもく会の最中に、「もし (RubyMotion 開発者の) Laurent さんが RubyKaigi で日本にいらっしゃるのなら、それに合わせて日本でもカンファレンスをやってみたらどうか?」という案が挙がりました。
2013 年 3 月にベルギーで世界規模のカンファレンスである #inspect 2013 - RubyMotion Conference が開催された直後であるため、日本における RubyMotion の現状や Objective-C 経験者に RubyMotion の印象を話してもらうなどの独自コンテンツがある方が楽しいのではないかなどと議論し、今回のような形での開催となりました。
企画・準備・当日の運営までもくもく会の常連メンバーが中心となって進めてゆきました。
また、以前から RubyMotion に関するイベントを開催されている福岡のコミュニティとも協力したいと思い Ruby Business Commons 最首さんにも声をかけさせていただき、とても快くご協力いただきました。
平日の夕方 18:30 という比較的早い時間からの開催ではありましたが、多くの方に集まっていただき RubyMotion への関心の高さが感じられました。
なんと、冒頭は日本語で自己紹介をしてくれました。その様子はぜひ USTREAM で公開されている録画をご覧頂ければ幸いです。
自己紹介の後は RubyMotion を支える HipByte 社のチームの紹介があり、それに続いて 2013 年 5 月にリリースされた RubyMotion 2.0 の新機能や今後のロードマップについての説明をしていただきました。
実際に RubyMotion を用いて開発をしている人にとっては紹介されたそのどの機能も魅力的でありみなさんとても真剣に聴き入っていました。
ロードマップによると今後 RubyMotion では iOS、OS X に加えてもう一つのプラットフォームのサポートを予定しているそうです。どのプラットフォームになるのかは現時点では明らかにされていませんので、続報を待ちたいと思います。
質疑応答では以下の 2 つが出ました。
RubyMotion のみに関わらず、mruby, mobiruby, Unity など、組み込みやスマートフォンという大きな括りで昨今 Ruby が注目を浴びているというお話をしていただきました。
やはり東京と比較しても福岡では特に組み込みの盛り上がりが大きいらしいという印象を持ちました。
最首さんご自身でも RubyMotion を使って iOS アプリケーションを開発してみたそうで、その生産性に好印象を持ったそうです。
@watson1978 さんは MacRuby の主要なコミッターであり、かつ HipByte 社のメンバーとして日本からリモートで RubyMotion の開発に携わっていらっしゃいます。
まずは MacRuby との出会いやそのコミッターになる 契約 を交わしたエピソードが公開されました。
その後は RubyMotion の仕組みや特徴についてのお話、RubyMotion 2.0 で搭載された以下の新機能の詳しい紹介をしていただきました。
OS X Support
OS X 用のアプリケーションが作れるようになりました。以下の点で MacRuby と比べて以下のような特徴があります。
Project Template
ユーザーが独自のテンプレートを作れる機能です。よく使う gem をあらかじめ Gemfile に書いておいたり、app_delegate.rb で @window
をインスタンス化するようなお決まりのコードをテンプレート化しておけます。
Command-Line Plugin
ユーザー独自のサブコマンドを motion
コマンドに追加できる機能です。@watson1978 さんがサンプルで作った motion-doc コマンドの紹介がありました。
Common Build Directory
一度コンパイルした gem を他のアプリでも使い回せるようにし、ビルド時間を短縮する機能です。特に BubbleWrap や sugarcube のような大きなライブラリを使うときに大きな効果が期待できそうです。
Weak Reference
弱参照をサポートする機能です。RubyMotion には ARC 同様のリファレンスカウンタによる GC が実装されています。オブジェクトを代入する際には自動的にリファレンスカウンタが上がるようになっているのですが、この WeakRef
を使用することで、リファレンスカウンタを上げずにオブジェクトを参照することが出来ます。
アプリケーション実装者の視点から見た RubyMotion について発表していただきました。
まずは RubyMotion の特徴と簡単なコード例を示し、Objective-C の知識が無くても RubyMotion でアプリケーションを開発することは可能だが iOS の知識は必要である、という点について説明をしていただきました。
つまり Objective-C の代わりに言語を Ruby を使用しているだけであって、フレームワークは Cocoa Touch を使用しているのでフレームワークについての知識は必要になる (学ぶ必要がある) とのことです。
続いて、RubyMotion における Object
クラスは NSObject
クラスを継承している作りとなっているため、Cocoa (Touch) の API がそのまま呼べることについての説明がありました。
次に並列処理についてですが、GCD を使うことによって以下のコード例のように Ruby らしく書くことが出来ます。
RubyMotion のメモリ管理についての説明もありました。
RubyMotion についての説明はここまでで、あとは実際に RubyMotion で開発する上での Tips や、定番のライブラリの紹介等がありました。
That Objective-C guy think about RubyMotion
@mfks17 さんには「Objective-C 経験者から見た RubyMotion」という観点からお話ししていただきました。
RubyMotion でアプリケーションの開発を行うことの利点の一つとして「Xcode を使わずに済む」という点を挙げられていました。 特にビルドの設定に関してはわかりにくい GUI での操作ではなく、Rakefile にコードを書くというテキストベースの方法で完結できるのが良いとのことでした。
デバッグに関しては gdb を使ってコマンドラインでのデバッグも可能ですが、RubyMotion にも対応した IDE の RubyMine を利用することにより、GUI でもデバッグ可能だそうです。
他にも RubyMotion での開発を助ける以下のツールの紹介もありました。
最後にテストツールやフレームワークについての紹介していただきました。 Objective-C で開発する際は OCUnit(SenTestingKit)、Kiwi、GHUnit などが広く使われているそうですが、RubyMotion では MacBacon、motion-calabash などが使えるとのことです。 そしてテストを日々のワークフローの中に組み込んで習慣化することが大切であるという心がけのお話もありました。
@mfks17 さんは今後 iOS のアプリケーション開発に関する勉強会の立ち上げを考えているとのことです。
#inspect 2013 - RubyMotion Conrefence に参加した日本人全 4 名のうちの一人、井上さんによる発表でした。カンファレンスに参加した経緯やカンファレンスでの印象に残った発表などについてお話しいただきました。
RubyMotion でゲーム開発をするというテーマで発表していただきました。
Joybox という Cocos2D と Box2D のラッパーの紹介と、それを使って作った実際に動作するデモがありました。
Joybox は #inspect 2013 - RubyMotion Conrefence で発表されたライブラリで、@yonekawa さんは Joybox の最初のコントリビュータとして精力的に開発に関わっていらっしゃいます。
まだまだ仕事で使用するには機能が不足しているとのことですが、今後の開発に期待したいところです。
Emacs 用の RubyMotion の拡張である motion-mode.el を開発された「神」こと @ainame さんの発表です。
本気で業務で RubyMotion を使うためにはどうしたらいいのか考えてみたというテーマでした。
まず最初に業務で RubyMotion を使おうとした際のハードルとして、以下の 3 点が挙げられていました。
しかし、以下の観点から考えると、Web アプリケーションの経験がある人にとっては、新規に Objective-C で iOS の開発を覚えるよりはむしろ RubyMotion の方が始めやすいのではというお話でした。
@ainame さんは最近 RubyMotionTokyo というコミュニティを立ち上げられました。都内で隔週で meetup を開催されているので RubyMotion に関心のある方はぜひ参加されてはいかがでしょうか。
@ninjinkun さんは最近 NJKWebViewProgress というライブラリを作られて、世界でも注目されている開発者の一人です。
今回は RubyMotion で IRC クライアントアプリをつくってみたというお話ですが、RubyMotion では Ruby の文法でメタプログラミングができ、正規表現が使えるという特徴からテキストベースのプロトコルを扱うのに向いているのではないかということがモチベーションになっているそうです。
プロトコルパーサを実装する際には node.js で書かれたコードを Ruby のコードに翻訳したらそのまま動作したり、CRuby で実装されたコードをコピー & ペーストしたらそのまま動いたといった経験をお話ししてくださいました。
ソケットの実装には motion-cocoapods 経由で GCDAsyncSocket を使うことで比較的容易に実装できたそうです。
View は小さな HTML テンプレートエンジンを実装し、UIWebView 上にクライアントサイドの HTML テンプレートを描画することで実装しているそうで、これも実際に動作しているところをデモしていただきました。
最後に 20 分ほど Laurent さんへの質問を受け付けるコーナーを設けました。
[RubyMotion KaigiでLTしてすべりました #rubymotionjp | ましましブログ](http://blog.ainam.me/2013/05/30/rubymotion-kaigi-misawa-suberu/) |
継続的に開催されている RubyMotion 関連のコミュニティ / 勉強会は従来は RubyMotion もくもく会 しかありませんでしたが、この RubyMotion Kaigi 2013 の後に 2 つのコミュニティが立ち上がりました。
また、業務で RubyMotion を使っている人も徐々に増えて来ているらしく、会場の参加者のみなさんに「RubyMotion で仕事をしている人はいますか?」と問いかけたところ、5〜6 人の方が手を挙げていらっしゃいました。
コミュニティの盛り上がりと共に開発環境やライブラリが充実し、RubyMotion を使ってたくさんの素晴らしいアプリケーションが開発されることを望みます。
最後に、発表や当日スタッフをしていただいた皆様をはじめ RubyMotion Kaigi 2013 にご協力いただいた全ての皆様、そして参加者の皆様に感謝の言葉を述べることで本レポートのまとめとしたいと思います。
ありがとうございました。
海老沢 聡 (@satococoa)
株式会社イグニス 所属。
P4D デザイナー向けプログラム部 や RubyMotion JP をやっています。