読者です 読者をやめる 読者になる 読者になる

TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

Titanium Mobile開発やってる人にRubyMotionをオススメする理由

この記事は RubyMotion Advent Calendar 2012 向けに書いた14日目の記事です。

「Titaniumと比較したネタで何か書きます!Titanium の方でもおそらく何か書くので、おそらく12月半ばを目処にエントリ書く予定です」と宣言していたので書くことにしました

TIPS的なものを書けるほどのレベルではないので、その辺りは他の方にお任せしようかと思います

自己紹介を簡単に

2年ほど前からTitanium Mobileでのスマフォアプリ開発を趣味でやってます。最近はプログラマの技術情報共有サービス のQiita[キータ] の非公式なiPhoneアプリをTitanium Mobileで開発してます。※ソースはGitHubにあります

Titanium Mobileメインですが、元々Ruby+Sinataraの勉強してたりして、Rubyが好きなこともあって、RubyMotionにも手を出してます

Titanium Mobile開発やってる人にRubyMotionをオススメする理由

Titanium Mobile開発やってる人の中で、簡単なもの、それこそ、Titaniumの緑本(注1)、黒本(注2)等の書籍に出てるサンプルアプリをベースに、自分なりのアレンジをした程度でもいいので、1つでもアプリを作ったことがある人にこそぜひオススメかなと思ってます。

1つでも何か作った経験を通じて、iOS向けアプリ開発で知っておかないといけない事についてそれなりに理解が進んでると思うので、そこで得たノウハウが多少なりとも活きるかと思ってます。

JavaScriptの配列/ハッシュの扱いをRubyっぽく書けるようにしてくれるライブラリ(注3)が好きというのもあるかもしれませんが、TitaniumとRubyMotionとそれぞれで得られるノウハウが相互に活用出来るからというのがオススメの理由かなと。

相互に活用出来そうな知識としてどんなことがありそうか

個人的な体験談でしかないですが、思いついたことをいくつかピックアップしておきます

UI生成に関する部分をCSS的アプローチで解決

Titanium Mobileだと

timeLabel = Ti.UI.createLabel({
  font: {
    fontSize: 14
  },
  top: 5,
  left: 40,
  width: 200,
  height: 30,
  text: user.profile_image_url
});

RubyMotionだと

label = UILabel.alloc.init
label.frame = CGRectMake(5, 40, 200, 30)
label.font = UIFont.fontWithName("AppleGothic",size:14)
label.text = @feed[indexPath.row]["user"]["profile_image_url"]

みたいな感じのコードがどうしても増えるかと思います。

TitaniumだとJSS(JavaScript Style Sheets)を使い、RubyMotionだとTeacupがあるのを見てると、UI生成の実装についてもっとスマートなやり方が無いか色々考える人が多く、その手段としてCSS的なアプローチでの解決を試みるのがまずは王道なんでしょうかね。

紹介しといて何ですが、自分は両方とも使ったことない(苦笑) 

スマフォアプリ開発の実装で汎用的な機能がどんなものか

最近のWebAPIへのアクセスはOAuth使うケースがほとんどだと思うし、実際各言語向けに便利なライブラリがいくつかあると思います。

また、SNS系アプリのタイムラインにある「xx時間前に投稿」を手軽に実現するには?というエントリを少し前に書いたのですが、iPhoneアプリを作るうえで、こういう感じ汎用的に使えそうな機能は色々あるのかなと思います。

気になって、上記エントリで取り上げたMoment.jsのRuby版らしきものがあるのか適当にググったら、Rails, Moment.js And Time Zonesというのを見つけたので、こういうのを参考にすれば、もしかしたらRubyMotionでも手軽に使えるかもしれませんね。

こんな感じで、Titanium Mobile向けに使われているCommonJS準拠なライブラリ&サンプルがあれば、その情報を元にしてRubyMotion向けのライブラリを探したり、場合によっては自作するなどして開発がスムーズになるのかなと思ってます

最後に

以前ちょっと書いたのですがRubyMotionでアプリ書いてる作業を通じて「Titanium MobileのあのAPIは実際にはこうなってるのか」と頭の中でイメージが付くようになり、iOS向けにアプリを作る上でのスキルが以前よりも深まったかなと感じてます。

昨年のTitanium MobileのAdvent Calendarでも書いたのですが、こういう技術それ自体というよりも、その技術に興味・関心を持った人が集まるコミュニティの面白さに触れられるのが一番大きいのかなと思います。

Titanium Mobileのコミュニティの人と同じような”空気”をRubyMotionのもくもく会の運営手伝った時にも感じたので、RubyMotionに興味持った人は、ぜひもくもく会に参加してみてはいかがでしょうか?

(注1)緑本

(注2)黒本

(注3)Titanium Mobileでの開発で、Underscore.js使い、Titanium以外だとかなり昔の話ですが業務用のツールでWindows/WSH/JScriptな環境で、prototype.jsを読み込んで使ってたりしました。