Titanium mobileを1年ほど触ってきた感想

さて、仕事の関係でここ1年ほどTitanium mobileを触ってきました。
すでにリリースもされて何回かのアップデートもしています。
アプリの内容はどうでもいいので、ここではおいておきます。それにこのBlogはあくまでもプライベートだし。

Titaniumを選択した理由

時期的な理由と社内の状況で。
iOSAndroidを視野に入れて、なおかつ開発者が自分ひとりで無茶な開発内容なので、仕方なくといったところ。
別にTitanium自体に思うところはないけど、そんなところ。


ちなみに最近はTitanium moduleの関係や他プロジェクトとかの関係もあって、Objective-CとSwiftはすでに触っています。

感想

ぱっと感想を。
Androidの実機テスト大変とか開発環境に関係なく共通の話はしませんのであしからず。

良いなあと感じた部分

簡単なツール系アプリを作るのであれば、さほど文句はないです。


Objective-C、Swift、Java何を選んでもネイティブ開発に比べたらやっぱり楽。
JavaScriptなのでライブラリも多いし、いざとなればmduleを作ればネイティブ言語も使える。
iOSAndroidも1つのコードで対応できるし、Alloyを使えばMVC2で開発できてデザイナも入りやすい。


デザイナが入りやすいのは今回非常に助かりました。
別プロジェクトでSwiftも触っているのですが、Titaniumと両方を触った感想を聞くとSwiftではまだ自由にデザインが出来ないらしい。
Alloyだと色々制限もあるしWebとも感覚が違う部分はあるけど、まだTitaniumの方がなんとかなるとのこと。
デザインは自分にはさっぱりわかりませんが...


あとはテストが楽。
組み込み時代にも思っていたけど、こういうアプリとかだとテストが本当に辛いのです。
でもTiShadowを使うと実機を使ったテストコードも書けます。
ちなみに、最近はappiumとかもあるのですが基本E2E。自前で作ったライブラリのユニットテストコードまで考えるとまだまだネイティブだと無理な気がします。
最近やっとJenkinsさん環境も作り始めていて一応CIも回せるようになってきました。CI大事だよね。


本家ドキュメントが豊富。
これ見ておけば大体なんとかなります。英語だけどね

結構気になる部分

そんな感じで、はじめは良いことばかりと思っていたけど、ある程度の規模になると結構めんどくさいことも多々出て来ました。


まず、ネイティブではないのでしかたないけどやっぱり処理が重い。まあ将来的にJSコンパイラが入るらしいけどね。
あとJSとは言え下側はネイティブ言語が絡むので下手なことをするとメモリリークが発生する。
はじめはJSだからここまで重いのかと勘違いしていたくらい。これ結局メモリを意識できな人が触ると怖い気がする。


次にmodule。moduleを作れるのは良いけど、言語が複数使うことになるのでそれって微妙。
moduleまで意識すると、Titaniumを使いこなせる人ってどこまでいるんだろうか。
あと、Swiftが出たのにmoduleはObjective-Cでテンプレートが作成されるのもちょっとつらい。
頑張ればSwiftに直せそうな気もするけど暇がないのでやってません。できるんですかね?
さらにmodulのビルドにPython(しかも2.7系)が必要って辛い。


この時点でツール含めるとJS、Objective-CPythonAlloy + XML + TSS(CSSっぽいの) or Alloy + Jade(xmlの代わり) + TSS + CoffeeScript(JSの代わり)ぐらいは使いそう。
これは結構ダルいです。自分はまだなんとかなってますが、言語経験が少ない人には辛いかと。
触ったことないけど今ならRubyMotionのほうが良い気がする。こっちだとコンパイルするし、Rubyだし。


SDKのバージョンアップが結構つらい。
何が辛いかというとWebAPIを使ってサーバとやりとりするタイプの場合のテストが辛い。
単純に開発するだけなら別に気にしなくても良いんだけど、過去のバージョンのままでアップデートしない人がいるのでWebAPIとの関係でテストが非常にしんどい。
これはマジでしんどいです。


さらには日本人エンジニアが苦手な英語。ドキュメントとかエラーを調べるくらいなのでなんとかなるのですが、英語ドキュメントが一番多い。
なれないとこれは結構辛い。ただ最近は日本語のblogとかも出て来ているので意外と何とかなってますが。


将来的に怖いのは、Titaniumをやめてネイティブに移行するばあい。
Titaniumの動作を再現させる必要があるので、開発が大変そう。これをやったアプリはいくつかあるらしいですが、これを言われたらまた地獄の日々なんだろうなぁ。

これから初めて開発する場合の選択肢

開発対象にiOSAndroidが入っている場合はどうしたものでしょうね。


開発するアプリにもよりますが、個人開発者ならありだとは思います。


ただ企業ならよく検討したほうが良いかと。
RubyMotionとかも含めてこういうツールの良い所は、同じ処理を異なる言語を使って複数書かなくても良い部分。
でも、どちらかを外注に出すという方法もありますし、よく考えたほうが良いですね。


ただどちらにせよしんどいのは確か。外注を使えば管理能力が結構必要。自前でネイティブを選べばAndroidのめんどくさい部分も含めて頑張る必要がある。
Titaniumなら限界がどうしても出てきて、カオスになりそう。
もう少し良い開発環境が出てこないかなぁ