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

imthinker::net

ふらふらうぇぶろぐ

Titanium™ を捨てるとき

Titanium Mobile ポエム

Titanium™ Advent Calendar 2013 2日目は釣りタイトルなポエムです!今年も Titanium には大変お世話になりました。いろいろな意味で。個人的な最大のトピックは仕事で使い始めたことなので、それと絡めて書いていきます。

Tips とか無いから、それを期待する人は引き返そう!

Titanium との出会い

Titanium との出会いは 2011 年でした。当日勤めていた会社の友人と一緒に何かサービスを作ろうと意気込んでいて、モバイルアプリ開発に手を出してみるものの、当時の iOS は ARC が無かったり、 Objective-C リテラルが無かったりして、やりたいことに対するスピード感が学習しながらでは出せないところに現れたのが Titanium でした。

幸い JavaScript はちょっと書けたし、標準 UI を使って開発ができるということだったので手を出してみると、まぁ、バギーだし、ドキュメントは嘘つきだしで辛いには辛かったですが、仕事で使う JavaScript の勉強にもなっていたのでそのまま継続して学習していました。

Titanium Meetup Tokyo

東京住まいで運が良かったのは、当時 Appcelerator のエバンジェリストだった masuidrive さんが高頻度で Titanium Meetup Tokyo というミートアップを開催されていたことでした。自分が参加し始めたのは Titanium Studio が登場したのとほぼ同じときで、 Titanium 1.6 ぐらいの頃だったと思います。

そこでは同じように地雷を踏み抜きつつ Titanium を使ってあれこれしている人や、 Titanium ってどうなのよと様子を見に来る人達がいらしてました。情報交換をしたり、時には増井さんに直接質問をしたりしながら開発を行えたのはとても運が良いことでした。

頓挫

頻繁にミートアップに顔を出したり、ときには LT をしながら TItanium の知識とスキル、 JavaScript の理解は深まっていきましたが、肝心のモバイルアプリ開発自体が頓挫してしまいました。となると、 Titanium を使って何かをする理由が無くなってしまうのですが、何故か私は Titanium を使い続けました。

当時の職場で Titanium を使うことは全く無く、 Python や PHP を書いたり、書類仕事が多かったのである意味反動的に Titanium に打ち込んでいたのでしょう。この頃のバージョンは Titanium 2.0 - 2.1 です。

Titanium プラットフォーム

2012 年の秋。ミートアップはユーザー会ベースの Titanium もくもく会に変化し、 Titanium は 3.0 が噂されるようになりました。

iPhone 5 対応や Android の ActionBar 対応など、かなり大きな変化が加えられたバージョンで、公式 MVC フレームワーク Alloy や mBaaS TCS が登場するなど、 Titanium を中心にしたプラットフォーム化が進み始めた時期でもありました。

私も Titanium Certified App Developer や Titanium Certified Mobile Developer の資格を取ったり、頻繁に LT をしたりと、色々と活動をしてきたのですが、この頃から転職を考え始めていました。

tiTokyo

2013 年初旬。米国外初の公式カンファレンスである tiTokyo が開催され、スタッフとして参加し、改めて Titanium 3.0 や Alloy 1.0 などがアナウンスされました。この頃から、現職である ChatWork にほとんど狙いを絞った転職活動を水面下で続けていて、それはつまり、 Titanium を仕事で使うという決意をした頃でした。

この頃、私は Titanium ユーザー会では地雷処理班のような扱いを受けていて、アルファヒトバシラーとか呼ばれていました。速攻で CB 試したり、新しい OS X が出たら Titanium が動作するか確認したりしていたからだと思います。多分。

ChatWork

2013 年の春。 ChatWork に転職しました。仕事で使う Titanium ライフの始まりです。 Titanium 3.1 の登場とほとんど同時期で、これをベースに ChatWork for iOS のコードを全て書き換えました。また、 Titanium SDK だけでは実現できないことに関しては Objective-C でモジュールを作って組み込んだりしながら技術的にも新しいことに挑戦しました。

このときになって改めて Objective-C を触ってみると、 2011 年よりもずっと親しみを持って書けるようになっていました。 Titanium がベースに合ったので、 UIView にはこんなメソッドやプロパティがあるだろうという推測ができたり、 Objective-C リテラルによってある意味 JavaScript チックな記法が使えたからでしょう。

2013 年の夏。全てのコードをよりモダンな形に置き換えた ChatWork アプリが完成しようかというタイミングで、 iOS 7 が発表されました。 WWDC のストリーミングを見ていた私は「ジョナサン・アイヴやりやがった!」と心の中で思うと同時に、アプリをどうしよう…と考えなくてはなりませんでした。

幸い、 iOS 7 beta で開発中のものを動かしてみると、少しの修正だけで動いてくれたので良かったのですが、まだ Titanium が正式に iOS 7 に対応していなかったので「本当にこれは大丈夫なのか?」という自信を持った開発を行えている気持ちにはなりませんでした。

弊社のブログでアナウンスされている次期 ChatWork for iOS では Titanium SDK も iOS 7 対応版を使いますし、 UI も iOS 7 に最適化されたものになる予定です。

これから

次々期 ChatWork モバイルアプリは Objective-C / Java で開発します。これらのスタッフを募集しています。つまりは Titanium からの脱却です。 ChatWork というアプリが Titanium にフィットしなくなってきてしまったのが一番の原因だと個人的には思っています。

結構いろいろな場所をモジュールでカバーしてますし、それはそれで良いのですが、 Titanium のうまみを潰してまで使うのはどうよ…?という規模感になりつつあります。 Titanium という中間レイヤーを取り除き、純粋なネイティブ開発にシフトすることで新しいプラットフォーム対応を加速させる目的もあるでしょう。

個人としては多分、これからも Titanium にコミットし続けると思います。社内ツールアプリを Titanium / Alloy で素早く構築して配布する予定もありますし、来年は Ti.Next という非常に魅力的な製品も登場する予定です。

仕事と Titanium

これまで半年間。 Titanium を仕事で使って感じたポイントは以下の通りです。

  1. JavaScript の正確な知識とスキルは必須
  2. 今、仕事で使うならば Alloy を使った方が良い
  3. モジュール開発にまで踏み込む覚悟はあるか
  4. マルチプラットフォーム対応のアプリならば、モジュールとプラットフォーム依存がどの程度になりそうか見積もることができるか (また、依存をどれだけ押さえた実装ができるか)
  5. 最新のプラットフォーム API が使えるようになるまでに半年近く待てるかどうか (iOS 7 の Background Fetch など)
  6. UI は OS が提供するものをベースに、素直なトランジションエフェクトだけで満足できるかどうか (初めから Titanium が標準で提供していないトランジションエフェクトを使おうとしていないか)
  7. パフォーマンスにシビアなアプリを作ろうとしていないか
  8. Android で複雑な UI を持つアプリを作ろうとしていないか
  9. 地雷を踏み抜く覚悟があるか

Titanium は魅力的なプラットフォームです。最近は Alloy や TCS のおかげでフロントもバックエンドも非常に素早く開発することができるようになりました。特に TCS は数ある mBaaS の中では群を抜いて高いコストパフォーマンスを誇っています。プッシュ通知も 500 万回無料で送れます。

魅力的なプラットフォームですが、 iOS であれば Cocoa Touch というフレームワークの上に、 Android であれば Android SDK というライブラリ群の上にもう一層重ねるのが Titanium です。それも結構分厚いレイヤーなので、開発時のトラブルの原因を追いかけづらくもするでしょうし、新しい OS の新機能を使えるまでのラグもあります。

まとまらない

Titanium は清濁併せのむツールです。作りたい製品、作っている製品が Titanium にフィットするのかしないのか。これが全てです。 Titanium に限った話ではありませんが、モバイルアプリというあと数年は主戦場になりそうな場所において、ツールの選定は大切なことの1つです。

もしもフィットしないのであれば、 Titanium を捨てるときです。


3日目は umi_uyura さんです!
よろしくお願いします!